From ac3a1d0ef19dda2fc75ab13b2524c0c74f237d27 Mon Sep 17 00:00:00 2001 From: sfaguet Date: Tue, 25 Aug 2026 14:16:08 +0200 Subject: [PATCH] Update .forgejo/workflows/deploy.yaml --- .forgejo/workflows/deploy.yaml | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 7779657..02b546a 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -9,6 +9,9 @@ jobs: 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: @@ -18,14 +21,41 @@ jobs: run: | helm lint charts + # regctl relit ~/.docker/config.json par défaut, ce login lui sert donc + # aussi : l'entrée que regctl écrit ensuite pour le chunking ne porte que + # blobChunk/blobMax et n'écrase pas les identifiants. - name: Docker login run: | docker login $REGISTRY_URL -u $REGISTRY_USER --password "$REGISTRY_PASS" - name: Build and push hugo run: | - docker build --progress=plain -t $REGISTRY_URL/$REGISTRY/clem-hugo:${{ github.sha }} . - docker push $REGISTRY_URL/$REGISTRY/clem-hugo:${{ github.sha }} + 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: |