This project is no longer needed because of three reasons:
- Single release system for multiple platforms is too ambitious
- NPM now has https://docs.npmjs.com/cli/version
- I believe NPM is now the defacto package-manager for client-side and server-side so a parent tool to bridge different managers no longer matters.
Joyful lightening-fast project releases
npm install --global release2
(release
was already taken)
- supported project types:
node + npm
duo
(and any other manifestless projects)
- supported VCSs:
git
$ release -h
Usage: release [options]
Options:
-h, --help output usage information
-V, --version output the version number
-p, --patch Make a patch release
-m, --minor Make a minor release
-a, --major Make a major release
This project is being worked on. What follows is a spec of what the project will become.
Humans should be able to confidently release project iterations using one familiar interface regardless of their version-control or packaging system of choice.
While release
is created upon the nodejs platform its system-agnostic goals may be ported to a more neutral platform in the future (e.g. shell scripts
). node
was chosen because it is currently the author's most proficient environment but also because node
has a vibrant full-stack community using multiple packaging systems, and a unix-like mentality of authoring many small focused modules; this is fertil soil to plant release
.
release
uses drivers to support many version-control and packaging systems. More can be added via cli plugins.
release
decides upon the systems in use by detecting key files and folders in cwd
. For instance given a cwd
containing
.git/
package.json
component.json
release
will decide that:
- version-control system git is being used.
- packaging system npmjs is being used.
- packaging system componentjs is being used.
Then release
employs the respective drivers for each system bridging their disparate interfaces to release
's.
Defaults can be customized in .release.(yml|json)
which will be searched for in cwd
, then recursively until /
. Config files closer to cwd
override ones further away. CLI-flags will override config file defaults.
- hook: pre: release
- hook: pre: validate
- validate: version numbers' correctness
- validate: manifest files' correctness
- validate: version-control system in correct state
- hook: post: validate
- hook: pre: increment
- increment: versison numbers in package system manifest files
- hook: post: increment
- hook: pre: commit
- commit manifest file(s)
- tag commit node with version
- hook: post: commit
- hook: pre: push
- push to remote origin
- hook: post: push
- hook: pre: publish
- publish to applicable package registr(y|ies)
- hook: post: publish
- hook: post: release
Things it does well:
- Use
semvar
- Update Manifest files:
component
'scomponent.json
npm
'spackage.json
bower
'sbower.json
- Registry publishing
- VCS commit:
git
- Extendable
Things it could do well (ideas):
- Summarize release changes in a changelog
hook:post:increment
- ... please fork and contribute