Giter Club home page Giter Club logo

jira-prepare-commit-msg's Introduction

jira-prepare-commit-msg

Downloads MIT license

The husky command to add Jira ticket ID into the commit message if it is missed.

The Jira ticket ID is taken from a git branch name.

Why?

Installing Jira prepare commit msg hook into your project will mean everyone contributing code to your project will automatically tag each commit with it's associated issue key based off the branch name.

So if your branch name is feature/TEST-123-new-feature, then when you commit with a message "initial commit" it will automatically become "[TEST-123] initial commit".

Why would you want this? Well, Jira has many hidden goodies, and this is one of them! If you include an issue key in your commit messages AND you have your deployment pipeline connected to Jira this will unlock many bonus features, such as the Deployments view, Cycle time report, Deployment frequency report and I've heard many more features are coming soon!

Installation

Install the package using NPM

npm install husky jira-prepare-commit-msg --save-dev && npx husky install

For Husky 5:

Execute command

npx husky add .husky/prepare-commit-msg 'npx jira-prepare-commit-msg $1'

For Husky 2-4:

Inside your package.json add a standard husky npm script for the git hook

{
  "husky": {
    "hooks": {
      "prepare-commit-msg": "jira-prepare-commit-msg"
    }
  }
}

Add prepare script

Add a prepare script to ensure husky will be installed after npm install or yarn is run.

via npm @^7

npm set-script prepare "husky install"

manual

Add prepare script to package.json "husky install"

Configuration

Starting with v1.3 you can now use different ways of configuring it:

  • jira-prepare-commit-msg object in your package.json
  • .jirapreparecommitmsgrc file in JSON or YML format
  • jira-prepare-commit-msg.config.js file in JS format

See cosmiconfig for more details on what formats are supported.

package.json example:

{
  "jira-prepare-commit-msg": {
    "messagePattern": "[$J]\n$M",
    "jiraTicketPattern": "([A-Z]+-\\d+)",
    "commentChar": "#",
    "isConventionalCommit": false,
    "allowEmptyCommitMessage": false
  }
}

Supported message pattern

jira-prepare-commit-msg supports special message pattern to configure where Jira ticket number will be inserted.

  • Symbols $J will be replaced on Jira ticket number
  • Symbols $M will be replaced on commit message.

Pattern [$J]\n$M is currently supported by default.

{
  "jira-prepare-commit-msg": {
    "messagePattern": "[$J]\n$M"
  }
}
Examples
  • [$J] $M
  • [$J]-$M
  • $J $M

NOTE: the supplied commit message will be cleaned up by strip mode.

Supported Jira ticket pattern

jira-prepare-commit-msg allows using custom regexp string pattern to search Jira ticket number.

Pattern ((?!([A-Z0-9a-z]{1,10})-?$)[A-Z]{1}[A-Z0-9]+-\\d+) is currently supported by default.

NOTE: to search Jira ticket pattern flag i is used: new RegExp(pattern, i')

{
  "jira-prepare-commit-msg": {
    "jiraTicketPattern": "((?!([A-Z0-9a-z]{1,10})-?$)[A-Z]{1}[A-Z0-9]+-\\d+)"
  }
}

Git comment char

Git uses # by default to comment lines in the commit message. If default char was changed jira-prepare-commit-msg can allow set it.

{
  "jira-prepare-commit-msg": {
    "commentChar": "#"
  }
}

Allow empty commit message

The commit message might be empty after cleanup or using -m "", jira-prepare-commit-msg might insert the Jira ticket number anyway if this flag is set.

{
  "jira-prepare-commit-msg": {
    "allowEmptyCommitMessage": true
  }
}

Conventional commit

jira-prepare-commit-msg supports conventional commit. To insert JIRA ticket number to the description set the following setting:

{
  "jira-prepare-commit-msg": {
    "isConventionalCommit": true
  }
}

NOTE: For description will be applied messagePattern

Examples

If the configuration is:

{
  "jira-prepare-commit-msg": {
    "messagePattern": "[$J] $M",
    "isConventionalCommit": true
  }
}

and commit message is fix(test)!: important changes then at result will be fix(test)!: [JIRA-1234] important changes

What about my non npm projects?

We are working on providing a maven plugin to do the same thing.

We are also working on a manual install. I haven't tested it but if you copy the files from /bin into a hooks folder, rename index.js to commit-msg and set your git hooks path to that folder, that should work. Ideally we just have a single file for this to make the process easier.

TODO

  • Don't double tag if there's already an issue key in the message
  • Hard fail if there's no issue key in branch name or message, suggesting to use --no-verify
  • Test with semantic release
  • Do we need the conventialCommit prop? Can we auto detect this? Can we include this in the template?
  • Can we offer install via husky and install without husky? And offer a way to use this hook in non JS projects?
  • Write tests for semantic release and conventional commit
  • hook doesn't work in interactive mode. Should this be a commit-msg hook instead of prepare-commit-msg ??

Kudos

Kudo to Mo Beigi for being the original mastermind behind this amazing technology!

License

MIT

jira-prepare-commit-msg's People

Contributors

bk201- avatar cmdlucas avatar demwunz avatar dependabot-preview[bot] avatar dependabot[bot] avatar mattcolman avatar mrrefactoring avatar robertmassaioli avatar xanterx avatar

Watchers

 avatar

Forkers

blastoplex

jira-prepare-commit-msg's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.