Skip to content

fix(ci): base 와 충돌한 PR 은 pull_request CI 가 트리거되지 않아 최신 커밋이 미검증으로 방치 — 충돌 자동 감지·라벨 필요 #1028

Description

@OnlyReadOneBook

무엇이 문제인가

PR 이 base 와 충돌하면 그 PR 의 pull_request 워크플로가 트리거조차 되지 않는다. 실패하는 게 아니라 런이 생성되지 않아 gh pr checks 가 no checks reported 를 낸다. 저자도 리뷰어도 「CI 가 아직 안 끝났나」로 읽고 넘어가기 쉽고, 실제로는 최신 커밋이 한 번도 검증되지 않은 상태다.

원인은 GitHub 동작이다 — pull_request 이벤트는 base 와 head 를 합친 가상 머지 커밋(refs/pull/<N>/merge)에서 실행되는데, 충돌이면 GitHub 이 그 ref 를 만들지 못한다. 워크플로 설정으로는 우회할 수 없다(community discussion #26304).

실측 (2026-08-24)

머지 ref 가 옛 head 에 멈춰 있고, 그 시각이 마지막 워크플로 런 시각과 일치한다.

PR merge ref 의 head 쪽 부모 실제 head merge ref 시각 마지막 런
#947 fb489191 30ddbdd8 (08:05) 05:48:10 05:48:12
#954 0f0e2cfb a4cd6032 (07:53) 04:42:56 04:42:58
#925 96badbfd 2cdadede (08:10) 05:47:58 05:47

충돌이 없으면 merge ref 갱신 1~2초 뒤 런이 생긴다 — #988 05:58:27→:28, #961 07:03:46→:48, #990 07:40:43→:45.

대조군이 같은 브랜치 안에 있다. #904 는 9376bdf8(08:18)에 런이 0건이었다가, 3c1a3605(08:28)로 develop 을 병합하자 즉시 런 8개가 생겼다. #900 도 같다(08:24 런 0 → 08:26 병합 후 8건).

곁가지 신호로, 이 커밋들은 commits/<sha>/check-suites 에 app=github-actions 스위트가 아예 없다(sonarqubecloud·claude 두 개만 queued 로 남는다).

영향

조사 시점 열린 PR 중 충돌 상태가 7건, 그중 최신 커밋이 미검증인 것이 3건이었다(#954·#947·#925). develop 이 하루에도 여러 번 움직이는 지금 속도에서는 상시 발생한다.

실수 머지 위험은 없다 — 이중으로 막힌다.

  • mergeable_state=dirty 라 머지 버튼 자체가 잠긴다
  • 필수 체크 guard(ruleset required-checks (develop·main))도 pull_request 트리거라 함께 멈춰, 커밋 상태가 pending(total_count=0)이 된다

즉 고쳐야 할 것은 게이트가 아니라 가시성이다. 지금은 리뷰어가 no checks reported 를 볼 때마다 mergeable 을 직접 조회해야 원인을 안다.

제안 범위

  • develop 에 push 될 때(그리고 보조로 주기 실행) 열린 PR 전수의 mergeable 을 조회해, 충돌인 PR 에 conflict 라벨을 붙이고 해소되면 뗀다. 라벨은 새로 만들어야 한다.
  • 라벨을 처음 붙일 때만 코멘트를 남긴다 — 「base 와 충돌 상태라 CI 가 트리거되지 않는다. develop 을 병합하면 검증이 다시 돈다」. 매번 달면 소음이 된다.
  • mergeable 은 GitHub 이 비동기로 계산해 조회 직후 null 이 흔하다. null 이면 짧게 재조회하고, 끝내 null 이면 그 PR 은 건너뛴다(오탐이 라벨보다 나쁘다).
  • 스택 PR(base 가 feat/*)도 같은 규칙으로 본다 — base 가 develop 이 아닐 뿐 메커니즘은 같다.

완료 조건

  • 충돌 PR 에 conflict 라벨과 안내 코멘트가 1회 붙는다.
  • base 를 병합해 해소하면 다음 실행에서 라벨이 떨어진다.
  • mergeable=null 인 PR 에 라벨이 붙지 않는다.
  • 워크플로 자신은 충돌과 무관하게 돌아야 하므로 pull_request 트리거에 의존하지 않는다(push to develop · schedule).

관련

Activity

  1. OnlyReadOneBook commented on Aug 24, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    자동 트리거(push: develop · schedule)가 아직 열리지 않아 이 이슈의 완료 조건이 남아 있다 — PR #1036 은 수동 실행 전용으로 1단계만 넣었다. 후속 PR 이 트리거를 열면서 닫는다.

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

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions