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(platform): merge-order-guard 를 pull_request_target 으로 옮겨 무관한 워크플로 이름 아래 뜨는 재게시 guard 를 없앤다 #1977
PR 체크 목록에 guard 가 두 줄로 뜬다. 하나는 merge-order-guard / guard (pull_request), 다른 하나는 Android Managed Device Test / guard — merge-order-guard 처럼 전혀 무관한 워크플로 이름 아래 붙는다. 같은 PR 에서 같은 질문(closing 이슈의 열린 blocked_by)을 두 번 판정하고, 두 번째 판정은 이름까지 잘못 붙어 읽는 사람을 헷갈리게 한다.
원인
#1955 가 낡은 브랜치의 inline 가드가 옛 정책으로 판정하는 문제를 두 단계로 풀었다. pull_request 이벤트로 PR 사본 YAML 이 한 번 돌고, refresh-merge-order-policy.yml 이 그 종료를 보고 default branch 의 최신 정책을 workflow_dispatch 로 다시 돌린 뒤 결과를 POST /check-runs 로 PR HEAD 에 게시한다. GITHUB_TOKEN 으로 만든 check-run 은 자기 run 에 속하지 않고 그 SHA 에 이미 있는 github-actions 앱의 check suite 중 하나에 임의로 얹히므로, UI 가 그 suite 의 워크플로 이름을 접두로 붙인다. 열린 PR 전량에서 같은 구조가 확인됐다(예: #1972 HEAD 의 guard 두 건, suite id 가 다르고 title 이 merge-order-guard 인 쪽이 /runs/… 게시본).
변경
merge-order-guard.yml 의 트리거를 pull_request 에서 pull_request_target 으로 바꾼다. 워크플로 YAML 과 sparse checkout 이 모두 base 의 것이므로 첫 판정부터 최신 정책이고, PR 이 가드를 고쳐 스스로 통과할 길도 사라진다. 이미 stack-integrity-notify.yml·merge-queue-dequeue.yml 이 같은 경계로 돈다. 권한은 read 그대로, PR 코드는 체크아웃하지 않는다.
재게시가 불필요해진 refresh-merge-order-policy.yml 을 걷어낸다.
선행 이슈 닫힘(issues)과 GITHUB_TOKEN 이 만든 baseline 커밋(screenshot-baseline-apply)의 dispatch 경로는 남긴다. 이벤트가 안 나는 SHA 에 판정을 붙일 다른 수단이 없고, 그 SHA 에는 다른 suite 가 없어 이름 혼동도 생기지 않는다.
정책 테스트(merge-order-guard-policy.test.mjs·remote-dev-workflows-policy.test.mjs)를 새 경계로 고친다.
완료 조건
PR push 뒤 guard 가 merge-order-guard / guard (pull_request_target) 한 줄로만 뜬다.
가드 정책이 바뀐 뒤 열린 채 남은 PR 도 다음 synchronize·edited 에서 최신 정책으로 판정된다.
선행 이슈가 닫히면 기다리던 PR 의 guard 가 초록으로 갱신된다(기존 동작 유지).
참고
근본 해법 후보였던 GitHub App 토큰 게시(전용 suite 생성)는 저장소에 App 자격이 없어 쓰지 않았다.
Activity
Merge pull request #1978 from Afternote/ci/1977