diff --git a/.github/ISSUE_TEMPLATE/nowa.yaml b/.github/ISSUE_TEMPLATE/nowa.yaml index a69e99f..9fd81cc 100644 --- a/.github/ISSUE_TEMPLATE/nowa.yaml +++ b/.github/ISSUE_TEMPLATE/nowa.yaml @@ -12,13 +12,13 @@ body: Dziękujemy za zainteresowanie dołączeniem do programu Wyślij.co. Wypełnij poniższe pola informacjami o swojej organizacji, żeby zgłosić ją do programu. # Podstawowe informacje - type: input - id: nazwa + id: name attributes: label: Nazwa Twojej organizacji validations: required: true - type: input - id: www + id: website attributes: label: Adres strony internetowej Twojej organizacji validations: @@ -63,7 +63,7 @@ body: **Uwaga!** Zastrzegamy sobie prawo do zmiany tej wartości w celu zapewnienia równego traktowania wszystkich organizacji korzystających z programu Wyślij.co. - type: input - id: nazwa_strony + id: slug attributes: label: Nazwa Twojej strony w Wyślij.co description: Wprowadź nazwę bez polskich znaków diakrytycznych, oraz spacjami zmienionymi na `-` @@ -75,14 +75,18 @@ body: attributes: value: | # Dane teleadresowe do dostaw + + Podaj dane dla dostaw przesyłek do Twojej organizacji. Powinny to być oficjalne dane teleadresowe. + Pamiętaj, że przekazane tutaj informacje będą publicznie dostępne na stronie Twojej organizacji + w Wyślij.co. - type: input - id: ulica + id: street attributes: label: Ulica i numer budynku/lokalu validations: required: true - type: input - id: kod_pocztowy + id: postal_code attributes: label: Kod Pocztowy description: Wprowadź kod pocztowy w formacie `00-000` @@ -90,21 +94,54 @@ body: validations: required: true - type: input - id: miasto + id: city attributes: label: Miasto validations: required: true - type: input - id: telefon + id: email + attributes: + label: Adres email dla firmy kurierskiej + description: | + Podaj oficjalny adres email, na który firma kurierska wyśle powiadomienia dotyczące przesyłki. + Pamiętaj, że ten adres będzie publicznie widoczny w internecie. + placeholder: nazwa@example.com + validations: + required: true + - type: input + id: phone_number attributes: label: Telefon kontaktowy dla kuriera - description: Wprowadź numer telefonu w formacie `000 000 000` + description: | + Wprowadź numer telefonu w formacie `000 000 000` + Podaj oficjalny numer telefonu, na który firma kurierska wyśle powiadomienia dotyczące przesyłki. + Pamiętaj, że ten numer będzie publicznie widoczny w internecie. placeholder: 000 000 000 validations: required: true + - type: input + id: package_box_code + attributes: + label: Kod paczkomatu + description: | + Podaj kod paczkomatu, w którym możesz odebrać przesyłki wysłane za pośrednictwem firmy InPost. + Kod paczkomatu możesz znaleźć na stronie [Znajdź Paczkomat](https://inpost.pl/znajdz-paczkomat). + placeholder: WAW01M + validations: + required: false + - type: input + id: additional_info + attributes: + label: Dodatkowe informacje dla dostawcy + description: | + Jeżeli to konieczne, podaj dodatkowe informacje do przekazania dla firmy dostawczej. + validations: + required: false - type: markdown attributes: value: | # Następne kroki Po wypełnieniu formularza, Twój wniosek zostanie zweryfikowany przez nasz zespół. W celu weryfikacji poprawności danych skontaktujemy się z Twoją organizacją poprzez oficjalne dane kontaktowe dostępne na stronie internetowej organizacji lub w rejestrze KRS. W przypadku pozytywnej weryfikacji, otrzymasz od nas informację o dalszych krokach w komentarzu do tego zgłoszenia (zakładka Issues). + + **Pamiętaj, że przekazane przez Ciebie dane powinny być informacjami oficjalnymi Twojej organizacji i będą dostępne publicznie w zgłoszeniu, kodzie oraz na stronach Wyślij.co.** diff --git a/.github/scripts/cli.py b/.github/scripts/cli.py index a7292d4..94a37d3 100644 --- a/.github/scripts/cli.py +++ b/.github/scripts/cli.py @@ -23,7 +23,7 @@ ) logger = logging.getLogger(__file__) -GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") +GITHUB_TOKEN = os.getenv("GITHUB_PAT") GITHUB_REPOSITORY = os.getenv("GITHUB_REPOSITORY") auth = Auth.Token(GITHUB_TOKEN) diff --git a/.github/scripts/consts.py b/.github/scripts/consts.py index b58569e..96b0aba 100644 --- a/.github/scripts/consts.py +++ b/.github/scripts/consts.py @@ -2,14 +2,17 @@ class OrgFormSchemaIds(enum.StrEnum): - name = "nazwa" - website = "www" + name = "name" + website = "website" krs = "krs" - slug = "nazwa_strony" - street = "ulica" - postal_code = "kod_pocztowy" - city = "miasto" - phone_number = "telefon" + slug = "slug" + street = "street" + postal_code = "postal_code" + city = "city" + phone_number = "phone_number" + email = "email" + package_box_code = "package_box_code" + additional_info = "additional_info" NEW_ORG_ISSUE_DEFAULT_TITLE = "[Nowa Organizacja]" diff --git a/.github/scripts/git_managers.py b/.github/scripts/git_managers.py index 0eb0d30..ddbe34f 100644 --- a/.github/scripts/git_managers.py +++ b/.github/scripts/git_managers.py @@ -1,7 +1,8 @@ import logging from dataclasses import dataclass -from github import GithubException, InputGitTreeElement +from github import InputGitTreeElement +from github.GithubException import UnknownObjectException from github.GitCommit import GitCommit from github.GitRef import GitRef from github.Issue import Issue @@ -12,7 +13,6 @@ from exceptions import BranchModifiedError from parsers import GithubIssueFormDataParser - logger = logging.getLogger(__file__) @@ -42,18 +42,12 @@ def get_or_create_branch(self, source_branch: str, new_branch_name: str) -> GitR try: branch_ref = self.repo.get_git_ref(f"heads/{new_branch_name}") logger.info(f"Found existing branch '{new_branch_name}'.") - except GithubException as e: - if e.status == 404: - # Branch does not exist, create it from the source branch - self.repo.create_git_ref( - ref=f"refs/heads/{new_branch_name}", sha=source.commit.sha - ) - branch_ref = self.repo.get_git_ref(f"heads/{new_branch_name}") - logger.info( - f"Branch '{new_branch_name}' created from '{source_branch}'." - ) - else: - raise e + except UnknownObjectException: + # Branch does not exist, create it from the source branch + branch_ref = self.repo.create_git_ref( + ref=f"refs/heads/{new_branch_name}", sha=source.commit.sha + ) + logger.info(f"Branch '{new_branch_name}' created from '{source_branch}'.") latest_commit = self.repo.get_commit(branch_ref.object.sha) if ( @@ -128,7 +122,7 @@ def create_organization_yaml_pr( pr_title = f"Dodana nowa organizacja: {data.get(OrgFormSchemaIds.name)} | Zgłoszenie: #{issue.number}" pr_body = f"Automatycznie dodana nowa organizacja na podstawie zgłoszenia z issue #{issue.number}.\n\n Closes #{issue.number}" - file_path = "organizations/organization.yaml" + file_path = f"organizations/{data.get(OrgFormSchemaIds.slug)}.yaml" manager = GitManager(repo) manager.create_or_update_pr_with_file( diff --git a/.github/scripts/organization.yaml.j2 b/.github/scripts/organization.yaml.j2 index 6fd42f5..43bc3a3 100644 --- a/.github/scripts/organization.yaml.j2 +++ b/.github/scripts/organization.yaml.j2 @@ -1,3 +1,4 @@ +--- nazwa: {{ organization.name }} # wyslij.co/testowej - adres, pod którym będzie dostępna strona @@ -11,6 +12,9 @@ dostawa: kod: {{ organization.postal_code }} miasto: {{ organization.city }} telefon: {{ organization.phone_number }} + email: {{ organization.email }} + kod_paczkomatu:{% if organization.package_box_code %} {{ organization.package_box_code }}{% endif %} + dodatkowe_informacje:{% if organization.additional_info %} {{ organization.additional_info }}{% endif %} produkty: - nazwa: Testowy produkt diff --git a/.github/scripts/parsers.py b/.github/scripts/parsers.py index 1bd142d..638edcd 100644 --- a/.github/scripts/parsers.py +++ b/.github/scripts/parsers.py @@ -14,17 +14,26 @@ def __init__(self, form_data: dict[str, Any], form_schema_filename: str): self.form_schema_filename = form_schema_filename self.form_schema = self.get_form_schema(form_schema_filename) + self.field_label_map = self._create_field_label_map() + + def _create_field_label_map(self): + field_label_map = {} + for field in self.form_schema.get("body", []): + if "id" in field: + field_label_map[field["id"]] = field["attributes"]["label"] + return field_label_map + @staticmethod def get_form_schema(template_filename): with open(f"../ISSUE_TEMPLATE/{template_filename}") as f: return yaml.safe_load(f) def get_label(self, identifier: str) -> str | None: - for field in self.form_schema.get("body", []): - if "id" in field and field["id"] == identifier: - return field["attributes"]["label"] - return None + return self.field_label_map.get(identifier) def get(self, identifier: str) -> str | None: label = self.get_label(identifier) - return self.form_data.get(label, "") + value = self.form_data.get(label, "") + if value == "_No response_": + return "" + return value diff --git a/.github/scripts/pullers.py b/.github/scripts/pullers.py index 452402c..319bd39 100644 --- a/.github/scripts/pullers.py +++ b/.github/scripts/pullers.py @@ -1,4 +1,4 @@ -from typing import Optional, Self +from typing import Self import requests from github import Issue diff --git a/.github/scripts/renderers.py b/.github/scripts/renderers.py index 0b95eec..1893f32 100644 --- a/.github/scripts/renderers.py +++ b/.github/scripts/renderers.py @@ -12,6 +12,9 @@ def render_organization_yaml(data: GithubIssueFormDataParser): template = env.get_template("organization.yaml.j2") - org_data = {field: data.get(field) for field in OrgFormSchemaIds} + org_data = { + field.name: data.get(field.value) + for field in OrgFormSchemaIds + } return template.render(organization=org_data) diff --git a/.github/scripts/requirements.txt b/.github/scripts/requirements.txt index dc8b87f..7c5871d 100644 --- a/.github/scripts/requirements.txt +++ b/.github/scripts/requirements.txt @@ -3,3 +3,4 @@ PyYAML==6.0.2 requests==2.32.3 GitPython==3.1.43 ruff==0.8.3 +Jinja2==3.1.4 diff --git a/.github/workflows/flask-gh-pages.yaml b/.github/workflows/flask-gh-pages.yaml index 1cc9f88..8649936 100755 --- a/.github/workflows/flask-gh-pages.yaml +++ b/.github/workflows/flask-gh-pages.yaml @@ -25,8 +25,18 @@ concurrency: cancel-in-progress: false jobs: + yaml-linting: + name: Walidacja plików organizacji + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ibiqlik/action-yamllint@v3 + with: + file_or_dir: organizations/*.yaml + # Build job build: + needs: [yaml-linting] runs-on: ubuntu-latest steps: - name: Checkout diff --git a/.github/workflows/nowa-organizacja.yaml b/.github/workflows/nowa-organizacja.yaml index e43820b..57ec749 100644 --- a/.github/workflows/nowa-organizacja.yaml +++ b/.github/workflows/nowa-organizacja.yaml @@ -4,12 +4,8 @@ on: issues: types: [opened, edited] - -env: - GITHUB_TOKEN: ${{ github.token }} - permissions: - contents: read + contents: write issues: write pull-requests: write @@ -47,6 +43,7 @@ jobs: GITHUB_ISSUE_NUMBER: ${{ github.event.issue.number }} GITHUB_FORM_JSON: ${{ needs.validate-form.outputs.payload }} GITHUB_REPOSITORY: ${{ github.repository }} + GITHUB_PAT: ${{ secrets.CUSTOM_GITHUB_PAT }} working-directory: ./.github/scripts run: python cli.py diff --git a/.github/workflows/organization-update.yaml b/.github/workflows/organization-update.yaml new file mode 100644 index 0000000..a4d4dfc --- /dev/null +++ b/.github/workflows/organization-update.yaml @@ -0,0 +1,23 @@ +name: Walidacja zmiany plików organizacji + +on: + push: + paths: + - 'organizations/*.yaml' + pull_request: + paths: + - 'organizations/*.yaml' + +permissions: + contents: read + +jobs: + + yaml-linting: + name: Walidacja pliku organizacji + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ibiqlik/action-yamllint@v3 + with: + file_or_dir: organizations/*.yaml diff --git a/organizations/testowa.yaml b/organizations/testowa.yaml index de1082d..eea8590 100755 --- a/organizations/testowa.yaml +++ b/organizations/testowa.yaml @@ -1,3 +1,4 @@ +--- nazwa: Testowa organizacja # wyslij.co/testowej - adres, pod którym będzie dostępna strona @@ -17,7 +18,6 @@ produkty: link: http://testowy.pl - nazwa: Testowy produkt 2 link: http://testowy2.pl - opis: Opcjonalny opis, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum. Cras vehicula, urna sit amet tincidunt tincidunt, neque tellus egestas libero, nec convallis sem sapien ut nulla. + opis: Opcjonalny, krótki opis, Lorem ipsum dolor sit amet. - nazwa: Testowy produkt 3 link: http://testowy3.pl - opis: