pub-time
v1.0.0
Published
A much better `npm publish`
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,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
mainbranchchecks you are level with remote
origin/mainchecks various key fields in
package.jsonchecks for a
README.mdchecks that
npm auditshows no vulnerabilitiesruns 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.jsondeletes 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
