Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nowe pola formularza + zmiany w GA workflows #35

Merged
merged 29 commits into from
Dec 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
640e265
dodanie pól: email, kod paczkomatu, dodatkowe informacje dla dostawcy…
ivellios Dec 20, 2024
bb30283
poprawione pola wymagane; usunięcie placeholdera
ivellios Dec 20, 2024
8621fad
dodatkowe informacje jako zwykły input
ivellios Dec 20, 2024
153eb64
poprawki formatowania yaml
ivellios Dec 20, 2024
a732dfa
dodanie walidacji plików yaml przy zmianie danych organizacji
ivellios Dec 20, 2024
99fa2d4
dodanie walidacji plików yaml przy zmianie danych organizacji
ivellios Dec 20, 2024
72f323f
dodanie brakującej zależności Jinja2
ivellios Dec 20, 2024
ee8aaa6
dodanie obsługi pustego pola
ivellios Dec 20, 2024
e3132bc
obsługa brakującego brancha
ivellios Dec 20, 2024
b9147cb
obsługa brakującego brancha
ivellios Dec 20, 2024
4155647
obsługa brakującego brancha
ivellios Dec 20, 2024
af231d2
poprawione uprawnienia dla Github Action
ivellios Dec 20, 2024
1e8589a
dodanie triggerów dla Github Actions
ivellios Dec 20, 2024
c996818
dodanie triggerów dla Github Actions
ivellios Dec 20, 2024
741bc65
naprawienie kluczy dla schemy yaml
ivellios Dec 20, 2024
1486186
zmiana nazewnictwa pól dla unifikacji
ivellios Dec 20, 2024
821ad46
refactoring
ivellios Dec 20, 2024
67580a6
zaktualizowane wyciąganie kluczy; reformatowanie plików; debug akcji
ivellios Dec 20, 2024
036a2a8
usunięcie zbędnego enva
ivellios Dec 20, 2024
5fcc7e7
debug github action
ivellios Dec 20, 2024
2498847
dodane ręczne wywoływanie workflow dla walidacji yaml
ivellios Dec 20, 2024
b7bf5c9
debug: czy run się psuje przez branch/commit?
ivellios Dec 20, 2024
0f14188
debug: czy run się psuje przez branch/commit?
ivellios Dec 20, 2024
bafa755
debug: run z użyciem PAT
ivellios Dec 20, 2024
94da4de
debug: run z użyciem PAT
ivellios Dec 20, 2024
eb09097
usunięcie debugu
ivellios Dec 20, 2024
290719c
naprawienie pustych spacji, gdy nie ma wartości dla klucza
ivellios Dec 20, 2024
6d552d9
usunięty zbędny import
ivellios Dec 20, 2024
de0d0d7
refactoring - uproszczenie mapowania pól
ivellios Dec 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 45 additions & 8 deletions .github/ISSUE_TEMPLATE/nowa.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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 `-`
Expand All @@ -75,36 +75,73 @@ 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`
placeholder: 00-000
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.**
2 changes: 1 addition & 1 deletion .github/scripts/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
17 changes: 10 additions & 7 deletions .github/scripts/consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]"
Expand Down
24 changes: 9 additions & 15 deletions .github/scripts/git_managers.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -12,7 +13,6 @@
from exceptions import BranchModifiedError
from parsers import GithubIssueFormDataParser


logger = logging.getLogger(__file__)


Expand Down Expand Up @@ -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 (
Expand Down Expand Up @@ -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(
Expand Down
4 changes: 4 additions & 0 deletions .github/scripts/organization.yaml.j2
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
---
nazwa: {{ organization.name }}

# wyslij.co/testowej - adres, pod którym będzie dostępna strona
Expand All @@ -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
Expand Down
19 changes: 14 additions & 5 deletions .github/scripts/parsers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion .github/scripts/pullers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Optional, Self
from typing import Self

import requests
from github import Issue
Expand Down
5 changes: 4 additions & 1 deletion .github/scripts/renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
1 change: 1 addition & 0 deletions .github/scripts/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ PyYAML==6.0.2
requests==2.32.3
GitPython==3.1.43
ruff==0.8.3
Jinja2==3.1.4
10 changes: 10 additions & 0 deletions .github/workflows/flask-gh-pages.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 2 additions & 5 deletions .github/workflows/nowa-organizacja.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,8 @@ on:
issues:
types: [opened, edited]


env:
GITHUB_TOKEN: ${{ github.token }}

permissions:
contents: read
contents: write
issues: write
pull-requests: write

Expand Down Expand Up @@ -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

23 changes: 23 additions & 0 deletions .github/workflows/organization-update.yaml
Original file line number Diff line number Diff line change
@@ -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
4 changes: 2 additions & 2 deletions organizations/testowa.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
---
nazwa: Testowa organizacja

# wyslij.co/testowej - adres, pod którym będzie dostępna strona
Expand All @@ -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:
Loading