ci: add environment gate and Flux rollout verification to cd pipeline
Aligns hyperguild's cd.yml with the cobalt-dingo reference pattern: - Add environment: staging to the deploy job - Add Flux reconcile trigger after infra repo push - Add polling wait for supervisor and ingestion image tags to propagate - Add rollout status verification for both deployments with failure diagnostics (pod status, events, describe)
This commit is contained in:
@@ -11,6 +11,7 @@ jobs:
|
|||||||
name: Build and deploy
|
name: Build and deploy
|
||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' }}
|
if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' }}
|
||||||
|
environment: staging
|
||||||
env:
|
env:
|
||||||
SERVICE: supervisor
|
SERVICE: supervisor
|
||||||
IMAGE: gitea.d-ma.be/mathias/supervisor
|
IMAGE: gitea.d-ma.be/mathias/supervisor
|
||||||
@@ -119,3 +120,74 @@ jobs:
|
|||||||
git push
|
git push
|
||||||
|
|
||||||
echo "Infra repo updated: ${SERVICE}+ingestion → ${IMAGE_TAG}"
|
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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user