You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ci: PR 검증을 단일 required gate로 묶고 stale run을 자동 취소 #848
active ruleset required-checks (develop·main)은 현재 guard context 하나만 요구한다. #683에서 PR base 전환 시 검증이 0건이던 trigger 문제는 고쳤지만 lint·unit-test·screenshot은 여전히 merge를 막는 required check가 아니다. 이 job들에는 PR concurrency도 없어 새 commit 뒤 오래된 실행이 계속 돈다.
Hampouch-Server의 final aggregate job 패턴을 적용해 ruleset이 workflow/job 이름 변화에 덜 취약한 canonical gate를 제공한다.
merge-order-guard 는 이번에 제외했다. 같은 파일을 고치는 #999 가 열려 있어 충돌한다. 실측 0분 job 이라 concurrency 이득도 미미하다. #999 머지 뒤 후속으로 건다 — 이 job 은 pull_request 와 issues 두 이벤트를 받으므로 group 에 github.event.issue.number 를 포함하고 cancel-in-progress 를 ${{ github.event_name == 'pull_request' }} 로 둬야 한다. issues 이벤트의 refresh job 은 다른 PR 들의 guard 를 재실행하는 중이라 취소되면 대상이 통째로 누락된다.
이름이 바뀐 5종을 ci-gate 하나로 접었다. CodeQL 2종은 이 PR 범위 밖이지만 원래 required 였고 이름도 안 바뀌어 그대로 뒀다 — 여기서 빼면 전환을 핑계로 게이트가 줄어든다.
순서를 뒤집어야 했다
PR 본문은 "머지 직후 ruleset 을 갱신" 하라고 적었지만 그 순서로는 진행할 수 없었다. 검증 워크플로가 workflow_call 로 바뀌면서 체크 이름이 Unit Test / Run Unit Tests 형태가 됐고, ruleset 이 요구하던 옛 이름 5종은 #1038 에 영영 도착하지 않는다. 체크 14개가 전부 SUCCESS 인데 mergeStateStatus: BLOCKED 로 굳은 상태였다.
ci-gate 는 #1038 이 이미 SUCCESS 로 내고 있었으므로, required 를 먼저 새 구성으로 바꾸자 그 자리에서 CLEAN 이 됐고 그대로 머지했다.
게이트가 실제로 막는지 실측
의도적 실패를 만드는 대신, 전환 자체가 그 실험이 됐다.
막는다 — 전환 직후 열린 PR 23건이 전부 BLOCKED. 옛 이름 체크만 green 이고 ci-gate 가 없기 때문이다. required 가 이름만 걸어 두고 새는 상태가 아니라는 뜻이다.
Activity
1hyok commentedon Aug 24, 2026
concurrency 항목만 #1000 에서 이행했다 (lint · unit-test · screenshot). 이 이슈는 닫지 않는다.
남은 범위
if: always()로 선행 job conclusion 명시 검사)merge-order-guard 는 이번에 제외했다. 같은 파일을 고치는 #999 가 열려 있어 충돌한다. 실측 0분 job 이라 concurrency 이득도 미미하다. #999 머지 뒤 후속으로 건다 — 이 job 은
pull_request와issues두 이벤트를 받으므로 group 에github.event.issue.number를 포함하고cancel-in-progress를${{ github.event_name == 'pull_request' }}로 둬야 한다. issues 이벤트의refreshjob 은 다른 PR 들의 guard 를 재실행하는 중이라 취소되면 대상이 통째로 누락된다.1hyok commentedon Aug 25, 2026
ruleset 전환 완료 — required 를
ci-gate로 옮겼다 (0825)#1038 머지와 함께 ruleset 20911039 의 required_status_checks 를 교체했다.
guard,Run Unit Tests,Check Code Quality (Ktlint),Check Project Issues (Android Lint),Validate Compose Preview Screenshots,Repository Quality,Analyze (java-kotlin),Analyze (actions)guard,ci-gate,Analyze (java-kotlin),Analyze (actions)이름이 바뀐 5종을
ci-gate하나로 접었다. CodeQL 2종은 이 PR 범위 밖이지만 원래 required 였고 이름도 안 바뀌어 그대로 뒀다 — 여기서 빼면 전환을 핑계로 게이트가 줄어든다.순서를 뒤집어야 했다
PR 본문은 "머지 직후 ruleset 을 갱신" 하라고 적었지만 그 순서로는 진행할 수 없었다. 검증 워크플로가
workflow_call로 바뀌면서 체크 이름이Unit Test / Run Unit Tests형태가 됐고, ruleset 이 요구하던 옛 이름 5종은 #1038 에 영영 도착하지 않는다. 체크 14개가 전부 SUCCESS 인데mergeStateStatus: BLOCKED로 굳은 상태였다.ci-gate는 #1038 이 이미 SUCCESS 로 내고 있었으므로, required 를 먼저 새 구성으로 바꾸자 그 자리에서 CLEAN 이 됐고 그대로 머지했다.게이트가 실제로 막는지 실측
의도적 실패를 만드는 대신, 전환 자체가 그 실험이 됐다.
BLOCKED. 옛 이름 체크만 green 이고ci-gate가 없기 때문이다. required 가 이름만 걸어 두고 새는 상태가 아니라는 뜻이다.update-branch) 새 진입점으로 다시 돌렸더니ci-gate=SUCCESS가 도착하고 required 4종이 모두 green 이 됐다. (이 PR 이 아직 BLOCKED 인 건 별개 ruleset 21304258 의 승인 1건이 남아서다.)pr-validation.yml이 없어도 merge ref 에 develop 의 워크플로가 들어와 그대로 실행됐다.열린 PR 에 필요한 조치
ci-gate는 새 이벤트가 있어야 생성된다. 지금 열려 있는 PR 은 develop 을 받거나 새 커밋을 올려야 게이트가 도착한다 — 그 전까지는 체크가 전부 초록이어도 BLOCKED 로 남는다.되돌리려면 백업해 둔 옛 required 목록으로 같은 ruleset 을 PUT 하면 된다.