Skip to content

swellaby/captain-githook

Repository files navigation

captain-githook

Cross-platform, configurable, git hook utility geared for Go codebases.

****** Functional, but still in Beta ******

Linux CI Badge Mac CI Badge Windows CI Badge

Test Results Badge Coverage Badge Sonar Quality Gate Badge

Contents

About

Git hooks are scripts/commands that git can execute on certain events which helps you automate tasks, enforce quality and consistency in your code, and more. captain-githook allows you to utilize any and all git hooks in your repository (commit-msg, pre-commit, pre-push, etc.) via a simple configuration file.

Yes, there are other git hook utilities out there (in fact we love, recommend, and use husky in our JavaScript/TypeScript projects that use npm). However, we made captain-githook because we wanted a git hook utility for our Go codebases that was cross-platform, easily configurable, and that wasn't dependent on another, non-Go framework/runtime.

Installation

We'll be adding binary releases shortly, but for now you'll need to have your Go environment setup and use go get i.e.:

go get -u github.com/swellaby/captain-githook

Note that the latest captain-githook version requires Go 1.12 or higher. If you need to use captain-githook on Go 1.11 and earlier, make sure you use the v0.0.7 tag:

go get -u github.com/swellaby/[email protected]

This will ensure that the captain-githook executable is available on your system for initializing your repositories (creating git hook and config files) as well as for executing your defined hook scripts.

Getting Started

Run the init sub-command within a git repository to create the git hook files and create the captain-githook config file:

captain-githook init

If you'd prefer to use a different name for the config file, you can specify your desired config file name as a flag (--config-filename or --f) on the init command. For example:

captain-githook init --config-filename .captain-githookrc.json

See allowed config file names below for info on what config file names you can use.

Configure

You specify which scripts/commands you want to run for each git hook in the captain-githook configuration file included in your repository.

The captain-githook config is a json formatted file (we'll consider supporting other formats like yaml or toml if there's enough interest) and must be named with one of the allowed file names.

Just ensure there's a hooks object key, and then for every git hook you want to run, add a key with the hook name (see supported hooks for allowed hook names) and the script/command you want to run.

// captaingithook.json
{
    "hooks": {
        "pre-commit": "golint ./...",
        "pre-push": "go test ./..."
    }
}

Supported Hooks

captain-githook supports all the below git hooks:

  • applypatch-msg
  • pre-applypatch
  • post-applypatch
  • pre-commit
  • prepare-commit-msg
  • commit-msg
  • post-commit
  • pre-rebase
  • post-checkout
  • post-merge
  • pre-receive
  • update
  • post-receive
  • post-update
  • pre-auto-gc
  • post-rewrite
  • pre-push

Config File Names

There are several supported names you can use for your config file:

  • captaingithook.json
  • .captaingithook.json
  • captaingithookrc
  • .captaingithookrc
  • captaingithookrc.json
  • .captaingithookrc.json
  • captain-githook.json
  • .captain-githook.json
  • captain-githookrc
  • .captain-githookrc
  • captain-githookrc.json
  • .captain-githookrc.json

Remove

Not yet implemented


Back to top