diff --git a/.gitea/workflows/build-deploy.yaml b/.gitea/workflows/build-deploy.yaml index 09ab82b..ea918ac 100644 --- a/.gitea/workflows/build-deploy.yaml +++ b/.gitea/workflows/build-deploy.yaml @@ -44,6 +44,33 @@ jobs: echo "IMAGE_TAG=${TAG}" >> "$GITHUB_ENV" echo "Build tag: ${TAG}" + - name: Define job waiter + shell: sh + run: | + # wait_for_job : exit 0 on Complete, exit 1 (with kaniko logs) on Failed/timeout + cat > wait_for_job.sh <<'ENDSCRIPT' + #!/bin/sh + JOB="$1" + DEADLINE=$(( $(date +%s) + 2400 )) + while :; do + CONDS="$(kubectl -n ${BUILD_NS} get job/${JOB} -o jsonpath='{range .status.conditions[*]}{.type}={.status} {end}' 2>/dev/null)" + case "$CONDS" in + *Complete=True*) echo "Job ${JOB} completed"; exit 0 ;; + *Failed=True*) + echo "Job ${JOB} FAILED — kaniko logs:" + kubectl -n ${BUILD_NS} logs job/${JOB} -c kaniko --tail=100 || true + exit 1 ;; + esac + if [ "$(date +%s)" -gt "$DEADLINE" ]; then + echo "Timed out waiting for job ${JOB} — kaniko logs:" + kubectl -n ${BUILD_NS} logs job/${JOB} -c kaniko --tail=100 || true + exit 1 + fi + sleep 15 + done + ENDSCRIPT + chmod +x wait_for_job.sh + - name: Build backend image (Kaniko Job) shell: sh run: | @@ -55,7 +82,7 @@ jobs: name: ${JOB_NAME} namespace: ${BUILD_NS} spec: - ttlSecondsAfterFinished: 600 + ttlSecondsAfterFinished: 3600 backoffLimit: 0 template: spec: @@ -104,11 +131,7 @@ jobs: path: config.json ENDJOB echo "Waiting for backend build job: ${JOB_NAME}" - if ! kubectl -n ${BUILD_NS} wait --for=condition=complete job/${JOB_NAME} --timeout=40m; then - echo "--- kaniko logs (tail) ---" - kubectl -n ${BUILD_NS} logs job/${JOB_NAME} -c kaniko --tail=100 || true - exit 1 - fi + ./wait_for_job.sh "${JOB_NAME}" echo "Backend build done" - name: Build frontend image (Kaniko Job) @@ -122,7 +145,7 @@ jobs: name: ${JOB_NAME} namespace: ${BUILD_NS} spec: - ttlSecondsAfterFinished: 600 + ttlSecondsAfterFinished: 3600 backoffLimit: 0 template: spec: @@ -168,11 +191,7 @@ jobs: path: config.json ENDJOB echo "Waiting for frontend build job: ${JOB_NAME}" - if ! kubectl -n ${BUILD_NS} wait --for=condition=complete job/${JOB_NAME} --timeout=40m; then - echo "--- kaniko logs (tail) ---" - kubectl -n ${BUILD_NS} logs job/${JOB_NAME} -c kaniko --tail=100 || true - exit 1 - fi + ./wait_for_job.sh "${JOB_NAME}" echo "Frontend build done" - name: Update GitOps repo and push