fix(ci): coalesce superseded Docker PR image validations - #1592
fix(ci): coalesce superseded Docker PR image validations#1592seonghobae wants to merge 5 commits into
Conversation
Bandit already has an owner PR. Docker publish still queued a new image-validation run for every PR event with no workflow-level group. Cancel only pull_request runs so tag publication is not discarded. Signed-off-by: Seongho Bae <me@seonghobae.me>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (3)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe Docker publish workflow adds event-aware concurrency groups. First-attempt pull request runs can cancel older runs, while reruns and tag publications use independent groups. Two tests verify the workflow configuration. ChangesDocker publish concurrency
Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: ⚪ Minimal · up to Docker PR validations now cancel superseded first attempts without interrupting manual reruns, while tag image publication remains non-cancellable. The intended behavior is covered by regression tests, with no active merge-blocking risk identified. 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai review Current exact head: |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
base='042b0c70531b229af3acbd0421a2f23098d848b3'
head='b2ee42b6e9286aac4b908a644f472c71d9ccc2a6'
echo '== Exact changed files =='
git diff --name-status "$base" "$head"
echo '== Exact patch =='
git diff --no-ext-diff --unified=80 "$base" "$head" -- \
.github/workflows/docker-publish.yml \
backend/tests/test_docker_workflow_concurrency.py \
backend/tests/test_release_governance.py
echo '== Workflow outline =='
ast-grep outline .github/workflows/docker-publish.yml --items all || true
echo '== Workflow contents =='
cat -n .github/workflows/docker-publish.yml
echo '== Relevant test definitions and context =='
rg -n -C 12 \
'test_docker_pr_concurrency_isolates_reruns_from_first_attempts|test_docker_publish_validates_pr_images_and_publishes_semver_images_only_on_tags|docker-publish|concurrency|run_attempt|cancel-in-progress' \
backend/tests/test_docker_workflow_concurrency.py \
backend/tests/test_release_governance.pyLength of output: 53744
I found no review findings. The workflow group separates first-attempt PR runs from manual reruns. First attempts for the same repository and pull request use Tag pushes include
|
|
승계 검증 결과: #1600의 02dd5747ba4bf110a2a148deb532442ce5eb0694는 동시 실행 변경을 이 canonical lane으로 돌리기 위해 제거했습니다. 현재 #1592 b2ee42b6e9286aac4b908a644f472c71d9ccc2a6의 실제 diff와 비교하면 PR first-attempt 취소와 의도적 rerun 격리는 구현되어 있으나, a10d180384133217ec5891802772ea5ac9233ead의 release destination 직렬화 및 pending 보존 계약은 아직 승계되지 않았습니다. 현재 tag group은 ref/run_id별로 달라 동일 GHCR/AKS 대상의 여러 release가 병렬 실행될 수 있습니다. 승인된 기존 head를 덮어쓰지 않고 후속 canonical 수정에서 이 차이를 해결해야 합니다. Native queue max는 pending 100개 한도이며 actionlint 1.7.12는 해당 키를 지원하지 않습니다. 따라서 lint 예외, unmerged 도구 채택 또는 단순 queue 생략으로 완료 처리하지 않습니다. 기존 PR rerun 의도 보존은 별도로 유지·검증해야 합니다. #1600의 이전 group admission 증거는 현재 #1592 실행 증거로 전용할 수 없습니다. 이 댓글은 병합 승인이나 배포 성공 증거가 아닙니다. |
|
누락된 release 직렬화·pending 보존의 실행 가능한 후속 수리는 #1605@174746e2f72fcd684d29c3260d36e9ad26634159에 올렸습니다. 이 PR의 b2ee 승인 head는 변경하지 않았고, 기존 수동 rerun 격리를 유지합니다. main 독립 37 tests 및 공식 expression evaluator 통과. actionlint queue 미지원은 미해결로 공개했으며 우회하지 않았습니다. #1605는 이 브랜치를 base로 한 Draft이고, #1600에 중복 복원하지 않습니다. |
|
Current-head evidence
Keep the gate blocked until authenticated exact-head compatibility evidence is available. No blind rerun, gate weakening, review dismissal, or bypass. |
|
#1621 has been repaired into a Draft descendant of this exact owner head Current #1621 head: Effective delta against #1592 is now exactly two files: The #1621 remains Draft and must not merge ahead of this prerequisite. After #1592 normally integrates, restack/retarget #1621 and regenerate exact-head checks/review; no predecessor evidence transfers. |
Goal
docker-publish.yml의 PR validation queue를 coalesce하되, 새 PR event가 사용자가 의도적으로 재실행한 older-head run을 취소하지 않도록 generation identity를 분리합니다. Tag publication은 계속 non-cancellable입니다.Current authority
develop@042b0c70531b229af3acbd0421a2f23098d848b3b2ee42b6e9286aac4b908a644f472c71d9ccc2a6.github/workflows/docker-publish.yml,backend/tests/test_release_governance.py,backend/tests/test_docker_workflow_concurrency.pyReview → RED → repair
Original head
1963c8c01407565df5db615692473c67e5f93a32grouped every pull-request run only by PR number. That coalesces superseded first-attempt runs, but it also places a manual rerun of an older head in the same cancellation group as a later PR event.8ef19470fa2af62b05f4920ecc4db0a9e3cf1bf6added a focused regression requiring reruns to have a distinct concurrency generation from first-attempt PR validation.54b09513908b07cbbb72628d0057eaa6afb8bb6eadopted the already-established Banditrun_attempt/run_idisolation pattern.54b095...reproduced a separate contract mismatch: backend lint passed, but the full backend suite ended 1 failed / 1807 passed / 32 skipped becausetest_release_governance.pystill asserted the original coarse Docker group string. This was treated as a real RED rather than bypassed.145e8b2134d3b6a5c642cb76a18858583337da79refined the focused regression so the existing release-governance scope remains meaningful while a new test proves the bare PR-only cancellation group cannot return.b2ee42b6e9286aac4b908a644f472c71d9ccc2a6uses a PR/ref scope plus a generation suffix: first-attempt PR runs sharefirst-attempt; manual reruns use their stablegithub.run_id. New PR events therefore supersede only first attempts. Tag pushes also get a unique run identity whilecancel-in-progressremains false for push events.Current workflow contract:
This PR does not change Bandit ownership (#1554), PR Governance (#1589), deploy semantics, image content, release tag publication, or canonical
.githubCodeQL control-plane behavior.Exact-head evidence
For unchanged
b2ee42b6...the repository-owned validation is terminal:34157349525— success. Backend lint/full tests passed; frontend tests, lint, build, and full-product Playwright smoke also passed.34157349506— success.34157349569— success.34157349508— success.34157349758— success. Requiredvalidate backend image,validate frontend image, andvalidate naruon imagejobs all completed successfully without publishing PR images.34157349575— failure at the existing canonical terminal-verdict bridge. This is not treated as a demonstrated Naruon source-analysis finding. The central owner remainsContextualWisdomLab/.github#1929; related dispatcher-identity evidence is also tracked in.github#1927. Naruon does not synthesize status, widen central authorization, copy the control plane, or weaken the required context.CodeRabbit submitted formal APPROVED review
PRR_kwDOSNjZ2s8AAAABMhQnlgat2026-09-07T20:43:05Zon this unchanged exact head. Fresh inline review-thread inventory is empty. The independent-review requirement is therefore satisfied for this exact head, but it does not override a failed protected required context.Merge boundary
Merge only when this unchanged exact head has every then-live protected repository/organization required context terminal-success, zero valid unresolved findings/threads, and qualifying post-last-push independent approval. Failed, queued, pending, skipped-required, absent, stale, predecessor, status-only, or author-side evidence is non-passing.
No force-push, destructive rebase, self-approval, dummy/no-op requeue commit, review fabrication/dismissal, central authorization widening from Naruon, synthetic status, or gate weakening.