deploy.yml partait à chaque push sur dev ou main, CI verte ou non, et déployait la pointe de branche du moment plutôt que le commit poussé. Il devient un workflow appelé par ci.yml, après « CI ok », sur les seuls push. Il aligne le dossier de l'environnement sur GITHUB_SHA. Toujours aucun déclencheur pull_request (ADR 0009) ; workflow_dispatch reste disponible pour redéployer à la main.
60 lines
2.3 KiB
YAML
60 lines
2.3 KiB
YAML
# 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:
|
|
workflow_call:
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
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' }}
|
|
env:
|
|
ENVIRONNEMENT: ${{ github.ref_name == 'main' && 'prod' || 'rec' }}
|
|
PORT_HTTPS: ${{ github.ref_name == 'main' && '443' || '8443' }}
|
|
steps:
|
|
- 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 "${GITHUB_SHA}"
|
|
git log -1 --format='%h %s'
|
|
|
|
- name: Reconstruit et redémarre la stack
|
|
run: |
|
|
cd "/srv/enervision/${ENVIRONNEMENT}"
|
|
make stack-up
|
|
|
|
- name: Attend que l'API réponde derrière le proxy
|
|
run: |
|
|
for _ in $(seq 1 36); do
|
|
if curl --fail --silent --insecure "https://localhost:${PORT_HTTPS}/api/v1/health/ready"; then
|
|
exit 0
|
|
fi
|
|
sleep 5
|
|
done
|
|
echo "L'API ne répond pas après 3 minutes" >&2
|
|
cd "/srv/enervision/${ENVIRONNEMENT}"
|
|
compose="docker compose -f docker-compose.yml -f docker-compose.prod.yml"
|
|
$compose ps
|
|
$compose logs --tail=50 backend proxy
|
|
exit 1
|