Some checks are pending
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
CI / Tests integration bridge (push) Blocked by required conditions
CI / Security scan (push) Waiting to run
CI / Docker build + healthcheck (push) Blocked by required conditions
Workflows (playbooks markdown) pour orchestrer les 4 agents specialises : - README.md : index + conventions communes + integration BYAN web futur - build-story.md : cycle complet livrer 1 story Phase 2 (bridge-dev → bridge-tester → review → CI → deploy staging → validation metier) - sync-bidirec.md : sync Docmost ↔ Baserow event-driven (idempotence + anti-loop X-Bridge-Origin) - release.md : process release semver (E2E staging → tag → approval → deploy prod → watch 30min) - incident.md : SEV1/2/3 response + post-mortem blameless + runbooks - bump-deps.md : Dependabot PRs + major bumps + Docmost/Baserow upstream Chaque workflow specifie : trigger, acteurs (agents + humains), sequence ordonnee avec outputs, gates humains bloquants, rollback, comm templates. Workflows = playbooks declaratifs pour Claude main qui orchestre les agents via Agent tool sequentiel. A migrer plus tard vers BYAN web workflow runs quand le runtime BYAN sera fix. Equipe complete pour formation-hub : - 4 agents specialises (bridge-dev, bridge-tester, acadenice-devops, docmost-fork-dev) - 5 workflows orchestrant leur collaboration
5.3 KiB
5.3 KiB
Workflow : RELEASE PROD
Process de release semver vers production. Cf doc 17 section 4.
Trigger
- Ensemble de stories mergees sur main, pretes pour prod
- Corentin decide "on release" → tag semver
Acteurs
- Corentin (decisionnaire + approbateur)
- bridge-tester (validation E2E staging)
- acadenice-devops (deploy + watch + rollback si besoin)
- (optionnel) Yan (approbateur backup pour deploy prod)
Pre-requis
- Tous les CI sur main = vert
- Tests E2E staging = vert
- Backup recent (< 24h) verifie
- Pas de creneau metier critique (cours en cours, deadline saisie heures)
Sequence
[1] Decision release (Corentin)
- Lister les commits sur main depuis derniere release : git log v<last>..HEAD --oneline
- Decider type release : MAJOR / MINOR / PATCH (semver)
- Output : decision + version cible
[2] Update CHANGELOG.md (Corentin OU bridge-dev assist)
- Deplacer section [Unreleased] vers nouvelle section [vX.Y.Z]
- Ajouter date
- Verifier que toutes les entries sont la
- Commit : `docs(changelog): release vX.Y.Z`
- Output : CHANGELOG.md a jour
[3] E2E tests staging (bridge-tester via CI)
- Trigger : push sur main fait deja le deploy staging auto
- Verifier : workflow e2e.yml passe (Playwright sur staging URL)
- Si fail : retour fix avant release
- Output : E2E status
[4] Validation manuelle staging (Corentin)
- Tester quelques flows critiques sur staging URL :
* Login Docmost
* Creation page + share link
* Saisie heures realisees (UC-13)
* Creation projet + tache (UCA-02 + UCA-03)
- Output : sign-off staging
[5] Backup verification (acadenice-devops)
- Verifier dernier backup < 24h existe
- Optionnel : declencher backup ad-hoc avant deploy prod
- Output : backup verifie
[6] Tag semver + push (Corentin)
- git tag -a vX.Y.Z -m "Release vX.Y.Z — <one-liner>"
- git push origin vX.Y.Z (ou push selfhost selon source of truth)
- Trigger : workflow deploy-prod.yml se declenche
- Output : tag prod cree
[7] Approval review (Yan ou Corentin)
- GitHub UI : environment 'production' demande required reviewer
- Approver dans GitHub Actions UI
- Output : approval enregistre
[8] Deploy prod execute (acadenice-devops via deploy-prod.yml)
- SSH prod host
- git checkout vX.Y.Z
- docker compose -f compose.yml -f compose.prod.yml pull
- docker compose -f compose.yml -f compose.prod.yml up -d
- Healthcheck post-deploy
- Output : prod deploye
[9] Smoke tests prod (acadenice-devops + script)
- Run scripts/smoke-test.sh contre PROD_URL
- Verifier 3 endpoints critiques
- Output : smoke OK / KO
[10] Watch period (Corentin + acadenice-devops, 30 min)
- Surveiller logs containers : docker compose logs -f --tail=200
- Surveiller monitoring : UptimeRobot + (Phase 3+) Prometheus/Grafana
- Surveiller saisies utilisateur : pas de chute brutale ?
- Output : 30 min vert ou alerte
[11] Annonce release (Corentin)
- Slack/Teams interne : "Released vX.Y.Z. Highlights: ..."
- Mettre a jour CHANGELOG.md commit dans release notes GitHub/Forgejo
- Output : equipe informee
[12] Si tout OK : RELEASE COMPLETE
- Notifier ops : new version live
- Si KO : declencher WF rollback (cf incident.md)
Gates humains bloquants
| Gate | Decision | Owner |
|---|---|---|
| Validation manuelle staging (4) | OK / RETOUR FIX | Corentin |
| Tag semver (6) | release ou abort | Corentin |
| Approval prod (7) | APPROVE / DENY | Yan ou Corentin (manual GitHub UI) |
| Watch period (10) | tout OK / rollback | Corentin |
Rollback (en cas d'echec)
Cf doc 17 section 6 + workflow incident.md :
| Scenario | Action |
|---|---|
| Healthcheck KO post-deploy | Re-deploy version precedente : git tag vX.Y.Z-rollback v<previous> && git push --tags → trigger deploy-prod.yml |
| Bug critique decouvert dans watch period | Idem rollback automatique vers version stable |
| Migration schema casse rollups | Restore Postgres backup pre-deploy + redeploy version stable |
| Compromission credentials post-deploy | Rotate secrets + redeploy + audit logs |
Outputs
- Tag semver cree sur main
- Image Docker tagged + pushed registry
- Prod deployee + verifiee
- CHANGELOG release section publiee
- Notification equipe envoyee
- (Si rollback) post-mortem dans
docs/post-mortems/YYYY-MM-DD-<title>.md
Convention semver (rappel)
| Type | Quand | Exemple |
|---|---|---|
| MAJOR | Breaking change (migration data forcee, rupture API) | v1.x.x → v2.0.0 |
| MINOR | Nouvelle feature backward-compatible | v1.2.x → v1.3.0 |
| PATCH | Bug fix / security fix | v1.2.3 → v1.2.4 |
Frequence de release
- Phase 1 vanilla : release initiale v0.1.0 quand Phase 1 stable + utilisee 1 semaine
- Phase 2 bridge : releases v0.2.x → v0.9.x au fil des stories validees
- Phase 3 maturite : v1.0.0 quand bidirec backlinks + dual-mode editor + MCP server livres
- Phase 4+ : releases mensuelles minimum
Notes
- Pas de release vendredi soir (tradition tech : eviter d'avoir a fixer en weekend)
- Pas de release pendant fenetre maintenance Acadenice (cours en cours, etc.)
- Si urgent en prod : hotfix branch depuis tag stable, micro-release patch (ex: v1.2.4 → v1.2.5)