diff --git a/.gitea/workflows/cd.yml b/.gitea/workflows/cd.yml index df33664..3810fc4 100644 --- a/.gitea/workflows/cd.yml +++ b/.gitea/workflows/cd.yml @@ -11,6 +11,7 @@ jobs: name: Build and deploy runs-on: self-hosted if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' }} + environment: staging env: SERVICE: supervisor IMAGE: gitea.d-ma.be/mathias/supervisor @@ -119,3 +120,74 @@ jobs: git push echo "Infra repo updated: ${SERVICE}+ingestion → ${IMAGE_TAG}" + + - name: Trigger Flux reconcile (immediate) + run: | + kubectl -n flux-system annotate gitrepository flux-system \ + reconcile.fluxcd.io/requestedAt="$(date +%s)" --overwrite + kubectl -n flux-system annotate kustomization apps \ + reconcile.fluxcd.io/requestedAt="$(date +%s)" --overwrite + + - name: Wait for Flux to apply new supervisor image + run: | + EXPECTED="gitea.d-ma.be/mathias/supervisor:${{ github.sha }}" + for i in $(seq 1 60); do + CURRENT=$(kubectl get deploy supervisor -n supervisor \ + -o jsonpath='{.spec.template.spec.containers[0].image}' 2>/dev/null || echo "") + if [ "$CURRENT" = "$EXPECTED" ]; then + echo "✓ Flux applied supervisor image after ${i}s" + break + fi + sleep 1 + done + kubectl get deploy supervisor -n supervisor \ + -o jsonpath='{.spec.template.spec.containers[0].image}' \ + | grep -qx "$EXPECTED" \ + || { echo "✗ Flux did not apply supervisor image within 60s"; exit 1; } + + - name: Wait for Flux to apply new ingestion image + run: | + EXPECTED="gitea.d-ma.be/mathias/ingestion:${{ github.sha }}" + for i in $(seq 1 60); do + CURRENT=$(kubectl get deploy ingestion -n supervisor \ + -o jsonpath='{.spec.template.spec.containers[0].image}' 2>/dev/null || echo "") + if [ "$CURRENT" = "$EXPECTED" ]; then + echo "✓ Flux applied ingestion image after ${i}s" + break + fi + sleep 1 + done + kubectl get deploy ingestion -n supervisor \ + -o jsonpath='{.spec.template.spec.containers[0].image}' \ + | grep -qx "$EXPECTED" \ + || { echo "✗ Flux did not apply ingestion image within 60s"; exit 1; } + + - name: Verify supervisor rollout + run: | + kubectl rollout status deployment/supervisor \ + --namespace supervisor \ + --timeout=120s \ + || { + echo "── pod status ──" + kubectl get pods -n supervisor -o wide + echo "── events ──" + kubectl get events -n supervisor --sort-by='.lastTimestamp' | tail -20 + echo "── describe ──" + kubectl describe pods -n supervisor -l app=supervisor | tail -40 + exit 1 + } + + - name: Verify ingestion rollout + run: | + kubectl rollout status deployment/ingestion \ + --namespace supervisor \ + --timeout=120s \ + || { + echo "── pod status ──" + kubectl get pods -n supervisor -o wide + echo "── events ──" + kubectl get events -n supervisor --sort-by='.lastTimestamp' | tail -20 + echo "── describe ──" + kubectl describe pods -n supervisor -l app=ingestion | tail -40 + exit 1 + }