c23dfc24a5
DocType custom cible du Workflow OTO Vente Pipeline. Cross-cohérence workflow↔DocType : nom/champ d'état/valeurs de statut/is_submittable/permissions tous dérivés de workflow_vente_spec.json (source unique, anti-dérive). Rôles résolus via rbac_50_roles.json (#6). CLI build|validate · 12 invariants · 31 tests. Job CI crm-dossier-vente-tests ajouté au gate. Régression 177 tests verts. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
258 lines
11 KiB
YAML
258 lines
11 KiB
YAML
# ============================================================================
|
|
# 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
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Générateur de plan User Permission (Sprint 2 · ERPNext Backend) : le contrat
|
|
# rbac_50_roles.json → plan row-level (scope_donnees → mécanisme Frappe natif +
|
|
# template User Permission allow=Company pour la portée `entite`). Valide le
|
|
# plan contre userperm.schema.json + invariants (couverture bijective des 50
|
|
# rôles, template SSI `entite`, anti-invention utilisateur). stdlib pur.
|
|
# --------------------------------------------------------------------------
|
|
rbac-userperm-tests:
|
|
name: RBAC · plan User Permission (row-level)
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: 05_deliverables_mvp/rbac/userperm_gen
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Tests générateur de plan User Permission
|
|
run: python3 -m unittest discover -s tests -v
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Générateur de Role Profile (Sprint 2 · ERPNext Backend) : le contrat
|
|
# rbac_50_roles.json → un `Role Profile` ERPNext v15 natif par portail (bundle
|
|
# de rôles assignable en un geste). Valide le bundle contre
|
|
# roleprofile.schema.json + invariants (couverture bijective des 50 rôles, un
|
|
# profil par portail, cohérence portail, anti-invention). stdlib pur.
|
|
# --------------------------------------------------------------------------
|
|
rbac-roleprofile-tests:
|
|
name: RBAC · Role Profile (bundles par portail)
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: 05_deliverables_mvp/rbac/roleprofile_gen
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Tests générateur de Role Profile
|
|
run: python3 -m unittest discover -s tests -v
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Agrégateur RBAC (Sprint 2 · ERPNext Backend) : recoud les 3 volets RBAC
|
|
# (fixtures Role+DocPerm, plan User Permission, Role Profile) en un run-book
|
|
# d'application VPS ordonné (SPEC §7) + un manifeste agrégé. Valide contre
|
|
# apply_plan.schema.json + invariants (ordre + graphe de dépendances SPEC §7,
|
|
# cohérence inter-volets, couverture bijective des 50 rôles). stdlib pur.
|
|
# --------------------------------------------------------------------------
|
|
rbac-applyplan-tests:
|
|
name: RBAC · run-book d'application unifié (agrégat 3 volets)
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: 05_deliverables_mvp/rbac/apply_plan
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Tests agrégateur RBAC
|
|
run: python3 -m unittest discover -s tests -v
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Générateur de dossier bancable trilingue (Sprint 3 · Faisabilité) : le même
|
|
# brief.json → data_room/PXX/50_financier_bancable/{fr,en,es}.md + manifest.json
|
|
# (répertoire jusqu'ici vide qu'exige le Portail Bancables 4Big). Figures
|
|
# sourcées verbatim + agrégats calculés de façon traçable (formule recoupée).
|
|
# Valide le manifeste contre bancable.schema.json + invariants (3 langues,
|
|
# bannière CONFIDENTIEL, anti-invention, recalcul des figures). stdlib pur.
|
|
# --------------------------------------------------------------------------
|
|
bancable-tests:
|
|
name: Faisabilité · dossier bancable trilingue FR/EN/ES
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: 05_deliverables_mvp/faisabilite/bancable
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Tests générateur bancable trilingue
|
|
run: python3 -m unittest discover -s tests -v
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Générateur de workflow vente ERPNext (Sprint 4 · CRM natif) : le contrat
|
|
# pipeline workflow_vente_spec.json (lead → visite → devis → réservation →
|
|
# contrat → CONFOTUR) → fixtures Frappe Workflow + Workflow State + Workflow
|
|
# Action Master. Rôles résolus depuis rbac_50_roles.json (zéro duplication).
|
|
# Valide le schéma de sortie + 9 invariants de graphe (monotonie doc_status,
|
|
# atteignabilité, séparation des pouvoirs). stdlib pur, zéro pip.
|
|
# --------------------------------------------------------------------------
|
|
crm-workflow-vente-tests:
|
|
name: CRM · workflow vente ERPNext (lead → CONFOTUR)
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: 05_deliverables_mvp/crm/workflow_vente
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Tests générateur workflow vente
|
|
run: python3 -m unittest discover -s tests -v
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Générateur du DocType porteur (Sprint 4 · CRM natif) : doctype_spec.json +
|
|
# workflow_vente_spec.json → fixture Frappe `DocType` custom `OTO Dossier
|
|
# Vente`, cible du Workflow `OTO Vente Pipeline`. Cross-cohérence workflow ↔
|
|
# DocType : champ d'état + valeurs de statut + is_submittable + permissions
|
|
# DÉDUITS du pipeline ; rôles résolus depuis rbac_50_roles.json (zéro
|
|
# duplication). Valide le schéma de sortie + 12 invariants. stdlib pur, zéro pip.
|
|
# --------------------------------------------------------------------------
|
|
crm-dossier-vente-tests:
|
|
name: CRM · DocType porteur OTO Dossier Vente
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: 05_deliverables_mvp/crm/dossier_vente
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Tests générateur DocType Dossier Vente
|
|
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, rbac-userperm-tests, rbac-roleprofile-tests, rbac-applyplan-tests, bancable-tests, crm-workflow-vente-tests, crm-dossier-vente-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/
|