name: CI/CD pipeline Angular (AWS S3 + CloudFront) on: push: branches: - master # Variables d'environnement pour le déploiement env: AWS_REGION: us-east-1 # Mettez votre région S3_BUCKET_NAME: "hello-world-angular-s3-bucket" # Nom du bucket S3 (!= de celui Beanstalk) pour stockage des fichiers CLOUDFRONT_DISTRIBUTION_ID: "VOTRE-ID-CLOUDFRONT" # ID cloudfront à invalider après déploiement jobs: test: name: CI - Tests, Build et Scans runs-on: ubuntu-24.04 steps: # 1. Récupération du code - name: 1. Récupérer le code uses: actions/checkout@v5.0.0 # 2. Installation de Node.js - name: 2. Mettre en place Node.js (v20) uses: actions/setup-node@v4.0.3 with: node-version: 20 cache: 'npm' # Mettre en cache les dépendances npm # 3. Installation des dépendances - name: 3. Installer les dépendances (npm ci) run: npm ci # 4. Lancement des tests unitaires - name: 4. Lancer les tests unitaires (Karma/Jasmine) run: npm run test -- --watch=false --browsers=ChromeHeadless # 5. DevSecOps - Vérifie la qualité et le style du code - name: 5. Linter (ESLint) run: npm run lint # 6. Build de l'application - name: 6. Builder l'application (ng build) run: npm run build -- --configuration=production # 7. DevSecOps - Scanne les dépendances pour les vulnérabilités connues - name: 7. SCA - Scan des dépendances (Trivy) uses: aquasecurity/trivy-action@0.33.1 with: scan-type: 'fs' scan-ref: '.' ignore-unfixed: true format: 'table' scanners: 'vuln,secret' severity: 'HIGH,CRITICAL' # 8. DevSecOps - Scanne l'historique Git - name: 8. Scan des secrets de l'historique Git (Gitleaks) uses: gitleaks/gitleaks-action@v2.3.9 # 9. Stocker l'artefact de build (le dossier 'dist') - name: 9. Archiver l'artefact de build uses: actions/upload-artifact@v4 with: name: angular-build-dist # Assurez-vous que le chemin correspond bien à votre projet path: dist/hello-world-angular/ deploy-aws-cloudfront: name: CD - Déploiement sur S3 + CloudFront runs-on: ubuntu-24.04 needs: test # Ne se lance que si le job 'test' a réussi if: github.ref == 'refs/heads/master' steps: # 1. Récupérer l'artefact de build - name: 1. Télécharger l'artefact de build uses: actions/download-artifact@v4 with: name: angular-build-dist path: dist/hello-world-angular # 2. Authentification auprès d'AWS - name: 2. Configurer les identifiants AWS uses: aws-actions/configure-aws-credentials@v5.1.0 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ env.AWS_REGION }} # 3. Envoi des fichiers sur S3 - name: 3. Synchroniser les fichiers avec S3 # --delete supprime les anciens fichiers qui ne sont plus dans le build run: | echo "Synchronisation du build vers s3://${{ env.S3_BUCKET_NAME }}" aws s3 sync ./dist/hello-world-angular s3://${{ env.S3_BUCKET_NAME }} --delete # 4. Invalidation du cache CloudFront - name: 4. Invalider le cache CloudFront # C'est l'étape cruciale pour que les utilisateurs voient la nouvelle version run: | echo "Invalidation du cache pour la distribution ${{ env.CLOUDFRONT_DISTRIBUTION_ID }}" aws cloudfront create-invalidation \ --distribution-id ${{ env.CLOUDFRONT_DISTRIBUTION_ID }} \ --paths "/*" # Invalide tout le site