Raxx · internal docs

internal · gated

RCA — queue-docker-smoke detect-changes fails: CI_COMMIT_BEFORE unset under set -eu

Incident ID: 2026-08-10-queue-docker-smoke-ci-commit-before-unset Date: 2026-08-10 Severity: SEV-3 (non-blocking degradation — not a required merge check; silently broken since introduction) Duration: N/A (latent defect, not a live outage — found during unrelated PR diagnosis, fixed same day as grooming) Blast radius: ci/woodpecker/pr/queue-docker-smoke on PR events targeting release/main where WP leaves CI_COMMIT_BEFORE unset (confirmed on cherry-pick/rebuild-style hotfix branches, e.g. #4442). No production traffic affected (CI-only, non-required check). Author: sre-agent

Summary

.woodpecker/queue-docker-smoke.yaml's detect-changes step referenced $CI_COMMIT_BEFORE under set -eu with no default expansion. The step already had fallback logic for the documented zero-SHA force-push case, but WP v3.16 can leave CI_COMMIT_BEFORE entirely unset (not zero-SHA) on some PR events — observed on hotfix/getraxx-restore-blr-disclaimers-4441 (PR #4442, base main) — and set -u aborts on an unset-variable reference before the existing fallback if can even evaluate it. The step failed deterministically (reproduced on two consecutive runs, 5096 and 5102) with /bin/sh: 58: CI_COMMIT_BEFORE: parameter not set. Not currently a required merge check, so it did not block #4442 or any other PR, but it was silently broken and would false-block if ever promoted to required. Fixed by guarding the reference with ${CI_COMMIT_BEFORE:-}, routing the unset case into the same existing HEAD~1 fallback used for the zero-SHA case.

Timeline (all times UTC)

Impact

What went well

What didn't go well

Root cause analysis

Detection

Resolution

Action items

# Action Owner Due Issue
1 Add a .woodpecker/*.yaml lint step that flags shell $VAR/${VAR} references to WP built-ins under set -eu/set -u without a ${VAR:-...} default guard, to catch this class of bug before merge sre-agent 2026-08-24 #4470
2 Weekly sweep of non-required-check failure rates across .woodpecker/*.yaml pipelines, to surface silently-broken-but-non-blocking steps before they're promoted to required or accumulate unnoticed sre-agent 2026-08-24 #4471

References