From 2ebb68d18a1edbab04d18e9e8de4b7689c72b54f Mon Sep 17 00:00:00 2001 From: Tanner Wright Date: Sun, 24 May 2026 14:40:46 -0600 Subject: [PATCH] feat: stream build logs, trigger argocd refresh, watch rollout --- .gitea/actions/kaniko-build/build.sh | 41 ++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/.gitea/actions/kaniko-build/build.sh b/.gitea/actions/kaniko-build/build.sh index c0e42cd..d89ccab 100644 --- a/.gitea/actions/kaniko-build/build.sh +++ b/.gitea/actions/kaniko-build/build.sh @@ -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 - </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