2026-05-07 15:59:27 +02:00
|
|
|
on:
|
|
|
|
|
push:
|
|
|
|
|
branches: [main]
|
|
|
|
|
pull_request:
|
|
|
|
|
|
|
|
|
|
jobs:
|
|
|
|
|
build-and-deploy:
|
2026-05-07 17:03:42 +02:00
|
|
|
runs-on: koda
|
2026-05-07 15:59:27 +02:00
|
|
|
env:
|
2026-05-07 17:03:42 +02:00
|
|
|
NAMESPACE: clem-siwa-game-prd
|
|
|
|
|
REGISTRY: clem-siwa-game
|
2026-08-25 14:16:08 +02:00
|
|
|
# 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
|
2026-05-07 15:59:27 +02:00
|
|
|
steps:
|
2026-05-07 17:03:42 +02:00
|
|
|
- uses: actions/checkout@v4
|
|
|
|
|
with:
|
|
|
|
|
lfs: true
|
2026-05-07 15:59:27 +02:00
|
|
|
|
|
|
|
|
- name: Helm lint charts
|
|
|
|
|
run: |
|
|
|
|
|
helm lint charts
|
|
|
|
|
|
|
|
|
|
- name: Build and push hugo
|
|
|
|
|
run: |
|
2026-08-25 14:16:08 +02:00
|
|
|
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
|
2026-05-07 15:59:27 +02:00
|
|
|
|
|
|
|
|
- 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 }} \
|
2026-05-07 17:03:42 +02:00
|
|
|
--set "hugo.domains={www.siwa-game.fr,siwa-game.fr}"
|