grunt-tagrelease

This plugin is being deprecated in favor of grunt-release, and will be eventually unpublished. Please migrate.

npm install grunt-tagrelease
26 downloads in the last day
132 downloads in the last week
682 downloads in the last month

grunt-tagrelease

This plugin is being deprecated in favor of grunt-release, and will be eventually unpublished. Please migrate.

Commit the changes and tag the last commit with a version from provided JSON file. If there is nothing to commit, the task will tag the current last commit.

This task has been created to work with other tasks like grunt-bumpup to help create a nicely configurable release task. You can see an example in Usage Examples section.

This is a Grunt 0.4 plugin. If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins.

Installation

Use npm to install and save the plugin into devDependencies.

npm install grunt-tagrelease --save-dev

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

grunt.loadNpmTasks('grunt-tagrelease');

Configuration

In your project's Gruntfile, add a section named tagrelease to the data object passed into grunt.initConfig(). This is a simple task, and does not conform to multi task options & files input types! All available configuration styles are described below.

This is the most verbose form of the configuration with default options and a version from a JSON file:

grunt.initConfig({
    tagrelease: {
        file: 'package.json',
        commit:  true,
        message: 'Release %version%',
        prefix:  'v',
        annotate: false,
    },
});

Version from a version property, and no prefix:

grunt.initConfig({
    tagrelease: {
        version: '1.0.1',
        prefix:  '',
    },
});

Version retrieved from a function passed to the version property, and enabled annotated tags:

grunt.initConfig({
    tagrelease: {
        version: function () {
            return '1.0.1';
        },
        annotate:  true,
    },
});

Simple configs

Default options and a new version from a JSON file:

grunt.initConfig({
    tagrelease: 'package.json'
});

Default options and a new version expanded from a template:

grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    tagrelease: '<%= pkg.version %>'
});

Default options and a new version passed directly:

grunt.initConfig({
    tagrelease: '1.0.1'
});

Default options and a new version from a function:

grunt.initConfig({
    tagrelease: function () {
        return '1.0.1';
    }
});

Options

version

Type: Mixed Default: null

New version that will be used as a new tag name. Has a priority over the file option below. Can be a string or a function that returns a string. You have to define either this, or a file option below, otherwise the task won't know what should be the new tag.

file

Type: String Default: null

Path to the JSON file with version that should be used as a new tag. You have to define either this, or a version option above, otherwise the task won't know what should be the new tag.

commit

Type: Boolean Default: true

Whether to commit any un-staged changes before tagging. Does the git commit -a command.

message

Type: String Default: Release %version%

Message to be used in commits, and annotated tags. Available is one token:

  • %version% - Will be replaced with a new version, without a prefix.

prefix

Type: String Default: nothing

Tag prefix. Set to v to have tags line v1.1.0.

annotate

Type: Boolean Default: false

Whether the new tag should be annotated. If enabled, the tag will receive a message from message option.

Usage Examples

Release task

In this example, we create a release task that handles everything needed to build a new release of a project:

// Tasks configuration
grunt.initConfig({
    jshint: ...,
    uglify: ...,
    bumpup: 'package.json',
    tagrelease: 'package.json'
});

// Load the plugins
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-bumpup');
grunt.loadNpmTasks('grunt-tagrelease');

// Release alias task
grunt.registerTask('release', function (type) {
    type = type ? type : 'patch';
    grunt.task.run('jshint');         // Lint stuff
    grunt.task.run('uglify');         // Minify stuff
    grunt.task.run('bumpup:' + type); // Bump up the package version
    grunt.task.run('tagrelease');     // Commit & tag the changes from above
});

And now you can call this command to create a new minor release of a project:

grunt release:minor
npm loves you