Skip to content

ci(merge-order-guard): 스택 PR 의 blocked_by 위반을 주석대로 경고로 낮춘다 [base: develop] - #1159

Merged
OnlyReadOneBook merged 1 commit into
developfrom
ci/merge-order-guard-stack-warning
Aug 26, 2026
Merged

OnlyReadOneBook merged 1 commit into
developfrom
ci/merge-order-guard-stack-warning

Conversation

@OnlyReadOneBook

@OnlyReadOneBook OnlyReadOneBook commented Aug 25, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #1059

문제

merge-order-guard.yml 주석은 이미 이렇게 적혀 있다.

실패로 올리면 스택 PR 이 수명 내내 X 로 남아 목록에서 진짜 CI 실패와 구분되지 않으므로 경고로만 남긴다.

그런데 코드는 그 의도를 구현하지 않았다. case "$BASE_REF" 로 경고 한 줄을 찍기만 하고, 이어지는 blocked_by 검사는 base 와 무관하게 그대로 돌아 fail=1 을 만든다.

실제 피해자가 #863 이다. base 가 feat/735 인 스택 PR 인데, 부모 이슈 #735 가 열려 있다는 이유만으로 required check 인 guard 가 수명 내내 red 다. 주석이 막으려던 상태가 그대로 벌어졌다.

변경

stacked 플래그를 세워, blocked_by 위반을 만났을 때 스택 PR 이면 ::warning::, base 가 develop/main 이면 종전대로 ::error:: + fail=1.

스택 PR 은 develop 로 직접 머지되지 않는다. base 가 develop 로 이관되는 순간 이 가드가 다시 돌아 error 로 막으므로, 순서 강제력은 그대로다.

검증

가드 스크립트를 워크플로에서 떼어내 gh 를 스텁으로 갈아끼우고 base 별로 실행했다 (closing 이슈 #849 → 열린 blocker #735 시나리오):

base exit 출력
feat/735 0 warning 2건
develop 1 error 1건
main 1 error 1건
other/x 0 warning 2건
  • YAML 파싱 OK
  • bash -n (가드 run 스크립트) OK
  • node --test .github/scripts/lint-workflow-policy.test.mjs → 6 pass / 0 fail

리뷰어에게

가드 주석은 「base 가 develop/main 이 아닌 스택 PR 은 경고로만 남긴다」 고 이미
명시하고 있었다. 그런데 코드는 base 를 보고 경고 한 줄을 찍은 뒤, blocked_by
검사는 base 와 무관하게 그대로 돌려 `fail=1` 을 만들었다. 주석이 서술한 의도가
구현되지 않은 채로 남아 있었다.

그 결과가 #863 이다. base 가 `feat/735` 인 스택 PR 인데, 부모 이슈 #735 가 열려
있다는 이유로 required check 인 `guard` 가 수명 내내 red 다. 주석이 막으려던
바로 그 상태 — 「목록에서 진짜 CI 실패와 구분되지 않는다」 — 가 실제로 벌어졌다.

스택 PR 은 develop 로 직접 머지되지 않는다. base 가 develop 로 이관되는 순간
이 가드가 다시 돌아 error 로 막으므로, 경고로 낮춰도 순서 강제력은 그대로다.

실측 (가드 스크립트를 떼어내 `gh` 스텁으로 분기별 실행):

  base=feat/735 → exit 0, warning 2건
  base=develop  → exit 1, error 1건
  base=main     → exit 1, error 1건
@OnlyReadOneBook
OnlyReadOneBook merged commit c2b8512 into develop Aug 26, 2026
18 checks passed
@OnlyReadOneBook
OnlyReadOneBook deleted the ci/merge-order-guard-stack-warning branch August 26, 2026 08:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(ci): merge-order-guard 가 스택 PR 을 수명 내내 red 로 남긴다 — blocker 를 base 브랜치가 닫는 경우

2 participants