pub-time
A much better npm publish, that:
- performs automatic semantic release versioning, like
semantic-release - has zero dependencies - uses your built-in
git,npm - integrates with your npm scripts like
build,testandlint - checks your package.json for invalid types
- includes an API (including TypeScript support)
- supports a
--dry-runoption to give it a test drive
Release
If "checks" fail or "runs script" has nonzero error code, pub-time exits and the publish
is cancelled.
- checks you are on local
mainbranch - checks you are level with remote
origin/main - checks various key fields in
package.json - checks for a
README.md - checks that
npm auditshows no vulnerabilities - runs script
npm run lintif it exists (with default setting) calculates the next version by looking at both:
- the latest version (if any) published to
npm - commits since the previous git tag
v#.#.#
- the latest version (if any) published to
final warning, pausing for user input and showing some common final todos that can't be automatically checked
- updates the version in package.json
- checks that the user's
npmandnodeversions match the user'senginesinpackage.json - deletes and reinstalls npm dependencies
- runs script
npm run build(with default setting) - runs script
npm run test(with default setting) - runs script
npm run check-buildif it exists (with default setting) - (!) dry run stops doing anything here, but instead logs out the commands it would run
releases
- commits any changes
- creates a new
v#.#.#git tag - pushes up commits and tag
npm publish🎉
Background
I created this library because I was unhappy with the alternatives (especially the install size):
| package | install size |
|---|---|
np |
|
release-it |
|
semantic-release |
pub-time leans into the conventions you may already use in your projects and will use your
pre-existing project specific scripts in your package.json.
Install
This package is available from the npm registry.
npm install pub-timeUsage
npx pub-time
# Options:
# --dry-run |
# 1ad4719d1 | custom commit hash override (manually specify previous release commit)API
Supports JavaScript + TypeScript:
import { publish } from "pub-time";
export const publish = (config: Partial<Config>) => Promise<boolean>;
export type Config = {
/* custom log function instead of console.log */
log: (message: string) => void;
/* if true, package will not be published, git will not be updated */
dryRun: boolean;
/* if left undefined, will treat last 'v#.#.#' git tag as the last commit of the prev release
if a string, will be treated as the hash of the last commit of the prev release
to force include all commits, use the value 'all' */
prevHash?: string;
/* custom functions used in publish process */
build: string | ((nextSemver: string) => Promise<void>);
checkBuild: string | ((nextSemver: string) => Promise<void>);
test: string | (() => Promise<void>);
lint: string | (() => Promise<void>);
};
export const DEFAULT_CONFIG: Config = {
// eslint-disable-next-line no-console
log: console.log,
prevHash: undefined,
dryRun: false,
lint: "lint",
build: "build",
checkBuild: "check-build",
test: "test",
};Can also be imported via require("pub-time").
Contributing
GitHub issues / PRs welcome.
Dev environment requires:
- node >= 16.14.0
- npm >= 6.8.0
- git >= 2.11
Licence
Apache-2.0