Skip to content

Chore: 릴리즈 워크플로에 main 한정 + 태그/PyPI 가드 추가 - #166

Merged
roeniss merged 2 commits into
mainfrom
chore/cd-release-guards
May 10, 2026
Merged

roeniss merged 2 commits into
mainfrom
chore/cd-release-guards

Conversation

@roeniss

@roeniss roeniss commented May 10, 2026 •

Copy link
Copy Markdown
Owner

변경

수동 dispatch 자체는 유지(릴리즈는 사람이 명시적으로 트리거). 다만 사고 방지를 위해 잡 시작부에 다음 가드 3개를 추가:

  1. main 한정 — GITHUB_REF != refs/heads/main 이면 즉시 실패. dispatch 시 다른 브랜치를 선택해도 publish 막힘
  2. 태그 존재 — git tag --points-at HEAD 로 v* 태그 조회. 없으면 실패. setuptools-scm dev 버전이 PyPI 로 새는 사고 방지
  3. PyPI 중복 방지 — https://pypi.org/pypi/dhapi/<version>/json 으로 사전 조회. 200(이미 존재) 이면 실패, 404 면 진행

의도된 운영 흐름

  1. main 에 릴리즈 커밋 머지
  2. git tag vX.Y.Z <sha> && git push origin vX.Y.Z
  3. Actions 탭 → Run workflow (입력 없음)
  4. 가드 통과하면 PyPI 업로드

Test plan

  • main 이 아닌 브랜치에서 dispatch → "must be dispatched from 'main'" 으로 실패하는지
  • HEAD 에 태그 없는 main 에서 dispatch → "no version tag" 로 실패하는지
  • 이미 publish 된 버전 태그로 dispatch → "already published on PyPI" 로 실패하는지
  • 신규 태그(vX.Y.(Z+1)) 푸시 후 dispatch → 정상 빌드/배포되는지

roeniss added 2 commits May 10, 2026 22:11
- 수동 dispatch 는 유지하되 main 외 브랜치에서 실행되면 실패
- main HEAD 에 v* 태그 없으면 실패
- 해당 버전이 이미 PyPI 에 publish 됐으면 실패
- 실패 시 run 페이지 상단 Summary 에 "Release pre-flight FAILED" + Reason 표시
- 실패 스텝 이름이 항상 "Pre-flight checks" 하나로 일관되어 어떤 가드가 막혔는지 한 번에 파악 가능
- 성공 시 Summary 에 tag/version 기록
@roeniss
roeniss enabled auto-merge (squash) May 10, 2026 13:15
@roeniss
roeniss merged commit 0d5b756 into main May 10, 2026
1 check passed
@roeniss
roeniss deleted the chore/cd-release-guards branch May 10, 2026 13:16
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