feat: stream build logs, trigger argocd refresh, watch rollout

This commit is contained in:
Tanner Wright
2026-05-24 14:40:46 -06:00
parent 7f9ca156b0
commit 2ebb68d18a
+35 -6
View File
@@ -4,6 +4,7 @@ set -e
IMAGE=${IMAGE:-$REPO}
JOB_SAFE=$(echo "${IMAGE}" | tr '_' '-')
JOB_NAME="build-${JOB_SAFE}-${GITHUB_SHA:0:8}"
APP_DIR="${JOB_SAFE}"
kubectl apply -f - <<EOF
apiVersion: batch/v1
@@ -63,26 +64,41 @@ spec:
restartPolicy: Never
EOF
echo "Waiting for ${JOB_NAME}..."
# Wait for the build pod to be scheduled
echo "=== Waiting for build pod ==="
until POD=$(kubectl get pods -n gitea-runner -l job-name=${JOB_NAME} -o jsonpath='{.items[0].metadata.name}' 2>/dev/null) && [ -n "$POD" ]; do
sleep 1
done
# Stream git-clone initContainer logs (blocks until container exits)
echo "=== Cloning repository ==="
kubectl logs -n gitea-runner ${POD} -c git-clone -f --pod-running-timeout=60s 2>/dev/null || true
# Stream kaniko logs in background while polling for job completion
echo "=== Building image ==="
kubectl logs -n gitea-runner ${POD} -c kaniko -f --pod-running-timeout=120s 2>/dev/null &
LOG_PID=$!
while true; do
COMPLETE=$(kubectl get job ${JOB_NAME} -n gitea-runner -o jsonpath='{.status.completionTime}' 2>/dev/null)
FAILED=$(kubectl get job ${JOB_NAME} -n gitea-runner -o jsonpath='{.status.failed}' 2>/dev/null)
if [ -n "$COMPLETE" ]; then
wait ${LOG_PID} 2>/dev/null || true
echo "Build succeeded"
kubectl delete job ${JOB_NAME} -n gitea-runner --ignore-not-found
break
fi
if [ "${FAILED:-0}" -ge 1 ]; then
echo "Build failed, logs:"
kubectl logs -n gitea-runner -l job-name=${JOB_NAME} -c kaniko --tail=100 || true
kill ${LOG_PID} 2>/dev/null || true
echo "Build failed"
kubectl delete job ${JOB_NAME} -n gitea-runner --ignore-not-found
exit 1
fi
sleep 15
sleep 5
done
# Update k8s manifests so ArgoCD picks up the new image
APP_DIR=$(echo "${IMAGE}" | tr '_' '-')
# Update k8s manifests
echo "=== Updating manifests ==="
K8S_DIR=$(mktemp -d)
git clone --depth=1 "https://${GIT_USERNAME}:${GITEA_TOKEN}@gitea.saltysoup.dev/tanner/k8s.git" "${K8S_DIR}"
sed -i "s|gitea.saltysoup.dev/tanner/${IMAGE}:.*|gitea.saltysoup.dev/tanner/${IMAGE}:${GITHUB_SHA}|g" \
@@ -93,3 +109,16 @@ git -C "${K8S_DIR}" add "apps/${APP_DIR}/deployment.yaml"
git -C "${K8S_DIR}" commit -m "ci: ${IMAGE}${GITHUB_SHA:0:8}"
git -C "${K8S_DIR}" push
rm -rf "${K8S_DIR}"
# Trigger ArgoCD refresh immediately
echo "=== Triggering deploy ==="
kubectl annotate application ${APP_DIR} -n argocd argocd.argoproj.io/refresh=normal --overwrite
# Wait for ArgoCD to apply the new image SHA to the deployment spec
until kubectl get deployment ${APP_DIR} -n hungry -o jsonpath='{.spec.template.spec.containers[0].image}' 2>/dev/null | grep -q "${GITHUB_SHA}"; do
sleep 3
done
# Watch the rollout to completion
echo "=== Watching rollout ==="
kubectl rollout status deployment/${APP_DIR} -n hungry --timeout=5m