2021-02-18 00:17:32 +00:00
< p align = "center" >
< h1 align = "center" > sv4git< / h1 >
2021-02-18 00:18:46 +00:00
< p align = "center" > semantic version for git< / p >
2021-02-18 00:17:32 +00:00
< p align = "center" >
< a href = "https://github.com/bvieira/sv4git/releases/latest" > < img alt = "Release" src = "https://img.shields.io/github/release/bvieira/sv4git.svg?style=for-the-badge" > < / a >
< a href = "https://github.com/bvieira/sv4git/stargazers" > < img alt = "GitHub stars" src = "https://img.shields.io/github/stars/bvieira/sv4git?style=for-the-badge" > < / a >
< a href = "/LICENSE" > < img alt = "Software License" src = "https://img.shields.io/badge/license-MIT-informational.svg?style=for-the-badge" > < / a >
< a href = "https://github.com/bvieira/sv4git/actions?workflow=ci" > < img alt = "GitHub Actions" src = "https://img.shields.io/github/workflow/status/bvieira/sv4git/ci?style=for-the-badge" > < / a >
< a href = "https://goreportcard.com/report/github.com/bvieira/sv4git" > < img alt = "Go Report Card" src = "https://goreportcard.com/badge/github.com/bvieira/sv4git?style=for-the-badge" > < / a >
< a href = "https://conventionalcommits.org" > < img alt = "Software License" src = "https://img.shields.io/badge/Conventional%20Commits-1.0.0-informational.svg?style=for-the-badge" > < / a >
< / p >
< / p >
2019-11-17 16:37:41 +00:00
## Getting Started
2021-04-07 23:53:04 +00:00
### Pre Requirements
- Git 2.17+
2019-11-17 16:37:41 +00:00
### Installing
2021-04-07 23:53:04 +00:00
- Download the latest release and add the binary to your path.
- Optional: Set `SV4GIT_HOME` to define user configs. Check the [Config ](#config ) topic for more information.
2019-11-17 16:37:41 +00:00
2019-12-05 00:10:16 +00:00
### Config
2021-04-07 23:53:04 +00:00
There are 3 config levels when using sv4git: [default ](#default ), [user ](#user ), [repository ](#repository ). All of them are merged considering the follow priority: **repository > user > default** .
2021-02-15 06:28:34 +00:00
2021-04-07 23:53:04 +00:00
To see the current config, run:
2021-02-15 06:28:34 +00:00
```bash
git sv cfg show
```
2021-04-07 23:53:04 +00:00
#### Configuration Types
2021-02-15 06:28:34 +00:00
##### Default
2021-04-07 23:53:04 +00:00
To check the default configuration, run:
2021-02-15 06:28:34 +00:00
```bash
git sv cfg default
```
##### User
2021-04-07 23:53:04 +00:00
For user config, it is necessary to define the `SV4GIT_HOME` environment variable, eg.:
2021-02-15 06:28:34 +00:00
```bash
2021-04-07 23:53:04 +00:00
SV4GIT_HOME=/home/myuser/.sv4git # myuser is just an example.
2021-02-15 06:28:34 +00:00
```
2021-04-07 23:53:04 +00:00
And create a `config.yml` file inside it, eg.:
2021-02-15 06:28:34 +00:00
```bash
.sv4git
└── config.yml
```
##### Repository
2021-04-07 23:53:04 +00:00
Create a `.sv4git.yml` file on the root of your repository, eg.: [.sv4git.yml ](.sv4git.yml ).
2021-02-15 06:28:34 +00:00
#### Configuration format
```yml
version: "1.0" #config version
versioning: # versioning bump
2021-04-07 23:53:04 +00:00
update-major: [] # Commit types used to bump major.
update-minor: # Commit types used to bump minor.
2021-02-15 06:28:34 +00:00
- feat
2021-04-07 23:53:04 +00:00
update-patch: # Commit types used to bump patch.
2021-02-15 06:28:34 +00:00
- build
- ci
- chore
- docs
- fix
- perf
- refactor
- style
- test
2021-04-07 23:53:04 +00:00
# When type is not present on update rules and is unknown (not mapped on commit message types);
2021-02-15 06:28:34 +00:00
# if ignore-unknown=false bump patch, if ignore-unknown=true do not bump version
2021-04-07 23:53:04 +00:00
ignore-unknown: false
2021-02-15 06:28:34 +00:00
tag:
2021-04-07 23:53:04 +00:00
pattern: '%d.%d.%d' # Pattern used to create git tag.
2021-02-15 06:28:34 +00:00
release-notes:
2021-04-07 23:53:04 +00:00
headers: # Headers names for release notes markdown. To disable a section just remove the header line.
2021-02-15 06:28:34 +00:00
breaking-change: Breaking Changes
feat: Features
fix: Bug Fixes
2021-04-07 23:53:04 +00:00
branches: # Git branches config.
prefix: ([a-z]+\/)? # Prefix used on branch name, it should be a regex group.
suffix: (-.*)? # Suffix used on branch name, it should be a regex group.
disable-issue: false # Set true if there is no need to recover issue id from branch name.
skip: # List of branch names ignored on commit message validation.
2021-02-15 06:28:34 +00:00
- master
- main
- developer
2021-04-07 23:53:04 +00:00
skip-detached: false # Set true if a detached branch should be ignored on commit message validation.
2021-02-15 06:28:34 +00:00
commit-message:
2021-04-07 23:53:04 +00:00
types: # Supported commit types.
2021-02-15 06:28:34 +00:00
- build
- ci
- chore
- docs
- feat
- fix
- perf
- refactor
- revert
- style
- test
scope:
2021-04-07 23:53:04 +00:00
# Define supported scopes, if blank, scope will not be validated, if not, only scope listed will be valid.
# Don't forget to add "" on your list if you need to define scopes and keep it optional.
2021-02-15 06:28:34 +00:00
values: []
footer:
2021-04-07 23:53:04 +00:00
issue: # Use "issue: {}" if you wish to disable issue footer.
key: jira # Name used to define an issue on footer metadata.
key-synonyms: # Supported variations for footer metadata.
2021-02-15 06:28:34 +00:00
- Jira
- JIRA
2021-04-07 23:53:04 +00:00
use-hash: false # If false, use :< space > separator. If true, use < space > # separator.
2021-07-18 20:18:00 +00:00
add-value-prefix: '' # Add a prefix to issue value.
2021-02-15 06:28:34 +00:00
issue:
2021-04-07 23:53:04 +00:00
regex: '[A-Z]+-[0-9]+' # Regex for issue id.
2021-02-15 06:28:34 +00:00
```
2019-12-05 00:10:16 +00:00
### Running
2019-11-17 16:37:41 +00:00
2021-04-07 23:53:04 +00:00
Run `git-sv` to get the list of available parameters:
2019-11-17 16:37:41 +00:00
```bash
git-sv
```
2019-12-05 00:10:16 +00:00
#### Run as git command
2019-11-17 16:37:41 +00:00
2021-04-07 23:53:04 +00:00
If `git-sv` is configured on your path, you can use it like a git command:
2019-11-17 16:37:41 +00:00
```bash
git sv
git sv current-version
git sv next-version
```
2019-12-05 00:10:16 +00:00
#### Usage
2019-12-04 23:57:05 +00:00
2021-04-07 23:53:04 +00:00
Use `--help` or `-h` to get usage information, don't forget that some commands have unique options too:
2019-12-04 23:57:05 +00:00
2020-02-01 22:02:03 +00:00
```bash
# sv help
git-sv -h
2019-12-04 23:57:05 +00:00
2020-02-01 22:02:03 +00:00
# sv release-notes command help
git-sv rn -h
```
2019-12-04 23:57:05 +00:00
2020-02-01 22:02:03 +00:00
##### Available commands
2019-12-04 23:57:05 +00:00
2021-02-15 06:31:56 +00:00
| Variable | description | has options or subcommands |
| ---------------------------- | ------------------------------------------------------------- | :------------------------: |
2021-04-07 23:53:04 +00:00
| config, cfg | Show config information. | :heavy_check_mark: |
| current-version, cv | Get last released version from git. | :x: |
| next-version, nv | Generate the next version based on git commit messages. | :x: |
| commit-log, cl | List all commit logs according to range as jsons. | :heavy_check_mark: |
| commit-notes, cn | Generate a commit notes according to range. | :heavy_check_mark: |
| release-notes, rn | Generate release notes. | :heavy_check_mark: |
| changelog, cgl | Generate changelog. | :heavy_check_mark: |
| tag, tg | Generate tag with version based on git commit messages. | :x: |
| commit, cmt | Execute git commit with convetional commit message helper. | :x: |
| validate-commit-message, vcm | Use as prepare-commit-message hook to validate commit message.| :heavy_check_mark: |
| help, h | Shows a list of commands or help for one command. | :x: |
2019-12-04 23:57:05 +00:00
2021-01-25 21:24:25 +00:00
##### 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 ](https://git-scm.com/docs/git-log#Documentation/git-log.txt---dateltformatgt ) at `git log` , all dates returned from it will be in `YYYY-MM-DD` format.
2021-04-11 01:59:30 +00:00
Range `tag` will use `git for-each-ref refs/tags` 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.
2021-01-25 21:24:25 +00:00
2021-04-07 23:53:04 +00:00
Range `date` use git log `--since` and `--until` . It's possible to use all supported formats from [git log ](https://git-scm.com/docs/git-log#Documentation/git-log.txt---sinceltdategt ). If `end` is in `YYYY-MM-DD` format, `sv` will add a day on git log command to make the end date inclusive.
2021-01-25 21:24:25 +00:00
Range `tag` and `hash` are used on git log [revision range ](https://git-scm.com/docs/git-log#Documentation/git-log.txt-ltrevisionrangegt ). If `end` is empty, `HEAD` will be used instead.
```bash
# 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
```
2020-09-01 01:28:54 +00:00
##### Use validate-commit-message as prepare-commit-msg hook
2021-04-07 23:53:04 +00:00
Configure your `.git/hooks/prepare-commit-msg` :
2020-09-01 01:28:54 +00:00
```bash
#!/bin/sh
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3
2021-02-26 00:12:43 +00:00
git sv vcm --path "$(pwd)" --file "$COMMIT_MSG_FILE" --source "$COMMIT_SOURCE"
2020-09-01 01:28:54 +00:00
```
2021-04-07 23:53:04 +00:00
**Tip**: you can configure a directory as your global git templates using the command below:
2020-09-01 01:28:54 +00:00
```bash
git config --global init.templatedir '< YOUR TEMPLATE DIR > '
```
2021-04-07 23:53:04 +00:00
Check [git config docs ](https://git-scm.com/docs/git-config#Documentation/git-config.txt-inittemplateDir ) for more information!
2019-11-17 16:37:41 +00:00
## Development
### Makefile
2021-04-07 23:53:04 +00:00
Run `make` to get the list of available actions:
2019-11-17 16:37:41 +00:00
```bash
make
```
#### Make configs
2020-08-28 02:04:33 +00:00
| Variable | description |
| ---------- | ---------------------- |
2021-04-07 23:53:04 +00:00
| BUILDOS | Build OS. |
| BUILDARCH | Build arch. |
| ECHOFLAGS | Flags used on echo. |
| BUILDENVS | Var envs used on build.|
| BUILDFLAGS | Flags used on build. |
2020-08-28 02:04:33 +00:00
| Parameters | description |
| ---------- | ----------------------------------- |
2021-04-07 23:53:04 +00:00
| args | Parameters that will be used on run.|
2019-11-17 16:37:41 +00:00
```bash
#variables
BUILDOS="linux" BUILDARCH="amd64" make build
#parameters
make run args="-h"
```
### Build
```bash
make build
```
2021-04-07 23:53:04 +00:00
The binary will be created on `bin/$BUILDOS_$BUILDARCH/git-sv` .
2019-11-17 16:37:41 +00:00
### Tests
```bash
make test
```
### Run
```bash
#without args
make run
#with args
make run args="-h"
```