npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

grunt-commit-message-verify

v0.1.0

Published

Verifies that the HEAD Git commit conforms to imposed length & regex restrictions

Downloads

3

Readme

grunt-commit-message-verify

Verifies that the last commit message [1] of the Git repo [2] is compliant to your requirements. This is a Grunt plugin [3], useful mostly in continuous-integration environments (like Travis CI) - since it only checks the latest commit.

Tested with NodeJS 0.8 / Grunt 0.4.2.

Notes:

  1. To be precise, youngest non-merge commit. See the default shell command.
  2. You can customize the shell command to be run, to use it with any VCS or actually any string fed to the program via stdin
  3. You can also use it outside Grunt in pure NodeJS script: require('grunt-commit-message-verify/lib/check-commit-message.js') and then use the methods exposed.

Rationale

Why would you need it? For instance, to make sure that each commit contains a number of the pull request so that the GitHub PR can be closed when the code lands in master branch (if you don't use explicit merging, but rebasing / cherry-picking). It can be useful to have those numbers in the commits so that you can easily come back to the linked issue/pull request in the future to look at the discussion.

Also, to impose certain restrictions on minimum / maximum lengths of the commit messages etc.

You should probably run this check at the very end of the build, so that the functional tests can still be run even if the commit message is to be improved.

Getting Started

Install this grunt plugin next to your project's Gruntfile with: npm install --save grunt-commit-message-verify

Then add this line to your project's Gruntfile.js:

grunt.loadNpmTasks('grunt-commit-message-verify');

Config options

The names of the entries should be self-explanatory.

shellCommand is the command that will be run by your shell to obtain the commit message (it should print it to stdout).

grunt.config.set('grunt-commit-message-verify', {
    minLength : 0,
    maxLength : 3000,
    minFirstLineLength : 20, // first line should be both concise and informative
    maxFirstLineLength : 60,
    maxLineLength : 80,      // this is a good default to prevent overflows in shell console and Github UI
    regexes : {
        "check start of the commit" : {
            // the commit is either a fix, a feature, a documentation fix, a refactoring, new release commit, or
            // Work-In-Progress temporary commit
            regex : /^((refactor|doc) |((fix|feat) #\d+ )|(v?\d+\.\d+\.\d+)|WIP)/,
            explanation : "The commit should start with sth like fix #123, feat #123, doc, refactor, or WIP for test commits"
        },
        "is github compliant" : {
            // https://help.github.com/articles/closing-issues-via-commit-messages
            regex : /(((close|resolve)(s|d)?)|fix(e(s|d))?) #\d+/i,
            explanation : "The commit should contain sth like fix #123 or close #123 somewhere"
        }
    },
    shellCommand : "git log --format=%B --no-merges -n 1"    // this is the default used if nothing is passed
});

The commit message will be checked for its length according to min/max settings. 0 means to skip the check (this is the default for all the min/max length settings).

The automagical exception is that commit messages of a format 1.2.3 or v1.2.3 will never be checked for length.

Also, the commit will be checked against the regexes defined in regexes node. The key in this object is a short user-friendly name of the check, and the value can either be a RegExp or an object literal with regex (RegExp) and explanation (String). The key, the regex, and the explanation (if present) will be printed in case of failure to guide the user how to fix the problem.

Output

A typical log in case of failure will look like this (will be colored):

Running "grunt-commit-message-verify" task
Verifying that the commit message is okay...
>> Almost there, but the last commit message is not quite okay:

>> 1. The regex 'check start of the commit' failed on the commit message.
>> The commit should start with sth like fix #123, feat #123, doc, refactor, or WIP for test commits
>> Failed regex: /^((refactor|doc) |((fix|feat) #\d+ )|(v?\d+\.\d+\.\d+)|WIP)/

>> 2. The regex 'is github compliant' failed on the commit message.
>> The commit should contain sth like fix #123 or close #123 somewhere
>> Failed regex: /(((close|resolve)(s|d)?)|fix(e(s|d))?) #\d+/i

>> 3. The commit message has some very long lines. The longest line has 90 chars while max. 80 are allowed.
>> Split your message with newlines.

>> The commit message was:
this commit message has some very very very extremely long lines

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore

>> Use git commit --amend to improve the commit message.
>> Hint: use http://www.regexper.com to visualize the regex.
Warning: Task "grunt-commit-message-verify" failed. Use --force to continue.

Using this checker as a Git hook

Have a look at ./git-hooks/commit-msg file. Customize the cfgOrigin variable, and then put the file in your ./.git/hooks folder.

The mentioned file contains a hack to read the config straight from your Gruntfile, provided it's written in a certain way. You may of course tweak it to read the config directly from some other file.

Contributing

Feel invited to contribute to the project. In lieu of a formal styleguide, take care to maintain the existing coding style.

License

Copyright (c) 2014 Aria Templates Licensed under the Apache 2.0 license.