siwa-game.fr/.forgejo/workflows/deploy.yaml

74 lines
3 KiB
YAML
Raw Normal View History

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: Delete existing imagePullSecret (if exists)
run: |
kubectl delete secret registry-creds -n $NAMESPACE --ignore-not-found
- name: Copy imagePullSecret to namespace
run: |
kubectl get secret registry-creds -n servadmin -o yaml \
| sed "s/namespace: servadmin/namespace: $NAMESPACE/" \
| kubectl apply -f -
- 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}"