Skip to content

rolasotelo/goodcommit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Goodcommit

Goodcommit is a plugin-first CLI for generating structured, consistent commit messages.

It runs a configurable plugin pipeline across commit phases (collect, enrich, finalize, etc.), then composes the final message and executes git commit.

Quick Start

  1. Install:
go install github.com/rolasotelo/goodcommit/cmd/goodcommit@latest
  1. Bootstrap config in your repository:
goodcommit init

This scaffolds:

  • configs/goodcommit.plugins.json
  • configs/commit-types.json
  • goodcommit.plugins.lock (unless --lock=false)
  1. Run interactively:
goodcommit
  1. Dry run (no commit):
goodcommit -m

Existing Repo Setup

If config already exists and you only want to refresh lock/build artifacts:

goodcommit plugin lock \
  --plugins-config ./configs/goodcommit.plugins.json \
  --plugins-bin-dir gobin \
  --plugins-lockfile ./goodcommit.plugins.lock

Verify:

goodcommit plugin verify \
  --plugins-config ./configs/goodcommit.plugins.json \
  --plugins-lockfile ./goodcommit.plugins.lock

Default Built-in Flow

Current default stack (from configs/goodcommit.plugins.json):

  • builtin/logo
  • builtin/types
  • builtin/scopes
  • builtin/description
  • builtin/why
  • builtin/body
  • builtin/breaking
  • builtin/breakingmsg
  • builtin/coauthors
  • builtin/conventional-title
  • builtin/signedoffby

Notes:

  • logo and types share one grouped page (ui_group: "intro").
  • Grouped UI is compact by default.
  • Use --detailed-ui (or GOODCOMMIT_DETAILED_UI=true) to show verbose grouped section headings/instructions.

Non-Interactive Usage

You can provide answers via --plugin-answer:

goodcommit \
  --plugin-answer commit_type=feat \
  --plugin-answer commit_description="add plugin lock verification" \
  -m

To inspect required/optional answers for automation/agents:

goodcommit plugin context \
  --plugins-config ./configs/goodcommit.plugins.json \
  --plugins-lockfile ./goodcommit.plugins.lock

Config Notes

  • Main plugin config: configs/goodcommit.plugins.json
  • Example config: configs/plugins-config.example.json
  • Default logo file: configs/logo.ascii.txt
  • Scope options file: configs/commit-scopes.json
  • Co-author options file: configs/commit-coauthors.json

Built-in plugins can omit explicit manifest/source in config; runtime resolves them from embedded built-in definitions.

You can force specific plugin answer keys to be mandatory via required_answers on that plugin config entry. Example:

{
  "id": "builtin/body",
  "required_answers": ["commit_body"]
}

This affects both:

  • goodcommit plugin context output (commit_body will move to required_answers)
  • Runtime execution (plugin invocation fails if required answers are still missing/empty, even when that plugin uses fail_open)

init Flags

goodcommit init [flags]
  • --plugins-config path to scaffold plugins config (default ./configs/goodcommit.plugins.json)
  • --types-config path to scaffold commit types config (default ./configs/commit-types.json)
  • --plugins-lockfile lockfile output path (default goodcommit.plugins.lock)
  • --plugins-bin-dir executable output directory (default gobin, which resolves to GOBIN/Go bin dir)
  • --lock build+write lockfile after scaffolding (default true)
  • --force overwrite scaffold files if they already exist

License

MIT. See LICENSE.

About

good and standardized commit messages easily

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages