diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index ceecaf4..d5feaf5 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -1,6 +1,8 @@ name: CI # CI Wakdo - Forgejo Actions (runner stark-wakdo, label `docker`). -# Strategie solo dev : PR obligatoire + auto-merge sur CI verte (voir SECURITY.md). +# Strategie solo dev : PR obligatoire ; l'auto-merge NATIF Forgejo +# (merge_when_checks_succeed, programme a l'ouverture de la PR) fusionne en squash +# des que les checks requis passent. Pas de job de merge dans le workflow. # # Etat des jobs selon la phase projet : # - secret-scan : fonctionnel des maintenant (gitleaks scanne tout le depot) @@ -11,8 +13,7 @@ name: CI on: pull_request: branches: [dev, main] - # `labeled` : permet au job auto-merge de s'evaluer quand on pose le label. - types: [opened, synchronize, reopened, labeled] + types: [opened, synchronize, reopened] push: # dev/main : porte de merge. feat|fix|ci|refactor : feedback avant la PR. branches: [dev, main, 'feat/**', 'fix/**', 'ci/**', 'refactor/**'] @@ -169,36 +170,3 @@ jobs: # qu'a tests/e2e via le conteneur officiel.) PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm ci npm run test:js - - auto-merge: - # Fusion automatique OPT-IN : poser le label `auto-merge` sur la PR. - # Ne s'execute que si tous les checks requis passent (needs). - # IMPORTANT : le filtrage par label se fait DANS le step via l'API, pas dans - # `if:` — l'expression contains(github.event.pull_request.labels.*.name, ...) - # de Forgejo n'est pas fiable (elle s'evalue a vrai meme sans label, ce qui - # fusionnait toute PR verte). La verification shell sur l'API est le vrai gate. - needs: [secret-scan, php-lint, static-tests, js-tests] - if: github.event_name == 'pull_request' - runs-on: docker - steps: - - name: Install curl - run: apt-get update -qq && apt-get install -y -qq curl ca-certificates >/dev/null - - name: Merge PR (squash) si label auto-merge present et CI verte - run: | - API="${{ github.server_url }}/api/v1/repos/${{ github.repository }}" - PR="${{ github.event.pull_request.number }}" - TOKEN="${{ secrets.FORGEJO_TOKEN }}" - labels=$(curl -s -H "Authorization: token $TOKEN" "$API/issues/$PR/labels") - if ! printf '%s' "$labels" | grep -q '"name"[[:space:]]*:[[:space:]]*"auto-merge"'; then - echo "Pas de label 'auto-merge' sur la PR #$PR -> relecture manuelle, pas de fusion auto." - exit 0 - fi - echo "Label 'auto-merge' present + CI verte -> fusion de la PR #$PR" - code=$(curl -s -o /tmp/resp -w "%{http_code}" -X POST \ - -H "Authorization: token $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"Do":"squash","delete_branch_after_merge":true}' \ - "$API/pulls/$PR/merge") - echo "merge HTTP $code"; cat /tmp/resp || true; echo - [ "$code" = "200" ] || { echo "auto-merge failed (HTTP $code)"; exit 1; } - echo "PR #$PR mergee." diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 79c2a15..526d8af 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -41,7 +41,7 @@ commande = phase **P4**, schema en base mais workflow applicatif a venir). | Tests PHP | PHPUnit 11 (`.phar`, sans Composer) | unit + integration DB | | Tests front | node:test + jsdom | harnais kiosk (`tests/js/`) | | Analyse statique | PHPStan niveau 6 (`.phar`) | | -| CI/CD | Forgejo Actions | secret-scan, lint, tests, auto-merge | +| CI/CD | Forgejo Actions | secret-scan, lint, tests ; merge natif sur CI verte | | Versioning | Git + Forgejo (`git.acadenice.com`, miroir GitHub) | Conventional Commits | Justifications (composer-less, from-scratch, etc.) : `docs/PROJECT_CONTEXT.md` section 6. @@ -243,7 +243,8 @@ MCD / MLD / dictionnaire : `docs/merise/`. - **PHPStan niveau 6** (`.phar`). - **CI Forgejo Actions** (`.forgejo/workflows/ci.yml`) : `secret-scan` (gitleaks), `php-lint`, `static-tests` (PHPStan + PHPUnit avec service MariaDB ephemere migre + - seede), `js-tests` (Node 20), `auto-merge` (squash sur label + CI verte). + seede), `js-tests` (Node 20). Fusion par auto-merge NATIF Forgejo (squash, + `merge_when_checks_succeed`) des que les checks requis sont verts — pas de job de merge. - **Branch protection** : `dev` et `main` proteges (PR requise, force-push bloque, checks requis). diff --git a/docs/DEVELOPER.md b/docs/DEVELOPER.md index 78a144c..72884ed 100644 --- a/docs/DEVELOPER.md +++ b/docs/DEVELOPER.md @@ -120,9 +120,9 @@ Detail par entite : `docs/merise/` et `docs/domaines/` (a venir). - **Branches** depuis `dev` : `feat/*`, `fix/*`, `docs/*`, `chore/*`, `ci/*`, `db/*`, `refactor/*`, `test/*`. Merge vers `dev` par **PR squashee**. Periodiquement `dev -> main` avec tag semver. -- **Auto-merge** : poser le label `auto-merge` sur la PR -> fusion automatique des que - la CI Forgejo est verte (secret-scan, php-lint, static-tests, js-tests). - Script : `scripts/forgejo-pr-automerge.sh`. +- **Auto-merge** : l'ouverture de la PR programme la fusion squash automatique des que + les checks requis passent (auto-merge NATIF Forgejo `merge_when_checks_succeed`, sans + label ni job CI). Script : `scripts/forgejo-pr-automerge.sh`. - **Pas de trailer `Co-Authored-By`** : la transparence sur l'usage de l'IA vit dans le `README.md` et `docs/PROJECT_CONTEXT.md` section 17.