Peekaboo release checklist
Run from the repository root. Releases publish @steipete/peekaboo, universal CLI archives, checksums, and a Developer ID signed/notarized Peekaboo.app with a Sparkle appcast entry.
#1. Prepare
- Confirm
mainis clean, current, and all submodules are at the intended commits. - Update
package.json, bothversion.jsonfiles,Apps/CLI/Sources/Resources/Info.plist, - Move release changes into matching dated sections in
CHANGELOG.mdandApps/CLI/CHANGELOG.md. - Update user-facing docs and
release/release-notes.md. Release notes contain only that version's changelog section. - Update submodule repositories first only when their code or release metadata changed, then commit the gitlink here.
Apps/CLI/TestHost/Info.plist, PeekabooMCPVersion.current, the README badge, and MARKETING_VERSION in the Mac, Inspector, and Playground Xcode projects.
#2. Validate
pnpm run format
pnpm run lint
pnpm run lint:docs
pnpm run docs:site
pnpm run test:safe
pnpm run prepare-release
Run pnpm run test:automation and live provider tests when the release changes those surfaces. Before committing, run the repository autoreview workflow until no accepted actionable findings remain.
#3. Commit and push
Use ./scripts/committer with Conventional Commits. Push main, pull with --ff-only, and confirm a clean tree before building release artifacts; dirty trees produce invalid version metadata.
#4. Publish
Load release credentials through the maintainer 1Password workflow, then run interactively:
./scripts/release-binaries.sh \
--create-github-release \
--publish-npm
The script runs release preparation, builds the universal CLI and npm package, signs/notarizes/staples the macOS app, generates checksums and Sparkle metadata, and uploads a draft GitHub release. When it pauses at the npm confirmation, leave the process waiting, inspect the draft assets and notes, then answer y to publish npm. The signing identity must be:
Developer ID Application: Peter Steinberger (Y5PE65HELJ)
After npm verification, append a Verification section to the draft body with the npm version page, registry tarball URL, integrity value, publish time, and exact CI/test proof. Keep the changelog section intact, update the draft with gh release edit v<version> --notes-file <reviewed-body-file>, inspect the rendered body once more, then publish it:
gh release edit v<version> --draft=false
For beta versions, the script publishes with the beta tag. Peekaboo beta releases are still the default release, so also run npm dist-tag add @steipete/peekaboo@<version> latest before publishing the GitHub draft.
#5. Verify
npm view @steipete/peekaboo@<version>reports the version, tarball, integrity, and publish time;latestpoints to- Git tag and non-draft GitHub Release
v<version>exist. - Release body contains the complete changelog section plus npm metadata and exact CI/test proof.
- GitHub assets include the CLI archive, npm tarball, app zip, and checksums expected by the script.
appcast.xmlis valid and its newest item points to the new GitHub app zip with matching length and signature.- Extracted CLI and app report the new version; codesign, stapler, and Gatekeeper verification pass.
- A fresh temporary
npx @steipete/peekaboo@<version> --helpsucceeds. - Release and Homebrew workflows complete successfully.
the new version for stable and beta releases.
Commit and push the generated appcast.xml update if the release script leaves it dirty.
#6. Close out
After all public verification passes, add Unreleased sections to both changelogs for the next patch version, commit, push, pull --ff-only, and finish on clean main.