Release Checklist (npm)
Usepnpm (Node 22+) from the repo root. Keep the working tree clean before tagging/publishing.
Operator trigger
When the operator says “release”, immediately do this preflight (no extra questions unless blocked):- Read this doc and confirm npm auth is available.
- Version & metadata
- Bump
package.jsonversion (e.g.,2026.1.26). - Update CLI/version strings:
src/cli/program.tsand the Baileys user agent insrc/provider-web.ts. - Confirm package metadata (name, description, repository, keywords, license) and
binmap points todist/entry.jsforcrocbot. - If dependencies changed, run
pnpm installsopnpm-lock.yamlis current.
- Build & artifacts
-
pnpm run build(regeneratesdist/). - Verify npm package
filesincludes all requireddist/*folders (notablydist/node-host/**anddist/acp/**for headless node + ACP CLI). - Confirm
dist/build-info.jsonexists and includes the expectedcommithash (CLI banner uses this for npm installs). - Optional:
npm pack --pack-destination /tmpafter the build; inspect the tarball contents and keep it handy for the GitHub release (do not commit it).
- Changelog & docs
- Update
CHANGELOG.mdwith user-facing highlights (create the file if missing); keep entries strictly descending by version. - Ensure README examples/flags match current CLI behavior (notably new commands or options).
- Validation
-
pnpm lint -
pnpm test(orpnpm test:coverageif you need coverage output) -
pnpm run build(last sanity check after tests) -
pnpm release:check(verifies npm pack contents) -
CROCBOT_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke(Docker install smoke test, fast path; required before release)- If the immediate previous npm release is known broken, set
CROCBOT_INSTALL_SMOKE_PREVIOUS=<last-good-version>orCROCBOT_INSTALL_SMOKE_SKIP_PREVIOUS=1for the preinstall step.
- If the immediate previous npm release is known broken, set
- (Optional) Full installer smoke (adds non-root + CLI coverage):
pnpm test:install:smoke - (Optional) Installer E2E (Docker, runs
curl -fsSL https://github.com/moshehbenavraham/crocbot/install.sh | bash, onboards, then runs real tool calls):pnpm test:install:e2e:openai(requiresOPENAI_API_KEY)pnpm test:install:e2e:anthropic(requiresANTHROPIC_API_KEY)pnpm test:install:e2e(requires both keys; runs both providers)
- (Optional) Spot-check the web gateway if your changes affect send/receive paths.
- Publish (npm)
- Confirm git status is clean; commit and push as needed.
-
npm login(verify 2FA) if needed. -
npm publish --access public(use--tag betafor pre-releases). - Verify the registry:
npm view crocbot version,npm view crocbot dist-tags, andnpx -y crocbot@X.Y.Z --version(or--help).
Troubleshooting (notes from 2.0.0-beta2 release)
- npm auth web loop for dist-tags: use legacy auth to get an OTP prompt:
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add crocbot@X.Y.Z latest
npxverification fails withECOMPROMISED: Lock compromised: retry with a fresh cache:NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y crocbot@X.Y.Z --version
- Tag needs repointing after a late fix: force-update and push the tag, then ensure the GitHub release assets still match:
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
- GitHub release
- Tag and push:
git tag vX.Y.Z && git push origin vX.Y.Z(orgit push --tags). - Create/refresh the GitHub release for
vX.Y.Zwith titlecrocbot X.Y.Z(not just the tag); body should include the full changelog section for that version (Highlights + Changes + Fixes), inline (no bare links), and must not repeat the title inside the body. - Attach artifacts:
npm packtarball (optional). - From a clean temp directory (no
package.json), runnpx -y crocbot@X.Y.Z send --helpto confirm install/CLI entrypoints work. - Announce/share release notes.
Plugin publish scope (npm)
We only publish existing npm plugins under the@crocbot/* scope. The repo
does not ship a bundle of extensions beyond the Telegram channel plugin, so
plugin publishing is opt-in per package.
Process to derive the list:
npm search @crocbot --jsonand capture the package names.- Confirm each package is still maintained and intended to ship (skip repo-only
plugins like
extensions/telegram).
npm search @crocbot and the repo plugin
manifests, then update this doc as needed.
Release notes should call out new optional plugins if any are introduced later.