# grunt-release

> Release a new version of your Node-based project

Latest version **0.14.0** (published 2016-06-09) · MIT license · 0 weekly downloads

## Install

```sh
npm install grunt-release
pnpm add grunt-release
yarn add grunt-release
bun add grunt-release
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.14.0 |
| Published | 2016-06-09 |
| First published | 2013-02-21 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.10 |
| Dependencies | 4 |
| Known vulnerabilities | 0 (+3 in 2 direct dependencies) |
| Install scripts | no |
| GitHub stars | 387 |
| Author | Dave Geddes |
| Maintainers | dorgan, drublic, geddski |
| Keywords | gruntplugin, bump, release, npm, git |

## Links

- npm: https://www.npmjs.com/package/grunt-release
- Repository: https://github.com/geddski/grunt-release
- Homepage: https://github.com/geddski/grunt-release#readme
- Issues: https://github.com/geddski/grunt-release/issues
- npm.io page: https://npm.io/package/grunt-release

## Dependencies (4)

- [q](https://npm.io/package/q.md) ^1.4.1
- [semver](https://npm.io/package/semver.md) ^5.1.0
- [shelljs](https://npm.io/package/shelljs.md) ^0.7.0
- [superagent](https://npm.io/package/superagent.md) ^1.8.3

## Recent versions

- 0.14.0 (latest) — 2016-06-09
- 0.13.1 — 2016-05-03
- 0.13.0 — 2015-06-19
- 0.12.0 — 2015-03-22
- 0.11.0 — 2015-02-05
- 0.10.0 — 2015-01-12
- 0.9.0 — 2014-12-03
- 0.8.1 — 2014-12-03
- 0.8.0 — 2014-12-03
- 0.7.0 — 2014-02-14
- 0.6.1 — 2014-02-11
- 0.6.0 — 2013-09-30
- 0.5.1 — 2013-08-06
- 0.5.0 — 2013-08-06
- 0.4.0 — 2013-07-27
- … 12 more at https://npm.io/package/grunt-release/versions

## README

# grunt-release

[![Build Status](https://travis-ci.org/geddski/grunt-release.svg?branch=master)](https://travis-ci.org/geddski/grunt-release)
[![Dependency Status](https://david-dm.org/geddski/grunt-release.svg)](https://david-dm.org/geddski/grunt-release)
[![devDependency Status](https://david-dm.org/geddski/grunt-release/dev-status.svg)](https://david-dm.org/geddski/grunt-release#info=devDependencies)

[Grunt](http://gruntjs.com) plugin for automating all the release steps of your node lib or bower component, with optional publishing to npm.

## Repetition Killed the Cat
Releasing a new version of your killer Node/Bower/Component/JS lib looks something like this:

1. bump the version in your `package.json` file.
2. stage the package.json file's change.
3. commit that change with a message like "release 0.6.22".
4. create a new git tag for the release.
5. push the changes out to GitHub.
6. also push the new tag out to GitHub.
7. create a .zip release on GitHub.
8. publish the new version to npm.

Cool, right? No! What's wrong with you? Automate all that:

```shell
grunt release
```

Done. No more GitHub issues from angry people reminding you how often you forget to do one or more of the steps.

## Setup
If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

```shell
npm install grunt-release --save-dev
```

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

```js
grunt.loadNpmTasks('grunt-release');
```

## Using grunt-release

**Patch Release:**
```shell
grunt release
```
or
```shell
grunt release:patch
```

**Minor Release:**
```shell
grunt release:minor
```

**Major Release:**
```shell
grunt release:major
```

**Specific Version Release:**
```shell
grunt release:1.2.3
```

**Pre-release**
```shell
grunt release:prerelease
```

`prerelease` will just update the number after `MAJOR.MINOR.PATCH` (eg: `1.0.0-1`)
If you want to add an alphanumeric identifier, you will need to add it by hand.
Example: add `-alpha.0` to get something like `1.0.0-alpha.0`. Calling `grunt release:prerelease` will just update the last number to `1.0.0-alpha.1`.

**Releasing Unstable/Beta Versions**
Sometimes it is useful to publish an 'unstable' or 'beta' version to `npm`, while leaving your last stable release as the default that gets installed on an `npm install`.
`npm` accomplishes this using the `--tag myUnstableVersion` flag. You can enable this flag in grunt-release either by setting the `npmtag` option:

```js
  release: {
    options: {
      npmtag: 'canary',
    }
  }
```

or by passing the CLI arg:

```shell
grunt release --npmtag canary
```

NOTE: If the tag you pass is **true**, then the tag will be the *new* version number after the bump. Otherwise it will be the string you provided.


**Bump multiple files at once**

Sometimes you may need to bump multiple files while releasing.

```js
  release: {
    options: {
      additionalFiles: ['bower.json']
    }
  }
```

You can also provide multiple files in this array or provide a string with multiple file paths separated by comma (`,`).

The version to bump is set in the master file defined with option 'file' (default : package.json).
This version will be propagated to every additionalFiles.

**Dry Run:**
To see what grunt-release does, without really changing anything, use `--no-write` option.

```shell
grunt release --no-write
```

You'll see something like:
```
>> Release dry run
>> bumped version to 0.8.0
>> staged package.json
>> committed package.json
>> created new git tag: 0.8.0
>> pushed to remote git repo
>> pushed new tag 0.8.0 to remote git repo
>> published version 0.8.0 to npm
>> created 0.8.0 release on github.

Done, without errors.
```

## Options
The following are all the release steps, you can disable any you need to:

```js
  release: {
    options: {
      bump: false, //default: true
      changelog: true, //default: false
      changelogText: '<%= version %>\n', //default: '### <%= version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n'
      file: 'component.json', //default: package.json
      add: false, //default: true
      commit: false, //default: true
      tag: false, //default: true
      push: false, //default: true
      pushTags: false, //default: true
      npm: false, //default: true
      npmtag: true, //default: no tag
      indentation: '\t', //default: '  ' (two spaces)
      folder: 'folder/to/publish/to/npm', //default project root
      tagName: 'some-tag-<%= version %>', //default: '<%= version %>'
      commitMessage: 'check out my release <%= version %>', //default: 'release <%= version %>'
      tagMessage: 'tagging version <%= version %>', //default: 'Version <%= version %>',
      beforeBump: [], // optional grunt tasks to run before file versions are bumped
      afterBump: [], // optional grunt tasks to run after file versions are bumped
      beforeRelease: [], // optional grunt tasks to run after release version is bumped up but before release is packaged
      afterRelease: [], // optional grunt tasks to run after release is packaged
      updateVars: [], // optional grunt config objects to update (this will update/set the version property on the object specified)
      github: {
        apiRoot: 'https://git.example.com/v3', // Default: https://github.com
        repo: 'geddski/grunt-release', //put your user/repo here
        accessTokenVar: 'GITHUB_ACCESS_TOKE', //ENVIRONMENT VARIABLE that contains GitHub Access Token

        // Or you can use username and password env variables, we discourage you to do so
        usernameVar: 'GITHUB_USERNAME', //ENVIRONMENT VARIABLE that contains GitHub username
        passwordVar: 'GITHUB_PASSWORD' //ENVIRONMENT VARIABLE that contains GitHub password
      }
    }
  }
```

If you want to use multiline commit messages just pass an array to the `commitMessage` option instead of a string.

### Notes on GitHub Releases:

1. Yes, you have to use environment variables.
2. The [GitHub Releases API](http://developer.github.com/v3/repos/releases/) is still unstable and may change in the future.
3. You should use an environment variable to set an [access token](https://help.github.com/articles/creating-an-access-token-for-command-line-use) and "link" it via `accessTokenVar`.
4. You can use environment variables for username (referenced in `usernameVar`) and password (`passwordVar`).
5. We don't encourage you to use username and password for the GitHub release.

For node libs, leave `file` option blank as it will default to `package.json`. For Bower components, set it to `bower.json`.

## License
MIT

---
_Source: https://npm.io/package/grunt-release · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
