# ============================================================================ # CI · OTO Enterprise OS DTP · Gitea Actions # ---------------------------------------------------------------------------- # Gate qualité DevOps (roadmap Sprint 1 · GAP_ANALYSIS §7). # Plateforme : Gitea Actions UNIQUEMENT (CLAUDE.md #2 · JAMAIS GitHub). # Runner : act_runner enregistré sur le VPS avec le label « ubuntu-latest ». # Voir ci/README.md pour l'enregistrement du runner. # Aucune dépendance réseau/marketplace externe hors actions/checkout. # ============================================================================ name: CI on: push: branches: [main] pull_request: branches: [main] workflow_dispatch: jobs: constraints-guard: name: Contraintes NON-NÉGOCIABLES (CLAUDE.md) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Guard des contraintes run: bash ci/guard_constraints.sh validate-json: name: Validation JSON (schémas Faisabilité) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Valider les JSON run: bash ci/validate_json.sh check-docs: name: Qualité documentaire (liens + 4Big) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Contrôle docs run: bash ci/check_docs.sh # -------------------------------------------------------------------------- # Publiciste (Sprint 2) : parser faisabilité → projets_master.json + generator. # Tests unitaires stdlib pur (unittest) → aucune installation pip requise sur # le runner. L'oracle jsonschema est utilisé s'il est présent, sinon ignoré. # -------------------------------------------------------------------------- publiciste-tests: name: Publiciste · parser + schéma + generator (unittest) runs-on: ubuntu-latest defaults: run: working-directory: 05_deliverables_mvp/publiciste steps: - uses: actions/checkout@v4 - name: Tests unitaires Publiciste run: python3 -m unittest discover -s tests -v # -------------------------------------------------------------------------- # RBAC 50 rôles (Sprint 2 · ERPNext Backend) : contrat rbac_50_roles.json vs # rbac.schema.json. Réutilise le validateur maison Publiciste (pas de pip). # -------------------------------------------------------------------------- rbac-tests: name: RBAC · 50 rôles + schéma (unittest) runs-on: ubuntu-latest defaults: run: working-directory: 05_deliverables_mvp/rbac steps: - uses: actions/checkout@v4 - name: Tests contrat RBAC run: python3 -m unittest discover -s tests -v # -------------------------------------------------------------------------- # Générateur Faisabilité 4 volets (Sprint 2 · Faisabilité) : brief.json → # data_room/PXX/ (template v1.0). Le round-trip via le parser Publiciste est # testé ici (générateur → parser → schéma). stdlib pur, aucune install pip. # -------------------------------------------------------------------------- faisabilite-gen-tests: name: Faisabilité · générateur 4 volets + round-trip (unittest) runs-on: ubuntu-latest defaults: run: working-directory: 05_deliverables_mvp/faisabilite/generator steps: - uses: actions/checkout@v4 - name: Tests générateur Faisabilité run: python3 -m unittest discover -s tests -v # -------------------------------------------------------------------------- # Générateur de fixtures ERPNext (Sprint 2 · ERPNext Backend) : le contrat # rbac_50_roles.json → fixtures Frappe `Role` + `Custom DocPerm`. Valide le # bundle contre fixtures.schema.json + invariants (50 rôles, séparation des # pouvoirs, round-trip fidèle au contrat). stdlib pur, aucune install pip. # -------------------------------------------------------------------------- rbac-fixtures-tests: name: RBAC · fixtures ERPNext (Role + Custom DocPerm) runs-on: ubuntu-latest defaults: run: working-directory: 05_deliverables_mvp/rbac/fixtures_gen steps: - uses: actions/checkout@v4 - name: Tests générateur de fixtures RBAC run: python3 -m unittest discover -s tests -v gate: name: Gate qualité (agrégat) runs-on: ubuntu-latest needs: [constraints-guard, validate-json, check-docs, publiciste-tests, rbac-tests, faisabilite-gen-tests, rbac-fixtures-tests] steps: - name: Résultat run: echo "✅ Gate qualité 4Big franchi — tous les checks verts." # -------------------------------------------------------------------------- # E2E baseline (QA · Sprint 1). MANUEL uniquement (workflow_dispatch) : exige # un serveur live + navigateurs → hors du gate push/PR (checks statiques). # Cible via DTP_BASE_URL (variable/secret repo). Voir tests/README.md. # -------------------------------------------------------------------------- e2e-baseline: name: E2E baseline Playwright (manuel) runs-on: ubuntu-latest if: github.event_name == 'workflow_dispatch' defaults: run: working-directory: tests env: CI: "true" DTP_BASE_URL: ${{ vars.DTP_BASE_URL }} steps: - uses: actions/checkout@v4 - name: Installer dépendances + navigateurs run: | npm install npm run install:browsers - name: Lancer la baseline E2E run: npm test - name: Publier le rapport if: always() uses: actions/upload-artifact@v4 with: name: playwright-report path: tests/playwright-report/