Skip to content

opsbr/publish-snapshot

Repository files navigation

publish-snapshot

CLI utility for publishing a snapshot build of your npm package by appending the current Git commit hash to the package version. The command temporarily mutates package.json, publishes with npm, and immediately restores the original file.

  • Publishes the package with a version like 1.2.3-snapshot-a1b2c3d
  • Aborts if your Git working tree is dirty or package.json already holds a pre-release version
  • Forwards any extra CLI flags directly to npm publish

Quick start

npx -y publish-snapshot@latest

Run the command inside the root of the package you want to publish. The script performs the following steps:

  1. Prints the tool version for traceability.
  2. Verifies the Git repository has no uncommitted changes.
  3. Reads the current package.json version.
  4. Creates a snapshot version in the form originalVersion-snapshot-<shortSHA>.
  5. Temporarily writes that version to package.json, runs npm publish, then restores the original file contents.

If any of the steps fails, the command exits with code 1 and package.json is reverted to its original state.

Passing arguments to npm publish

Extra arguments after the command are forwarded to npm publish. For example, to publish to a specific dist-tag and registry:

npx -y publish-snapshot@latest --tag snapshot --registry https://registry.npmjs.org/

Requirements & guarantees

  • Node.js 20+ (needed for JSON import attributes and top-level await)
  • A clean Git working tree; the script refuses to run otherwise
  • npm available on your PATH

The original package.json is always restored, even when npm publish fails.

Common issues

  • Dirty working tree: Commit or stash changes before running. The command uses git status --porcelain to enforce a clean tree.
  • Pre-release versions: The tool rejects versions such as 1.0.0-beta.1. Snapshot publishing only works from release versions.
  • SemVer parsing errors: Ensure your package.json version follows semantic versioning (e.g. 1.2.3).

Local development

Clone the repository, install dependencies, and use the Verdaccio script to exercise the CLI against a private registry:

npm install
npm run registry # starts Verdaccio locally on http://127.0.0.1:4873/
npm run dev      # publishes to the local registry using snapshot semantics

Contributions are welcome via pull requests.

About

Publish npm packages as the snapshot named with git commit hash

Resources

License

Stars

Watchers

Forks