Skip to content

ci: 배포 판정 코멘트를 릴리스 PR 범위 산출로 대체한다 [base: develop] - #1074

Merged
OnlyReadOneBook merged 1 commit into
developfrom
ci/deployment-decision-release-pr
Aug 24, 2026
Merged

OnlyReadOneBook merged 1 commit into
developfrom
ci/deployment-decision-release-pr

Conversation

@OnlyReadOneBook

Copy link
Copy Markdown
Collaborator

변경 요약

deployment-decision.yml 은 develop 머지마다 이미 닫힌 PR 에 배포 판정을 코멘트했다. 판정은 쓰이지 않고 코멘트만 쌓이므로, 실제로 쓰이는 산출물(포함 이슈 목록)만 남겨 릴리스 PR 본문으로 옮긴다.

  • 트리거: develop 머지(closed) → 릴리스 PR opened/reopened/synchronize (branches: [main])
  • 산출: 머지된 PR 코멘트 → 릴리스 PR 본문의 ## 포함 이슈
  • 판정(decision/risk) 로직 제거
  • 이름이 내용과 어긋나지 않게 함께 이동 — deployment-decision.yml → release-scope.yml, evaluate-deployment-decision.mjs → render-release-scope.mjs, collect-deployment-decision-context.mjs → collect-release-scope-context.mjs

왜

판정이 상수였다. 최근 머지 PR 16건이 전부 QA 배포 권장 / 위험도 high 다. 원인은 평가 기준이 이 레포 구조에서 항상 참이기 때문이다 — HIGH_RISK_PATHS 의 (data|network|api)/ 와 build.gradle.kts 는 멀티모듈 구성상 거의 모든 PR 이 지나고, high 로 분기하면 decision 이 deploy 로 고정된다. hold 로 갈 수 있는 실질 경로는 변경 파일이 전부 문서·테스트인 경우뿐이다.

그 판정은 쓰이지 않았다. release-distribution 의 workflow_dispatch 실행은 8/3·8/4·8/23 3건뿐이고, 판정 코멘트가 31건 달린 8/24 에는 0건이다. 배포 시점은 릴리스 PR 을 여는 사람이 정하고 있다.

실제로 쓰인 건 포함 이슈 목록 하나다. #1025 본문이 그 값을 기준으로 썼다고 적고 있고, QA 포인트는 자동 생성분을 버리고 사람이 다시 썼다. 그 목록은 render-distribution-release-notes.sh 가 릴리스 노트로 렌더하는 필수 입력이라 비면 배포가 중단된다 — 그래서 산출은 유지하고 시점만 옮겼다.

8/24 하루 봇 코멘트 49건 중 31건이 이 워크플로였다.

검증

node --test .github/scripts/*.test.mjs — 99건 통과 (신규 render-release-scope.test.mjs 9건 포함).

실 API end-to-end 실측 — 릴리스 PR #1025 의 실제 본문과, 마지막 성공 배포(run 32728267120, 8/24 12:39) 이후 develop 에 머지된 PR 5건을 입력으로 파이프라인을 돌렸다.

확인 항목 결과
포함 이슈 재산출 - #506 / #618 / #702 / #725 / #923 으로 교체
사람이 쓴 QA 포인트 23줄 그대로 보존 (덮어쓰지 않음)
나머지 섹션 변경 요약·검증·시각 검증·리뷰어에게 전부 보존
섹션 내부 헤딩 없음 (extract_section awk 파싱과 호환)
이미 배포된 head alreadyDistributed: true, 누적 PR 0건으로 정확히 판정

collect-release-scope-context.mjs 를 실 토큰으로 #1025 에 직접 돌린 결과도 위와 일치한다.

시각 검증 — 워크플로·스크립트·README 만 바뀌어 Compose 렌더 변경이 없다. screenshot baseline 사이클 skip.

리뷰어에게

  • ## QA 포인트 는 비어 있을 때만 구성 PR 본문에서 모은 초안으로 채우고, 사람이 쓴 문장이 있으면 건드리지 않는다. 배포 게이트가 빈 섹션에서 exit 1 하므로 자리는 항상 만든다.
  • synchronize 를 포함해 head 가 움직일 때마다 다시 채운다. release: develop 누적 145커밋을 main 릴리스 후보로 반영 [base: main] #1025 가 리뷰어에게 남긴 "머지 직전 포함 이슈 목록을 한 번 더 대조해 주세요" 가 구조적으로 사라진다. 본문 편집은 코멘트와 달리 알림을 만들지 않는다.
  • security(ci): 외부 Actions 를 전부 commit SHA 로 고정한다 (closes 847) [base: ci/848-single-gate] #1039(외부 Actions SHA 고정)와 순서 주의 — 새 release-scope.yml 은 actions/checkout@v7·actions/github-script@v9 태그를 쓴다. 나중에 머지되는 쪽이 develop 를 병합하면서 맞추면 된다.
  • 이미 달린 판정 코멘트 31건은 그대로 남는다. 앞으로 생기지 않을 뿐이다.
  • 연결 이슈 없이 올린다 (봇 코멘트 정리 과정에서 나온 작업).

deployment-decision.yml 은 develop 머지마다 머지된(=닫힌) PR 에 판정을
코멘트했다. 최근 머지 PR 16건의 판정이 전부 `QA 배포 권장 / high` 로 같아
신호가 상수였고, 8/24 하루 봇 코멘트 49건 중 31건이 이 워크플로였다.

판정이 고정되는 원인은 평가 기준이 이 레포 구조에서 항상 참이기 때문이다.
HIGH_RISK_PATHS 의 `(data|network|api)/` 와 `build.gradle.kts` 는 멀티모듈
구성상 거의 모든 PR 이 지나고, high 로 분기하면 decision 이 `deploy` 로 고정된다.
`hold` 로 갈 수 있는 실질 경로는 변경 파일이 전부 문서·테스트인 경우뿐이다.

실제 배포 시점은 릴리스 PR(develop -> main)을 여는 사람이 정하고 있었다.
release-distribution 의 workflow_dispatch 실행은 8/3·8/4·8/23 3건뿐이고,
판정 코멘트가 31건 달린 8/24 에는 0건이다. 판정은 쓰이지 않았다.

실제로 쓰인 산출물은 포함 이슈 목록 하나다. #1025 본문이 그 값을 기준으로
쓰였다고 적고 있고, QA 포인트는 자동 생성분을 버리고 사람이 다시 썼다.
그 목록은 render-distribution-release-notes.sh 가 릴리스 노트로 렌더하는
필수 입력이라 비면 배포가 중단된다. 그래서 산출은 유지하고 시점만 옮긴다.

- 트리거: develop 머지(closed) -> 릴리스 PR opened/reopened/synchronize
- 산출: 머지된 PR 코멘트 -> 릴리스 PR 본문의 `## 포함 이슈`
- `## QA 포인트` 는 비어 있을 때만 초안을 채우고 사람이 쓴 문장은 보존한다
  (배포 게이트가 빈 섹션에서 실패하므로 자리는 항상 만든다)
- 판정(decision/risk) 로직 제거

synchronize 를 포함해 head 가 움직일 때마다 다시 채우므로, #1025 가 리뷰어에게
남긴 "머지 직전 포함 이슈 목록 재대조" 가 필요 없어진다. 본문 편집은 코멘트와
달리 알림을 만들지 않는다.

이름이 내용과 어긋나지 않도록 함께 옮겼다.
- deployment-decision.yml -> release-scope.yml
- evaluate-deployment-decision.mjs -> render-release-scope.mjs
- collect-deployment-decision-context.mjs -> collect-release-scope-context.mjs
@OnlyReadOneBook
OnlyReadOneBook merged commit 8c99e3e into develop Aug 24, 2026
13 checks passed
@OnlyReadOneBook
OnlyReadOneBook deleted the ci/deployment-decision-release-pr branch August 24, 2026 14:33
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.

1 participant