diff --git a/docs/adr/022-strategie-cicd-monorepo.md b/docs/adr/022-strategie-cicd-monorepo.md index 05dd1c8..b4a6d26 100644 --- a/docs/adr/022-strategie-cicd-monorepo.md +++ b/docs/adr/022-strategie-cicd-monorepo.md @@ -43,203 +43,64 @@ RoadWave est organisé en monorepo contenant backend Go, mobile Flutter, documen #### Workflow Backend (`backend.yml`) -```yaml -name: Backend CI +**Déclencheurs** : +- Branches : `main`, `develop` +- Chemins surveillés : + - `backend/**` : Code Go, migrations, configuration + - `features/api/**` : Features BDD des tests API + - `features/e2e/**` : Features BDD end-to-end impliquant le backend + - `.github/workflows/backend.yml` : Modifications du workflow lui-même -on: - push: - branches: [main, develop] - paths: - - 'backend/**' # Code Go modifié - - 'features/api/**' # Tests API modifiés - - 'features/e2e/**' # Tests E2E (impliquent backend) - - '.github/workflows/backend.yml' - pull_request: - branches: [main, develop] - paths: - - 'backend/**' - - 'features/api/**' - - 'features/e2e/**' +**Jobs exécutés** : +- **Tests unitaires** : Exécution `go test` sur tous les packages +- **Tests d'intégration** : Utilisation de Testcontainers avec PostgreSQL/PostGIS +- **Tests BDD** : Exécution Godog sur features `api/` et `e2e/` +- **Lint** : Vérification golangci-lint +- **Build** : Compilation binaire production (dépend de tous les jobs précédents) -jobs: - test-unit: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: '1.21' - - run: cd backend && go test ./... - - test-integration: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: '1.21' - - run: cd backend && make test-integration - - test-bdd: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: '1.21' - - run: | - go install github.com/cucumber/godog/cmd/godog@latest - godog run features/api/ features/e2e/ - - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: golangci/golangci-lint-action@v4 - - build: - runs-on: ubuntu-latest - needs: [test-unit, test-integration, test-bdd, lint] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: '1.21' - - run: cd backend && make build -``` - -**Déclenché par** : -- Modifications dans `/backend` (code Go, migrations, config) -- Nouvelles features API dans `/features/api` -- Tests end-to-end dans `/features/e2e` (backend impliqué) +**Environnement** : Ubuntu latest, Go 1.21+ --- #### Workflow Mobile (`mobile.yml`) -```yaml -name: Mobile CI +**Déclencheurs** : +- Branches : `main`, `develop` +- Chemins surveillés : + - `mobile/**` : Code Flutter/Dart, assets, configuration + - `features/ui/**` : Features BDD des tests UI + - `features/e2e/**` : Features BDD end-to-end impliquant le mobile + - `.github/workflows/mobile.yml` : Modifications du workflow lui-même -on: - push: - branches: [main, develop] - paths: - - 'mobile/**' # Code Flutter modifié - - 'features/ui/**' # Tests UI modifiés - - 'features/e2e/**' # Tests E2E (impliquent mobile) - - '.github/workflows/mobile.yml' - pull_request: - branches: [main, develop] - paths: - - 'mobile/**' - - 'features/ui/**' - - 'features/e2e/**' +**Jobs exécutés** : +- **Tests unitaires** : Exécution `flutter test` sur widgets et logique métier +- **Tests d'intégration** : Tests d'intégration Flutter (interactions UI complexes) +- **Lint** : Analyse statique `flutter analyze` +- **Build Android** : Compilation APK release (dépend des tests) +- **Build iOS** : Compilation IPA release sans codesign (dépend des tests) -jobs: - test-unit: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: subosito/flutter-action@v2 - with: - flutter-version: '3.16.0' - - run: cd mobile && flutter test - - test-integration: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: subosito/flutter-action@v2 - with: - flutter-version: '3.16.0' - - run: cd mobile && flutter test integration_test/ - - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: subosito/flutter-action@v2 - with: - flutter-version: '3.16.0' - - run: cd mobile && flutter analyze - - build-android: - runs-on: ubuntu-latest - needs: [test-unit, test-integration, lint] - steps: - - uses: actions/checkout@v4 - - uses: subosito/flutter-action@v2 - with: - flutter-version: '3.16.0' - - run: cd mobile && flutter build apk --release - - build-ios: - runs-on: macos-latest - needs: [test-unit, test-integration, lint] - steps: - - uses: actions/checkout@v4 - - uses: subosito/flutter-action@v2 - with: - flutter-version: '3.16.0' - - run: cd mobile && flutter build ios --release --no-codesign -``` - -**Déclenché par** : -- Modifications dans `/mobile` (code Flutter/Dart, assets, config) -- Nouvelles features UI dans `/features/ui` -- Tests end-to-end dans `/features/e2e` (mobile impliqué) +**Environnement** : +- Tests/Lint/Build Android : Ubuntu latest +- Build iOS : macOS latest (requis pour Xcode) +- Flutter 3.16.0+ --- #### Workflow Shared (`shared.yml`) -```yaml -name: Shared CI +**Déclencheurs** : +- Branches : `main`, `develop` +- Chemins surveillés : + - `docs/**` : ADR, règles métier, documentation technique + - `shared/**` : Contrats API, types partagés + - `.github/workflows/shared.yml` : Modifications du workflow lui-même -on: - push: - branches: [main, develop] - paths: - - 'docs/**' # Documentation modifiée - - 'shared/**' # Code partagé modifié - - '.github/workflows/shared.yml' - pull_request: - branches: [main, develop] - paths: - - 'docs/**' - - 'shared/**' +**Jobs exécutés** : +- **Validation documentation** : Build MkDocs en mode strict (détecte erreurs markdown) +- **Vérification liens** : Validation des liens internes/externes dans documentation +- **Tests code partagé** : Exécution tests si du code partagé backend-mobile existe -jobs: - docs-validation: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - run: | - pip install mkdocs mkdocs-material - mkdocs build --strict - - docs-links: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: lycheeverse/lychee-action@v1 - with: - args: 'docs/**/*.md' - - shared-tests: - runs-on: ubuntu-latest - if: contains(github.event.head_commit.modified, 'shared/') - steps: - - uses: actions/checkout@v4 - # Tests pour code partagé si nécessaire -``` - -**Déclenché par** : -- Modifications dans `/docs` (ADR, règles métier, documentation technique) -- Modifications dans `/shared` (contrats API, types partagés) +**Environnement** : Ubuntu latest, Python 3.11+ --- @@ -333,31 +194,15 @@ Les tests end-to-end dans `/features/e2e/` **déclenchent les deux workflows** ( ### Validation -```bash -# Test 1 : Commit backend-only -git add backend/ -git commit -m "test: backend change" -git push -# → Vérifier que SEULEMENT backend.yml s'exécute +**Scénarios de test à valider** : -# Test 2 : Commit mobile-only -git add mobile/ -git commit -m "test: mobile change" -git push -# → Vérifier que SEULEMENT mobile.yml s'exécute +1. **Commit backend uniquement** : Modifications dans `/backend` → Vérifier exécution isolée de `backend.yml` +2. **Commit mobile uniquement** : Modifications dans `/mobile` → Vérifier exécution isolée de `mobile.yml` +3. **Commit features E2E** : Modifications dans `/features/e2e` → Vérifier exécution conjointe de `backend.yml` ET `mobile.yml` +4. **Commit documentation uniquement** : Modifications dans `/docs` → Vérifier exécution isolée de `shared.yml` +5. **Commit mixte** : Modifications backend + mobile + docs → Vérifier exécution des 3 workflows en parallèle -# Test 3 : Commit E2E -git add features/e2e/ -git commit -m "test: e2e change" -git push -# → Vérifier que backend.yml ET mobile.yml s'exécutent - -# Test 4 : Commit docs-only -git add docs/ -git commit -m "docs: update ADR" -git push -# → Vérifier que SEULEMENT shared.yml s'exécute -``` +**Vérifications** : Consulter l'onglet "Actions" de GitHub pour confirmer quels workflows se sont déclenchés. ---