pub-time
v1.0.0
Published
A much better `npm publish`
Downloads
137
Maintainers
Readme
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
,test
andlint
- checks your package.json for invalid types
- includes an API (including TypeScript support)
- supports a
--dry-run
option 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
main
branchchecks you are level with remote
origin/main
checks various key fields in
package.json
checks for a
README.md
checks that
npm audit
shows no vulnerabilitiesruns script
npm run lint
if 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
npm
andnode
versions match the user'sengines
inpackage.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-build
if 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-time
Usage
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