leak
v0.1.2
Published
Leak helps release semantically-versioned node packages from git branches.
Readme
leak
Leak helps release semantically-versioned node packages from git branches.
Status: Leak is unstable and should be used at your own risk.
Install
npm install -g leakLeak can now be run as a command
$ leak --help
Usage: leak [options]
Options:
-h, --help output usage information
-V, --version output the version number
-S, --start [name] Start working on a branch, synced with origin, and properly versioned
-C, --commit [message] Commit progress on this branch
-R, --release [type] Cut a version (of a type like minor or patch), push to master, and close this branch
--clean [do_clean] Clean the feature branch and tags after release? Default [true]
--clean-remote [do_clean_remote] Clean the remote feature branch and tags after release? Default [true]
--npm-publish [do_npm_publish] Publish npm module on release? By default, publish if package.json private === false
--main-branch [main_branch] Specify the 'master' branch which gets released to. Default ['master']
--remote [remote] Specify the remote repo to use. 'false' for no remote actions. Default ['origin']
Setup
Other than the following restrictions, leak should work fine with existing repositories and node modules.
The package.json file must be present at the top-level of the repo and be valid JSON. The version value must be a proper semantic version.
Commands
Leak has 3 main actions: Start, Commit, and Release.
Leak will run 'Commit' (-C) by default if nothing is provided.
Commit can be combined with start or release, because a commit always happens to change the version. When starting or releasing, the commit flag is used to override the message.
-S --start [branch]
"Switch to a new or existing branch"
Start Behavior
- tries to checkout $branch. if it already exists and is checked out:
- try to run
git pull origin $branch. if the branch does not exist remotely:- continue as if the branch had been just created (see below)
- try to run
- if the branch doesnt already exist:
- creates a new branch named $branch off of the current git repo
- set to track $branch on
origin. if branch is successfully tracked:- git pull
- if branch cannot track remote because no remote branch:
- updates version for the branch in
package.jsonto matchX.X.X-$branch.X - stages and commits
package.json - publishes the new branch to
origin
- updates version for the branch in
Start Options
-S --start [branch_name]- Specify the name for the branch
-C --commit [message]
"Commit progress on the current branch."
Commit Behavior
- notices the current $repo & $branch
git pull origin $branch- increments the prerelease $version in `package.json'
- stages
package.json - commits all staged changes with the $message provided
- tags the commit with the new version
- pushes commits and tags to
origin $branch
Commit Options
-C --commit [message]- Set the commit message
-R --release [type]
"Release the currently-staged branch to remote master and npm, then wipe the branch and old tags"
Release Behavior
- notices the current $repo & $branch
git pull origin $branch- if branch is not
master:git pull origin master- checkout master to make sure working copy doesn't conflict
- checkout $branch again
- increments the $version by $type in `package.json'
- stages
package.json - commits all staged changes with the $message provided, otherwise 'release $type $version'
- tag the commit with the new version
- pushes commits on $branch and the tag to
origin - if $branch is not
master:- push $branch to
origin master - checkout
master, pullorigin master - if cleaning is enabled:
- remove all local tags which match:
X.X.X-$branch.X - remove the local $branch
- if remote cleaning is enabled:
- remove all remote tags which match:
X.X.X-$branch.X - remove the remote $branch
- remove all remote tags which match:
- remove all local tags which match:
- push $branch to
- if
private === falseinpackage.jsonor if npm is enablednpm publish
Release Options
-R --release [type]- Specify the type of the release-C --commit [message]- Override the commit message for the release--clean [do_clean]- If set tofalse, no cleaning will be done--clean-remote [do_clean_remote]- If set tofalse, nothing remote will be cleaned--npm-publish [do_npm_publish]- publish to npm if
true - if set to
false, npm will not publish - by default, publish if private is
falseinpackage.json
- publish to npm if
