sascha-andres/git-commit

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# git-commit

[![Go Report Card](https://goreportcard.com/badge/github.com/sascha-andres/git-commit)](https://goreportcard.com/report/github.com/sascha-andres/git-commit) [![Maintainability](https://api.codeclimate.com/v1/badges/89c3d725bc80fe513869/maintainability)](https://codeclimate.com/github/sascha-andres/git-commit/maintainability) [![codebeat badge](https://codebeat.co/badges/e26b8c40-1ada-41b7-82c6-4dd7e96edde0)](https://codebeat.co/projects/github-com-sascha-andres-git-commit-master)
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fsascha-andres%2Fgit-commit.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fsascha-andres%2Fgit-commit?ref=badge_shield)

This project is a configurable commit-msg hook. You can either configure using a global configuration file of a repository configuration file. If both exist, repository file will be merged into global configuration file.

The global configuration file is located in the HOME directory of the user and named `.commit-hook.yaml` while the repository specific file is in the root of the repository and named `.commit-hook.yaml`.

Both files have the same structure.

## Configuration file structure

    ---
    
    version: 2                           # version of config file
    
    subject-line-length: 50              # Length of the subject line at a maximum
    body-required: false                 # Is a body required for a commit
    separate-body: true                  # Should the body be separated by a blank line
    body-line-length: 72                 # Maximum length of body lines
    enforce-body-line-length: true       # Should too long body lines be treated as an error or as a warning
    lint_gitlab_ci: true                 # If true this calls out to lint .gitlab-ci.yml files
    gitlab_ci_file: relativePath         # Set a different CI file location
    confd-directories                    # Specify whether .commit-msg.d directory is used
    
    ignore:                              # a list of regular expressions to ignore lines (no check)
      - ^#.*                             # ignore comments
    
    subject:                                         # Match the subject against those expressions
      - name: ensure tagging of subject              # Name of rule
        expression: ^[a-z]+(\([a-z]+\))?:.*[^\.]$    # have feat(web): bla match, no . at the end allowed
        severity: error                              # on error fail commit, else print with severity attached
    
    occurs:                              # Match somewhere, check for existence
      - TICKET-[0-9]+                    # have a TICKET-1 as a match

    external-tools:                      # external tools to run before accepting commit
      - severity: error                  # on error fail commit, else print with severity attached
        name: linter                     # name of rule
        command:                         # command to execute
          - make
          - lint


## Installation

Put the binary into your path. If you want to use GitLab CI linting you need to use: https://gitlab.com/orobardet/gitlab-ci-linter

## Use

### install hook

The application has a helper to install the hook:

    git-hook-commit install

You need to run this in the root of your project ( the folder containing the `.git` folder ). If there is an existing hook you have to force it ( `-f` ).

### uninstall hook

Similar to the installation process, there is an uninstall helper:

    git-hook-commit uninstall

Essentially this just removes the hook, so it would remove any other hook also. So be careful.

## History

|Version|Description|
|---|---|
|1.1.0|Add support for conf.d directory|
|1.0.1|better gitlab ci handling|
|1.0.0|update to use go modules|
|0.9.0|add support for GitLab CI linter|
||fix a bug where body lines where multiplied by the number of ignore expressions|
|0.8.0|add support for Co-authored-by|
|0.7.0|rename binary|
|0.6.2|code quality improvements|
|0.6.1|code quality improvements|
|0.6.0|remove v1|
||run external tools|
||fix: version check|
|0.5.0|version 2 of configuration|
||Naming of rules|
||Severity for rules|
|0.4.0|add version to config file|
|0.3.1|integration with code quality tools|
|0.3.0|print version information|
|0.2.0|configuration file is now named `.commit-hook.yaml`|
||fix: project configuration now correctly located in repository root|
||fix: run subject line length|
|0.1.0|Initial version|


## License
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fsascha-andres%2Fgit-commit.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fsascha-andres%2Fgit-commit?ref=badge_large)