Skip to content

chore(ci): 네이티브 스택 미등록 의존 PR 을 merge-order-guard 경고로 드러낸다 #1474

Closed

Description

@OnlyReadOneBook

작업 유형

maintenance — CI·빌드·의존성·저장소 운영 유지보수

주 담당 모듈

platform — Android 앱·CI·빌드·릴리스·저장소 운영

개요

의존 PR 체인은 GitHub 네이티브 스택으로 묶는 것이 이 저장소 규약인데(#906), 묶지 않고 base 만 상위 브랜치로 지정한 PR 이 아무 신호 없이 지나간다. merge-order-guard 는 base 이름만 보고 «스택 PR» 이라 부를 뿐, 실제 등록 여부(stackEntry)는 보지 않는다.

merge-order-guard.yml:57

case "$BASE_REF" in
  develop|main) ;;
  *) stacked=1 ; echo "::warning::base 가 '$BASE_REF' — …" ;;
esac

그래서 미등록 PR 도 등록된 PR 과 똑같은 경고만 받는다. #1458 본문이 이미 그 수를 세어 두었다 — 열린 PR 35건 중 base 가 트렁크 아닌 5건, 그중 stackEntry == null 이 #1055·#1197·#1316. 여기에 #1464 가 더해졌다.

무엇을 놓치나

미등록이어도 머지 순서는 지켜진다 — 이 저장소가 delete_branch_on_merge: true 라 밑단이 머지되면 GitHub 이 위 칸의 base 를 develop 으로 이관한다. 그 이관의 근거가 스택 기능이 아니라 저장소 설정이라는 점이 요지다. 등록하지 않으면 다음을 못 얻는다.

  • PR 페이지 스택 맵 — 리뷰어가 체인 순서를 바로 보지 못한다
  • 밑단 머지 시 서버측 자동 rebase
  • gh stack merge 의 원자 머지

완료 조건

merge-order-guard 의 stacked=1 분기에서 stackEntry 를 조회해, base 가 트렁크가 아닌데 미등록이면 경고 한 줄을 더 남긴다.

entry=$(gh api graphql -f query='query($o:String!,$r:String!,$n:Int!){repository(owner:$o,name:$r){pullRequest(number:$n){stackEntry{position}}}}' \
  -f o="$owner" -f r="$repo" -F n="$PR_NUMBER" --jq '.data.repository.pullRequest.stackEntry')

merge-order-guard-policy.test.mjs 에 대응 정책 테스트를 함께 넣는다.

왜 error 가 아니라 warning 인가

CI 가 스스로 고칠 수 없는 게이트이기 때문이다. GraphQL Mutation 타입에 스택 관련 필드가 0건이고(PullRequestStack·PullRequestStackEntry 계열은 읽기 전용), 기존 열린 PR 을 묶는 경로는 gh stack submit 의 대화형 에디터에서 새 PR 을 전부 deselect 한 뒤 Ctrl+B 를 누르는 것뿐이다. Actions 가 대신 누를 수 없다.

error 로 올리면 사람이 터미널에서 등록할 때까지 red 가 수명 내내 남는데, 그것은 #1059 가 이 워크플로에서 이미 한 번 걷어낸 증상이다. 워크플로 주석이 그대로다.

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

막지 않는 규칙을 required 로 올리지 않는다는 뜻이지, 놓쳐도 된다는 뜻은 아니다 — 경고는 남긴다.

자식 이슈

No response

참고

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:platformCI·빌드·릴리스·저장소 운영 영역maintenanceCI·빌드·의존성·저장소 운영 유지보수

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions