Skip to content

열린 PR 끼리 겹치는 충돌을 머지 전에 라벨로 알린다 — 형제 충돌 자동 경고 #1750

Closed

Description

@OnlyReadOneBook

작업 유형

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

주 담당 모듈

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

개요

문제. 열린 PR 두 개가 같은 파일을 서로 다르게 고쳐도, 한쪽이 머지되기 전까지는 어디서도 신호가 나지 않는다.

실사례: #1640 과 #1608 이 AfternoteHomeScreen.kt 의 같은 when 을 서로 다른 방향으로 재구성한다. 0830 에 손으로 git merge-tree 를 돌려 #1640 에만 코멘트로 남겼다(#1640 (comment)). 한쪽 PR 에만 달렸고, 한 번 돌린 결과라 다음 날 #1546 머지로 이미 낡았고, 다음 사람이 기억해야만 작동한다.

변경. conflict-label 리컨사일러에 형제 충돌 스윕을 붙인다. 차단이 아니라 경고다.

  • 열린 PR 쌍마다 git merge-tree --write-tree 로 두 head 를 합쳤을 때의 충돌 파일을 구하고, 그중 두 PR 의 자기 커밋이 모두 고친 파일 만 남긴다. 한쪽만 고친 파일에서 난 충돌은 상대가 품고 있는 develop 커밋과의 충돌이라 conflict 라벨 몫이다.
  • 스택 PR 의 «자기 커밋» 은 부모 PR head 부터의 diff 다. 부모 체인이 같은 상대와 이미 부딪히는 파일은 자식에서 빼서 충돌을 체인의 가장 아래 PR 한 곳에 귀속시킨다. 같은 체인 안의 두 PR 은 비교하지 않는다.
  • 결과는 양쪽 PR 에 sibling-conflict 라벨과 상대 PR 번호·충돌 파일을 적은 마커 코멘트로 남긴다. 코멘트는 PR 당 하나를 매 실행 현재 상태로 고쳐 쓰고, 해소되면 라벨을 떼며 코멘트를 «해소됨» 으로 바꾼다. job summary 에 현재 쌍 전체를 적는다.
  • 실행 시점은 conflict-label 과 같다(develop push · PR Validation 요청 · 매시 · dispatch).

차단으로 올리지 않는 이유: 둘 다 옳은 PR 이라 어느 쪽을 red 로 만들지 tiebreaker 가 필요한데, «나중 번호가 앞 번호에 스택한다» 는 나중 PR 이 이미 다른 스택에 있으면 쓸 수 없다(#1640 이 그 경우다). 작성자가 손쓸 수 없는 red 는 #1059 가 걷어낸 «수명 내내 red» 다. 머지 시점의 차단은 GitHub 이 이미 한다.

완료 조건.

참고

Activity

  1. added
    maintenanceCI·빌드·의존성·저장소 운영 유지보수
    area:platformCI·빌드·릴리스·저장소 운영 영역
    on Sep 2, 2026
  2. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    and removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 2, 2026
  3. added a commit that references this issue on Sep 6, 2026
  4. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 6, 2026
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