0
0
mirror of https://github.com/thegeeklab/git-sv.git synced 2024-09-20 00:02:46 +02:00
Semantic versioning tool for git based on conventional commits
Go to file
2021-02-15 03:23:02 -03:00
.github/workflows chore: rename action from go to ci 2020-08-27 23:35:32 -03:00
cmd/git-sv feat: ignore known types on bumping version if not mapped on bump config 2021-02-15 02:41:43 -03:00
sv feat: support # as footer metadata separator 2021-02-15 03:23:02 -03:00
.gitignore chore: update go and semver versions 2021-02-13 15:40:09 -03:00
.sv4git.yml chore: add .sv4git.yml 2021-02-15 01:50:28 -03:00
go.mod feat: config sv4git using yaml 2021-02-14 19:42:22 -03:00
go.sum feat: config sv4git using yaml 2021-02-14 19:42:22 -03:00
LICENSE Initial commit 2019-11-17 12:42:31 -03:00
Makefile build: add sv version on make release-all 2020-07-16 20:25:19 -03:00
README.md docs: add range section 2021-01-25 18:24:25 -03:00

sv4git

Semantic version for git

Getting Started

Installing

download the latest release and add the binary on your path

Config

you can config using the environment variables

Variable description default
SV4GIT_MAJOR_VERSION_TYPES types used to bump major version
SV4GIT_MINOR_VERSION_TYPES types used to bump minor version feat
SV4GIT_PATCH_VERSION_TYPES types used to bump patch version build,ci,chore,docs,fix,perf,refactor,style,test
SV4GIT_INCLUDE_UNKNOWN_TYPE_AS_PATCH force patch bump on unknown type true
SV4GIT_BRAKING_CHANGE_PREFIXES list of prefixes that will be used to identify a breaking change BREAKING CHANGE:,BREAKING CHANGES:
SV4GIT_ISSUEID_PREFIXES list of prefixes that will be used to identify an issue id jira:,JIRA:,Jira:
SV4GIT_TAG_PATTERN tag version pattern %d.%d.%d
SV4GIT_RELEASE_NOTES_TAGS release notes headers for each visible type fix:Bug Fixes,feat:Features
SV4GIT_VALIDATE_MESSAGE_SKIP_BRANCHES ignore branches from this list on validate commit message master,develop
SV4GIT_COMMIT_MESSAGE_TYPES list of valid commit types for commit message build,ci,chore,docs,feat,fix,perf,refactor,revert,style,test
SV4GIT_ISSUE_KEY_NAME metadata key name used on validate commit message hook to enhance footer, if blank footer will not be added jira
SV4GIT_ISSUE_REGEX issue id regex, if blank footer will not be added [A-Z]+-[0-9]+
SV4GIT_BRANCH_ISSUE_REGEX regex to extract issue id from branch name, must have 3 groups (prefix, id, posfix), if blank footer will not be added ^([a-z]+\/)?([A-Z]+-[0-9]+)(-.*)?

Running

run git-sv to get the list of available parameters

git-sv

Run as git command

if git-sv is configured on your path, you can use it like a git command

git sv
git sv current-version
git sv next-version

Usage

use --help or -h to get usage information, dont forget that some commands have unique options too

# sv help
git-sv -h

# sv release-notes command help
git-sv rn -h
Available commands
Variable description has options
current-version, cv get last released version from git
next-version, nv generate the next version based on git commit messages
commit-log, cl list all commit logs according to range as jsons ✔️
commit-notes, cn generate a commit notes according to range ✔️
release-notes, rn generate release notes ✔️
changelog, cgl generate changelog ✔️
tag, tg generate tag with version based on git commit messages
commit, cmt execute git commit with convetional commit message helper
validate-commit-message, vcm use as prepare-commit-message hook to validate commit message ✔️
help, h shows a list of commands or help for one command
Use range

Commands like commit-log and commit-notes has a range option. Supported range types are: tag, date and hash.

By default, it's used --date=short at git log, all dates returned from it will be in YYYY-MM-DD format.

Range tag will use git describe to get the last tag available if start is empty, the others types won't use the existing tags, it's recommended to always use a start limit in a old repository with a lot of commits. This behavior was maintained to not break the retrocompatibility.

Range date use git log --since and --until, it's possible to use all supported formats from git log, if end is in YYYY-MM-DD format, sv will add a day on git log command to make the end date inclusive.

Range tag and hash are used on git log revision range. If end is empty, HEAD will be used instead.

# get commit log as json using a inclusive range
git-sv commit-log --range hash --start 7ea9306~1 --end c444318

# return all commits after last tag
git-sv commit-log --range tag
Use validate-commit-message as prepare-commit-msg hook

Configure your .git/hooks/prepare-commit-msg

#!/bin/sh

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

git sv vcm --path "$(pwd)" --file $COMMIT_MSG_FILE --source $COMMIT_SOURCE

tip: you can configure a directory as your global git templates using the command below, check git config docs for more information!

git config --global init.templatedir '<YOUR TEMPLATE DIR>'

Development

Makefile

run make to get the list of available actions

make

Make configs

Variable description
BUILDOS build OS
BUILDARCH build arch
ECHOFLAGS flags used on echo
BUILDENVS var envs used on build
BUILDFLAGS flags used on build
Parameters description
args parameters that will be used on run
#variables
BUILDOS="linux" BUILDARCH="amd64" make build

#parameters
make run args="-h"

Build

make build

the binary will be created on bin/$BUILDOS_$BUILDARCH/git-sv

Tests

make test

Run

#without args
make run

#with args
make run args="-h"