본문으로 건너뛰기
cccskills
무료GitHub에 공개

release-process

Guide npm package releases through dependency checks, version alignment, publishing procedures, and post-release smoke tests, which are basic installation and operation checks. It also documents fallback steps for failed automation and project-specific rules about who initiates releases.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Pre-release validation, npm publish procedures, and post-publish verification

연동 도구GitHub
설치 방법 보기

이럴 때 유용합니다

  • Check dependencies before publishing to npm
  • Align package versions and CHANGELOG entries
  • Handle failed release workflows
  • Verify installation and operation after publishing

포함된 파일(1)

  • SKILL.md10.0 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Release Process

Earned knowledge from the v0.9.0→v0.9.1 and v0.9.4 incidents. Every agent involved in releases MUST read this before starting release work. See also: .github/skills/release-process/SKILL.md for the Copilot-facing runbook.

SCOPE

✅ THIS SKILL PRODUCES:

  • Pre-release validation checks that prevent broken publishes
  • Correct npm publish commands (never workspace-scoped)
  • Fallback procedures when CI workflows fail
  • Post-publish verification steps

❌ THIS SKILL DOES NOT PRODUCE:

  • Feature implementation or test code
  • Architecture decisions
  • Documentation content

Confidence: high

Established through the v0.9.1 incident (8-hour recovery) and reinforced by the v0.9.4 release delay (PRs #1042, #1043, #1044). Every rule below is battle-tested.

Context

Squad publishes two npm packages: @bradygaster/squad-sdk and @bradygaster/squad-cli. The release pipeline flows: dev → preview → main → GitHub Release → npm publish. Brady (project owner) triggers releases — the coordinator does NOT.

Rules (Non-Negotiable)

1. Coordinator Does NOT Publish

The coordinator routes work and manages agents. It does NOT run npm publish, trigger release workflows, or make release decisions. Brady owns the release trigger. If an agent or the coordinator is asked to publish, escalate to Brady.

2. Pre-Publish Dependency Validation

Before ANY release is tagged, scan every packages/*/package.json for:

  • file: references (workspace leak — the v0.9.0 root cause)
  • link: references
  • Absolute paths in dependency values
  • Non-semver version strings

Command:

grep -r '"file:\|"link:\|"/' packages/*/package.json

If anything matches, STOP. Do not proceed. Fix the reference first.

3. Never Use npm -w for Publishing

npm -w packages/squad-sdk publish hangs silently when 2FA is enabled. Always cd into the package directory:

cd packages/squad-sdk && npm publish --access public
cd packages/squad-cli && npm publish --access public

4. Fallback Protocol

If workflow_dispatch or the publish workflow fails:

  1. Try once more (ONE retry, not four)
  2. If it fails again → local publish immediately
  3. Do NOT attempt GitHub UI file operations to fix workflow indexing
  4. GitHub has a ~15min workflow cache TTL after file renames/deletes — waiting helps, retrying doesn't

5. Post-Publish Smoke Test

After every publish, verify in a clean shell:

npm install -g @bradygaster/squad-cli@latest
squad --version    # should match published version
squad doctor       # should pass in a test repo

If the smoke test fails, rollback immediately.

6. npm Token Must Be Automation Type

NPM_TOKEN in CI must be an Automation token (not a user token with 2FA prompts). User tokens with auth-and-writes 2FA cause silent hangs in non-interactive environments.

7. No Draft GitHub Releases

Never create draft GitHub Releases. The release: published event only fires when a release is published — drafts don't trigger the npm publish workflow.

8. Version Format

Semantic versioning only: MAJOR.MINOR.PATCH (e.g., 0.9.1). Four-part versions like 0.8.21.4 are NOT valid semver and will break npm publish.

9. SKIP_BUILD_BUMP=1 in CI

Set this environment variable in all CI build steps to prevent the build script from mutating versions during CI runs.

Release Checklist (Quick Reference)

□ All tests passing on dev
□ No file:/link: references in packages/*/package.json
□ Root package.json version matches sub-packages (v0.9.4 lesson — PR #1043)
□ CHANGELOG.md has ## [$VERSION] section (not just [Unreleased]) (v0.9.4 lesson — PR #1042)
□ Version bumps committed: npm version $VERSION --workspaces --include-workspace-root --no-git-tag-version
□ npm auth verified (Automation token)
□ No draft GitHub Releases pending
□ Local build + test: npm run build && npx vitest run
□ Push dev → CI green
□ Promote dev → preview (squad-promote workflow)
□ Preview CI green (squad-preview validates)
□ Promote preview → main
□ squad-release auto-creates GitHub Release
□ squad-npm-publish auto-triggers (⚠️ may be BLOCKED — see GITHUB_TOKEN limitation below)
□ If publish didn't trigger: gh workflow run squad-npm-publish.yml --ref main -f version=X.Y.Z
□ Monitor publish workflow
□ Post-publish smoke test

Known Gotchas

GotchaImpactMitigation
npm workspaces rewrite "*" → "file:../path"Broken global installsPreflight scan in CI (squad-npm-publish.yml)
GitHub Actions workflow cache (~15min TTL)422 on workflow_dispatch after file renamesWait 15min or use local publish fallback
npm -w publish hangs with 2FASilent hang, no errorNever use -w for publish
Draft GitHub Releasesnpm publish workflow doesn't triggerNever create drafts
User npm tokens with 2FAEOTP errors in CIUse Automation token type
Root package.json version drift (v0.9.4)squad-release.yml fails CHANGELOG checkAlways bump all 3 package.json files together (PR #1043)
CHANGELOG.md missing ## [$VERSION] (v0.9.4)squad-release.yml exits with errorConvert [Unreleased] → [$VERSION] - YYYY-MM-DD before promoting to main (PR #1042)
GITHUB_TOKEN can't trigger downstream workflows (v0.9.4)squad-npm-publish.yml never firesManual gh workflow run or use PAT/GitHub App token (see below)
Lockfile integrity check rejects workspace packages (v0.9.4)False failures in squad-npm-publish.ymlOnly validate packages resolved from npm registry (startsWith('https://')) (PR #1044)
prebuild version bump breaks workspace linking (v0.9.4)Local builds fail after bump-build.mjs runsgit checkout -- package.json packages/*/package.json then fresh install

v0.9.4 Incident Learnings

Source: v0.9.4 release session. PRs #1042, #1043, #1044.

Root Package.json Version Must Match Sub-Packages

squad-release.yml reads version from ROOT package.json (lines 31-35):

VERSION=$(node -e "console.log(require('./package.json').version)")
if ! grep -q "## \[$VERSION\]" CHANGELOG.md; then
  echo "::error::Version $VERSION not found in CHANGELOG.md"
  exit 1
fi

If root package.json is behind (e.g., 0.9.1 while sub-packages are 0.9.4), the release workflow FAILS. This was the root cause of the v0.9.4 release delay — PR #1043 fixed it.

Rule: When bumping versions, ALWAYS bump all 3 package.json files together:

npm version $VERSION --workspaces --include-workspace-root --no-git-tag-version

CHANGELOG.md Must Have Version Entry

squad-release.yml validates that CHANGELOG.md contains ## [$VERSION]. If the version section is still [Unreleased] and no [$VERSION] section exists, the release workflow exits with error. PR #1042 fixed this for v0.9.4.

Rule: Before promoting to main, convert [Unreleased] to [$VERSION] - YYYY-MM-DD in CHANGELOG.md and add a fresh [Unreleased] section above it.

GITHUB_TOKEN Event Propagation Limitation (CRITICAL)

When squad-release.yml creates a GitHub Release using the default GITHUB_TOKEN, the release: published event does NOT trigger squad-npm-publish.yml. This is a GitHub security feature to prevent infinite workflow loops.

Workaround: After the release workflow succeeds and creates the tag + GitHub Release, manually trigger the publish workflow:

gh workflow run squad-npm-publish.yml --ref main -f version=X.Y.Z

IMPORTANT: Use --ref main to ensure the workflow runs against the main branch (where the release artifacts exist).

Permanent fix (TODO): Use a PAT or GitHub App token in squad-release.yml instead of GITHUB_TOKEN.

Lockfile Integrity — Workspace Package Handling

The lockfile stability check in squad-npm-publish.yml (line 82) filters packages for integrity hashes. Workspace packages resolve to bare relative paths (e.g., packages/squad-sdk), NOT file: URLs. The check must filter for registry-resolved packages only (startsWith('https://')). PR #1044 fixed this.

Prebuild Version Bump Breaks Local Workspace Resolution

scripts/bump-build.mjs runs during npm run prebuild and bumps versions like 0.9.4 → 0.9.4-build.1. This breaks workspace linking because CLI depends on exact "@bradygaster/squad-sdk": "0.9.4" but SDK becomes 0.9.4-build.1.

Fix for local dev:

git checkout -- package.json packages/*/package.json
rm -rf node_modules packages/*/node_modules
npm install
npm run build

The Full Promotion Chain (v0.9.4 Documented)

dev → preview → main (via squad-promote.yml)
main push → squad-release.yml validates CHANGELOG, creates tag + GitHub Release
release published → squad-npm-publish.yml (⚠️ BLOCKED by GITHUB_TOKEN limitation)
manual workaround → gh workflow run squad-npm-publish.yml --ref main -f version=X.Y.Z

npm Publish Workflow Dispatch Target

When using workflow_dispatch to trigger squad-npm-publish.yml, the default ref is the repo's default branch (dev). Always specify --ref main explicitly to ensure the workflow runs against the branch with the release tag and latest workflow fixes.

CI Gate: Workspace Publish Policy

The publish-policy job in squad-ci.yml scans all workflow files for bare npm publish commands that are missing -w/--workspace flags. Any workflow that attempts a non-workspace-scoped publish will fail CI. This prevents accidental root-level publishes that would push the wrong package.json to npm.

See .github/workflows/squad-ci.yml → publish-policy job for implementation details.

Related

  • Issues: #556–#564 (release:next)
  • v0.9.4 fixes: PR #1042 (CHANGELOG), PR #1043 (root package.json), PR #1044 (lockfile integrity)
  • Retro: .squad/decisions/inbox/surgeon-v091-retrospective.md
  • CI audit: .squad/decisions/inbox/booster-ci-audit.md
  • Copilot-level skill: .github/skills/release-process/SKILL.md
  • Playbook: PUBLISH-README.md (repo root)

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Coordinate work across AI agents with shared rules for locating team files, recording decisions and their reasons, and requesting help. It also defines who owns revisions after a reviewer rejects an artifact.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Locate team files across separate working directories
  • Record decisions that affect other agents
  • Request input from another specialist
github/gh-aw5.4천2026년 10월 19일 업데이트

Set shared development rules for an agent team: keep specific agent names out of product code, tests, and CI configuration, verify affected tests before finishing, and record lessons learned from mistakes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Share development rules across multiple agents
  • Keep team-specific agent names out of code and tests
  • Check affected tests before declaring work complete
github/gh-aw5.4천2026년 10월 19일 업데이트

Routes requests to design, create, update, debug, or upgrade GitHub Agentic Workflows to the appropriate instructions. It helps the agent select a workflow-specific procedure and apply any additional rules defined for the repository.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Designing a new workflow through questions
  • Investigating failed runs and recurring errors
  • Upgrading workflows and addressing deprecations
github/gh-aw5.4천2026년 10월 19일 업데이트

Prepare architecture proposals before implementation so the team can agree on a direction. Organize evidence, technical choices, effects on existing work, risks, and the first release’s scope into a document with clear recommendations and decision owners.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Proposing a major architecture change
  • Replanning milestones after a foundation change
  • Comparing technical options before seeking approval
github/gh-aw5.4천2026년 10월 19일 업데이트

Update the gh-aw-firewall version used by gh-aw, rebuild generated files, and review release notes and configuration schemas, which define valid settings. It guides related code and test updates while identifying follow-up work that remains.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Updating the firewall version used by gh-aw
  • Reviewing release notes for integration changes
  • Checking configuration schema differences
github/gh-aw5.4천2026년 10월 19일 업데이트

Review git and gh operations in gh-aw workflows to check credential availability for each repository. Identify missing token handoffs, risky expansions of limited checkouts, and error handling needed where credentials are intentionally unavailable.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Reviewing git operations after repository checkout
  • Checking tokens for private cross-repository access
  • Reviewing sparse and shallow checkout changes
github/gh-aw5.4천2026년 10월 19일 업데이트

github의 스킬 모두 보기

이 스킬의 문제 신고