diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fc4c99f..4f81574 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -193,3 +193,8 @@ jobs: exit 1 fi + deploy: + name: Déploiement + needs: ci-ok + if: ${{ !cancelled() && needs.ci-ok.result == 'success' && github.event_name == 'push' }} + uses: ./.github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 411e164..05db884 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,27 +1,28 @@ # Pourquoi : le runner tourne sur la VM ENI, adresse privée que les runners hébergés par GitHub # ne joignent pas, et travaille dans un dossier stable par environnement plutôt que dans son # espace de travail : `.env`, certificats et volumes y survivent d'un déploiement à l'autre. +# Pourquoi : appelé par ci.yml une fois « CI ok » vert, jamais directement par un push, et il +# déploie `GITHUB_SHA`, le commit testé, pas la pointe de branche du moment (ADR 0014). # Piège : jamais de déclencheur `pull_request` ici. Sur un dépôt public, une PR de fork # exécuterait son code sur la machine de production (ADR 0009) - job deploy. name: Déploiement on: - push: - branches: [dev, main] + workflow_call: workflow_dispatch: permissions: contents: read -concurrency: - group: deploy-${{ github.ref_name }} - cancel-in-progress: false - jobs: deploy: + name: Déploie sur la VM runs-on: [self-hosted, linux, eni-g3] timeout-minutes: 30 + concurrency: + group: deploy-${{ github.ref_name }} + cancel-in-progress: false environment: name: ${{ github.ref_name == 'main' && 'prod' || 'rec' }} url: ${{ github.ref_name == 'main' && 'https://enervision.local' || 'https://rec.enervision.local:8443' }} @@ -29,22 +30,22 @@ jobs: ENVIRONNEMENT: ${{ github.ref_name == 'main' && 'prod' || 'rec' }} PORT_HTTPS: ${{ github.ref_name == 'main' && '443' || '8443' }} steps: - - name: Aligner le dossier de l'environnement sur la branche poussée + - name: Aligne le dossier de l'environnement sur le commit testé run: | cd "/srv/enervision/${ENVIRONNEMENT}" git fetch --quiet origin "${GITHUB_REF_NAME}" git checkout --quiet "${GITHUB_REF_NAME}" - git reset --quiet --hard "origin/${GITHUB_REF_NAME}" + git reset --quiet --hard "${GITHUB_SHA}" git log -1 --format='%h %s' - - name: Reconstruire et redémarrer la stack + - name: Reconstruit et redémarre la stack run: | cd "/srv/enervision/${ENVIRONNEMENT}" make stack-up - - name: Attendre que l'API réponde derrière le proxy + - name: Attend que l'API réponde derrière le proxy run: | - for tentative in $(seq 1 36); do + for _ in $(seq 1 36); do if curl --fail --silent --insecure "https://localhost:${PORT_HTTPS}/api/v1/health/ready"; then exit 0 fi