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