on: push: branches: [main] pull_request: jobs: build-and-deploy: runs-on: koda env: NAMESPACE: clem-siwa-game-prd REGISTRY: clem-siwa-game # regctl écrit sa config dans $HOME/.regctl par défaut ; on la place dans # /tmp pour ne dépendre d'aucun HOME inscriptible côté runner. REGCTL_CONFIG: /tmp/regctl.json steps: - uses: actions/checkout@v4 with: lfs: true - name: Helm lint charts run: | helm lint charts - name: Build and push hugo run: | IMAGE=$REGISTRY_URL/$REGISTRY/clem-hugo:${{ github.sha }} # Le driver buildx par défaut ("docker") ne sait pas exporter en OCI, # le format que regctl sait importer. On partage donc un builder # conteneurisé nommé, dont le cache survit d'un run à l'autre. # Le runner a capacity: 2 et exécute les steps en mode host : deux # jobs peuvent se disputer la création de ce builder. On tolère de # perdre la course en retombant sur l'instance gagnante. # cpu-quota/cpu-period bornent buildkitd à 6 des 8 coeurs : il tourne # en conteneur frère sur le daemon du noeud, donc hors des limits du # pod runner, et une build lourde y suffit à affamer le control plane. # Ces options ne s'appliquent qu'à la création du conteneur. docker buildx inspect --bootstrap ci >/dev/null 2>&1 \ || docker buildx create --name ci --driver docker-container --bootstrap \ --driver-opt cpu-quota=600000 --driver-opt cpu-period=100000 >/dev/null 2>&1 \ || docker buildx inspect --bootstrap ci >/dev/null docker buildx build --builder ci --progress=plain \ --output type=oci,dest=/tmp/clem-hugo.tar -t "$IMAGE" . # L'edge Cloudflare refuse tout corps de requête > 100 Mo (413), et # docker push envoie chaque blob en une seule requête. regctl, lui, # découpe (cf. README §8 de obicorp-infra). regctl registry set --blob-chunk 50000000 --blob-max 50000000 "$REGISTRY_URL" regctl image import "$IMAGE" /tmp/clem-hugo.tar rm -f /tmp/clem-hugo.tar - name: Ensure namespace exists run: | kubectl get ns $NAMESPACE || kubectl create namespace $NAMESPACE - name: Deploy with Helm run: | helm upgrade --install hugo charts \ --namespace $NAMESPACE \ --set hugo.repository=$REGISTRY_URL/$REGISTRY/clem-hugo \ --set hugo.tag=${{ github.sha }} \ --set "hugo.domains={www.siwa-game.fr,siwa-game.fr}"