From e64c41720e30bdeb94b9a5258fb76b095ebf14c6 Mon Sep 17 00:00:00 2001 From: Johan Date: Fri, 19 Dec 2025 10:06:05 +0100 Subject: [PATCH] First commit --- .github/workflows/ci-cd.yml | 105 ++++++++++++++++++++++++++++++++++++ .gitignore | 1 - 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ci-cd.yml diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml new file mode 100644 index 0000000..ca72a8b --- /dev/null +++ b/.github/workflows/ci-cd.yml @@ -0,0 +1,105 @@ +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 diff --git a/.gitignore b/.gitignore index 32542b7..b1d225e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ /tmp /out-tsc /bazel-out -.github # Node /node_modules