From 2883b338f45170cf40fb7e10ac99d9dc1a003cc8 Mon Sep 17 00:00:00 2001 From: Arne Weiss Date: Mon, 1 Jun 2026 07:57:23 +0200 Subject: [PATCH] Add Gitea Actions CI/CD pipeline with release workflow --- .gitea/workflows/build.yml | 41 +++++++++++++++++++++++++++ .gitea/workflows/release.yml | 52 ++++++++++++++++++++++++++++++++++ README.md | 54 +++++++++++++++++++++++------------- 3 files changed, 128 insertions(+), 19 deletions(-) create mode 100644 .gitea/workflows/build.yml create mode 100644 .gitea/workflows/release.yml diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..7db97d7 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,41 @@ +name: Build + +on: + push: + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + container: + image: php:8.2-cli-alpine + + steps: + - name: Install Node.js, git and zip + run: apk add --no-cache nodejs git zip + + - uses: actions/checkout@v4 + + - name: PHP syntax check + run: | + find . -name "*.php" -not -path "./.git/*" -print0 \ + | xargs -0 -n1 php -l + + - name: Build ZIP + run: | + MODULE=simple_withdrawalbutton + cp -rp . /tmp/$MODULE + rm -rf /tmp/$MODULE/.git \ + /tmp/$MODULE/.gitea \ + /tmp/$MODULE/CLAUDE.md + cd /tmp && zip -r ${MODULE}.zip $MODULE/ + mkdir -p $GITHUB_WORKSPACE/dist + mv /tmp/${MODULE}.zip $GITHUB_WORKSPACE/dist/ + echo "Built dist/${MODULE}.zip" + + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: simple_withdrawalbutton + path: dist/simple_withdrawalbutton.zip + if-no-files-found: error diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..79c24af --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,52 @@ +name: Release + +on: + push: + tags: + - 'v*' + +jobs: + release: + runs-on: ubuntu-latest + container: + image: php:8.2-cli-alpine + + steps: + - name: Install dependencies + run: apk add --no-cache nodejs git zip curl jq + + - uses: actions/checkout@v4 + + - name: PHP syntax check + run: | + find . -name "*.php" -not -path "./.git/*" -print0 \ + | xargs -0 -n1 php -l + + - name: Build ZIP + run: | + MODULE=simple_withdrawalbutton + cp -rp . /tmp/$MODULE + rm -rf /tmp/$MODULE/.git \ + /tmp/$MODULE/.gitea \ + /tmp/$MODULE/CLAUDE.md + cd /tmp && zip -r ${MODULE}.zip $MODULE/ + mkdir -p $GITHUB_WORKSPACE/dist + mv /tmp/${MODULE}.zip $GITHUB_WORKSPACE/dist/ + + - name: Create Gitea release and upload ZIP + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ github.ref_name }} + run: | + RELEASE_ID=$(curl -sf -X POST \ + -H "Authorization: token $TOKEN" \ + -H "Content-Type: application/json" \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases" \ + -d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\"}" | jq -r '.id') + + curl -sf -X POST \ + -H "Authorization: token $TOKEN" \ + -F "attachment=@$GITHUB_WORKSPACE/dist/simple_withdrawalbutton.zip" \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases/$RELEASE_ID/assets?name=simple_withdrawalbutton.zip" + + echo "Release $TAG created: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/tag/$TAG" diff --git a/README.md b/README.md index bd683d5..750e0e6 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,55 @@ -# cyp_withdrawalbutton +# simple_withdrawalbutton -Minimales PrestaShop-Modul für eine elektronische Widerrufsfunktion. +Minimales PrestaShop-Modul für eine elektronische Widerrufsfunktion (Widerrufsrecht nach § 312k / § 356 BGB). + +**[→ Aktuelle Version herunterladen](https://git.arne-weiss.de/arne/simple-withdrawalbutton/releases/latest)** ## Enthaltene Funktionen -- Footer-Link **„Vertrag widerrufen“** über `displayFooter` +- Footer-Link **„Vertrag widerrufen"** über `displayFooter` - zusätzlicher Link im Kundenkonto über `displayCustomerAccount` - öffentliches Formular ohne Login-Zwang - vollständiger Widerruf oder Teilwiderruf per Freitext -- zweistufiger Ablauf: - - Schritt 1: Angaben prüfen - - Schritt 2: **„Widerruf bestätigen“** -- Speicherung in eigener Tabelle `ps_cyp_withdrawal_request` +- zweistufiger Ablauf: Angaben prüfen → **„Widerruf bestätigen"** +- Speicherung in eigener Tabelle `ps_simple_withdrawal_request` - automatische Eingangsbestätigung per E-Mail an den Verbraucher - interne Benachrichtigung per E-Mail an den Shopbetreiber -- einfache Backoffice-Liste **Widerrufe** +- einfache Backoffice-Liste unter **Bestellungen → Widerrufe** - Statusverwaltung: `new`, `processing`, `closed` -- CSRF-Token, Honeypot und simples Rate-Limit +- CSRF-Token, Honeypot und konfigurierbares Rate-Limit ## Installation -1. ZIP-Datei in PrestaShop unter **Module > Module Manager > Modul hochladen** hochladen. -2. Modul installieren. -3. In der Modulkonfiguration die Benachrichtigungs-E-Mail prüfen. -4. Frontend-Link öffnen und Testwiderruf ausführen. -5. Prüfen, ob Kunden-E-Mail und Shop-E-Mail ankommen. -6. Im Backoffice unter **Bestellungen > Widerrufe** prüfen, ob der Datensatz sichtbar ist. +1. ZIP-Datei von der [Releases-Seite](https://git.arne-weiss.de/arne/simple-withdrawalbutton/releases/latest) herunterladen. +2. In PrestaShop unter **Module → Module Manager → Modul hochladen** hochladen. +3. Modul installieren und aktivieren. + +## Konfiguration + +Nach der Installation unter **Module → Module Manager → simple_withdrawalbutton → Konfigurieren**: + +| Einstellung | Beschreibung | +|-------------|--------------| +| Shop-Benachrichtigungs-E-Mail | Adresse, an die neue Widerrufe gemeldet werden | +| Rate-Limit pro Stunde | Max. Einreichungen pro E-Mail oder IP-Hash (Standard: 5) | +| Datenschutzerklärung URL | Link zur Datenschutzerklärung im Formular (DSGVO Art. 13) | +| Widerrufsbelehrung URL | Link zur Widerrufsbelehrung oberhalb des Formulars | +| Aufbewahrungsfrist (Monate) | Ältere Einträge können manuell gelöscht werden (0 = unbegrenzt) | + +## Test nach der Installation + +1. Frontend-Link im Footer oder im Kundenkonto öffnen. +2. Testwiderruf ausfüllen und bestätigen. +3. Prüfen, ob Kunden-E-Mail und Shop-Benachrichtigung ankommen. +4. Im Backoffice unter **Bestellungen → Widerrufe** prüfen, ob der Datensatz sichtbar ist. ## Wichtige Hinweise - Das Modul bestätigt nur den **Eingang** des Widerrufs, nicht dessen rechtliche Wirksamkeit. -- Die normale Widerrufsbelehrung, Datenschutzerklärung und ggf. AGB müssen separat aktualisiert werden. -- Beim Deinstallieren löscht das Modul die gespeicherten Widerrufe **nicht**, weil diese rechtlich relevant sein können. -- Die Version ist bewusst minimal. Sie erzeugt keine Retourenlabels und führt keine automatische Erstattung aus. +- Die Widerrufsbelehrung, Datenschutzerklärung und AGB müssen separat gepflegt werden. +- Beim Deinstallieren löscht das Modul die gespeicherten Widerrufe **nicht** — diese können rechtlich relevant sein. +- Das Modul erzeugt keine Retourenlabels und führt keine automatische Erstattung aus. ## Kompatibilität -Entwickelt als klassisches PrestaShop-Legacy-Modul für PrestaShop 1.7.8+ / 8 / 9. Getestet wurde hier nur syntaktisch außerhalb eines echten PrestaShop-Systems. Vor Live-Nutzung unbedingt in einer Staging-Umgebung testen. +Klassisches PrestaShop-Legacy-Modul für PrestaShop 1.7.8+ / 8 / 9, PHP 7.2+. Vor Live-Nutzung in einer Staging-Umgebung testen.