사용 시기
이 스킬은 gentle-pi 릴리스를 준비, 게시 또는 검증할 때 사용합니다.
엄격한 규칙
- 로컬 머신에서
gentle-pi를 npm에 게시하지 마십시오. - npm 게시는 반드시 GitHub Actions 워크플로우
.github/workflows/publish.yml을 통해 이루어져야 하며, 증명, 환경 보호, 레지스트리 자격 증명이 GitHub에 의해 제어됩니다. - 보호된 기본
main브랜치에서 신뢰할 수 있는 워크플로우 정의를 디스패치하고, 릴리스 태그에서는 절대 디스패치하지 마십시오. 유일한 호출 입력은 정확한 주석 버전 태그입니다. - 릴리스 커밋에는 깨끗한 작업 트리를 사용하십시오. 관련 없는 로컬 파일이나 임시 아티팩트를 패키징하지 마십시오.
- 검토 결과는 정보 제공용입니다. 릴리스 전달은 일반 저장소 정책을 따르며 RDD에 의해 차단, 승인 또는 재작성되어서는 안 됩니다.
- 릴리스 태그 대상을 로컬
HEAD에서 추론하지 마십시오. 새로 가져온origin/main커밋과 저장소의 일반 릴리스 안전장치를 사용하십시오. - 패키지 검증을 절대 건너뛰지 마십시오. 게시 워크플로우에서 다시 검증을 수행하지만, 태깅 전에 로컬 검증도 통과해야 합니다.
릴리스 절차
-
상태 확인
git status --short git fetch origin main --tags git log --oneline --decorate --max-count=5 origin/main -
릴리스 커밋 준비
- 의도된 변경 사항만 적용합니다.
package.json의 버전을 다음 semver 버전으로 올립니다.- 종속성 해석이 실제로 변경되지 않았다면 lockfile 변경 사항은 제외합니다.
-
로컬에서 검증
pnpm test node scripts/verify-package-files.mjs npm pack --dry-runnpm pack --dry-run은 게시 경로에 진입하지 않고 패키지 내용과 라이프사이클 스크립트를 검증합니다. -
커밋 및 푸시
git add <의도된-파일들> git commit -m "<type(scope): release-ready change>" git push origin HEAD:main git fetch origin main --tags -
정확한 버전 태그 생성 및 검증
version="$(node -p "require('./package.json').version")" tag="v${version}" release_sha="$(git rev-parse 'origin/main^{commit}')" test "$(git rev-parse 'HEAD^{commit}')" = "${release_sha}" test -z "$(git ls-remote --tags origin "refs/tags/${tag}")" git tag -a "${tag}" "${release_sha}" -m "gentle-pi ${tag}" test "$(git rev-parse "${tag}^{commit}")" = "${release_sha}" git fetch origin main test "$(git rev-parse 'origin/main^{commit}')" = "${release_sha}" git push origin "refs/tags/${tag}" git fetch --no-tags origin "refs/tags/${tag}" test "$(git rev-parse 'FETCH_HEAD^{commit}')" = "${release_sha}" gh release create "${tag}" \ --repo Gentleman-Programming/gentle-pi \ --verify-tag \ --title "gentle-pi ${tag}" \ --notes "<릴리스 노트>"기존 버전을 다시 태깅하거나 덮어쓰지 마십시오. 태그 대상은 새로 가져온 불변의
origin/main커밋에서 비롯되며, 주변 로컬 브랜치에서 가져오지 않습니다. -
GitHub Actions를 통해 npm에 게시
version="$(node -p "require('./package.json').version")" tag="v${version}" gh workflow run publish.yml \ --repo Gentleman-Programming/gentle-pi \ --ref main \ -f tag="${tag}"워크플로우 정의는 항상 보호된 기본
main에서 제공됩니다. 하나의 정확한vSemVer태그만 허용하며, 원격 주석 태그와 현재 원격main을 가져와서, 분리된 태그 커밋, 디스패치/main 워크플로우 커밋, 체크아웃, 그리고package.json버전이 일치하는지 확인합니다. npm 게시 직전에 원격 태그와main을 다시 조회하고, dist-tag를 내부적으로 파생하며, 신뢰할 수 있는 OIDC와 증명을 사용합니다.실행을 모니터링하고 실패하면 릴리스를 실패로 처리합니다:
gh run list --repo Gentleman-Programming/gentle-pi --workflow publish.yml --limit 3 gh run watch <run-id> --repo Gentleman-Programming/gentle-pi --exit-status -
npm 확인
npm view gentle-pi@<version> version --registry=https://registry.npmjs.org/ npm dist-tag ls gentle-pi --registry=https://registry.npmjs.org/
실패 처리
-
게시 실패는 일반 저장소 정책을 통해 처리됩니다. 검토 라인을 다시 열거나 변경하지 않습니다.
-
로컬에서
npm publish를 시도하거나 재시도하지 마십시오. 동일한 태그가 여전히 현재 원격main을 대상으로 하고 실패가 게시 전용인 경우에만 신뢰할 수 있는main에서 다시 디스패치하십시오. -
원격
main이 진행된 경우, 기존 태그를 이동하거나 다시 생성하지 마십시오. 새 릴리스 커밋/버전을 준비하고 새 주석 버전 태그를 생성하십시오. -
워크플로우가 실패하면 다음 명령으로 로그를 확인하십시오:
gh run view <run-id> --repo Gentleman-Programming/gentle-pi --log -
성공적인 워크플로우 후 npm 확인이 일시적으로 지연된 경우, 게시 실패로 가정하기 전에 정확한 버전을 먼저 확인하십시오 (
npm view gentle-pi@<version> version).
출력 계약
다음을 보고합니다:
main에 푸시된 커밋 SHA.- 정확한 버전 태그와 그 분리된 커밋 SHA.
- GitHub 릴리스 URL.
- 게시 워크플로우 실행 URL 및 결과.
- npm 정확한 버전과 워크플로우에서 파생된 dist-tag (
latest,beta, 또는next). - 남은 후속 조치 또는 경고 사항.