github.com/git-chglog/git-chglog@v0.15.5-0.20240126074033-6a6993d52d69/README.md (about) 1 # git-chglog 2 3 ![git-chglog](https://raw.githubusercontent.com/git-chglog/artwork/master/repo-banner%402x.png) 4 5 [![godoc.org](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](https://godoc.org/github.com/git-chglog/git-chglog) 6 [![Actions Status](https://github.com/git-chglog/git-chglog/workflows/tests/badge.svg)](https://github.com/git-chglog/git-chglog/actions) 7 [![Coverage Status](https://img.shields.io/coveralls/github/git-chglog/git-chglog.svg?style=flat-square)](https://coveralls.io/github/git-chglog/git-chglog?branch=master) 8 [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://github.com/git-chglog/git-chglog/blob/master/LICENSE) 9 10 > CHANGELOG generator implemented in Go (Golang). 11 > _Anytime, anywhere, Write your CHANGELOG._ 12 13 ## Table of Contents 14 15 - [git-chglog](#git-chglog) 16 - [Table of Contents](#table-of-contents) 17 - [Features](#features) 18 - [How it works](#how-it-works) 19 - [Getting Started](#getting-started) 20 - [Installation](#installation) 21 - [Homebrew (for macOS users)](#homebrew-for-macos-users) 22 - [Scoop (for Windows users)](#scoop-for-windows-users) 23 - [asdf](#asdf) 24 - [Go users](#go-users) 25 - [Docker](#docker) 26 - [Test Installation](#test-installation) 27 - [Quick Start](#quick-start) 28 - [CLI Usage](#cli-usage) 29 - [`tag query`](#tag-query) 30 - [Configuration](#configuration) 31 - [`bin`](#bin) 32 - [`style`](#style) 33 - [`template`](#template) 34 - [`info`](#info) 35 - [`options`](#options) 36 - [`options.sort`](#optionssort) 37 - [`options.commits`](#optionscommits) 38 - [`options.commit_groups`](#optionscommit_groups) 39 - [`options.header`](#optionsheader) 40 - [`options.issues`](#optionsissues) 41 - [`options.refs`](#optionsrefs) 42 - [`options.merges`](#optionsmerges) 43 - [`options.reverts`](#optionsreverts) 44 - [`options.notes`](#optionsnotes) 45 - [Templates](#templates) 46 - [Supported Styles](#supported-styles) 47 - [Jira Integration](#jira-integration) 48 - [1. Change the header parse pattern to recognize Jira issue id in the configure file](#1-change-the-header-parse-pattern-to-recognize-jira-issue-id-in-the-configure-file) 49 - [2. Add Jira configuration to the configure file](#2-add-jira-configuration-to-the-configure-file) 50 - [3. Update the template to show Jira data](#3-update-the-template-to-show-jira-data) 51 - [FAQ](#faq) 52 - [TODO](#todo) 53 - [Thanks](#thanks) 54 - [Contributing](#contributing) 55 - [Development](#development) 56 - [Release Process](#release-process) 57 - [Feedback](#feedback) 58 - [CHANGELOG](#changelog) 59 - [Related Projects](#related-projects) 60 - [License](#license) 61 62 ## Features 63 64 - :recycle: High portability 65 - It works with single binary. Therefore, any project (environment) can be used. 66 - :beginner: Simple usability 67 - The CLI usage is very simple and has low learning costs. 68 - For example, the simplest command is `$ git-chglog`. 69 - :rocket: High flexibility 70 - Commit message format and ... 71 - CHANGELOG's style (Template) and ... 72 - etc ... 73 74 ## How it works 75 76 `git-chglog` internally uses the `git` command to get data to include in the 77 CHANGELOG. The basic steps are as follows. 78 79 1. Get all the tags. 80 1. Get the commits contained between `tagA` and `tagB`. 81 1. Execute with all tags corresponding to [tag query](#tag-query) that were specified in Step 1 and 2. 82 83 ## Getting Started 84 85 We will start with installation and introduce the steps up to the automatic generation 86 of the configuration file and template. 87 88 ### Installation 89 90 Please install `git-chglog` in a way that matches your environment. 91 92 #### [Homebrew](https://brew.sh) (for macOS users) 93 94 ```bash 95 brew tap git-chglog/git-chglog 96 brew install git-chglog 97 ``` 98 99 #### [Scoop](https://scoop.sh) (for Windows users) 100 101 ```bash 102 scoop install git-chglog 103 ``` 104 105 #### [asdf](https://asdf-vm.com/) 106 107 ```bash 108 asdf plugin-add git-chglog https://github.com/GoodwayGroup/asdf-git-chglog.git 109 asdf install git-chglog latest 110 ``` 111 112 #### Go users 113 114 ```bash 115 go install github.com/git-chglog/git-chglog/cmd/git-chglog@latest 116 ``` 117 118 ### [Docker](https://www.docker.com/) 119 The compiled docker images are maintained on [quay.io](https://quay.io/repository/git-chglog/git-chglog). 120 We maintain the following tags: 121 - `edge`: Image that is build from the current `HEAD` of the main line branch. 122 - `latest`: Image that is built from the [latest released version](https://github.com/git-chglog/git-chglog/releases) 123 - `x.y.y` (versions): Images that are build from the tagged versions within Github. 124 ```bash 125 docker pull quay.io/git-chglog/git-chglog:latest 126 docker run -v "$PWD":/workdir quay.io/git-chglog/git-chglog --version 127 ``` 128 --- 129 130 If you are using another platform, you can download a binary from the [releases page] 131 and place it in a directory in your `$PATH`. 132 133 ### Test Installation 134 135 You can check with the following command whether the `git-chglog` command was 136 included in a directory that is in your `$PATH`. 137 138 ```bash 139 $ git-chglog --version 140 # outputs the git-chglog version 141 ``` 142 143 ### Quick Start 144 145 `git-chglog` requires configuration files and templates to generate a CHANGELOG. 146 147 However, it is a waste of time to create configuration files and templates from scratch. 148 149 Therefore we recommend using the `--init` option which will create them interactively :+1: 150 151 ```bash 152 git-chglog --init 153 ``` 154 155 ![init option demo](./docs/assets/init.gif) 156 157 --- 158 159 You are now ready for configuration files and templates! 160 161 Let's immediately generate a CHANGELOG of your project. 162 By doing the following simple command, Markdown for your CHANGELOG is displayed 163 on stdout. 164 165 ```bash 166 git-chglog 167 ``` 168 169 Use `-o` (`--output`) option if you want to output to a file instead of stdout. 170 171 ```bash 172 git-chglog -o CHANGELOG.md 173 ``` 174 175 --- 176 177 You now know basic usage of `git-chglog`! 178 179 In order to make a better CHANGELOG, please refer to the following document and 180 customize it. 181 182 ## CLI Usage 183 184 ```bash 185 $ git-chglog --help 186 187 USAGE: 188 git-chglog [options] <tag query> 189 190 There are the following specification methods for <tag query>. 191 192 1. <old>..<new> - Commit contained in <old> tags from <new>. 193 2. <name>.. - Commit from the <name> to the latest tag. 194 3. ..<name> - Commit from the oldest tag to <name>. 195 4. <name> - Commit contained in <name>. 196 197 OPTIONS: 198 --init generate the git-chglog configuration file in interactive (default: false) 199 --path value Filter commits by path(s). Can use multiple times. 200 --config value, -c value specifies a different configuration file to pick up (default: ".chglog/config.yml") 201 --template value, -t value specifies a template file to pick up. If not specified, use the one in config 202 --repository-url value specifies git repo URL. If not specified, use 'repository_url' in config 203 --output value, -o value output path and filename for the changelogs. If not specified, output to stdout 204 --next-tag value treat unreleased commits as specified tags (EXPERIMENTAL) 205 --silent disable stdout output (default: false) 206 --no-color disable color output (default: false) [$NO_COLOR] 207 --no-emoji disable emoji output (default: false) [$NO_EMOJI] 208 --no-case disable case sensitive filters (default: false) 209 --tag-filter-pattern value Regular expression of tag filter. Is specified, only matched tags will be picked 210 --jira-url value Jira URL [$JIRA_URL] 211 --jira-username value Jira username [$JIRA_USERNAME] 212 --jira-token value Jira token [$JIRA_TOKEN] 213 --sort value Specify how to sort tags; currently supports "date" or by "semver" (default: date) 214 --help, -h show help (default: false) 215 --version, -v print the version (default: false) 216 217 EXAMPLE: 218 219 $ git-chglog 220 221 If <tag query> is not specified, it corresponds to all tags. 222 This is the simplest example. 223 224 $ git-chglog 1.0.0..2.0.0 225 226 The above is a command to generate CHANGELOG including commit of 1.0.0 to 2.0.0. 227 228 $ git-chglog 1.0.0 229 230 The above is a command to generate CHANGELOG including commit of only 1.0.0. 231 232 $ git-chglog $(git describe --tags $(git rev-list --tags --max-count=1)) 233 234 The above is a command to generate CHANGELOG with the commit included in the latest tag. 235 236 $ git-chglog --output CHANGELOG.md 237 238 The above is a command to output to CHANGELOG.md instead of standard output. 239 240 $ git-chglog --config custom/dir/config.yml 241 242 The above is a command that uses a configuration file placed other than ".chglog/config.yml". 243 244 $ git-chglog --path path/to/my/component --output CHANGELOG.component.md 245 246 Filter commits by specific paths or files in git and output to a component specific changelog. 247 ``` 248 249 ### `tag query` 250 251 You can specify which commits to include in the generation of CHANGELOG using `<tag query>`. 252 253 The table below shows Query patterns and summaries, and Query examples. 254 255 | Query | Description | Example | 256 |:---------------|:-----------------------------------------------|:----------------------------| 257 | `<old>..<new>` | Commit contained in `<new>` tags from `<old>`. | `$ git-chglog 1.0.0..2.0.0` | 258 | `<name>..` | Commit from the `<name>` to the latest tag. | `$ git-chglog 1.0.0..` | 259 | `..<name>` | Commit from the oldest tag to `<name>`. | `$ git-chglog ..2.0.0` | 260 | `<name>` | Commit contained in `<name>`. | `$ git-chglog 1.0.0` | 261 262 ## Configuration 263 264 The `git-chglog` configuration is a yaml file. The default location is 265 `.chglog/config.yml`. 266 267 Below is a complete list that you can use with `git-chglog`. 268 269 ```yaml 270 bin: git 271 style: "" 272 template: CHANGELOG.tpl.md 273 info: 274 title: CHANGELOG 275 repository_url: https://github.com/git-chglog/git-chglog 276 277 options: 278 tag_filter_pattern: '^v' 279 sort: "date" 280 281 commits: 282 filters: 283 Type: 284 - feat 285 sort_by: Scope 286 287 commit_groups: 288 group_by: Type 289 sort_by: Title 290 title_order: 291 - feat 292 title_maps: 293 feat: Features 294 295 header: 296 pattern: "<regexp>" 297 pattern_maps: 298 - PropName 299 300 issues: 301 prefix: 302 - # 303 304 refs: 305 actions: 306 - Closes 307 - Fixes 308 309 merges: 310 pattern: "^Merge branch '(\\w+)'$" 311 pattern_maps: 312 - Source 313 314 reverts: 315 pattern: "^Revert \"([\\s\\S]*)\"$" 316 pattern_maps: 317 - Header 318 319 notes: 320 keywords: 321 - BREAKING CHANGE 322 ``` 323 324 ### `bin` 325 326 Git execution command. 327 328 | Required | Type | Default | Description | 329 |:---------|:-------|:--------|:------------| 330 | N | String | `"git"` | - | 331 332 ### `style` 333 334 CHANGELOG style. Automatic linking of issues and notices, initial value setting 335 such as merges etc. are done automatically. 336 337 | Required | Type | Default | Description | 338 |:---------|:-------|:---------|:-------------------------------------------------------| 339 | N | String | `"none"` | Should be `"github"` `"gitlab"` `"bitbucket"` `"none"` | 340 341 ### `template` 342 343 Path for the template file. It is specified by a relative path from the setting 344 file. Absolute paths are also ok. 345 346 | Required | Type | Default | Description | 347 |:---------|:-------|:---------------------|:------------| 348 | N | String | `"CHANGELOG.tpl.md"` | - | 349 350 ### `info` 351 352 Metadata for CHANGELOG. Depending on Style, it is sometimes used in processing, 353 so it is recommended to specify it. 354 355 | Key | Required | Type | Default | Description | 356 |:-----------------|:---------|:-------|:--------------|:-----------------------| 357 | `title` | N | String | `"CHANGELOG"` | Title of CHANGELOG. | 358 | `repository_url` | N | String | none | URL of git repository. | 359 360 ### `options` 361 362 Options used to process commits. 363 364 #### `options.sort` 365 366 Options concerning the acquisition and sort of commits. 367 368 | Required | Type | Default | Description | 369 |:---------|:------------|:----------|:--------------------------------------------------------------------------------------------------------------------| 370 | N | String | `"date"` | Defines how tags are sorted in the generated change log. Values: "date", "semver". | 371 372 #### `options.commits` 373 374 Options concerning the acquisition and sort of commits. 375 376 | Key | Required | Type | Default | Description | 377 |:----------|:---------|:------------|:----------|:----------------------------------------------------------------------------------------------------| 378 | `filters` | N | Map in List | none | Filter by using `Commit` properties and values. Filtering is not done by specifying an empty value. | 379 | `sort_by` | N | String | `"Scope"` | Property name to use for sorting `Commit`. See [Commit]. | 380 381 #### `options.commit_groups` 382 383 Options for groups of commits. 384 385 | Key | Required | Type | Default | Description | 386 |:--------------|:---------|:------------|:----------|:-------------------------------------------------------------------------------------------| 387 | `group_by` | N | String | `"Type"` | Property name of `Commit` to be grouped into `CommitGroup`. See [CommitGroup][doc-commit]. | 388 | `sort_by` | N | String | `"Title"` | Property name to use for sorting `CommitGroup`. See [CommitGroup][doc-commit-group]. | 389 | `title_order` | N | List | none | Predefined order of titles to use for sorting `CommitGroup`. Only if `sort_by` is `Custom` | 390 | `title_maps` | N | Map in List | none | Map for `CommitGroup` title conversion. | 391 392 #### `options.header` 393 394 This option is used for parsing the commit header. 395 396 | Key | Required | Type | Default | Description | 397 |:---------------|:---------|:-------|:--------|:--------------------------------------------------------------------------------------------------------| 398 | `pattern` | Y | String | none | A regular expression to use for parsing the commit header. | 399 | `pattern_maps` | Y | List | none | A rule for mapping the result of `HeaderPattern` to the property of `Commit`. See [Commit][doc-commit]. | 400 401 #### `options.issues` 402 403 This option is used to detect issues. 404 405 | Key | Required | Type | Default | Description | 406 |:---------|:---------|:-----|:--------|:-------------------------------------------| 407 | `prefix` | N | List | none | Prefix used for issues. (e.g. `#`, `#gh-`) | 408 409 #### `options.refs` 410 411 This option is for parsing references. 412 413 | Key | Required | Type | Default | Description | 414 |:----------|:---------|:-----|:--------|:-----------------------------------------------| 415 | `actions` | N | List | none | Word list of `Ref.Action`. See [Ref][doc-ref]. | 416 417 #### `options.merges` 418 419 Options to detect and parse merge commits. 420 421 | Key | Required | Type | Default | Description | 422 |:---------------|:---------|:-------|:--------|:------------------------------------------| 423 | `pattern` | N | String | none | Similar to `options.header.pattern`. | 424 | `pattern_maps` | N | List | none | Similar to `options.header.pattern_maps`. | 425 426 #### `options.reverts` 427 428 Options to detect and parse revert commits. 429 430 | Key | Required | Type | Default | Description | 431 |:---------------|:---------|:-------|:--------|:------------------------------------------| 432 | `pattern` | N | String | none | Similar to `options.header.pattern`. | 433 | `pattern_maps` | N | List | none | Similar to `options.header.pattern_maps`. | 434 435 #### `options.notes` 436 437 Options to detect notes contained in commit bodies. 438 439 | Key | Required | Type | Default | Description | 440 |:-----------|:---------|:-----|:--------|:-----------------------------------------------------------------------------------------------------| 441 | `keywords` | N | List | none | Keyword list to find `Note`. A semicolon is a separator, like `<keyword>:` (e.g. `BREAKING CHANGE`). | 442 443 ## Templates 444 445 The `git-chglog` template uses the `text/template` package and enhanced templating functions provided by [Sprig]. For basic usage please refer to the following. 446 447 - [text/template](https://golang.org/pkg/text/template/) 448 - [Sprig] 449 450 We have implemented the following custom template functions. These override functions provided by [Sprig]. 451 452 | Name | Signature | Description | 453 | :----------- | :-------------------------------------------- | :---------------------------------------------------------------------------- | 454 | `contains` | `func(s, substr string) bool` | Reports whether `substr` is within `s` using `strings.Contains` | 455 | `datetime` | `func(layout string, input time.Time) string` | Generate a formatted Date string based on layout | 456 | `hasPrefix` | `func(s, prefix string) bool` | Tests whether the string `s` begins with `prefix` using `strings.HasPrefix` | 457 | `hasSuffix` | `func(s, suffix string) bool` | Tests whether the string `s` ends with `suffix`. using `strings.HasPrefix` | 458 | `indent` | `func(s string, n int) string` | Indent all lines of `s` by `n` spaces | 459 | `replace` | `func(s, old, new string, n int) string` | Replace `old` with `new` within string `s`, `n` times using `strings.Replace` | 460 | `upperFirst` | `func(s string) string` | Upper case the first character of a string | 461 462 If you are not satisfied with the prepared template please try customizing one. 463 464 --- 465 466 The basic templates are as follows. 467 468 **Example:** 469 470 ```markdown 471 {{ if .Versions -}} 472 <a name="unreleased"></a> 473 ## [Unreleased] 474 475 {{ if .Unreleased.CommitGroups -}} 476 {{ range .Unreleased.CommitGroups -}} 477 ### {{ .Title }} 478 {{ range .Commits -}} 479 - {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }} 480 {{ end }} 481 {{ end -}} 482 {{ end -}} 483 {{ end -}} 484 485 {{ range .Versions }} 486 <a name="{{ .Tag.Name }}"></a> 487 ## {{ if .Tag.Previous }}[{{ .Tag.Name }}]{{ else }}{{ .Tag.Name }}{{ end }} - {{ datetime "2006-01-02" .Tag.Date }} 488 {{ range .CommitGroups -}} 489 ### {{ .Title }} 490 {{ range .Commits -}} 491 - {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }} 492 {{ end }} 493 {{ end -}} 494 495 {{- if .RevertCommits -}} 496 ### Reverts 497 {{ range .RevertCommits -}} 498 - {{ .Revert.Header }} 499 {{ end }} 500 {{ end -}} 501 502 {{- if .MergeCommits -}} 503 ### Pull Requests 504 {{ range .MergeCommits -}} 505 - {{ .Header }} 506 {{ end }} 507 {{ end -}} 508 509 {{- if .NoteGroups -}} 510 {{ range .NoteGroups -}} 511 ### {{ .Title }} 512 {{ range .Notes }} 513 {{ .Body }} 514 {{ end }} 515 {{ end -}} 516 {{ end -}} 517 {{ end -}} 518 519 {{- if .Versions }} 520 [Unreleased]: {{ .Info.RepositoryURL }}/compare/{{ $latest := index .Versions 0 }}{{ $latest.Tag.Name }}...HEAD 521 {{ range .Versions -}} 522 {{ if .Tag.Previous -}} 523 [{{ .Tag.Name }}]: {{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }} 524 {{ end -}} 525 {{ end -}} 526 {{ end -}} 527 ``` 528 529 See the godoc [RenderData][doc-render-data] documentation for available variables. 530 531 ## Supported Styles 532 533 | Name | Status | Features | 534 |:-------------------------------------------|:-------------------|:-------------------------------------------------------| 535 | [GitHub](https://github.com/) | :white_check_mark: | Mentions automatic link. Automatic link to references. | 536 | [GitLab](https://about.gitlab.com/) | :white_check_mark: | Mentions automatic link. Automatic link to references. | 537 | [Bitbucket](https://bitbucket.org/product) | :white_check_mark: | Mentions automatic link. Automatic link to references. | 538 539 > :memo: Even with styles that are not yet supported, it is possible to make 540 ordinary CHANGELOG. 541 542 ## Jira Integration 543 544 Jira is a popular project management tool. When a project uses Jira to track 545 feature development and bug fixes, it may also want to generate change log based 546 information stored in Jira. With embedding a Jira story id in git commit header, 547 the git-chglog tool may automatically fetch data of the story from Jira, those 548 data then can be used to render the template. 549 550 Take the following steps to add Jira integration: 551 552 ### 1. Change the header parse pattern to recognize Jira issue id in the configure file 553 554 __Where Jira issue is identical Jira story.__ 555 556 The following is a sample pattern: 557 558 ```yaml 559 header: 560 pattern: "^(?:(\\w*)|(?:\\[(.*)\\])?)\\:\\s(.*)$" 561 pattern_maps: 562 - Type 563 - JiraIssueID 564 - Subject 565 ``` 566 567 This sample pattern can match both forms of commit headers: 568 569 - `feat: new feature of something` 570 - `[JIRA-ID]: something` 571 572 ### 2. Add Jira configuration to the configure file 573 574 The following is a sample: 575 576 ```yaml 577 jira: 578 info: 579 username: u 580 token: p 581 url: https://jira.com 582 issue: 583 type_maps: 584 Task: fix 585 Story: feat 586 description_pattern: "<changelog>(.*)</changelog>" 587 ``` 588 589 Here you need to define Jira URL, access username and token (password). If you 590 don't want to write your Jira access credential in configure file, you may define 591 them with environment variables: `JIRA_URL`, `JIRA_USERNAME` and `JIRA_TOKEN`. 592 593 You also needs to define a issue type map. In above sample, Jira issue type `Task` 594 will be mapped to `fix` and `Story` will be mapped to `feat`. 595 596 As a Jira story's description could be very long, you might not want to include 597 the entire description into change log. In that case, you may define `description_pattern` 598 like above, so that only content embraced with `<changelog> ... </changelog>` 599 will be included. 600 601 ### 3. Update the template to show Jira data 602 603 In the template, if a commit contains a Jira issue id, then you may show Jira 604 data. For example: 605 606 ```markdown 607 {{ range .CommitGroups -}} 608 ### {{ .Title }} 609 {{ range .Commits -}} 610 - {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }} 611 {{ if .JiraIssue }} {{ .JiraIssue.Description }} 612 {{ end }} 613 {{ end }} 614 {{ end -}} 615 ``` 616 617 Within a `Commit`, the following Jira data can be used in template: 618 619 - `.JiraIssue.Summary` - Summary of the Jira story 620 - `.JiraIssue.Description` - Description of the Jira story 621 - `.JiraIssue.Type` - Original type of the Jira story, and `.Type` will be mapped type. 622 - `.JiraIssue.Labels` - A list of strings, each is a Jira label. 623 624 ## FAQ 625 626 <details> 627 <summary>Why do not you output files by default?</summary> 628 This is not for the purpose of completely automating the generation of CHANGELOG 629 files, it is only for assisting generation. 630 631 It is ideal to describe everything included in CHANGELOG in your commits. But 632 actually it is very difficult to do it perfectly. 633 634 There are times when you need to edit the generated output to write a great CHANGELOG. 635 636 By displaying it on the standard output, it makes it easy to change the contents. 637 </details> 638 639 <details> 640 <summary>Can I commit CHANGELOG changes before creating tags?</summary> 641 642 Yes, it can be solved by using the `--next-tag` flag. 643 644 For example, let's say you want to upgrade your project to `2.0.0`. 645 You can create CHANGELOG containing `2.0.0` as follows. 646 647 ```bash 648 git-chglog --next-tag 2.0.0 -o CHANGELOG.md 649 git commit -am "release 2.0.0" 650 git tag 2.0.0 651 ``` 652 653 The point to notice is that before actually creating a tag with `git`, it is 654 conveying the next version with `--next-tag` :+1: 655 656 This is a step that is necessary for project operation in many cases. 657 </details> 658 659 <details> 660 <summary>Can I generate a CHANGELOG based on certain tags?</summary> 661 662 Yes, it can be solved by use the `--tag-filter-pattern` flag. 663 664 For example, the following command will only include tags starting with "v": 665 666 ```bash 667 git-chglog --tag-filter-pattern '^v' 668 ``` 669 670 </details> 671 672 ## TODO 673 674 - [x] Windows Support 675 - [x] More styles (GitHub, GitLab, Bitbucket :tada:) 676 - [ ] Snippetization of configuration files (improvement of reusability) 677 - [ ] More test test test ... (and example) 678 679 ## Thanks 680 681 `git-chglog` is inspired by [conventional-changelog]. Thank you! 682 683 ## Contributing 684 685 We always welcome your contributions :clap: 686 687 ## Development 688 689 1. Use Golang version `>= 1.19` 690 1. Fork (https://github.com/git-chglog/git-chglog) :tada: 691 1. Create a feature branch :coffee: 692 1. Run test suite with the `$ make test` command and confirm that it passes :zap: 693 1. Run linters with the `$ make lint` command and confirm it passes :broom: 694 - The project uses [golangci-lint] 695 1. Commit your changes :memo: 696 1. Rebase your local changes against the `master` branch :bulb: 697 1. Create new Pull Request :love_letter: 698 699 Bugs, feature requests and comments are more than welcome in the [issues]. 700 701 ## Release Process 702 703 There is a `release` target within the Makefile that wraps up the steps to 704 release a new version. 705 706 > NOTE: Pass the `VERSION` variable when running the command to properly set 707 > the tag version for the release. 708 709 ```bash 710 $ VERSION=vX.Y.Z make release 711 # EXAMPLE: 712 $ VERSION=v0.11.3 make release 713 ``` 714 715 Once the `tag` has been pushed, the `goreleaser` github action will take care 716 of the rest. 717 718 ## Feedback 719 720 I would like to make `git-chglog` a better tool. 721 The goal is to be able to use in various projects. 722 723 Therefore, your feedback is very useful. 724 I am very happy to tell you your opinions on Issues and PR :heart: 725 726 ## CHANGELOG 727 728 See [CHANGELOG.md](./CHANGELOG.md) 729 730 ## Related Projects 731 732 - [git-chglog/artwork] - Assets for `git-chglog`. 733 734 ## License 735 736 [MIT © tsuyoshiwada](./LICENSE) 737 738 [releases page]: https://github.com/git-chglog/git-chglog/releases 739 [Commit]: https://godoc.org/github.com/git-chglog/git-chglog#Commit 740 [doc-commit]: https://godoc.org/github.com/git-chglog/git-chglog#Commit 741 [doc-commit-group]: https://godoc.org/github.com/git-chglog/git-chglog#CommitGroup 742 [doc-ref]: https://godoc.org/github.com/git-chglog/git-chglog#Ref 743 [doc-render-data]: https://godoc.org/github.com/git-chglog/git-chglog#RenderData 744 [conventional-changelog]: https://github.com/conventional-changelog/conventional-changelog 745 [golangci-lint]: https://golangci-lint.run/usage/install/#local-installation 746 [issues]: https://github.com/git-chglog/git-chglog/issues 747 [git-chglog/artwork]: https://github.com/git-chglog/artwork 748 [Sprig]: http://masterminds.github.io/sprig