The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .cliffignore
├── .dockerignore
├── .editorconfig
├── .envrc
├── .github
    ├── CODEOWNERS
    ├── FUNDING.yml
    ├── ISSUE_TEMPLATE
    │   ├── bug_report.yml
    │   ├── config.yml
    │   ├── feature_request.yml
    │   └── integration.yml
    ├── PULL_REQUEST_TEMPLATE.md
    ├── actions
    │   └── run-fixtures-test
    │   │   └── action.yml
    ├── bors.toml
    ├── config.yml
    ├── dependabot.yml
    ├── fixtures
    │   ├── README.md
    │   ├── new-fixture-template
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-always-render-unreleased
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-always-render
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bitbucket-integration-custom-range
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bitbucket-integration
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bump-initial-tag-cli-arg
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bump-initial-tag-default
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bump-initial-tag
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bump-unreleased-with-tag-message-arg
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bump-version-custom-minor
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bump-version-keep-zerover
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bump-version-major
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bump-version-minor
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bump-version-patch
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bump-version
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-bumped-version
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-cli-arg-ignore-tags
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-commit-footers
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-commit-preprocessors
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-commit-range-with-given-range
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-commit-range-with-sort-commits
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-commit-range
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-configure-from-cargo-toml
    │   │   ├── Cargo.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-conventional-commit
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-custom-remote-api-url
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-custom-scope
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-custom-tag-pattern
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-date-order
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-fixtures-locally.sh
    │   ├── test-footer-filter
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-footer-template
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-from-context-does-not-discard-fields
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   ├── context.json
    │   │   └── expected.md
    │   ├── test-from-context
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   ├── context.json
    │   │   └── expected.md
    │   ├── test-gitea-integration-custom-range
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-gitea-integration
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-github-integration-custom-range
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-github-integration
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-gitlab-integration-custom-range
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-gitlab-integration
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-header-template
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-ignore-tags
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-invert-ignore-tags
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-keep-a-changelog-links-current-arg
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-keep-a-changelog-links-latest-arg
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-keep-a-changelog-links-no-tags
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-keep-a-changelog-links-one-tag-bump-arg
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-keep-a-changelog-links-one-tag
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-keep-a-changelog-links-tag-arg
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-keep-a-changelog-links-unreleased-arg
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-keep-a-changelog-links
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-latest-with-one-tag
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-limit-commits
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-monorepo-include-path
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-no-exec
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-override-scope
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-regex-json-array
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-regex-label-grouping
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-regex-replace-parser
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-release-statistics
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-remote-config
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-require-conventional-negative
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.rc
    │   ├── test-require-conventional-skipped
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-skip-breaking-changes
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-skip-commits
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-skip-tags
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-split-commits
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-submodules-include-path-config
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-submodules-include-path
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-submodules-range
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-submodules
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-tag-message
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-topo-order-arg
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-topo-order-commits
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   ├── test-topo-order
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    │   └── test-unchanged-tag-date
    │   │   ├── cliff.toml
    │   │   ├── commit.sh
    │   │   └── expected.md
    ├── mergify.yml
    └── workflows
    │   ├── cd.yml
    │   ├── check-semver.yml
    │   ├── ci.yml
    │   ├── codeql.yml
    │   ├── dependency-review.yml
    │   ├── docker.yml
    │   ├── test-fixtures.yml
    │   └── website.yml
├── .gitignore
├── .lycheeignore
├── .well-known
    └── funding-manifest-urls
├── CHANGELOG.md
├── CNAME
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Cargo.lock
├── Cargo.toml
├── Dockerfile
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── RELEASE.md
├── SECURITY.md
├── cliff.toml
├── codecov.yml
├── config
    └── cliff.toml
├── examples
    ├── cocogitto.toml
    ├── detailed.toml
    ├── github-keepachangelog.toml
    ├── github.toml
    ├── keepachangelog.toml
    ├── minimal.toml
    ├── scoped.toml
    ├── scopesorted.toml
    ├── statistics.toml
    └── unconventional.toml
├── flake.lock
├── flake.nix
├── git-cliff-core
    ├── Cargo.toml
    ├── src
    │   ├── changelog.rs
    │   ├── command.rs
    │   ├── commit.rs
    │   ├── config.rs
    │   ├── contributor.rs
    │   ├── embed.rs
    │   ├── error.rs
    │   ├── lib.rs
    │   ├── release.rs
    │   ├── remote
    │   │   ├── bitbucket.rs
    │   │   ├── gitea.rs
    │   │   ├── github.rs
    │   │   ├── gitlab.rs
    │   │   └── mod.rs
    │   ├── repo.rs
    │   ├── statistics.rs
    │   ├── tag.rs
    │   └── template.rs
    └── tests
    │   └── integration_test.rs
├── git-cliff
    ├── Cargo.toml
    ├── examples
    │   └── run.rs
    └── src
    │   ├── args.rs
    │   ├── bin
    │       ├── completions.rs
    │       └── mangen.rs
    │   ├── lib.rs
    │   ├── logger.rs
    │   ├── main.rs
    │   └── profiler.rs
├── npm
    ├── git-cliff
    │   ├── .gitignore
    │   ├── .yarn
    │   │   └── releases
    │   │   │   └── yarn-4.1.0.cjs
    │   ├── .yarnrc.yml
    │   ├── eslint.config.js
    │   ├── package.json
    │   ├── src
    │   │   ├── cli.ts
    │   │   ├── getExePath.ts
    │   │   ├── index.ts
    │   │   ├── options.ts
    │   │   └── optionsToStringArgs.ts
    │   ├── tsconfig.json
    │   ├── tsup.config.ts
    │   └── yarn.lock
    └── package.json.tmpl
├── pypi
    ├── .gitignore
    └── pyproject.toml
├── release.sh
├── rust-toolchain.toml
├── rustfmt.toml
├── typos.toml
└── website
    ├── .gitignore
    ├── README.md
    ├── babel.config.js
    ├── blog
        ├── authors.yml
        ├── git-cliff-0.5.0.md
        ├── git-cliff-1.2.0.md
        ├── git-cliff-1.3.0.md
        ├── git-cliff-1.4.0.md
        ├── git-cliff-2.0.0.md
        ├── git-cliff-2.2.0.md
        ├── git-cliff-2.3.0.md
        ├── git-cliff-2.4.0.md
        ├── git-cliff-2.5.0.md
        ├── git-cliff-2.6.0.md
        ├── git-cliff-2.7.0.md
        ├── git-cliff-2.8.0.md
        └── git-cliff-2.9.0.md
    ├── docs
        ├── configuration
        │   ├── bump.md
        │   ├── changelog.md
        │   ├── git.md
        │   ├── index.md
        │   └── remote.md
        ├── development
        │   ├── _category_.json
        │   ├── contributing.md
        │   └── profiling.md
        ├── docker.md
        ├── github-actions
        │   ├── _category_.json
        │   ├── git-cliff-action.md
        │   ├── setup-git-cliff.md
        │   └── taiki-e-install-action.md
        ├── gitlab.md
        ├── index.md
        ├── installation
        │   ├── alpine-linux.md
        │   ├── arch-linux.md
        │   ├── binary-releases.md
        │   ├── build-from-source.md
        │   ├── conda-forge.md
        │   ├── crates-io.md
        │   ├── gentoo-linux.md
        │   ├── homebrew.md
        │   ├── index.md
        │   ├── macports.md
        │   ├── nix.md
        │   ├── npm.md
        │   ├── pypi.md
        │   └── winget.md
        ├── integration
        │   ├── _category_.json
        │   ├── bitbucket.md
        │   ├── gitea.md
        │   ├── github.md
        │   ├── gitlab.md
        │   ├── python.md
        │   └── rust.md
        ├── sourcehut.md
        ├── templating
        │   ├── _category_.json
        │   ├── context.md
        │   ├── examples.md
        │   └── syntax.md
        ├── tips-and-tricks.md
        └── usage
        │   ├── _category_.json
        │   ├── adding-commits.md
        │   ├── adding-tag-messages.md
        │   ├── args.md
        │   ├── bump-version.md
        │   ├── examples.md
        │   ├── initializing.md
        │   ├── jujutsu.md
        │   ├── load-context.md
        │   ├── monorepos.md
        │   ├── multiple-repos.md
        │   ├── print-context.md
        │   ├── skipping-commits.md
        │   └── submodules.md
    ├── docusaurus.config.js
    ├── package-lock.json
    ├── package.json
    ├── sidebars.js
    ├── src
        ├── components
        │   ├── HomepageFeatures
        │   │   ├── index.tsx
        │   │   └── styles.module.css
        │   └── Testimonials
        │   │   ├── index.tsx
        │   │   └── styles.module.css
        ├── css
        │   └── custom.css
        └── pages
        │   ├── index.module.css
        │   └── index.tsx
    ├── static
        ├── .nojekyll
        ├── 10k
        │   └── index.html
        ├── favicon
        │   ├── android-chrome-192x192.png
        │   ├── android-chrome-512x512.png
        │   ├── apple-touch-icon.png
        │   ├── favicon-16x16.png
        │   ├── favicon-32x32.png
        │   ├── favicon.ico
        │   └── site.webmanifest
        ├── fonts
        │   └── aAngkanyaSebelas.ttf
        ├── img
        │   ├── 10k-giveaway.jpg
        │   ├── git-cliff-anim.gif
        │   ├── git-cliff-banner.jpg
        │   ├── git-cliff-logo.png
        │   ├── git-cliff-social-card.jpg
        │   ├── git-cliff-star-history.png
        │   ├── git-cliff.png
        │   ├── logo.png
        │   ├── rustlab2023.png
        │   ├── tee-ash.jpg
        │   ├── tee-black.jpg
        │   ├── tee-dark-heather.jpg
        │   ├── tee-sport-grey.jpg
        │   └── tee-white.jpg
        └── issues
        │   └── index.html
    ├── tsconfig.json
    └── yarn.lock


/.cliffignore:
--------------------------------------------------------------------------------
1 | # skip commits by their SHA1
2 | 
3 | 4f88dda8c746173ea59f920b7579b7f6c74bd6c8
4 | 10c3194381f2cc4f93eb97404369568882ed8677
5 | 


--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
 1 | # Directories
 2 | /.git/
 3 | /.github/
 4 | /npm/
 5 | /pypi/
 6 | /website/
 7 | 
 8 | # Files
 9 | .editorconfig
10 | .gitignore
11 | *.md
12 | codecov.yml
13 | Dockerfile
14 | LICENSE
15 | rustfmt.toml
16 | _config.yml
17 | .lycheeignore
18 | 
19 | # Ignore rust toolchain files as they would needlessly fetch the toolchain.
20 | # But the image already contains a sufficient toolchain.
21 | # Ignore both the latest naming and the legacy naming
22 | rust-toolchain.toml
23 | rust-toolchain
24 | 


--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # https://EditorConfig.org
2 | 
3 | # top-most EditorConfig file
4 | root = true
5 | 
6 | [{*.sh,*.rs}]
7 | indent_style = space
8 | indent_size = 4
9 | 


--------------------------------------------------------------------------------
/.envrc:
--------------------------------------------------------------------------------
1 | use flake
2 | dotenv_if_exists .env
3 | 


--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/about-codeowners/
2 | # for more info about CODEOWNERS file
3 | 
4 | # It uses the same pattern rule for gitignore file
5 | # https://git-scm.com/docs/gitignore#_pattern_format
6 | 
7 | # Core
8 | * @orhun
9 | 


--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: orhun
2 | patreon: orhunp
3 | buy_me_a_coffee: orhun
4 | 


--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | contact_links:
2 |   - name: Discord Chat
3 |     url: https://discord.gg/W3mAwMDWH4
4 |     about: Ask questions and have discussions about git-cliff on Discord
5 |   - name: Matrix Chat
6 |     url: https://matrix.to/#/#git-cliff:matrix.org
7 |     about: Ask questions and have discussions about git-cliff on Matrix
8 | 


--------------------------------------------------------------------------------
/.github/bors.toml:
--------------------------------------------------------------------------------
 1 | status = [
 2 |     "Check",
 3 |     "Lints",
 4 |     "Formatting",
 5 |     "Test suite",
 6 |     "Audit check",
 7 |     "Links",
 8 |     "Check Rust version",
 9 | ]
10 | delete_merged_branches = true
11 | update_base_for_deletes = true
12 | cut_body_after = "<details>"
13 | commit_title = "chore(pull): merge ${PR_REFS}"
14 | 


--------------------------------------------------------------------------------
/.github/config.yml:
--------------------------------------------------------------------------------
 1 | # Configuration for welcome - https://github.com/behaviorbot/welcome
 2 | 
 3 | # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome
 4 | 
 5 | # Comment to be posted to on first time issues
 6 | newIssueWelcomeComment: >
 7 |   Thanks for opening your first issue at **git-cliff**! Be sure to follow the issue template! ⛰️
 8 | 
 9 | # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome
10 | 
11 | # Comment to be posted to on PRs from first time contributors in your repository
12 | newPRWelcomeComment: >
13 |   Thanks for opening this pull request! Please check out our contributing guidelines! ⛰️
14 | 
15 | # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge
16 | 
17 | # Comment to be posted to on pull requests merged by a first time user
18 | firstPRMergeComment: >
19 |   Congrats on merging your first pull request! ⛰️
20 | 


--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
 1 | version: 2
 2 | updates:
 3 |   # Maintain dependencies for Cargo
 4 |   - package-ecosystem: cargo
 5 |     directory: "/"
 6 |     schedule:
 7 |       interval: monthly
 8 |     open-pull-requests-limit: 10
 9 |     groups:
10 |       minor:
11 |         update-types:
12 |           - "minor"
13 |       patch:
14 |         update-types:
15 |           - "patch"
16 | 
17 |   # Maintain dependencies for GitHub Actions
18 |   - package-ecosystem: github-actions
19 |     directory: "/"
20 |     schedule:
21 |       interval: monthly
22 |     open-pull-requests-limit: 10
23 |     groups:
24 |       minor:
25 |         update-types:
26 |           - "minor"
27 |       patch:
28 |         update-types:
29 |           - "patch"
30 | 
31 |   # Maintain dependencies for NPM
32 |   - package-ecosystem: "npm"
33 |     directory: "/website"
34 |     schedule:
35 |       interval: monthly
36 |     open-pull-requests-limit: 10
37 |     groups:
38 |       minor:
39 |         update-types:
40 |           - "minor"
41 |       patch:
42 |         update-types:
43 |           - "patch"
44 | 
45 |   - package-ecosystem: npm
46 |     directory: /npm/git-cliff
47 |     schedule:
48 |       interval: monthly
49 |     open-pull-requests-limit: 10
50 |     groups:
51 |       minor:
52 |         update-types:
53 |           - "minor"
54 |       patch:
55 |         update-types:
56 |           - "patch"
57 | 
58 |   # Maintain dependencies for Docker
59 |   - package-ecosystem: docker
60 |     directory: /
61 |     schedule:
62 |       interval: monthly
63 |     open-pull-requests-limit: 10
64 | 


--------------------------------------------------------------------------------
/.github/fixtures/README.md:
--------------------------------------------------------------------------------
 1 | # Fixtures
 2 | 
 3 | [Test fixtures](https://en.wikipedia.org/wiki/Test_fixture) are a way of testing the `git-cliff`'s functionality against a configuration file (`cliff.toml`) and asserting the output (`expected.md`).
 4 | 
 5 | They are being [run](https://github.com/orhun/git-cliff/actions/workflows/test-fixtures.yml) as a part of the GitHub Actions and the workflow file can be viewed [here](../workflows/test-fixtures.yml).
 6 | 
 7 | ## Adding new fixtures
 8 | 
 9 | 1. Copy the `new-fixture-template` as `test-<functionality>`.
10 | 2. Update the files accordingly to the function that is being tested.
11 | 3. Run the fixture locally. (see below)
12 | 4. Add the fixture to [`test-fixtures.yml`](../workflows/test-fixtures.yml) matrix.
13 |    - If you need to specify custom arguments to `git-cliff` for the fixture test, you can do it here with using `command`.
14 | 5. Commit your changes.
15 | 
16 | See [this commit](https://github.com/orhun/git-cliff/commit/c94cb6a37ae268953ab29dd35cb43b6a4fec47cc) as an example.
17 | 
18 | ## Running locally
19 | 
20 | To run the fixtures locally:
21 | 
22 | ```sh
23 | ./test-fixtures-locally.sh <fixture_name>
24 | ```
25 | 
26 | ## See also
27 | 
28 | - [Contribution Guidelines](https://github.com/orhun/git-cliff/blob/main/CONTRIBUTING.md)
29 | 


--------------------------------------------------------------------------------
/.github/fixtures/new-fixture-template/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | 
14 | {% for group, commits in commits | group_by(attribute="group") %}
15 |     ### {{ group | upper_first }}
16 |     {% for commit in commits %}
17 |         - {{ commit.message | upper_first }}\
18 |     {% endfor %}
19 | {% endfor %}\n
20 | """
21 | 
22 | [git]
23 | # An array of regex based parsers for extracting data from the commit message.
24 | # Assigns commits to groups.
25 | # Optionally sets the commit's `scope` and can decide to exclude commits from further processing.
26 | commit_parsers = [
27 |     { message = "^feat", group = "Features", default_scope = "app" },
28 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
29 | ]
30 | 


--------------------------------------------------------------------------------
/.github/fixtures/new-fixture-template/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | git tag v0.1.0
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
10 | git tag v0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
12 | 


--------------------------------------------------------------------------------
/.github/fixtures/new-fixture-template/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Test
 4 | 
 5 | - Add tests
 6 | 
 7 | ## [0.2.0] - 2022-04-06
 8 | 
 9 | ### Bug Fixes
10 | 
11 | - Fix feature 2
12 | 
13 | ### Features
14 | 
15 | - Add feature 2
16 | 
17 | ## [0.1.0] - 2022-04-06
18 | 
19 | ### Bug Fixes
20 | 
21 | - Fix feature 1
22 | 
23 | ### Features
24 | 
25 | - Add feature 1
26 | 
27 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-always-render-unreleased/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% if commits | length == 0 %}
11 | No significant changes.
12 | 
13 | {% else %}\
14 | {% for group, commits in commits | group_by(attribute="group") -%}
15 |     ### {{ group | upper_first }}
16 |     etc.
17 | {% endfor %}
18 | {% endif %}\
19 | """
20 | # render body even when there are no releases to process
21 | render_always = true
22 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-always-render-unreleased/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
7 | git tag v0.1.0
8 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-always-render-unreleased/expected.md:
--------------------------------------------------------------------------------
1 | ## [unreleased]
2 | 
3 | No significant changes.
4 | 
5 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-always-render/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% if commits | length == 0 %}
11 | No significant changes.
12 | 
13 | {% else %}\
14 | {% for group, commits in commits | group_by(attribute="group") -%}
15 |     ### {{ group | upper_first }}
16 |     etc.
17 | {% endfor %}
18 | {% endif %}\
19 | """
20 | # render body even when there are no releases to process
21 | render_always = true
22 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-always-render/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
7 | git tag v0.1.0
8 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-always-render/expected.md:
--------------------------------------------------------------------------------
1 | ## [0.2.0] - <<DATE>>
2 | 
3 | No significant changes.
4 | 
5 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bitbucket-integration-custom-range/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://bitbucket.org/mcwarman-playground/git-cliff-readme-example
5 | git pull origin master
6 | git fetch --tags
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bitbucket-integration-custom-range/expected.md:
--------------------------------------------------------------------------------
1 | ## What's Changed in v1.0.1
2 | * refactor(parser): expose string functions by @orhun <orhun@archlinux.org>
3 | * chore(release): add release script by @orhun <orhun@archlinux.org>
4 | 
5 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bitbucket-integration/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://bitbucket.org/mcwarman-playground/git-cliff-readme-example
5 | git pull origin master
6 | git fetch --tags
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bitbucket-integration/expected.md:
--------------------------------------------------------------------------------
 1 | ## What's Changed
 2 | * feat(config): support multiple file formats by @orhun <orhun@archlinux.org>
 3 | * feat(cache): use cache while fetching pages by @orhun <orhun@archlinux.org>
 4 | * feat(ci): add pipeline config by @mcwarman <7236500+mcwarman@users.noreply.github.com> in [#1](https://bitbucket.org/mcwarman-playground/git-cliff-readme-example/pull-requests/1)
 5 | 
 6 | ## What's Changed in v1.0.1
 7 | * refactor(parser): expose string functions by @orhun <orhun@archlinux.org>
 8 | * chore(release): add release script by @orhun <orhun@archlinux.org>
 9 | 
10 | ## What's Changed in v1.0.0
11 | * Initial commit by @orhun <orhun@archlinux.org>
12 | * docs(project): add README.md by @orhun <orhun@archlinux.org>
13 | * feat(parser): add ability to parse arrays by @orhun <orhun@archlinux.org>
14 | * fix(args): rename help argument due to conflict by @orhun <orhun@archlinux.org>
15 | * docs(example)!: add tested usage example by @orhun <orhun@archlinux.org>
16 | 
17 | ### New Contributors
18 | * @orhun <orhun@archlinux.org> made their first contribution
19 | 
20 | 
21 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-initial-tag-cli-arg/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}]
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # An array of regex based parsers for extracting data from the commit message.
23 | # Assigns commits to groups.
24 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
25 | commit_parsers = [
26 |     { message = "^feat", group = "Features", default_scope = "app" },
27 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
28 | ]
29 | 
30 | [bump]
31 | initial_tag = "test"
32 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-initial-tag-cli-arg/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
5 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-initial-tag-cli-arg/expected.md:
--------------------------------------------------------------------------------
1 | ## [2.1.1]
2 | 
3 | ### Test
4 | 
5 | - Add tests
6 | 
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-initial-tag-default/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}]
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # An array of regex based parsers for extracting data from the commit message.
23 | # Assigns commits to groups.
24 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
25 | commit_parsers = [
26 |     { message = "^feat", group = "Features", default_scope = "app" },
27 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
28 | ]
29 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-initial-tag-default/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
5 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-initial-tag-default/expected.md:
--------------------------------------------------------------------------------
1 | ## [0.1.0]
2 | 
3 | ### Test
4 | 
5 | - Add tests
6 | 
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-initial-tag/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}]
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # An array of regex based parsers for extracting data from the commit message.
23 | # Assigns commits to groups.
24 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
25 | commit_parsers = [
26 |     { message = "^feat", group = "Features", default_scope = "app" },
27 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
28 | ]
29 | 
30 | [bump]
31 | initial_tag = "1.15.5"
32 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-initial-tag/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
5 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-initial-tag/expected.md:
--------------------------------------------------------------------------------
1 | ## [1.15.5]
2 | 
3 | ### Test
4 | 
5 | - Add tests
6 | 
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-unreleased-with-tag-message-arg/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}]
 7 |     {% if message %}
 8 |         {{ message }}
 9 |     {% endif %}\
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # regex for parsing and grouping commits
23 | commit_parsers = [
24 |     { message = "^feat", group = "Features", default_scope = "app" },
25 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
26 | ]
27 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-unreleased-with-tag-message-arg/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | git tag v0.1.0
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
10 | git tag v0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
12 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-unreleased-with-tag-message-arg/expected.md:
--------------------------------------------------------------------------------
1 | ## [0.2.1]
2 | 
3 | Some text
4 | 
5 | ### Test
6 | 
7 | - Add tests
8 | 
9 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-custom-minor/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}]
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% for group, commits in commits | group_by(attribute="group") %}
11 |     ### {{ group | upper_first }}
12 |     {% for commit in commits %}
13 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
14 |     {% endfor %}
15 | {% endfor %}\n
16 | """
17 | 
18 | [bump]
19 | features_always_bump_minor = true
20 | breaking_always_bump_major = true
21 | custom_minor_increment_regex = "minor|more"
22 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-custom-minor/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2"
 6 | git tag v0.1.0
 7 | 
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "minor: add minor"
 9 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2"
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-custom-minor/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.2.0]
 2 | 
 3 | ### <!-- 1 -->🐛 Bug Fixes
 4 | 
 5 | - Fix feature 2
 6 | 
 7 | ### <!-- 10 -->💼 Other
 8 | 
 9 | - Add minor
10 | 
11 | ## [0.1.0]
12 | 
13 | ### <!-- 0 -->🚀 Features
14 | 
15 | - Add feature 1
16 | - Add feature 2
17 | 
18 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-keep-zerover/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}]
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [bump]
22 | features_always_bump_minor = false
23 | breaking_always_bump_major = false
24 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-keep-zerover/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2"
 6 | git tag v0.1.0
 7 | 
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat!: add breaking feature"
 9 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2"
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-keep-zerover/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.2.0]
 2 | 
 3 | ### Feat
 4 | 
 5 | - [**breaking**] Add breaking feature
 6 | 
 7 | ### Fix
 8 | 
 9 | - Fix feature 2
10 | 
11 | ## [0.1.0]
12 | 
13 | ### Feat
14 | 
15 | - Add feature 1
16 | - Add feature 2
17 | 
18 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-major/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}]
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% for group, commits in commits | group_by(attribute="group") %}
11 |     ### {{ group | upper_first }}
12 |     {% for commit in commits %}
13 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
14 |     {% endfor %}
15 | {% endfor %}\n
16 | """
17 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-major/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2"
 6 | git tag v0.1.0
 7 | 
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 1"
 9 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2"
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-major/expected.md:
--------------------------------------------------------------------------------
 1 | ## [1.0.0]
 2 | 
 3 | ### <!-- 1 -->🐛 Bug Fixes
 4 | 
 5 | - Fix feature 1
 6 | - Fix feature 2
 7 | 
 8 | ## [0.1.0]
 9 | 
10 | ### <!-- 0 -->🚀 Features
11 | 
12 | - Add feature 1
13 | - Add feature 2
14 | 
15 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-minor/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}]
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% for group, commits in commits | group_by(attribute="group") %}
11 |     ### {{ group | upper_first }}
12 |     {% for commit in commits %}
13 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
14 |     {% endfor %}
15 | {% endfor %}\n
16 | """
17 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-minor/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2"
 6 | git tag v0.1.0
 7 | 
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat!: add breaking feature"
 9 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2"
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-minor/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.2.0]
 2 | 
 3 | ### <!-- 0 -->🚀 Features
 4 | 
 5 | - [**breaking**] Add breaking feature
 6 | 
 7 | ### <!-- 1 -->🐛 Bug Fixes
 8 | 
 9 | - Fix feature 2
10 | 
11 | ## [0.1.0]
12 | 
13 | ### <!-- 0 -->🚀 Features
14 | 
15 | - Add feature 1
16 | - Add feature 2
17 | 
18 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-patch/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}]
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% for group, commits in commits | group_by(attribute="group") %}
11 |     ### {{ group | upper_first }}
12 |     {% for commit in commits %}
13 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
14 |     {% endfor %}
15 | {% endfor %}\n
16 | """
17 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-patch/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2"
 6 | git tag v0.1.0
 7 | 
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat!: add breaking feature"
 9 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2"
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version-patch/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.1.1]
 2 | 
 3 | ### <!-- 0 -->🚀 Features
 4 | 
 5 | - [**breaking**] Add breaking feature
 6 | 
 7 | ### <!-- 1 -->🐛 Bug Fixes
 8 | 
 9 | - Fix feature 2
10 | 
11 | ## [0.1.0]
12 | 
13 | ### <!-- 0 -->🚀 Features
14 | 
15 | - Add feature 1
16 | - Add feature 2
17 | 
18 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}]
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2"
 6 | git tag v0.1.0
 7 | 
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat!: add breaking feature"
 9 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2"
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bump-version/expected.md:
--------------------------------------------------------------------------------
 1 | ## [1.0.0]
 2 | 
 3 | ### <!-- 0 -->🚀 Features
 4 | 
 5 | - [**breaking**] Add breaking feature
 6 | 
 7 | ### <!-- 1 -->🐛 Bug Fixes
 8 | 
 9 | - Fix feature 2
10 | 
11 | ## [0.1.0]
12 | 
13 | ### <!-- 0 -->🚀 Features
14 | 
15 | - Add feature 1
16 | - Add feature 2
17 | 
18 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bumped-version/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}]
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bumped-version/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2"
 6 | git tag v0.1.0
 7 | 
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 1"
 9 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2"
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-bumped-version/expected.md:
--------------------------------------------------------------------------------
1 | v0.1.1
2 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-cli-arg-ignore-tags/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% for group, commits in commits | group_by(attribute="group") %}
11 |     ### {{ group | upper_first }}
12 |     {% for commit in commits %}
13 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
14 |     {% endfor %}
15 | {% endfor %}\n
16 | """
17 | 
18 | [git]
19 | # regex for skipping tags
20 | skip_tags = ""
21 | # regex for ignoring tags
22 | ignore_tags = ""
23 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-cli-arg-ignore-tags/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add first beta feature"
 5 | git tag v1.0.0-beta.1
 6 | 
 7 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add second beta feature"
 8 | git tag v1.0.0-beta.2
 9 | 
10 | # WARNING: If we won't create this commit, 1.0.0 won't be created!
11 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "chore: why do i need a commit here?"
12 | git tag v1.0.0
13 | 
14 | GIT_COMMITTER_DATE="2021-01-23 01:23:49" git commit --allow-empty -m "fix: simple fix"
15 | git tag v1.0.1
16 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-cli-arg-ignore-tags/expected.md:
--------------------------------------------------------------------------------
 1 | ## [1.0.1] - 2021-01-23
 2 | 
 3 | ### <!-- 1 -->🐛 Bug Fixes
 4 | 
 5 | - Simple fix
 6 | 
 7 | ## [1.0.0] - 2021-01-23
 8 | 
 9 | ### <!-- 0 -->🚀 Features
10 | 
11 | - Add first beta feature
12 | - Add second beta feature
13 | 
14 | ### <!-- 7 -->⚙️ Miscellaneous Tasks
15 | 
16 | - Why do i need a commit here?
17 | 
18 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-footers/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |           {% if commit.footers %}\
18 |             {% for footer in commit.footers -%}
19 |                 , {{ footer.token }}{{ footer.separator }}{{ footer.value }}\
20 |             {% endfor %}\
21 |           {% endif %}\
22 |     {% endfor %}
23 | {% endfor %}\n
24 | """
25 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-footers/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1" -m "footer: test"
 5 | 
 6 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add feature 2" -m "Signed-off-by: bot"
 7 | git tag v0.1.0
 8 | 
 9 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "fix: fix feature 1" -m "footer1: xyz" -m "footer2: abc"
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-footers/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### <!-- 1 -->🐛 Bug Fixes
 4 | 
 5 | - Fix feature 1, footer1:xyz, footer2:abc
 6 | 
 7 | ## [0.1.0] - 2021-01-23
 8 | 
 9 | ### <!-- 0 -->🚀 Features
10 | 
11 | - Add feature 1, footer:test
12 | - Add feature 2, Signed-off-by:bot
13 | 
14 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-preprocessors/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # An array of regex based parsers to modify commit messages prior to further processing.
23 | commit_preprocessors = [
24 |     # Replace issue numbers with links to the issue.
25 |     { pattern = '\(#([0-9]+)\)', replace = "([issue#${1}](https://github.com/orhun/git-cliff/issues/${1}))" },
26 |     # Trim multiple spaces.
27 |     { pattern = "  +", replace = " " },
28 | ]
29 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-preprocessors/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1 (#1)"
7 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "refactor: move  classes"
8 | git tag v0.1.0
9 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-preprocessors/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.1.0] - 2022-04-06
 2 | 
 3 | ### <!-- 0 -->🚀 Features
 4 | 
 5 | - Add feature 1
 6 | 
 7 | ### <!-- 1 -->🐛 Bug Fixes
 8 | 
 9 | - Fix feature 1 ([issue#1](https://github.com/orhun/git-cliff/issues/1))
10 | 
11 | ### <!-- 2 -->🚜 Refactor
12 | 
13 | - Move classes
14 | 
15 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-range-with-given-range/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}
13 | {{ commit_range.from }}..{{ commit_range.to }}
14 | {% for group, commits in commits | group_by(attribute="group") %}
15 |     ### {{ group | upper_first }}
16 |     {% for commit in commits %}
17 |         - {{ commit.message | upper_first }}\
18 |     {% endfor %}
19 | {% endfor %}\n
20 | """
21 | 
22 | [git]
23 | # An array of regex based parsers for extracting data from the commit message.
24 | # Assigns commits to groups.
25 | # Optionally sets the commit's `scope` and can decide to exclude commits from further processing.
26 | commit_parsers = [
27 |     { message = "^feat", group = "Features", default_scope = "app" },
28 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
29 | ]
30 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-range-with-given-range/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://github.com/orhun/git-cliff-readme-example
5 | git pull origin master
6 | git fetch --tags
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-range-with-given-range/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | a140cef0405e0bcbfb5de44ff59e091527d91b38..a9d4050212a18f6b3bd76e2e41fbb9045d268b80
 4 | 
 5 | ### Bug Fixes
 6 | 
 7 | - Rename help argument due to conflict
 8 | 
 9 | ### Features
10 | 
11 | - Add ability to parse arrays
12 | - Support multiple file formats
13 | 
14 | ### Chore
15 | 
16 | - Add release script
17 | 
18 | ### Docs
19 | 
20 | - Add tested usage example
21 | 
22 | ### Refactor
23 | 
24 | - Expose string functions
25 | 
26 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-range-with-sort-commits/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}
13 | {{ commit_range.from }}..{{ commit_range.to }}
14 | {% for group, commits in commits | group_by(attribute="group") %}
15 |     ### {{ group | upper_first }}
16 |     {% for commit in commits %}
17 |         - {{ commit.message | upper_first }}\
18 |     {% endfor %}
19 | {% endfor %}\n
20 | """
21 | 
22 | [git]
23 | # An array of regex based parsers for extracting data from the commit message.
24 | # Assigns commits to groups.
25 | # Optionally sets the commit's `scope` and can decide to exclude commits from further processing.
26 | commit_parsers = [
27 |     { message = "^feat", group = "Features", default_scope = "app" },
28 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
29 | ]
30 | sort_commits = "newest"
31 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-range-with-sort-commits/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://github.com/orhun/git-cliff-readme-example
5 | git pull origin master
6 | git fetch --tags
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-range-with-sort-commits/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | a9d4050212a18f6b3bd76e2e41fbb9045d268b80..df6aef41292f3ffe5887754232e6ea7831c50ba5
 4 | 
 5 | ### Features
 6 | 
 7 | - Use cache while fetching pages
 8 | - Support multiple file formats
 9 | 
10 | ## [1.0.1] - 2021-07-18
11 | 
12 | e4fd3cf8e2e6f49c0b57f66416e886c37cbb3715..06412ac1dd4071006c465dde6597a21d4367a158
13 | 
14 | ### Chore
15 | 
16 | - Add release script
17 | 
18 | ### Refactor
19 | 
20 | - Expose string functions
21 | 
22 | ## [1.0.0] - 2021-07-18
23 | 
24 | a78bc368e9ee382a3016c0c4bab41f7de4503bcd..ad27b43e8032671afb4809a1a3ecf12f45c60e0e
25 | 
26 | ### Bug Fixes
27 | 
28 | - Rename help argument due to conflict
29 | 
30 | ### Features
31 | 
32 | - Add ability to parse arrays
33 | 
34 | ### Docs
35 | 
36 | - Add tested usage example
37 | - Add README.md
38 | 
39 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-range/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}
13 | {{ commit_range.from }}..{{ commit_range.to }}
14 | {% for group, commits in commits | group_by(attribute="group") %}
15 |     ### {{ group | upper_first }}
16 |     {% for commit in commits %}
17 |         - {{ commit.message | upper_first }}\
18 |     {% endfor %}
19 | {% endfor %}\n
20 | """
21 | 
22 | [git]
23 | # An array of regex based parsers for extracting data from the commit message.
24 | # Assigns commits to groups.
25 | # Optionally sets the commit's `scope` and can decide to exclude commits from further processing.
26 | commit_parsers = [
27 |     { message = "^feat", group = "Features", default_scope = "app" },
28 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
29 | ]
30 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-range/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://github.com/orhun/git-cliff-readme-example
5 | git pull origin master
6 | git fetch --tags
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-commit-range/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | a9d4050212a18f6b3bd76e2e41fbb9045d268b80..df6aef41292f3ffe5887754232e6ea7831c50ba5
 4 | 
 5 | ### Features
 6 | 
 7 | - Support multiple file formats
 8 | - Use cache while fetching pages
 9 | 
10 | ## [1.0.1] - 2021-07-18
11 | 
12 | e4fd3cf8e2e6f49c0b57f66416e886c37cbb3715..06412ac1dd4071006c465dde6597a21d4367a158
13 | 
14 | ### Chore
15 | 
16 | - Add release script
17 | 
18 | ### Refactor
19 | 
20 | - Expose string functions
21 | 
22 | ## [1.0.0] - 2021-07-18
23 | 
24 | a78bc368e9ee382a3016c0c4bab41f7de4503bcd..ad27b43e8032671afb4809a1a3ecf12f45c60e0e
25 | 
26 | ### Bug Fixes
27 | 
28 | - Rename help argument due to conflict
29 | 
30 | ### Features
31 | 
32 | - Add ability to parse arrays
33 | 
34 | ### Docs
35 | 
36 | - Add README.md
37 | - Add tested usage example
38 | 
39 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-configure-from-cargo-toml/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | git tag v0.1.0
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
10 | git tag v0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
12 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-configure-from-cargo-toml/expected.md:
--------------------------------------------------------------------------------
 1 | # Changelog
 2 | 
 3 | All notable changes to this project will be documented in this file.
 4 | 
 5 | ## [unreleased]
 6 | 
 7 | ### Test
 8 | 
 9 | - Add tests
10 | 
11 | ## [0.2.0] - 2022-04-06
12 | 
13 | ### Bug Fixes
14 | 
15 | - Fix feature 2
16 | 
17 | ### Features
18 | 
19 | - Add feature 2
20 | 
21 | ## [0.1.0] - 2022-04-06
22 | 
23 | ### Bug Fixes
24 | 
25 | - Fix feature 1
26 | 
27 | ### Features
28 | 
29 | - Add feature 1
30 | 
31 | <!-- generated by git-cliff -->
32 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-conventional-commit/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # A Tera template to be rendered for each release in the changelog.
 3 | # See https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% for group, commits in commits | group_by(attribute="group") %}\
 6 |     ## {{ group | striptags | trim | upper_first }}
 7 |     {% for commit in commits %}
 8 |           {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
 9 |           {% if commit.breaking %}[**breaking**]: {{ commit.breaking_description }}{% endif %}
10 |           {{ commit.message }}: {{ commit.body }}\
11 |           {% for footer in commit.footers %}
12 |             - {{ footer.token }}{{ footer.separator }} {{ footer.value }}\
13 |           {% endfor %}
14 |     {% endfor %}
15 | {% endfor %}\
16 | """
17 | 
18 | [git]
19 | # An array of regex based parsers for extracting data from the commit message.
20 | # Assigns commits to groups.
21 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
22 | commit_parsers = [
23 |   { message = "^feat", group = "Features", default_scope = "app" },
24 |   { message = "^fix" },
25 | ]
26 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-conventional-commit/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m \
 6 |     "feat(web): feature 1, breaking change in footer
 7 | 
 8 | Body feature 1
 9 | 
10 | BREAKING CHANGE: breaking change description feature 1
11 | Signed-off-by: user1 <user1@example.com>
12 | Reviewed-by: user2
13 | "
14 | 
15 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m \
16 |     "feat(web)!: feature 2, breaking chain in description
17 | 
18 | Body feature 2
19 | 
20 | Signed-off-by: user3 <user3@example.com>
21 | "
22 | 
23 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m \
24 |     "feat!: feature 3, use default scope = app
25 | 
26 | Body feature 2
27 | 
28 | Signed-off-by: user3 <user3@example.com>
29 | "
30 | 
31 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m \
32 |     "fix(scope): fix 1, use scope as group
33 | 
34 | Body fix 1
35 | 
36 | Fix: #1
37 | "
38 | 
39 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m \
40 |     "fix(front-end): fix 2, no footer
41 | 
42 | Body fix 2
43 | "
44 | 
45 | GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty -m \
46 |     "fix(front-end): fix 3 and 4, no body but footer
47 | 
48 | Fix: #3
49 | Fix: #4
50 | "
51 | 
52 | git tag v0.1.0
53 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-conventional-commit/expected.md:
--------------------------------------------------------------------------------
 1 | ## Features
 2 | 
 3 | *(web)* [**breaking**]: breaking change description feature 1
 4 | feature 1, breaking change in footer: Body feature 1
 5 | - BREAKING CHANGE: breaking change description feature 1
 6 | - Signed-off-by: user1 <user1@example.com>
 7 | - Reviewed-by: user2
 8 | 
 9 | *(web)* [**breaking**]: feature 2, breaking chain in description
10 | feature 2, breaking chain in description: Body feature 2
11 | - Signed-off-by: user3 <user3@example.com>
12 | 
13 | *(app)* [**breaking**]: feature 3, use default scope = app
14 | feature 3, use default scope = app: Body feature 2
15 | - Signed-off-by: user3 <user3@example.com>
16 | 
17 | ## Fix
18 | 
19 | *(scope)* 
20 | fix 1, use scope as group: Body fix 1
21 | - Fix: #1
22 | 
23 | *(front-end)* 
24 | fix 2, no footer: Body fix 2
25 | 
26 | *(front-end)* 
27 | fix 3 and 4, no body but footer: 
28 | - Fix: #3
29 | - Fix: #4
30 | 
31 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-custom-remote-api-url/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://gitlab.archlinux.org/archlinux/arch-repro-status
5 | git fetch
6 | git checkout 5fe2f324db566756ccaf066fe186100a09a87625
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-custom-remote-api-url/expected.md:
--------------------------------------------------------------------------------
1 | ## What's Changed in v1.4.1
2 | * Update the copyright year in license by @Orhun Parmaksız
3 | * bump dependencies by @Orhun Parmaksız
4 | * update cargo-deny config by @Orhun Parmaksız
5 | * prepare for 1.4.1 by @Orhun Parmaksız
6 | 
7 | **Full Changelog**: https://gitlab.com/archlinux/arch-repro-status/compare/v1.4.0...v1.4.1
8 | 
9 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-custom-scope/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for group, commits in commits | group_by(attribute="scope") %}
16 |         #### {{ group | upper_first }}
17 |         {% for commit in commits %}
18 |             - {{ commit.message | upper_first }}\
19 |         {% endfor %}
20 |     {% endfor %}\
21 | {% endfor %}\n
22 | """
23 | 
24 | [git]
25 | # An array of regex based parsers for extracting data from the commit message.
26 | # Assigns commits to groups.
27 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
28 | commit_parsers = [
29 |     { message = "^feat", group = "Features", default_scope = "app" },
30 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
31 | ]
32 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-custom-scope/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
 9 | git tag v0.1.0
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-custom-scope/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.1.0] - 2022-04-06
 2 | 
 3 | ### Bug Fixes
 4 | 
 5 | #### Cli
 6 | 
 7 | - Fix feature 1
 8 | - Fix feature 2
 9 | 
10 | ### Features
11 | 
12 | #### App
13 | 
14 | - Add feature 1
15 | 
16 | #### Gui
17 | 
18 | - Add feature 2
19 | 
20 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-custom-tag-pattern/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="alpha-") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # An array of regex based parsers for extracting data from the commit message.
23 | # Assigns commits to groups.
24 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
25 | commit_parsers = [
26 |     { message = "^feat", group = "Features", default_scope = "app" },
27 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
28 | ]
29 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-custom-tag-pattern/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | git tag beta-0.1.0
 7 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 8 | git tag alpha-0.1.0
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
10 | git tag beta-0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
12 | git tag alpha-0.2.0
13 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
14 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-custom-tag-pattern/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Test
 4 | 
 5 | - Add tests
 6 | 
 7 | ## [0.2.0] - 2022-04-06
 8 | 
 9 | ### Bug Fixes
10 | 
11 | - Fix feature 2
12 | 
13 | ### Features
14 | 
15 | - Add feature 2
16 | 
17 | ## [0.1.0] - 2022-04-06
18 | 
19 | ### Bug Fixes
20 | 
21 | - Fix feature 1
22 | 
23 | ### Features
24 | 
25 | - Add feature 1
26 | 
27 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-date-order/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-date-order/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | git tag v0.1.0
 6 | 
 7 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add feature 2"
 8 | git tag v0.2.0
 9 | 
10 | git checkout v0.1.0
11 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "feat: fix feature 1"
12 | git tag v0.1.1
13 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-date-order/expected.md:
--------------------------------------------------------------------------------
1 | ## [0.1.1] - 2021-01-23
2 | 
3 | ### <!-- 0 -->🚀 Features
4 | 
5 | - Fix feature 1
6 | 
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-fixtures-locally.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | SCRIPT_DIR=$(readlink -f "$(dirname "$0")")
 5 | 
 6 | if [ -z "$1" ]; then
 7 | 	echo "Please input a fixture name."
 8 | 	exit 1
 9 | fi
10 | 
11 | export FIXTURES_DIR="$SCRIPT_DIR/$1"
12 | 
13 | # Set up a temporary repository
14 | cd "$(mktemp -d)"
15 | git init >&2
16 | 
17 | # Commit
18 | "$FIXTURES_DIR/commit.sh"
19 | 
20 | # Check if we are running on Windows with MINGW64 and if cygpath is available
21 | if [ -n "$MSYSTEM" ] && [ "$MSYSTEM" = "MINGW64" ]; then
22 |   echo "Running inside MINGW64 trying to convert paths to Windows format."
23 |   if command -v cygpath > /dev/null 2>&1; then
24 |     # Convert the path to Windows format
25 |     SCRIPT_DIR=$(cygpath -w "$SCRIPT_DIR")
26 |     FIXTURES_DIR=$(cygpath -w "$FIXTURES_DIR")
27 |   else
28 |     echo "WARNING: cygpath command not found in the PATH. The script may not work correctly on Windows."
29 |     exit 1
30 |   fi
31 | fi
32 | 
33 | # Show results
34 | echo -e "\n---Run git-cliff---" >&2
35 | cargo run --manifest-path "$SCRIPT_DIR/../../Cargo.toml" -- -vv --config "$FIXTURES_DIR/cliff.toml" "${@:2}" -o "$FIXTURES_DIR/output.md"
36 | 
37 | sed -i "s/2022-04-05/2022-04-06/g" "$FIXTURES_DIR/output.md"
38 | 
39 | diff --strip-trailing-cr "$FIXTURES_DIR/output.md" "$FIXTURES_DIR/expected.md"
40 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-footer-filter/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% for group, commits in commits | group_by(attribute="group") %}
11 |     ### {{ group | upper_first }}
12 |     {% for commit in commits %}
13 |         - {{ commit.message | upper_first }}\
14 |     {% endfor %}
15 | {% endfor %}\n
16 | """
17 | 
18 | [git]
19 | # regex for parsing and grouping commits
20 | commit_parsers = [
21 |     { message = "^feat", group = "Features", default_scope = "app" },
22 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
23 |     # Accept both separators, ": " and ":".
24 |     # Conventional commits require the separator to be ": ", but the reference implementation of the
25 |     # conventional commits parser currently does not adhere to the specification. See also:
26 |     # https://github.com/conventional-commits/parser/issues/47
27 |     { footer = "^changelog: ?ignore", skip = true },
28 | ]
29 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-footer-filter/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 00:00:00" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 00:10:00" git commit --allow-empty -m "feat: add feature 1"
 6 | git tag v0.1.0
 7 | GIT_COMMITTER_DATE="2022-04-06 01:00:00" git commit --allow-empty -m "refactor: change feature 1" -m "BREAKING CHANGE: feature 1 is now different"
 8 | GIT_COMMITTER_DATE="2022-04-06 01:10:00" git commit --allow-empty -m "chore: upgrade dependencies" -m "changelog: ignore"
 9 | git tag v0.2.0
10 | GIT_COMMITTER_DATE="2022-04-06 02:00:00" git commit --allow-empty -m "test: add tests" -m "footer: some more info"
11 | GIT_COMMITTER_DATE="2022-04-06 02:10:00" git commit --allow-empty -m "test: add more tests" -m "changelog: ignore"
12 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-footer-filter/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Test
 4 | 
 5 | - Add tests
 6 | 
 7 | ## [0.2.0] - 2022-04-06
 8 | 
 9 | ### Refactor
10 | 
11 | - Change feature 1
12 | 
13 | ## [0.1.0] - 2022-04-06
14 | 
15 | ### Features
16 | 
17 | - Add feature 1
18 | 
19 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-footer-template/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}]
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | # A Tera template to be rendered as the changelog's footer.
21 | # See https://keats.github.io/tera/docs/#introduction
22 | footer = """
23 | {% for release in releases %}\
24 |     {% if release.version %}\
25 |         {% if release.previous.version %}\
26 |             <!--{{ release.previous.version }}..{{ release.version }}-->
27 |         {% endif %}\
28 |     {% else %}\
29 |         <!--{{ release.previous.version }}..HEAD-->
30 |     {% endif %}\
31 | {% endfor %}\
32 | """
33 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-footer-template/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2"
 6 | git tag v0.1.0
 7 | 
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 1"
 9 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2"
10 | git tag v0.2.0
11 | 
12 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "feat: add footer"
13 | git tag v3.0.0
14 | 
15 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "test: footer"
16 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "perf: footer"
17 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-footer-template/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### <!-- 4 -->⚡ Performance
 4 | 
 5 | - Footer
 6 | 
 7 | ### <!-- 6 -->🧪 Testing
 8 | 
 9 | - Footer
10 | 
11 | ## [3.0.0]
12 | 
13 | ### <!-- 0 -->🚀 Features
14 | 
15 | - Add footer
16 | 
17 | ## [0.2.0]
18 | 
19 | ### <!-- 1 -->🐛 Bug Fixes
20 | 
21 | - Fix feature 1
22 | - Fix feature 2
23 | 
24 | ## [0.1.0]
25 | 
26 | ### <!-- 0 -->🚀 Features
27 | 
28 | - Add feature 1
29 | - Add feature 2
30 | 
31 | <!--v3.0.0..HEAD-->
32 | <!--v0.2.0..v3.0.0-->
33 | <!--v0.1.0..v0.2.0-->
34 | 
35 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-from-context-does-not-discard-fields/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% for group, commits in commits | group_by(attribute="group") %}
 6 |     ## {{ group | striptags | trim | upper_first }}
 7 |     {% for commit in commits %}
 8 |           {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
 9 |           {% if commit.breaking %}[**breaking**]: {{ commit.breaking_description }}{% endif %}
10 |           {{ commit.message }}: {{ commit.body }}\
11 |           {% for footer in commit.footers %}
12 |             - {{ footer.token }}{{ footer.separator }} {{ footer.value }}\
13 |           {% endfor %}
14 |     {% endfor %}\
15 | {% endfor %}\n
16 | """
17 | 
18 | [git]
19 | # An array of regex based parsers for extracting data from the commit message.
20 | # Assigns commits to groups.
21 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
22 | commit_parsers = [
23 |   { message = "^feat", group = "Features", default_scope = "app" },
24 |   { message = "^fix" },
25 | ]
26 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-from-context-does-not-discard-fields/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m \
 6 |     "feat(web): feature 1, breaking change in footer
 7 | 
 8 | Body feature 1
 9 | 
10 | BREAKING CHANGE: breaking change description feature 1
11 | Signed-off-by: user1 <user1@example.com>
12 | Reviewed-by: user2
13 | "
14 | 
15 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m \
16 |     "feat(web)!: feature 2, breaking chain in description
17 | 
18 | Body feature 2
19 | 
20 | Signed-off-by: user3 <user3@example.com>
21 | "
22 | 
23 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m \
24 |     "feat!: feature 3, use default scope = app
25 | 
26 | Body feature 2
27 | 
28 | Signed-off-by: user3 <user3@example.com>
29 | "
30 | 
31 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m \
32 |     "fix(scope): fix 1, use scope as group
33 | 
34 | Body fix 1
35 | 
36 | Fix: #1
37 | "
38 | 
39 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m \
40 |     "fix(front-end): fix 2, no footer
41 | 
42 | Body fix 2
43 | "
44 | 
45 | GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty -m \
46 |     "fix(front-end): fix 3 and 4, no body but footer
47 | 
48 | Fix: #3
49 | Fix: #4
50 | "
51 | 
52 | git tag v0.1.0
53 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-from-context-does-not-discard-fields/expected.md:
--------------------------------------------------------------------------------
 1 | 
 2 | ## Features
 3 | 
 4 | *(web)* [**breaking**]: breaking change description feature 1
 5 | feature 1, breaking change in footer: Body feature 1
 6 | - BREAKING CHANGE: breaking change description feature 1
 7 | - Signed-off-by: user1 <user1@example.com>
 8 | - Reviewed-by: user2
 9 | 
10 | *(web)* [**breaking**]: feature 2, breaking chain in description
11 | feature 2, breaking chain in description: Body feature 2
12 | - Signed-off-by: user3 <user3@example.com>
13 | 
14 | *(app)* [**breaking**]: feature 3, use default scope = app
15 | feature 3, use default scope = app: Body feature 2
16 | - Signed-off-by: user3 <user3@example.com>
17 | 
18 | ## Fix
19 | 
20 | *(scope)* 
21 | fix 1, use scope as group: Body fix 1
22 | - Fix: #1
23 | 
24 | *(front-end)* 
25 | fix 2, no footer: Body fix 2
26 | 
27 | *(front-end)* 
28 | fix 3 and 4, no body but footer: 
29 | - Fix: #3
30 | - Fix: #4
31 | 
32 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-from-context/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}{% if extra.note %} - {{ extra.note }}{% endif %}
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% for group, commits in commits | group_by(attribute="group") %}
11 |     ### {{ group | upper_first }}
12 |     {% for commit in commits %}
13 |         - {{ commit.message | upper_first }}{% if commit.extra.note %} ({{ commit.extra.note }}){% endif %}\
14 |     {% endfor %}
15 | {% endfor %}\n
16 | """
17 | 
18 | [git]
19 | # regex for parsing and grouping commits
20 | commit_parsers = [
21 |     { message = "^feat", group = "Features", default_scope = "app" },
22 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
23 | ]
24 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-from-context/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | git tag v0.1.0
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2 SHOULD NOT BE IN THE CHANGELOG"
10 | git tag v0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
12 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-from-context/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Test
 4 | 
 5 | - Add tests
 6 | 
 7 | ## [0.2.0] - 2022-04-05 - This is so awesome!
 8 | 
 9 | ### Bug Fixes
10 | 
11 | - Fix feature 2 (that was a tough one)
12 | 
13 | ### Features
14 | 
15 | - Add feature 2
16 | 
17 | ## [0.1.0] - 2022-04-05
18 | 
19 | ### Bug Fixes
20 | 
21 | - Fix feature 1
22 | 
23 | ### Features
24 | 
25 | - Add feature 1
26 | 
27 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-gitea-integration-custom-range/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://codeberg.org/ThetaDev/git-cliff-readme-example.git
5 | git pull origin master
6 | git fetch --tags
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-gitea-integration-custom-range/expected.md:
--------------------------------------------------------------------------------
1 | ## What's Changed
2 | * feat(config): support multiple file formats by @ThetaDev
3 | * feat(cache): use cache while fetching pages by @ThetaDev
4 | 
5 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-gitea-integration/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://codeberg.org/ThetaDev/git-cliff-readme-example.git
5 | git pull origin master
6 | git fetch --tags
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-gitea-integration/expected.md:
--------------------------------------------------------------------------------
 1 | ## What's Changed
 2 | * Initial commit by @ThetaDev
 3 | * docs(project): add README.md by @ThetaDev
 4 | * feat(parser): add ability to parse arrays by @ThetaDev
 5 | * fix(args): rename help argument due to conflict by @ThetaDev
 6 | * docs(example)!: add tested usage example by @ThetaDev
 7 | * refactor(parser): expose string functions by @ThetaDev
 8 | * chore(release): add release script by @ThetaDev
 9 | * feat(config): support multiple file formats by @ThetaDev
10 | * feat(cache): use cache while fetching pages by @ThetaDev
11 | 
12 | ### New Contributors
13 | * @ThetaDev made their first contribution
14 | 
15 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-github-integration-custom-range/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://github.com/orhun/git-cliff-readme-example
5 | git pull origin master
6 | git fetch --tags
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-github-integration-custom-range/expected.md:
--------------------------------------------------------------------------------
1 | ## What's Changed in v1.0.1
2 | * refactor(parser): expose string functions by @orhun
3 | * chore(release): add release script by @orhun
4 | 
5 | **Full Changelog**: https://github.com/orhun/git-cliff-readme-example/compare/v1.0.0...v1.0.1
6 | 
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-github-integration/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://github.com/orhun/git-cliff-readme-example
5 | git pull origin master
6 | git fetch --tags
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-github-integration/expected.md:
--------------------------------------------------------------------------------
 1 | ## What's Changed
 2 | * feat(config): support multiple file formats by @orhun
 3 | * feat(cache): use cache while fetching pages by @orhun
 4 | 
 5 | ## What's Changed in v1.0.1
 6 | * refactor(parser): expose string functions by @orhun
 7 | * chore(release): add release script by @orhun
 8 | 
 9 | **Full Changelog**: https://github.com/orhun/git-cliff-readme-example/compare/v1.0.0...v1.0.1
10 | 
11 | ## What's Changed in v1.0.0
12 | * Initial commit by @orhun
13 | * docs(project): add README.md by @orhun
14 | * feat(parser): add ability to parse arrays by @orhun
15 | * fix(args): rename help argument due to conflict by @orhun
16 | * docs(example)!: add tested usage example by @orhun
17 | 
18 | ### New Contributors
19 | * @orhun made their first contribution
20 | 
21 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-gitlab-integration-custom-range/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://gitlab.com/dark0dave/dotfiles
5 | git fetch
6 | git checkout 3c048a1b6a32e6d1076581225b06dd41ee5a02ff
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-gitlab-integration-custom-range/expected.md:
--------------------------------------------------------------------------------
1 | ## What's Changed
2 | * Added curl files by @dark0dave
3 | * Zsh update by @dark0dave
4 | * Update README.md by @dark0dave
5 | * Fix for path by @dark0dave
6 | * Update README.md by @dark0dave
7 | 
8 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-gitlab-integration/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://gitlab.com/dark0dave/dotfiles
5 | git fetch
6 | git checkout 3c048a1b6a32e6d1076581225b06dd41ee5a02ff
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-gitlab-integration/expected.md:
--------------------------------------------------------------------------------
 1 | ## What's Changed
 2 | * Initial commit by @dark0dave
 3 | * Added tmux files by @dark0dave
 4 | * Updated readme by @dark0dave
 5 | * Updated readme and added zshrc files by @dark0dave
 6 | * Added python files by @dark0dave
 7 | * Added curl files by @dark0dave
 8 | * Zsh update by @dark0dave
 9 | * Update README.md by @dark0dave
10 | * Fix for path by @dark0dave
11 | * Update README.md by @dark0dave
12 | * Started setup files by @dark0dave
13 | * Updated tmux to be a little nicer by @dark0dave
14 | * Merge branch 'feature/tmux-improvements' into 'master' by @dark0dave in #2
15 | 
16 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-header-template/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog footer
 3 | header = """
 4 | # Changelog
 5 | {% for release in releases %}\
 6 |     {% if release.version %}\
 7 |         {% if release.previous.version %}\
 8 |             <!--{{ release.previous.version }}..{{ release.version }}-->
 9 |         {% endif %}\
10 |     {% else %}\
11 |         <!--{{ release.previous.version }}..HEAD-->
12 |     {% endif %}\
13 | {% endfor %}\
14 | """
15 | # template for the changelog body
16 | # https://keats.github.io/tera/docs/#introduction
17 | body = """
18 | {% if version %}\
19 |     ## [{{ version | trim_start_matches(pat="v") }}]
20 | {% else %}\
21 |     ## [unreleased]
22 | {% endif %}\
23 | {% for group, commits in commits | group_by(attribute="group") %}
24 |     ### {{ group | upper_first }}
25 |     {% for commit in commits %}
26 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
27 |     {% endfor %}
28 | {% endfor %}\n
29 | """
30 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-header-template/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2"
 6 | git tag v0.1.0
 7 | 
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 1"
 9 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2"
10 | git tag v0.2.0
11 | 
12 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "feat: add footer"
13 | git tag v3.0.0
14 | 
15 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "test: footer"
16 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "perf: footer"
17 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-header-template/expected.md:
--------------------------------------------------------------------------------
 1 | # Changelog
 2 | <!--v3.0.0..HEAD-->
 3 | <!--v0.2.0..v3.0.0-->
 4 | <!--v0.1.0..v0.2.0-->
 5 | ## [unreleased]
 6 | 
 7 | ### Perf
 8 | 
 9 | - Footer
10 | 
11 | ### Test
12 | 
13 | - Footer
14 | 
15 | ## [3.0.0]
16 | 
17 | ### Feat
18 | 
19 | - Add footer
20 | 
21 | ## [0.2.0]
22 | 
23 | ### Fix
24 | 
25 | - Fix feature 1
26 | - Fix feature 2
27 | 
28 | ## [0.1.0]
29 | 
30 | ### Feat
31 | 
32 | - Add feature 1
33 | - Add feature 2
34 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-ignore-tags/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # Regex to select git tags that do not represent proper releases.
23 | # Takes precedence over `tag_pattern`.
24 | # Changes belonging to these releases will be included in the next release.
25 | skip_tags = "v0.1.0-beta.1"
26 | # Regex to exclude git tags after applying the tag_pattern.
27 | ignore_tags = "v.*-beta.*"
28 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-ignore-tags/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add skip feature"
 5 | git tag v0.1.0-beta.1
 6 | 
 7 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add feature 1"
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "feat: fix feature 1"
 9 | git tag v0.1.0
10 | 
11 | GIT_COMMITTER_DATE="2021-01-23 01:23:48" git commit --allow-empty -m "feat: add feature 2"
12 | git tag v0.2.0-beta.1
13 | 
14 | GIT_COMMITTER_DATE="2021-01-23 01:23:49" git commit --allow-empty -m "feat: add feature 3"
15 | git tag v0.2.0
16 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-ignore-tags/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.2.0] - 2021-01-23
 2 | 
 3 | ### <!-- 0 -->🚀 Features
 4 | 
 5 | - Add feature 2
 6 | - Add feature 3
 7 | 
 8 | ## [0.1.0] - 2021-01-23
 9 | 
10 | ### <!-- 0 -->🚀 Features
11 | 
12 | - Add feature 1
13 | - Fix feature 1
14 | 
15 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-invert-ignore-tags/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% for group, commits in commits | group_by(attribute="group") %}
11 |     ### {{ group | upper_first }}
12 |     {% for commit in commits %}
13 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
14 |     {% endfor %}
15 | {% endfor %}\n
16 | """
17 | 
18 | [git]
19 | # regex for skipping tags
20 | skip_tags = "v0.1.0-beta.1"
21 | # regex for ignoring tags
22 | ignore_tags = "v.*-beta.*"
23 | count_tags = "v0.2.0"
24 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-invert-ignore-tags/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add skip feature"
 5 | git tag v0.1.0-beta.1
 6 | 
 7 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add feature 1"
 8 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "feat: fix feature 1"
 9 | git tag v0.1.0
10 | 
11 | GIT_COMMITTER_DATE="2021-01-23 01:23:48" git commit --allow-empty -m "feat: add feature 2"
12 | git tag v0.2.0-beta.1
13 | 
14 | GIT_COMMITTER_DATE="2021-01-23 01:23:49" git commit --allow-empty -m "feat: add feature 3"
15 | git tag v0.2.0
16 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-invert-ignore-tags/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.2.0] - 2021-01-23
 2 | 
 3 | ### <!-- 0 -->🚀 Features
 4 | 
 5 | - Add feature 1
 6 | - Fix feature 1
 7 | - Add feature 2
 8 | - Add feature 3
 9 | 
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-current-arg/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
5 | git tag v0.1.0
6 | 
7 | GIT_COMMITTER_DATE="2021-01-24 01:23:46" git commit --allow-empty -m "feat: add feature 2"
8 | git tag v0.2.0
9 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-current-arg/expected.md:
--------------------------------------------------------------------------------
 1 | # Changelog
 2 | 
 3 | All notable changes to this project will be documented in this file.
 4 | 
 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 7 | 
 8 | ## [0.2.0](https://github.com/dummy/dummy/compare/v0.1.0...v0.2.0) - 2021-01-24
 9 | 
10 | ### Added
11 | 
12 | - Add feature 2
13 | 
14 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-latest-arg/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | git tag v0.1.0
 6 | 
 7 | GIT_COMMITTER_DATE="2021-01-24 01:23:46" git commit --allow-empty -m "feat: add feature 2"
 8 | git tag v0.2.0
 9 | 
10 | GIT_COMMITTER_DATE="2021-01-25 01:23:47" git commit --allow-empty -m "fix: fix feature 1"
11 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-latest-arg/expected.md:
--------------------------------------------------------------------------------
 1 | # Changelog
 2 | 
 3 | All notable changes to this project will be documented in this file.
 4 | 
 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 7 | 
 8 | ## [0.2.0](https://github.com/dummy/dummy/compare/v0.1.0...v0.2.0) - 2021-01-24
 9 | 
10 | ### Added
11 | 
12 | - Add feature 2
13 | 
14 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-no-tags/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
5 | 
6 | GIT_COMMITTER_DATE="2021-01-24 01:23:46" git commit --allow-empty -m "feat: add feature 2"
7 | 
8 | GIT_COMMITTER_DATE="2021-01-25 01:23:47" git commit --allow-empty -m "fix: fix feature 1"
9 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-no-tags/expected.md:
--------------------------------------------------------------------------------
 1 | # Changelog
 2 | 
 3 | All notable changes to this project will be documented in this file.
 4 | 
 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 7 | 
 8 | ## [Unreleased]
 9 | 
10 | ### Added
11 | 
12 | - Add feature 1
13 | - Add feature 2
14 | 
15 | ### Fixed
16 | 
17 | - Fix feature 1
18 | 
19 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-one-tag-bump-arg/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "Initial commit"
 5 | 
 6 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add feature 1"
 7 | git tag v0.1.0
 8 | 
 9 | GIT_COMMITTER_DATE="2021-01-25 01:23:47" git commit --allow-empty -m "fix: fix feature 1"
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-one-tag-bump-arg/expected.md:
--------------------------------------------------------------------------------
 1 | # Changelog
 2 | 
 3 | All notable changes to this project will be documented in this file.
 4 | 
 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 7 | 
 8 | ## [0.1.1](https://github.com/dummy/dummy/compare/v0.1.0...v0.1.1) - <<DATE>>
 9 | 
10 | ### Fixed
11 | 
12 | - Fix feature 1
13 | 
14 | ## [0.1.0](https://github.com/dummy/dummy/releases/tag/v0.1.0) - 2021-01-23
15 | 
16 | ### Added
17 | 
18 | - Add feature 1
19 | 
20 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-one-tag/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
5 | git tag v0.1.0
6 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-one-tag/expected.md:
--------------------------------------------------------------------------------
 1 | # Changelog
 2 | 
 3 | All notable changes to this project will be documented in this file.
 4 | 
 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 7 | 
 8 | ## [0.1.0](https://github.com/dummy/dummy/releases/tag/v0.1.0) - 2021-01-23
 9 | 
10 | ### Added
11 | 
12 | - Add feature 1
13 | 
14 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-tag-arg/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | git tag v0.1.0
 6 | 
 7 | GIT_COMMITTER_DATE="2021-01-24 01:23:46" git commit --allow-empty -m "feat: add feature 2"
 8 | git tag v0.2.0
 9 | 
10 | GIT_COMMITTER_DATE="2021-01-25 01:23:47" git commit --allow-empty -m "fix: fix feature 1"
11 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-tag-arg/expected.md:
--------------------------------------------------------------------------------
 1 | # Changelog
 2 | 
 3 | All notable changes to this project will be documented in this file.
 4 | 
 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 7 | 
 8 | ## [0.3.0](https://github.com/dummy/dummy/compare/v0.2.0...v0.3.0) - <<DATE>>
 9 | 
10 | ### Fixed
11 | 
12 | - Fix feature 1
13 | 
14 | ## [0.2.0](https://github.com/dummy/dummy/compare/v0.1.0...v0.2.0) - 2021-01-24
15 | 
16 | ### Added
17 | 
18 | - Add feature 2
19 | 
20 | ## [0.1.0](https://github.com/dummy/dummy/releases/tag/v0.1.0) - 2021-01-23
21 | 
22 | ### Added
23 | 
24 | - Add feature 1
25 | 
26 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-unreleased-arg/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | git tag v0.1.0
 6 | 
 7 | GIT_COMMITTER_DATE="2021-01-24 01:23:46" git commit --allow-empty -m "feat: add feature 2"
 8 | git tag v0.2.0
 9 | 
10 | GIT_COMMITTER_DATE="2021-01-25 01:23:47" git commit --allow-empty -m "fix: fix feature 1"
11 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links-unreleased-arg/expected.md:
--------------------------------------------------------------------------------
 1 | # Changelog
 2 | 
 3 | All notable changes to this project will be documented in this file.
 4 | 
 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 7 | 
 8 | ## [Unreleased](https://github.com/dummy/dummy/compare/v0.2.0...HEAD)
 9 | 
10 | ### Fixed
11 | 
12 | - Fix feature 1
13 | 
14 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | git tag v0.1.0
 6 | 
 7 | GIT_COMMITTER_DATE="2021-01-24 01:23:46" git commit --allow-empty -m "feat: add feature 2"
 8 | git tag v0.2.0
 9 | 
10 | GIT_COMMITTER_DATE="2021-01-25 01:23:47" git commit --allow-empty -m "fix: fix feature 1"
11 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-keep-a-changelog-links/expected.md:
--------------------------------------------------------------------------------
 1 | # Changelog
 2 | 
 3 | All notable changes to this project will be documented in this file.
 4 | 
 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 7 | 
 8 | ## [Unreleased](https://github.com/dummy/dummy/compare/v0.2.0...HEAD)
 9 | 
10 | ### Fixed
11 | 
12 | - Fix feature 1
13 | 
14 | ## [0.2.0](https://github.com/dummy/dummy/compare/v0.1.0...v0.2.0) - 2021-01-24
15 | 
16 | ### Added
17 | 
18 | - Add feature 2
19 | 
20 | ## [0.1.0](https://github.com/dummy/dummy/releases/tag/v0.1.0) - 2021-01-23
21 | 
22 | ### Added
23 | 
24 | - Add feature 1
25 | 
26 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-latest-with-one-tag/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-latest-with-one-tag/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: initial commit"
5 | 
6 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add feature 1"
7 | git tag v0.1.0
8 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-latest-with-one-tag/expected.md:
--------------------------------------------------------------------------------
1 | ## [0.1.0] - 2021-01-23
2 | 
3 | ### <!-- 0 -->🚀 Features
4 | 
5 | - Initial commit
6 | - Add feature 1
7 | 
8 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-limit-commits/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # Limit the total number of commits contained in the changelog.
23 | limit_commits = 2
24 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-limit-commits/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1 (#1)"
7 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "refactor: move  classes"
8 | git tag v0.1.0
9 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-limit-commits/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.1.0] - 2022-04-06
 2 | 
 3 | ### <!-- 1 -->🐛 Bug Fixes
 4 | 
 5 | - Fix feature 1 (#1)
 6 | 
 7 | ### <!-- 2 -->🚜 Refactor
 8 | 
 9 | - Move  classes
10 | 
11 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-monorepo-include-path/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% for group, commits in commits | group_by(attribute="group") %}
11 |     ### {{ group | upper_first }}
12 |     {% for commit in commits %}
13 |         - {{ commit.message | upper_first }}\
14 |     {% endfor %}
15 | {% endfor %}\n
16 | """
17 | 
18 | [git]
19 | # regex for parsing and grouping commits
20 | commit_parsers = [
21 |     { message = "^feat", group = "Features", default_scope = "app" },
22 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
23 | ]
24 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-monorepo-include-path/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://github.com/orhun/git-cliff
5 | git fetch
6 | mv cliff.toml cliff.toml.bak
7 | git checkout 076feb74b4d8c8634669f57d4e2765c39490d80e
8 | mv cliff.toml.bak cliff.toml
9 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-monorepo-include-path/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Bug Fixes
 4 | 
 5 | - Include the root commit when `--latest` is used with one tag (#901)
 6 | - Match PR and release metadata correctly (#907)
 7 | - Fix missing commit fields in context (#837) (#920)
 8 | - Preserve first time contributors (#925)
 9 | 
10 | ### Features
11 | 
12 | - Allow overriding the remote API URL via config (#896)
13 | 
14 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-no-exec/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | # An array of regex based postprocessors to modify the changelog.
21 | postprocessors = [
22 |   { pattern = '.*', replace_command = 'this_command_does_not_exist' },
23 | ]
24 | 
25 | [git]
26 | # An array of regex based parsers for extracting data from the commit message.
27 | # Assigns commits to groups.
28 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
29 | commit_parsers = [
30 |   { message = "^feat", group = "Features", default_scope = "app" },
31 |   { message = "^fix", group = "Bug Fixes", scope = "cli" },
32 | ]
33 | # An array of regex based parsers to modify commit messages prior to further processing.
34 | commit_preprocessors = [
35 |   { pattern = '.*', replace_command = "this_command_does_not_exist" },
36 | ]
37 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-no-exec/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | git tag v0.1.0
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
10 | git tag v0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
12 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-no-exec/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Test
 4 | 
 5 | - Add tests
 6 | 
 7 | ## [0.2.0] - 2022-04-06
 8 | 
 9 | ### Bug Fixes
10 | 
11 | - Fix feature 2
12 | 
13 | ### Features
14 | 
15 | - Add feature 2
16 | 
17 | ## [0.1.0] - 2022-04-06
18 | 
19 | ### Bug Fixes
20 | 
21 | - Fix feature 1
22 | 
23 | ### Features
24 | 
25 | - Add feature 1
26 | 
27 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-override-scope/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## Unreleased
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for group, commits in commits | group_by(attribute="scope") %}
16 |         #### {{ group | upper_first }}
17 |         {% for commit in commits %}
18 |             - {{ commit.message | upper_first }}\
19 |         {% endfor %}
20 |     {% endfor %}\
21 | {% endfor %}\n
22 | """
23 | 
24 | [git]
25 | conventional_commits = true
26 | filter_unconventional = false
27 | # An array of regex based parsers for extracting data from the commit message.
28 | # Assigns commits to groups.
29 | # Optionally sets the commit's `scope` and can decide to exclude commits from further processing.
30 | commit_parsers = [
31 |     { message = "([Xx]enon)", scope = "Xenon" }
32 | ]
33 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-override-scope/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "fix(Xenon): first commit"
6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix(Xenon): second commit"
7 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix(xenon): third commit"
8 | git tag v0.1.0
9 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-override-scope/expected.md:
--------------------------------------------------------------------------------
 1 | ## 0.1.0 - 2022-04-06
 2 | 
 3 | ### Fix
 4 | 
 5 | #### Xenon
 6 | 
 7 | - First commit
 8 | - Second commit
 9 | - Third commit
10 | 
11 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-regex-json-array/commit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | git remote add origin https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit
5 | git pull origin main
6 | git fetch --tags
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-regex-json-array/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### <!-- 02 -->✨ Enhancements
 4 | 
 5 | - feat(cache): use cache while fetching pages([PR #7](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/7))
 6 | - feat(config): support multiple file formats([PR #8](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/8))
 7 | - feat(parser): add ability to parse arrays([PR #9](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/9))
 8 | 
 9 | ## [1.0.1] - 2025-06-18
10 | 
11 | ### <!-- 01 -->🚀 Feature Updates
12 | 
13 | - chore(release): add release script([PR #6](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/6))
14 | 
15 | ### <!-- 03 -->🐛 Bug Fixes
16 | 
17 | - fix(args): rename help argument due to conflict([PR #5](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/5))
18 | 
19 | ## [1.0.0] - 2025-06-18
20 | 
21 | ### <!-- 00 -->💥 Breaking Changes
22 | 
23 | - refactor(parser): expose string functions([PR #3](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/3))
24 | 
25 | ### <!-- 05 -->📝 Documentation
26 | 
27 | - docs(project): add README.md([PR #2](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/2))
28 | - docs(example)!: add tested usage example([PR #4](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/4))
29 | 
30 | ### <!-- 06 -->🌀 Miscellaneous
31 | 
32 | - chore: initialize main
33 | - initial commit([PR #1](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/1))
34 | 
35 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-regex-label-grouping/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | body = """
 3 | ### What's changed
 4 | {% for group, commits in commits | group_by(attribute="group") %}
 5 |   #### {{ group }}
 6 |   {% for commit in commits -%}
 7 |     - {{ commit.message }}
 8 |   {% endfor -%}\n
 9 | {% endfor %}\n
10 | """
11 | 
12 | [git]
13 | commit_parsers = [
14 |   { field = "author.name", pattern = "testa", group = "<!-- 0 -->TEST A" },
15 |   { field = "author.name", pattern = "testb", group = "<!-- 1 -->TEST B" },
16 |   { field = "author.name", pattern = "testc", group = "<!-- 2 -->TEST C" },
17 | ]
18 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-regex-label-grouping/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty --author="testa <testa@address.com>" -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty --author="testa <testa@address.com>" -m "feat: add feature 2"
 7 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty --author="testb <testb@address.com>" -m "feat: add feature 3"
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty --author="testb <testb@address.com>" -m "feat: add feature 4"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty --author="testc <testc@address.com>" -m "feat: add feature 5"
10 | GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty --author="testc <testc@address.com>" -m "feat: add feature 6"    
11 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-regex-label-grouping/expected.md:
--------------------------------------------------------------------------------
 1 | ### What's changed
 2 | 
 3 | #### <!-- 0 -->TEST A
 4 | - add feature 1
 5 | - add feature 2
 6 | 
 7 | #### <!-- 1 -->TEST B
 8 | - add feature 3
 9 | - add feature 4
10 | 
11 | #### <!-- 2 -->TEST C
12 | - add feature 5
13 | - add feature 6
14 | 
15 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-regex-replace-parser/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - ({{ commit.scope }}) {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # An array of regex based parsers for extracting data from the commit message.
23 | # Assigns commits to groups.
24 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
25 | commit_parsers = [
26 |     { message = '^fix\((.*)\)', group = 'Fix (${1}) 🧰' },
27 |     { message = '^feat\((.*)\)', group = 'Feature (${1}) 🚀' },
28 |     { message = "^\\[(.*)\\]", group = "Changes to ${1}", scope = "${1}" },
29 | ]
30 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-regex-replace-parser/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat(config): add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix(config): fix feature 1"
 7 | git tag v0.1.0
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
10 | git tag v0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "[tests]: add tests"
12 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "[codebase]: refactor stuff"
13 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "[codebase]: refactor more stuff"
14 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "[security]: rewrite everything in Rust"
15 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-regex-replace-parser/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Changes to codebase
 4 | 
 5 | - (codebase) Refactor stuff
 6 | - (codebase) Refactor more stuff
 7 | 
 8 | ### Changes to security
 9 | 
10 | - (security) Rewrite everything in Rust
11 | 
12 | ### Changes to tests
13 | 
14 | - (tests) Add tests
15 | 
16 | ## [0.2.0] - 2022-04-05
17 | 
18 | ### Feature (gui) 🚀
19 | 
20 | - (gui) Add feature 2
21 | 
22 | ### Fix (gui) 🧰
23 | 
24 | - (gui) Fix feature 2
25 | 
26 | ## [0.1.0] - 2022-04-05
27 | 
28 | ### Feature (config) 🚀
29 | 
30 | - (config) Add feature 1
31 | 
32 | ### Fix (config) 🧰
33 | 
34 | - (config) Fix feature 1
35 | 
36 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-release-statistics/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | git tag v0.1.0
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
10 | git tag v0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
12 | GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty -m "feat: add release statistics feature(#452)"
13 | GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty -m "fix: remove duplication (#452)"
14 | GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty -m "feat: make git short shat available(#1148)"
15 | GIT_COMMITTER_DATE="2022-04-06 01:25:15" git commit --allow-empty -m "fix(parser): ensure URI parsing is RFC3986-compliant"
16 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-release-statistics/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Bug Fixes
 4 | 
 5 | - Remove duplication (#452)
 6 | - Ensure URI parsing is RFC3986-compliant
 7 | 
 8 | ### Features
 9 | 
10 | - Add release statistics feature(#452)
11 | - Make git short shat available(#1148)
12 | 
13 | ### Test
14 | 
15 | - Add tests
16 | 
17 | ### Commit Statistics
18 | 
19 | - 5 commit(s) contributed to the release.
20 | - 0 day(s) passed between the first and last commit.
21 | - 5 commit(s) parsed as conventional.
22 | - 3 linked issue(s) detected in commits.
23 |   - [#452](https://github.com/orhun/git-cliff/issues/452) (referenced 2 time(s))
24 |   - [#1148](https://github.com/orhun/git-cliff/issues/1148) (referenced 1 time(s))
25 |   - [ietf-rfc3986](https://datatracker.ietf.org/doc/html/rfc3986) (referenced 1 time(s))
26 | - <<DAYS SINCE LAST RELEASE>> day(s) passed between releases.
27 | 
28 | ## [0.2.0] - 2022-04-06
29 | 
30 | ### Bug Fixes
31 | 
32 | - Fix feature 2
33 | 
34 | ### Features
35 | 
36 | - Add feature 2
37 | 
38 | ### Commit Statistics
39 | 
40 | - 2 commit(s) contributed to the release.
41 | - 0 day(s) passed between the first and last commit.
42 | - 2 commit(s) parsed as conventional.
43 | - 0 linked issue(s) detected in commits.
44 | 
45 | ## [0.1.0] - 2022-04-06
46 | 
47 | ### Bug Fixes
48 | 
49 | - Fix feature 1
50 | 
51 | ### Commit Statistics
52 | 
53 | - 1 commit(s) contributed to the release.
54 | - 0 day(s) passed between the first and last commit.
55 | - 1 commit(s) parsed as conventional.
56 | - 0 linked issue(s) detected in commits.
57 | 
58 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-remote-config/cliff.toml:
--------------------------------------------------------------------------------
1 | [changelog]
2 | header = "This is going to be overriden"
3 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-remote-config/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | git tag v0.1.0
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
10 | git tag v0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
12 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-remote-config/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Test
 4 | 
 5 | - Add tests
 6 | 
 7 | ## [0.2.0] - 2022-04-06
 8 | 
 9 | ### Bug Fixes
10 | 
11 | - Fix feature 2
12 | 
13 | ### Features
14 | 
15 | - Add feature 2
16 | 
17 | ## [0.1.0] - 2022-04-06
18 | 
19 | ### Bug Fixes
20 | 
21 | - Fix feature 1
22 | 
23 | ### Features
24 | 
25 | - Add feature 1
26 | 
27 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-require-conventional-negative/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # A Tera template to be rendered as the changelog's header.
 3 | # See https://keats.github.io/tera/docs/#introduction
 4 | header = """
 5 | # Changelog\n
 6 | All notable changes to this project will be documented in this file.
 7 | """
 8 | # A Tera template to be rendered for each release in the changelog.
 9 | # See https://keats.github.io/tera/docs/#introduction
10 | body = """
11 | {% for group, commits in commits | group_by(attribute="group") %}
12 |     ## {{ group | striptags | trim | upper_first }}
13 |     {% for commit in commits %}
14 |           {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
15 |           {% if commit.breaking %}[**breaking**]: {{ commit.breaking_description }}{% endif %}
16 |           {{ commit.message }}: {{ commit.body }}\
17 |           {% for footer in commit.footers %}
18 |             - {{ footer.token }}{{ footer.separator }} {{ footer.value }}\
19 |           {% endfor %}
20 |     {% endfor %}\
21 | {% endfor %}\n
22 | """
23 | 
24 | [git]
25 | # Require all commits to be conventional.
26 | # Takes precedence over filter_unconventional.
27 | require_conventional = true
28 | # An array of regex based parsers for extracting data from the commit message.
29 | # Assigns commits to groups.
30 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
31 | commit_parsers = [
32 |   { message = "^feat", group = "Features", default_scope = "app" },
33 |   { message = "^fix" },
34 | ]
35 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-require-conventional-negative/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "This is unconventional."
 7 | GIT_COMMITTER_DATE="2022-04-06 01:25:11"  git commit --allow-empty -m \
 8 |     "This is unconventional on multiple lines.
 9 | 
10 | Line 2
11 | 
12 | Some Footer: user3 <user3@example.com>
13 | "
14 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui)!: fix feature 2"
15 | 
16 | git tag v0.1.0
17 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-require-conventional-negative/expected.rc:
--------------------------------------------------------------------------------
1 | 1


--------------------------------------------------------------------------------
/.github/fixtures/test-require-conventional-skipped/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for group, commits in commits | group_by(attribute="scope") %}
16 |         #### {{ group | upper_first }}
17 |         {% for commit in commits %}
18 |             - {{ commit.message | upper_first }}\
19 |         {% endfor %}
20 |     {% endfor %}\
21 | {% endfor %}\n
22 | """
23 | 
24 | [git]
25 | # Require all commits to be conventional.
26 | # Takes precedence over filter_unconventional.
27 | require_conventional = true
28 | # An array of regex based parsers for extracting data from the commit message.
29 | # Assigns commits to groups.
30 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
31 | commit_parsers = [
32 |     { message = "^feat", group = "Features", default_scope = "app" },
33 |     { message = "^fix", group = "Bug Fixes", skip = true },
34 |     { message = "Initial commit", skip = true },
35 | ]
36 | # Prevent commits that are breaking from being excluded by commit parsers.
37 | protect_breaking_commits = true
38 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-require-conventional-skipped/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui)!: add feature 2"
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui)!: fix feature 2"
 9 | 
10 | git tag v0.1.0
11 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-require-conventional-skipped/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.1.0] - 2022-04-06
 2 | 
 3 | ### Bug Fixes
 4 | 
 5 | #### Gui
 6 | 
 7 | - Fix feature 2
 8 | 
 9 | ### Features
10 | 
11 | #### App
12 | 
13 | - Add feature 1
14 | 
15 | #### Gui
16 | 
17 | - Add feature 2
18 | 
19 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-skip-breaking-changes/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for group, commits in commits | group_by(attribute="scope") %}
16 |         #### {{ group | upper_first }}
17 |         {% for commit in commits %}
18 |             - {{ commit.message | upper_first }}\
19 |         {% endfor %}
20 |     {% endfor %}\
21 | {% endfor %}\n
22 | """
23 | 
24 | [git]
25 | # An array of regex based parsers for extracting data from the commit message.
26 | # Assigns commits to groups.
27 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
28 | commit_parsers = [
29 |     { message = "^feat", group = "Features", default_scope = "app", skip = true },
30 |     { message = "^fix", group = "Bug Fixes", scope = "cli", skip = true },
31 | ]
32 | # Prevent commits that are breaking from being excluded by commit parsers.
33 | protect_breaking_commits = true
34 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-skip-breaking-changes/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix!: fix feature 1"
 7 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui)!: add feature 2"
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui)!: fix feature 2"
 9 | git tag v0.1.0
10 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-skip-breaking-changes/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.1.0] - 2022-04-06
 2 | 
 3 | ### Bug Fixes
 4 | 
 5 | #### Cli
 6 | 
 7 | - Fix feature 1
 8 | - Fix feature 2
 9 | 
10 | ### Features
11 | 
12 | #### Gui
13 | 
14 | - Add feature 2
15 | 
16 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-skip-commits/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # An array of regex based parsers for extracting data from the commit message.
23 | # Assigns commits to groups.
24 | # Optionally sets the commit's scope and can decide to exclude commits from further processing.
25 | commit_parsers = [
26 |     { message = "^feat", group = "<!-- 0 -->🚀 Features", default_scope = "app" },
27 |     { message = "^fix", group = "<!-- 1 -->🐛 Bug Fixes", scope = "cli" },
28 | ]
29 | # Exclude commits that are not matched by any commit parser.
30 | filter_commits = true
31 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-skip-commits/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | git remote add origin https://github.com/orhun/git-cliff-readme-example
 5 | git pull origin master
 6 | git fetch --tags
 7 | {
 8 |     echo "06412ac1dd4071006c465dde6597a21d4367a158"
 9 |     echo "81fbc6365484abf0b4f4b05d384175763ad8db44"
10 |     echo "e4fd3cf8e2e6f49c0b57f66416e886c37cbb3715"
11 | } >>.cliffignore
12 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-skip-commits/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### <!-- 0 -->🚀 Features
 4 | 
 5 | - Support multiple file formats
 6 | - Use cache while fetching pages
 7 | 
 8 | ## [1.0.0] - 2021-07-18
 9 | 
10 | ### <!-- 0 -->🚀 Features
11 | 
12 | - Add ability to parse arrays
13 | 
14 | ### <!-- 1 -->🐛 Bug Fixes
15 | 
16 | - Rename help argument due to conflict
17 | 
18 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-skip-tags/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # Regex to select git tags that do not represent proper releases.
23 | # Takes precedence over `tag_pattern`.
24 | # Changes belonging to these releases will be included in the next release.
25 | skip_tags = "v0.0.1"
26 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-skip-tags/commit.sh:
--------------------------------------------------------------------------------
1 | set -e
2 | 
3 | GIT_COMMITTER_DATE="2025-06-24 21:01:21" git commit --allow-empty -m "init"
4 | git tag v0.0.1
5 | 
6 | GIT_COMMITTER_DATE="2025-06-24 21:01:22" git commit --allow-empty -m "feat: add feature 0"
7 | GIT_COMMITTER_DATE="2025-06-24 21:01:23" git commit --allow-empty -m "feat: add feature 1"
8 | git tag v0.1.0
9 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-skip-tags/expected.md:
--------------------------------------------------------------------------------
1 | ## [0.1.0] - 2025-06-24
2 | 
3 | ### <!-- 0 -->🚀 Features
4 | 
5 | - Add feature 0
6 | - Add feature 1
7 | 
8 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-split-commits/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # Split commits on newlines, treating each line as an individual commit.
23 | split_commits = true
24 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-split-commits/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m \
 6 | "feat: add feature 1
 7 | feat: add feature 2
 8 | fix: fix feature 1"
 9 | 
10 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m \
11 | "chore: bump deps
12 | style: apply formatting
13 | fix: fix feature 2"
14 | 
15 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m \
16 | "test: add initial tests
17 | test: add more tests
18 | test: update assert statements"
19 | 
20 | git tag v0.1.0
21 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-split-commits/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.1.0] - 2022-04-06
 2 | 
 3 | ### <!-- 0 -->🚀 Features
 4 | 
 5 | - Add feature 1
 6 | - Add feature 2
 7 | 
 8 | ### <!-- 1 -->🐛 Bug Fixes
 9 | 
10 | - Fix feature 1
11 | - Fix feature 2
12 | 
13 | ### <!-- 10 -->💼 Other
14 | 
15 | - Initial commit
16 | 
17 | ### <!-- 5 -->🎨 Styling
18 | 
19 | - Apply formatting
20 | 
21 | ### <!-- 6 -->🧪 Testing
22 | 
23 | - Add initial tests
24 | - Add more tests
25 | - Update assert statements
26 | 
27 | ### <!-- 7 -->⚙️ Miscellaneous Tasks
28 | 
29 | - Bump deps
30 | 
31 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-submodules-include-path-config/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\
19 | {% for submodule_path, commits in submodule_commits %}
20 |     ### {{ submodule_path | upper_first }}
21 |     {% for group, commits in commits | group_by(attribute="group") %}
22 |         #### {{ group | upper_first }}
23 |         {% for commit in commits %}
24 |             - {{ commit.message | upper_first }}\
25 |         {% endfor %}
26 |     {% endfor %}
27 | {% endfor %}
28 | """
29 | 
30 | [git]
31 | # An array of regex based parsers for extracting data from the commit message.
32 | # Assigns commits to groups.
33 | # Optionally sets the commit's `scope` and can decide to exclude commits from further processing.
34 | commit_parsers = [
35 |     { message = "^feat", group = "Features", default_scope = "app" },
36 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
37 | ]
38 | recurse_submodules = true
39 | include_paths = ["submodule_two"]
40 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-submodules-include-path-config/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Features
 4 | 
 5 | - Submodule_two update 2
 6 | 
 7 | ### Submodule_two
 8 | 
 9 | #### Bug Fixes
10 | 
11 | - Submodule_two fix C
12 | 
13 | ## [0.2.0] - 2022-04-06
14 | 
15 | ### Features
16 | 
17 | - Submodule_two with initial commits
18 | - Submodule_two update 1
19 | 
20 | ### Submodule_two
21 | 
22 | #### Bug Fixes
23 | 
24 | - Submodule_two fix B
25 | 
26 | #### Features
27 | 
28 | - Submodule_two feature B
29 | 
30 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-submodules-include-path/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\
19 | {% for submodule_path, commits in submodule_commits %}
20 |     ### {{ submodule_path | upper_first }}
21 |     {% for group, commits in commits | group_by(attribute="group") %}
22 |         #### {{ group | upper_first }}
23 |         {% for commit in commits %}
24 |             - {{ commit.message | upper_first }}\
25 |         {% endfor %}
26 |     {% endfor %}
27 | {% endfor %}
28 | """
29 | 
30 | [git]
31 | # An array of regex based parsers for extracting data from the commit message.
32 | # Assigns commits to groups.
33 | # Optionally sets the commit's `scope` and can decide to exclude commits from further processing.
34 | commit_parsers = [
35 |     { message = "^feat", group = "Features", default_scope = "app" },
36 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
37 | ]
38 | recurse_submodules = true
39 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-submodules-include-path/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Features
 4 | 
 5 | - Submodule_two update 2
 6 | 
 7 | ### Submodule_two
 8 | 
 9 | #### Bug Fixes
10 | 
11 | - Submodule_two fix C
12 | 
13 | ## [0.2.0] - 2022-04-06
14 | 
15 | ### Features
16 | 
17 | - Submodule_two with initial commits
18 | - Submodule_two update 1
19 | 
20 | ### Submodule_two
21 | 
22 | #### Bug Fixes
23 | 
24 | - Submodule_two fix B
25 | 
26 | #### Features
27 | 
28 | - Submodule_two feature B
29 | 
30 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-submodules-range/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\
19 | {% for submodule_path, commits in submodule_commits %}
20 |     ### {{ submodule_path | upper_first }}
21 |     {% for group, commits in commits | group_by(attribute="group") %}
22 |         #### {{ group | upper_first }}
23 |         {% for commit in commits %}
24 |             - {{ commit.message | upper_first }}\
25 |         {% endfor %}
26 |     {% endfor %}
27 | {% endfor %}
28 | """
29 | 
30 | [git]
31 | # An array of regex based parsers for extracting data from the commit message.
32 | # Assigns commits to groups.
33 | # Optionally sets the commit's `scope` and can decide to exclude commits from further processing.
34 | commit_parsers = [
35 |     { message = "^feat", group = "Features", default_scope = "app" },
36 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
37 | ]
38 | recurse_submodules = true
39 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-submodules-range/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Features
 4 | 
 5 | - Submodule_two update 2
 6 | 
 7 | ### Submodule_two
 8 | 
 9 | #### Bug Fixes
10 | 
11 | - Submodule_two fix C
12 | 
13 | ## [0.2.0] - 2022-04-06
14 | 
15 | ### Features
16 | 
17 | - Submodule_two with initial commits
18 | - Submodule_two update 1
19 | 
20 | ### Submodule_two
21 | 
22 | #### Bug Fixes
23 | 
24 | - Submodule_two fix B
25 | 
26 | #### Features
27 | 
28 | - Submodule_two feature B
29 | 
30 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-submodules/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\
19 | {% for submodule_path, commits in submodule_commits %}
20 |     ### {{ submodule_path | upper_first }}
21 |     {% for group, commits in commits | group_by(attribute="group") %}
22 |         #### {{ group | upper_first }}
23 |         {% for commit in commits %}
24 |             - {{ commit.message | upper_first }}\
25 |         {% endfor %}
26 |     {% endfor %}
27 | {% endfor %}\n
28 | """
29 | 
30 | [git]
31 | # An array of regex based parsers for extracting data from the commit message.
32 | # Assigns commits to groups.
33 | # Optionally sets the commit's `scope` and can decide to exclude commits from further processing.
34 | commit_parsers = [
35 |     { message = "^feat", group = "Features", default_scope = "app" },
36 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
37 | ]
38 | recurse_submodules = true
39 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-submodules/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Features
 4 | 
 5 | - Submodule_two update 2
 6 | 
 7 | ### Submodule_two
 8 | 
 9 | #### Bug Fixes
10 | 
11 | - Submodule_two fix C
12 | 
13 | 
14 | ## [0.2.0] - 2022-04-06
15 | 
16 | ### Features
17 | 
18 | - Submodule_two with initial commits
19 | - Submodule_two update 1
20 | 
21 | ### Submodule_two
22 | 
23 | #### Bug Fixes
24 | 
25 | - Submodule_two fix B
26 | 
27 | #### Features
28 | 
29 | - Submodule_two feature B
30 | 
31 | 
32 | ## [0.1.0] - 2022-04-06
33 | 
34 | ### Features
35 | 
36 | - Add submodule_one
37 | - Submodule_one update 1
38 | 
39 | ### Submodule_one
40 | 
41 | #### Bug Fixes
42 | 
43 | - Submodule_one fix A
44 | 
45 | #### Features
46 | 
47 | - Submodule_one feature A
48 | - Submodule_one initial commit
49 | 
50 | 
51 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-tag-message/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
 7 |     {% if message %}
 8 |         {{ message }}
 9 |     {% endif %}\
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # regex for parsing and grouping commits
23 | commit_parsers = [
24 |     { message = "^feat", group = "Features", default_scope = "app" },
25 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
26 | ]
27 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-tag-message/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | git tag v0.1.0 -m "Some text"
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
10 | git tag v0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests"
12 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-tag-message/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### Test
 4 | 
 5 | - Add tests
 6 | 
 7 | ## [0.2.0] - 2022-04-06
 8 | 
 9 | ### Bug Fixes
10 | 
11 | - Fix feature 2
12 | 
13 | ### Features
14 | 
15 | - Add feature 2
16 | 
17 | ## [0.1.0] - 2022-04-06
18 | 
19 | Some text
20 | 
21 | ### Bug Fixes
22 | 
23 | - Fix feature 1
24 | 
25 | ### Features
26 | 
27 | - Add feature 1
28 | 
29 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-topo-order-arg/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-topo-order-arg/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | git tag v0.1.0
 6 | 
 7 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add feature 2"
 8 | git tag v0.2.0
 9 | 
10 | git checkout v0.1.0
11 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "feat: fix feature 1"
12 | git tag v0.1.1
13 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-topo-order-arg/expected.md:
--------------------------------------------------------------------------------
1 | ## [0.2.0] - 2021-01-23
2 | 
3 | ### <!-- 0 -->🚀 Features
4 | 
5 | - Add feature 2
6 | 
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-topo-order-commits/cliff.toml:
--------------------------------------------------------------------------------
1 | # git-cliff ~ configuration file
2 | # https://git-cliff.org/docs/configuration
3 | 
4 | 
5 | [git]
6 | 
7 | topo_order_commits = false


--------------------------------------------------------------------------------
/.github/fixtures/test-topo-order-commits/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 03:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 03:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 03:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | git tag v0.1.0
 8 | GIT_COMMITTER_DATE="2022-04-06 03:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 03:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
10 | git tag v0.2.0
11 | GIT_COMMITTER_DATE="2022-04-06 03:25:25" git commit --allow-empty -m "test: add tests"
12 | GIT_COMMITTER_DATE="2022-04-06 03:25:25" git checkout v0.1.0
13 | GIT_COMMITTER_DATE="2022-04-06 03:25:13" git commit --allow-empty -m "fix: fix again feature 1"
14 | git tag v0.1.1
15 | git checkout master
16 | git merge v0.1.1 --no-edit
17 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-topo-order-commits/expected.md:
--------------------------------------------------------------------------------
 1 | ## [unreleased]
 2 | 
 3 | ### 🧪 Testing
 4 | 
 5 | - Add tests
 6 | ## [0.1.1] - 2022-04-06
 7 | 
 8 | ### 🐛 Bug Fixes
 9 | 
10 | - Fix again feature 1
11 | ## [0.2.0] - 2022-04-06
12 | 
13 | ### 🚀 Features
14 | 
15 | - *(gui)* Add feature 2
16 | 
17 | ### 🐛 Bug Fixes
18 | 
19 | - *(gui)* Fix feature 2
20 | ## [0.1.0] - 2022-04-06
21 | 
22 | ### 🚀 Features
23 | 
24 | - Add feature 1
25 | 
26 | ### 🐛 Bug Fixes
27 | 
28 | - Fix feature 1
29 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-topo-order/cliff.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
10 | {% else %}\
11 |     ## [unreleased]
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
17 |     {% endfor %}
18 | {% endfor %}\n
19 | """
20 | 
21 | [git]
22 | # Order releases topologically instead of chronologically.
23 | topo_order = true
24 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-topo-order/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1"
 5 | git tag v0.1.0
 6 | 
 7 | GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add feature 2"
 8 | git tag v0.2.0
 9 | 
10 | git checkout v0.1.0
11 | GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "feat: fix feature 1"
12 | git tag v0.1.1
13 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-topo-order/expected.md:
--------------------------------------------------------------------------------
1 | ## [0.2.0] - 2021-01-23
2 | 
3 | ### <!-- 0 -->🚀 Features
4 | 
5 | - Add feature 2
6 | 
7 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-unchanged-tag-date/cliff.toml:
--------------------------------------------------------------------------------
 1 | [changelog]
 2 | # template for the changelog body
 3 | # https://keats.github.io/tera/docs/#introduction
 4 | body = """
 5 | {% if version %}\
 6 |     ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
 7 | {% else %}\
 8 |     ## [unreleased]
 9 | {% endif %}\
10 | {% for group, commits in commits | group_by(attribute="group") %}
11 |     ### {{ group | upper_first }}
12 |     {% for commit in commits %}
13 |         - {{ commit.message | upper_first }}\
14 |     {% endfor %}
15 | {% endfor %}\n
16 | """
17 | 
18 | [git]
19 | # regex for parsing and grouping commits
20 | commit_parsers = [
21 |     { message = "^feat", group = "Features", default_scope = "app" },
22 |     { message = "^fix", group = "Bug Fixes", scope = "cli" },
23 | ]
24 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-unchanged-tag-date/commit.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | set -e
 3 | 
 4 | GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit"
 5 | GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1"
 6 | GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1"
 7 | git tag v0.1.0
 8 | GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2"
 9 | GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2"
10 | git tag v0.2.0
11 | 


--------------------------------------------------------------------------------
/.github/fixtures/test-unchanged-tag-date/expected.md:
--------------------------------------------------------------------------------
 1 | ## [0.2.0] - 2022-04-06
 2 | 
 3 | ### Bug Fixes
 4 | 
 5 | - Fix feature 2
 6 | 
 7 | ### Features
 8 | 
 9 | - Add feature 2
10 | 
11 | ## [0.1.0] - 2022-04-06
12 | 
13 | ### Bug Fixes
14 | 
15 | - Fix feature 1
16 | 
17 | ### Features
18 | 
19 | - Add feature 1
20 | 
21 | 


--------------------------------------------------------------------------------
/.github/mergify.yml:
--------------------------------------------------------------------------------
1 | pull_request_rules:
2 |   - name: Automatic merge for Dependabot pull requests
3 |     conditions:
4 |       - author=dependabot[bot]
5 |     actions:
6 |       merge:
7 |         method: squash
8 | 


--------------------------------------------------------------------------------
/.github/workflows/dependency-review.yml:
--------------------------------------------------------------------------------
 1 | # Dependency Review Action
 2 | #
 3 | # This Action will scan dependency manifest files that change as part of a Pull Request,
 4 | # surfacing known-vulnerable versions of the packages declared or updated in the PR.
 5 | # Once installed, if the workflow run is marked as required,
 6 | # PRs introducing known-vulnerable packages will be blocked from merging.
 7 | #
 8 | # Source repository: https://github.com/actions/dependency-review-action
 9 | name: 'Dependency Review'
10 | on: [pull_request]
11 | 
12 | permissions:
13 |   contents: read
14 | 
15 | jobs:
16 |   dependency-review:
17 |     runs-on: ubuntu-latest
18 |     steps:
19 |       - name: 'Checkout Repository'
20 |         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
21 |       - name: 'Dependency Review'
22 |         uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9 # v4.7.1
23 | 


--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
 1 | # Compiled files and executables
 2 | /target/
 3 | 
 4 | # Backup files generated by rustfmt
 5 | **/*.rs.bk
 6 | 
 7 | *.flamegraph.svg
 8 | 
 9 | # direnv
10 | /.direnv/
11 | 
12 | # Potential Nix stuff
13 | /result
14 | /result-*
15 | 


--------------------------------------------------------------------------------
/.lycheeignore:
--------------------------------------------------------------------------------
 1 | file:///
 2 | %7Busername%7D
 3 | https://datatracker.ietf.org
 4 | protonmail
 5 | https://github.com/cocogitto/cocogitto
 6 | pypi.org
 7 | https://console.substack.com
 8 | git-cliff/commit/
 9 | patreon
10 | 


--------------------------------------------------------------------------------
/.well-known/funding-manifest-urls:
--------------------------------------------------------------------------------
1 | https://orhun.dev/funding.json
2 | 


--------------------------------------------------------------------------------
/CNAME:
--------------------------------------------------------------------------------
1 | git-cliff.org


--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
 1 | [workspace]
 2 | resolver = "2"
 3 | members = ["git-cliff-core", "git-cliff"]
 4 | 
 5 | [workspace.dependencies]
 6 | regex = "1.11.1"
 7 | glob = "0.3.2"
 8 | log = "0.4.21"
 9 | secrecy = { version = "0.8.0", features = ["serde"] }
10 | lazy_static = "1.5.0"
11 | dirs = "5.0.1"
12 | url = "2.5.3"
13 | reqwest = { version = "0.12.12", default-features = false, features = [
14 |   "blocking",
15 |   "rustls-tls",
16 |   "rustls-tls-native-roots",
17 |   "json",
18 |   "zstd",
19 | ] }
20 | 
21 | [profile.dev]
22 | opt-level = 0
23 | debug = true
24 | panic = "abort"
25 | 
26 | [profile.test]
27 | opt-level = 0
28 | debug = true
29 | 
30 | [profile.release]
31 | opt-level = 3
32 | debug = false
33 | panic = "unwind"
34 | lto = true
35 | codegen-units = 1
36 | strip = true
37 | 
38 | [profile.bench]
39 | opt-level = 3
40 | debug = true # used by the profiler
41 | strip = false # keep symbols for the profiler
42 | 
43 | [workspace.lints.clippy]
44 | literal_string_with_formatting_args = "allow"
45 | tabs_in_doc_comments = "allow"
46 | needless_raw_string_hashes = "allow"
47 | unreadable_literal = "allow"
48 | redundant_else = "allow"
49 | items_after_statements = "allow"
50 | missing_errors_doc = "allow"
51 | module_name_repetitions = "allow"
52 | uninlined_format_args = "allow"
53 | manual_string_new = "allow"
54 | must_use_candidate = "allow"
55 | too_many_lines = "allow"
56 | wildcard_imports = "allow"
57 | missing_panics_doc = "allow"
58 | inefficient_to_string = "allow"
59 | redundant_closure_for_method_calls = "allow"
60 | map_unwrap_or = "allow"
61 | struct_excessive_bools = "allow"
62 | unnecessary_wraps = "allow"
63 | 


--------------------------------------------------------------------------------
/LICENSE-MIT:
--------------------------------------------------------------------------------
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2021-2025 Orhun Parmaksız
 4 | Copyright (c) 2021-2025 git-cliff contributors
 5 | 
 6 | Permission is hereby granted, free of charge, to any person obtaining a copy
 7 | of this software and associated documentation files (the "Software"), to deal
 8 | in the Software without restriction, including without limitation the rights
 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 | 
13 | The above copyright notice and this permission notice shall be included in all
14 | copies or substantial portions of the Software.
15 | 
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | SOFTWARE.
23 | 


--------------------------------------------------------------------------------
/RELEASE.md:
--------------------------------------------------------------------------------
 1 | # Creating a Release
 2 | 
 3 | [GitHub](https://github.com/orhun/git-cliff/releases), [crates.io](https://crates.io/crates/git-cliff/) and [Docker Hub](https://hub.docker.com/r/orhunp/git-cliff) releases are automated via [GitHub actions](./.github/workflows/cd.yml) and triggered by pushing a tag.
 4 | 
 5 | 1. Run the [release script](./release.sh): `./release.sh v[X.Y.Z]`
 6 | 2. Push the changes: `git push`
 7 | 3. Check if [Continuous Integration](https://github.com/orhun/git-cliff/actions) workflow is completed successfully.
 8 | 4. Push the tags: `git push --tags`
 9 | 5. Wait for [Continuous Deployment](https://github.com/orhun/git-cliff/actions) workflow to finish.
10 |    - Do not forget to set `vars.USE_TESTPYPI` variable to `false` before release.
11 | 


--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
 1 | coverage:
 2 |   range: 50..75
 3 |   round: up
 4 |   precision: 2
 5 |   status:
 6 |     project:
 7 |       default:
 8 |         target: auto
 9 |         threshold: 5%
10 |         branches:
11 |           - main
12 |         if_ci_failed: error
13 |     patch: off
14 | 


--------------------------------------------------------------------------------
/examples/minimal.toml:
--------------------------------------------------------------------------------
 1 | # git-cliff ~ configuration file
 2 | # https://git-cliff.org/docs/configuration
 3 | 
 4 | [changelog]
 5 | # A Tera template to be rendered for each release in the changelog.
 6 | # See https://keats.github.io/tera/docs/#introduction
 7 | body = """
 8 | {% if version %}\
 9 |     ## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }}\
10 | {% else %}\
11 |     ## Unreleased\
12 | {% endif %}\
13 | {% for group, commits in commits | group_by(attribute="group") %}
14 |     ### {{ group | upper_first }}
15 |     {% for commit in commits %}\
16 |         - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}
17 |     {% endfor %}\
18 | {% endfor %}\n
19 | """
20 | 


--------------------------------------------------------------------------------
/git-cliff-core/src/contributor.rs:
--------------------------------------------------------------------------------
 1 | use std::hash::{Hash, Hasher};
 2 | 
 3 | use serde::{Deserialize, Serialize};
 4 | 
 5 | /// Representation of a remote contributor.
 6 | #[derive(Debug, Default, Clone, Eq, PartialEq, Deserialize, Serialize)]
 7 | pub struct RemoteContributor {
 8 | 	/// Username.
 9 | 	pub username:      Option<String>,
10 | 	/// Title of the pull request.
11 | 	pub pr_title:      Option<String>,
12 | 	/// The pull request that the user created.
13 | 	pub pr_number:     Option<i64>,
14 | 	/// Labels of the pull request.
15 | 	pub pr_labels:     Vec<String>,
16 | 	/// Whether if the user contributed for the first time.
17 | 	pub is_first_time: bool,
18 | }
19 | 
20 | impl Hash for RemoteContributor {
21 | 	fn hash<H: Hasher>(&self, state: &mut H) {
22 | 		self.username.hash(state);
23 | 	}
24 | }
25 | 


--------------------------------------------------------------------------------
/git-cliff-core/src/tag.rs:
--------------------------------------------------------------------------------
 1 | /// Common tag object that is parsed from a repository.
 2 | ///
 3 | /// Lightweight tags will have `None` as message.
 4 | #[derive(Debug)]
 5 | pub struct Tag {
 6 | 	/// The name of the tag
 7 | 	pub name:    String,
 8 | 	/// The message of the tag (only if it was annotated).
 9 | 	pub message: Option<String>,
10 | }
11 | 
12 | #[cfg(test)]
13 | mod test {
14 | 	use super::*;
15 | 
16 | 	#[test]
17 | 	fn create_tag_with_name_and_message() {
18 | 		let tag = Tag {
19 | 			name:    String::from("v1.0"),
20 | 			message: Some(String::from("Initial release")),
21 | 		};
22 | 		assert_eq!(tag.name, "v1.0");
23 | 		assert_eq!(tag.message, Some(String::from("Initial release")));
24 | 	}
25 | 
26 | 	#[test]
27 | 	fn create_tag_with_name_and_no_message() {
28 | 		let tag = Tag {
29 | 			name:    String::from("v1.0"),
30 | 			message: None,
31 | 		};
32 | 		assert_eq!(tag.name, "v1.0");
33 | 		assert_eq!(tag.message, None);
34 | 	}
35 | 
36 | 	#[test]
37 | 	fn debug_print_tag_with_message() {
38 | 		let tag = Tag {
39 | 			name:    String::from("v1.0"),
40 | 			message: Some(String::from("Initial release")),
41 | 		};
42 | 		assert_eq!(
43 | 			format!("{:?}", tag),
44 | 			"Tag { name: \"v1.0\", message: Some(\"Initial release\") }"
45 | 		);
46 | 	}
47 | }
48 | 


--------------------------------------------------------------------------------
/git-cliff/examples/run.rs:
--------------------------------------------------------------------------------
 1 | use clap::Parser;
 2 | use git_cliff::args::Opt;
 3 | use git_cliff_core::error::Result;
 4 | 
 5 | fn main() -> Result<()> {
 6 | 	let args = Opt::parse();
 7 | 	git_cliff::run(args)?;
 8 | 	Ok(())
 9 | }
10 | 


--------------------------------------------------------------------------------
/git-cliff/src/bin/completions.rs:
--------------------------------------------------------------------------------
 1 | use std::env;
 2 | use std::io::Result;
 3 | 
 4 | use clap::{CommandFactory, ValueEnum};
 5 | use clap_complete::Shell;
 6 | use git_cliff::args::Opt;
 7 | 
 8 | /// Shell completions can be created with:
 9 | /// `cargo run --bin git-cliff-completions`
10 | /// in a directory specified by the environment variable `OUT_DIR`.
11 | /// See <https://doc.rust-lang.org/cargo/reference/environment-variables.html>
12 | fn main() -> Result<()> {
13 | 	let out_dir = env::var("OUT_DIR").expect("OUT_DIR is not set");
14 | 	let mut app = Opt::command();
15 | 	for &shell in Shell::value_variants() {
16 | 		clap_complete::generate_to(
17 | 			shell,
18 | 			&mut app,
19 | 			env!("CARGO_PKG_NAME"),
20 | 			&out_dir,
21 | 		)?;
22 | 	}
23 | 	println!("Completion scripts are generated in {out_dir:?}");
24 | 	Ok(())
25 | }
26 | 


--------------------------------------------------------------------------------
/git-cliff/src/bin/mangen.rs:
--------------------------------------------------------------------------------
 1 | use std::io::Result;
 2 | use std::path::PathBuf;
 3 | use std::{env, fs};
 4 | 
 5 | use clap::CommandFactory;
 6 | use clap_mangen::Man;
 7 | use git_cliff::args::Opt;
 8 | 
 9 | /// Man page can be created with:
10 | /// `cargo run --bin git-cliff-mangen`
11 | /// in a directory specified by the environment variable `OUT_DIR`.
12 | /// See <https://doc.rust-lang.org/cargo/reference/environment-variables.html>
13 | fn main() -> Result<()> {
14 | 	let out_dir = env::var("OUT_DIR").expect("OUT_DIR is not set");
15 | 	let out_path =
16 | 		PathBuf::from(out_dir).join(format!("{}.1", env!("CARGO_PKG_NAME")));
17 | 	let app = Opt::command();
18 | 	let man = Man::new(app);
19 | 	let mut buffer = Vec::<u8>::new();
20 | 	man.render(&mut buffer)?;
21 | 	fs::write(&out_path, buffer)?;
22 | 	println!("Man page is generated at {out_path:?}");
23 | 	Ok(())
24 | }
25 | 


--------------------------------------------------------------------------------
/git-cliff/src/main.rs:
--------------------------------------------------------------------------------
 1 | use std::{env, process};
 2 | 
 3 | use clap::Parser;
 4 | use git_cliff::args::Opt;
 5 | use git_cliff::logger;
 6 | use git_cliff_core::error::Result;
 7 | 
 8 | /// Profiler.
 9 | #[cfg(feature = "profiler")]
10 | mod profiler;
11 | 
12 | fn main() -> Result<()> {
13 | 	// Parse the command line arguments
14 | 	let args = Opt::parse();
15 | 	if args.verbose == 1 {
16 | 		unsafe { env::set_var("RUST_LOG", "debug") };
17 | 	} else if args.verbose > 1 {
18 | 		unsafe { env::set_var("RUST_LOG", "trace") };
19 | 	} else if env::var_os("RUST_LOG").is_none() {
20 | 		unsafe { env::set_var("RUST_LOG", "info") };
21 | 	}
22 | 	logger::init()?;
23 | 
24 | 	// Initialize the profiler guard if the feature is enabled
25 | 	let mut _profiler_guard = None;
26 | 	#[cfg(feature = "profiler")]
27 | 	{
28 | 		_profiler_guard = profiler::start_profiling();
29 | 	}
30 | 	#[cfg(not(feature = "profiler"))]
31 | 	{
32 | 		_profiler_guard = Some(());
33 | 	}
34 | 
35 | 	// Run git-cliff
36 | 	let exit_code = match git_cliff::run(args) {
37 | 		Ok(()) => 0,
38 | 		Err(e) => {
39 | 			log::error!("{}", e);
40 | 			1
41 | 		}
42 | 	};
43 | 
44 | 	// Report the profiler if the feature is enabled
45 | 	#[cfg(feature = "profiler")]
46 | 	{
47 | 		profiler::finish_profiling(_profiler_guard)?;
48 | 	}
49 | 
50 | 	process::exit(exit_code);
51 | }
52 | 


--------------------------------------------------------------------------------
/git-cliff/src/profiler.rs:
--------------------------------------------------------------------------------
 1 | use git_cliff_core::error::Result;
 2 | 
 3 | /// Creates a profiler guard and returns it.
 4 | pub(crate) fn start_profiling() -> Option<pprof::ProfilerGuard<'static>> {
 5 | 	match pprof::ProfilerGuardBuilder::default()
 6 | 		.frequency(1000)
 7 | 		.blocklist(&["libc", "libgcc", "pthread", "vdso"])
 8 | 		.build()
 9 | 	{
10 | 		Ok(guard) => Some(guard),
11 | 		Err(e) => {
12 | 			log::error!("failed to build profiler guard: {e}");
13 | 			None
14 | 		}
15 | 	}
16 | }
17 | 
18 | /// Reports the profiling results.
19 | pub(crate) fn finish_profiling(
20 | 	profiler_guard: Option<pprof::ProfilerGuard>,
21 | ) -> Result<()> {
22 | 	match profiler_guard
23 | 		.expect("failed to retrieve profiler guard")
24 | 		.report()
25 | 		.build()
26 | 	{
27 | 		Ok(report) => {
28 | 			#[cfg(feature = "profiler-flamegraph")]
29 | 			{
30 | 				use std::fs::File;
31 | 				let random = rand::random::<u64>();
32 | 				let file = File::create(format!(
33 | 					"{}.{random}.flamegraph.svg",
34 | 					env!("CARGO_PKG_NAME"),
35 | 				))?;
36 | 				if let Err(e) = report.flamegraph(file) {
37 | 					log::error!("failed to create flamegraph file: {e}");
38 | 				}
39 | 			}
40 | 
41 | 			#[cfg(not(feature = "profiler-flamegraph"))]
42 | 			{
43 | 				log::info!("profiling report: {:?}", &report);
44 | 			}
45 | 		}
46 | 		Err(e) => {
47 | 			log::error!("failed to build profiler report: {e}");
48 | 		}
49 | 	}
50 | 
51 | 	Ok(())
52 | }
53 | 


--------------------------------------------------------------------------------
/npm/git-cliff/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | enableGlobalCache: true
2 | 
3 | nodeLinker: node-modules
4 | 
5 | yarnPath: .yarn/releases/yarn-4.1.0.cjs
6 | 


--------------------------------------------------------------------------------
/npm/git-cliff/eslint.config.js:
--------------------------------------------------------------------------------
 1 | // @ts-check
 2 | 
 3 | import eslint from "@eslint/js";
 4 | import tseslint from "typescript-eslint";
 5 | 
 6 | export default tseslint.config(
 7 |   eslint.configs.recommended,
 8 |   ...tseslint.configs.recommended,
 9 |   {
10 |     languageOptions: {
11 |       parserOptions: {
12 |         project: "./tsconfig.json",
13 |       },
14 |     },
15 |   }
16 | );
17 | 


--------------------------------------------------------------------------------
/npm/git-cliff/src/cli.ts:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env node
 2 | 
 3 | import { runGitCliff } from "./index.js";
 4 | 
 5 | async function run() {
 6 |   const args = process.argv.slice(2);
 7 |   const processResult = await runGitCliff(args);
 8 | 
 9 |   process.exit(processResult.exitCode ?? 0);
10 | }
11 | 
12 | void run();
13 | 


--------------------------------------------------------------------------------
/npm/git-cliff/src/getExePath.ts:
--------------------------------------------------------------------------------
 1 | import { arch as getArch, platform as getPlatform } from "os";
 2 | 
 3 | /**
 4 |  * Returns the executable path for git-cliff located inside node_modules
 5 |  * The naming convention is git-cliff-${os}-${arch}
 6 |  * If the platform is `win32` or `cygwin`, executable will include a `.exe` extension
 7 |  * @see https://nodejs.org/api/os.html#osarch
 8 |  * @see https://nodejs.org/api/os.html#osplatform
 9 |  * @example "x/xx/node_modules/git-cliff-darwin-arm64"
10 |  */
11 | export async function getExePath() {
12 |   const platform = getPlatform();
13 |   const arch = getArch();
14 | 
15 |   let os = platform as string;
16 |   let extension = "";
17 | 
18 |   if (platform === "win32" || platform === "cygwin") {
19 |     os = "windows";
20 |     extension = ".exe";
21 |   }
22 | 
23 |   try {
24 |     // Since the bin will be located inside `node_modules`, we can simply call import.meta.resolve
25 |     return import.meta.resolve(
26 |       `git-cliff-${os}-${arch}/bin/git-cliff${extension}`,
27 |     );
28 |   } catch (e) {
29 |     throw new Error(
30 |       `Couldn't find git-cliff binary inside node_modules for ${os}-${arch} (${e})`,
31 |     );
32 |   }
33 | }
34 | 


--------------------------------------------------------------------------------
/npm/git-cliff/src/optionsToStringArgs.ts:
--------------------------------------------------------------------------------
 1 | import type { Options } from "./options.js";
 2 | 
 3 | /**
 4 |  * Transforms a JavaScript object of options into an array
 5 |  * of strings that can be passed to {@link execa} for calling `git-cliff`
 6 |  *
 7 |  * @param options The options to transform
 8 |  * @returns The options as an array of strings
 9 |  */
10 | export function optionsToStringArgs(options: Options): string[] {
11 |   const args: string[] = [];
12 | 
13 |   for (const [key, value] of Object.entries(options)) {
14 |     const hyphenCaseKey = key.replace(/([A-Z])/g, "-$1").toLowerCase();
15 | 
16 |     if (Array.isArray(value)) {
17 |       for (const arrValue of value) {
18 |         args.push(`--${hyphenCaseKey}`, arrValue);
19 |       }
20 |     } else if (value === true) {
21 |       args.push(`--${hyphenCaseKey}`);
22 |     } else if (value === false || value === null) {
23 |       continue;
24 |     } else {
25 |       args.push(`--${hyphenCaseKey}`, value);
26 |     }
27 |   }
28 | 
29 |   return args;
30 | }
31 | 


--------------------------------------------------------------------------------
/npm/git-cliff/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "compilerOptions": {
 3 |     "target": "es2016",
 4 |     "module": "node16",
 5 |     "moduleResolution": "node16",
 6 |     "esModuleInterop": true,
 7 |     "forceConsistentCasingInFileNames": true,
 8 |     "strict": true,
 9 |     "resolveJsonModule": true,
10 |     "noEmit": true
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/npm/git-cliff/tsup.config.ts:
--------------------------------------------------------------------------------
 1 | import { defineConfig, type Options } from "tsup";
 2 | import { dependencies } from "./package.json";
 3 | 
 4 | const baseOptions: Options = {
 5 |   clean: true,
 6 |   dts: true,
 7 |   entry: ["src/index.ts"],
 8 |   minify: false,
 9 |   external: Object.keys(dependencies),
10 |   sourcemap: true,
11 |   target: "es2020",
12 |   tsconfig: "tsconfig.json",
13 |   keepNames: true,
14 |   treeshake: true,
15 | };
16 | 
17 | export default [
18 |   defineConfig({
19 |     ...baseOptions,
20 |     outDir: "lib/cjs",
21 |     format: "cjs",
22 |   }),
23 |   defineConfig({
24 |     ...baseOptions,
25 |     outDir: "lib/esm",
26 |     format: "esm",
27 |   }),
28 |   defineConfig({
29 |     ...baseOptions,
30 |     outDir: "lib/cli",
31 |     entry: ["src/cli.ts"],
32 |     dts: false,
33 |     sourcemap: false,
34 |     format: "esm",
35 |   }),
36 | ];
37 | 


--------------------------------------------------------------------------------
/npm/package.json.tmpl:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "${node_pkg}",
 3 |   "version": "${version}",
 4 |   "description": "A highly customizable Changelog Generator that follows Conventional Commit specifications ⛰️",
 5 |   "repository": {
 6 |     "type": "git",
 7 |     "url": "git+https://github.com/orhun/git-cliff.git"
 8 |   },
 9 |   "keywords": [
10 |     "git-cliff",
11 |     "git",
12 |     "changelog",
13 |     "change log",
14 |     "CHANGELOG.md",
15 |     "commit messages",
16 |     "commits",
17 |     "changes",
18 |     "unreleased",
19 |     "history",
20 |     "what's new",
21 |     "change set",
22 |     "conventionalcommits.org",
23 |     "conventional",
24 |     "conventional-commit",
25 |     "conventional-changelog",
26 |     "releases",
27 |     "release notes",
28 |     "git-changelog",
29 |     "versioning",
30 |     "semver",
31 |     "distribution",
32 |     "semantic",
33 |     "semantic versioning",
34 |     "parser",
35 |     "changelog-generator",
36 |     "generator",
37 |     "keepachangelog",
38 |     "keep-a-changelog",
39 |     "commit",
40 |     "automation",
41 |     "rust"
42 |   ],
43 |   "author": "git-cliff contributors <git-cliff@protonmail.com>",
44 |   "license": "MIT OR Apache-2.0",
45 |   "bugs": {
46 |     "url": "https://github.com/orhun/git-cliff/issues"
47 |   },
48 |   "homepage": "https://github.com/orhun/git-cliff#readme",
49 |   "os": [
50 |     "${node_os}"
51 |   ],
52 |   "cpu": [
53 |     "${node_arch}"
54 |   ],
55 |   "publishConfig": {
56 |     "access": "public"
57 |   }
58 | }
59 | 


--------------------------------------------------------------------------------
/pypi/.gitignore:
--------------------------------------------------------------------------------
1 | # venv dir which might be present during testing
2 | .venv
3 | 
4 | # where the build artifacts go
5 | wheels
6 | 


--------------------------------------------------------------------------------
/pypi/pyproject.toml:
--------------------------------------------------------------------------------
 1 | [build-system]
 2 | requires = ["maturin>=1.5,<2"]
 3 | build-backend = "maturin"
 4 | 
 5 | [project]
 6 | name = "git-cliff"
 7 | requires-python = ">=3.7"
 8 | classifiers = [
 9 |     "Intended Audience :: Developers",
10 |     "Topic :: Software Development",
11 |     "Programming Language :: Rust",
12 |     "Programming Language :: Python :: Implementation :: CPython",
13 |     "Programming Language :: Python :: Implementation :: PyPy",
14 | ]
15 | 
16 | [tool.maturin]
17 | bindings = "bin"
18 | manifest-path = "../git-cliff/Cargo.toml"
19 | module-name = "git-cliff"
20 | 


--------------------------------------------------------------------------------
/rust-toolchain.toml:
--------------------------------------------------------------------------------
1 | [toolchain]
2 | channel = "nightly"
3 | 


--------------------------------------------------------------------------------
/rustfmt.toml:
--------------------------------------------------------------------------------
 1 | edition = "2024"
 2 | max_width = 85
 3 | newline_style = "Unix"
 4 | hard_tabs = true
 5 | tab_spaces = 4
 6 | use_field_init_shorthand = true
 7 | reorder_imports = true
 8 | 
 9 | # Unstable options
10 | binop_separator = "Back"
11 | format_code_in_doc_comments = true
12 | format_strings = true
13 | group_imports = "StdExternalCrate"
14 | imports_granularity = "Module"
15 | normalize_doc_attributes = true
16 | overflow_delimited_expr = true
17 | struct_field_align_threshold = 20
18 | wrap_comments = true
19 | 


--------------------------------------------------------------------------------
/typos.toml:
--------------------------------------------------------------------------------
 1 | # configuration for https://github.com/crate-ci/typos
 2 | 
 3 | [type.md]
 4 | extend-ignore-re = [
 5 |   "\\[[[:xdigit:]]{7}\\]\\(https://github.com/orhun/git-cliff/commit/[[:xdigit:]]{40}\\)",
 6 |   "\\[halp\\]\\(https://github.com/orhun/halp\\)",
 7 |   "upport",
 8 | ]
 9 | 
10 | [default.extend-words]
11 | upport = "upport"
12 | 


--------------------------------------------------------------------------------
/website/.gitignore:
--------------------------------------------------------------------------------
 1 | # Dependencies
 2 | /node_modules
 3 | 
 4 | # Production
 5 | /build
 6 | 
 7 | # Generated files
 8 | .docusaurus
 9 | .cache-loader
10 | 
11 | # Misc
12 | .DS_Store
13 | .env.local
14 | .env.development.local
15 | .env.test.local
16 | .env.production.local
17 | 
18 | npm-debug.log*
19 | yarn-debug.log*
20 | yarn-error.log*
21 | 


--------------------------------------------------------------------------------
/website/README.md:
--------------------------------------------------------------------------------
 1 | # Website
 2 | 
 3 | This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
 4 | 
 5 | ### Installation
 6 | 
 7 | ```
 8 | $ yarn
 9 | ```
10 | 
11 | ### Local Development
12 | 
13 | ```
14 | $ yarn start
15 | ```
16 | 
17 | This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
18 | 
19 | ### Build
20 | 
21 | ```
22 | $ yarn build
23 | ```
24 | 
25 | This command generates static content into the `build` directory and can be served using any static contents hosting service.
26 | 
27 | ### Deployment
28 | 
29 | Using SSH:
30 | 
31 | ```
32 | $ USE_SSH=true yarn deploy
33 | ```
34 | 
35 | Not using SSH:
36 | 
37 | ```
38 | $ GIT_USER=<Your GitHub username> yarn deploy
39 | ```
40 | 
41 | If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
42 | 


--------------------------------------------------------------------------------
/website/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |   presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
3 | };
4 | 


--------------------------------------------------------------------------------
/website/blog/authors.yml:
--------------------------------------------------------------------------------
1 | orhun:
2 |   name: Orhun Parmaksız
3 |   title: Author of git-cliff
4 |   url: https://github.com/orhun
5 |   image_url: https://github.com/orhun.png
6 | 


--------------------------------------------------------------------------------
/website/docs/configuration/index.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 4
 3 | ---
 4 | # Configuration
 5 | 
 6 | **git-cliff** configuration file supports [TOML](https://github.com/toml-lang/toml) (preferred) and [YAML](https://yaml.org) formats.
 7 | 
 8 | The configuration file is read from `$HOME/git-cliff/cliff.toml` if the file exists. This location depends on the platform, for example:
 9 | 
10 | - on Linux: `/home/<user>/.config/git-cliff/cliff.toml`
11 | - on Windows: `C:\Users\<user>\AppData\Roaming\git-cliff\cliff.toml`
12 | - on macOS: `/Users/<user>/Library/Application Support/git-cliff/cliff.toml`
13 | 
14 | See [cliff.toml](https://github.com/orhun/git-cliff/blob/main/config/cliff.toml) for the default configuration values.
15 | 
16 | ## Environment Configuration Overrides
17 | 
18 | It's possible to use environment variables to override configuration elements. If an environment variable matches a configuration element, the variable's value will be used instead of the element's.
19 | 
20 | Format:
21 | 
22 | ```
23 | [PREFIX]__[CONFIG SECTION]__[FIELD NAME]
24 | ```
25 | 
26 | #### Examples
27 | 
28 | To override the `footer` element:
29 | 
30 | ```bash
31 | export GIT_CLIFF__CHANGELOG__FOOTER="<!-- footer from env -->"
32 | ```
33 | 
34 | To override the `ignore_tags` element:
35 | 
36 | ```bash
37 | export GIT_CLIFF__GIT__IGNORE_TAGS="v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+"
38 | ```
39 | 


--------------------------------------------------------------------------------
/website/docs/development/_category_.json:
--------------------------------------------------------------------------------
1 | {
2 |   "label": "Development",
3 |   "position": 12,
4 |   "link": {
5 |     "type": "generated-index"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/website/docs/development/contributing.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 | 
3 | See the contributing guide [on GitHub](https://github.com/orhun/git-cliff/blob/main/CONTRIBUTING.md).
4 | 


--------------------------------------------------------------------------------
/website/docs/development/profiling.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 1
 3 | ---
 4 | # Performance Profiling
 5 | 
 6 | **git-cliff** can be built with performance profiling instrumentation, which helps with finding bottlenecks.
 7 | 
 8 | The profiler can be enabled via the `profiler` feature and the `bench` build profile.
 9 | 
10 | ```bash
11 | cargo build --profile=bench --features=profiler
12 | ```
13 | 
14 | To create a flame graph SVG:
15 | 
16 | ```bash
17 | cargo run --profile=bench --features=profiler
18 | ```
19 | 
20 | e.g.
21 | 
22 | ![flamegraph example](https://github.com/user-attachments/assets/d29339a5-1c82-4630-bcb8-0b3466d8710a)
23 | 


--------------------------------------------------------------------------------
/website/docs/docker.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 8
 3 | ---
 4 | 
 5 | # Docker
 6 | 
 7 | ### Images
 8 | 
 9 | Docker builds are [automated](https://github.com/orhun/git-cliff/tree/main/.github/workflows/docker.yml) and images are available in the following registries:
10 | 
11 | - [Docker Hub](https://hub.docker.com/r/orhunp/git-cliff)
12 | - [GitHub Container Registry](https://github.com/orhun/git-cliff/pkgs/container/git-cliff%2Fgit-cliff)
13 | 
14 | ### Usage
15 | 
16 | The easiest way of running **git-cliff** (in the git root directory with [configuration file](/docs/configuration) present) is to use the available tags from [Docker Hub](https://hub.docker.com/r/orhunp/git-cliff):
17 | 
18 | ```bash
19 | docker run -t -v "$(pwd)":/app/ "orhunp/git-cliff:${TAG:-latest}"
20 | ```
21 | 
22 | Or you can use the image from the [GitHub Package Registry](https://github.com/orhun/git-cliff/pkgs/container/git-cliff%2Fgit-cliff):
23 | 
24 | ```bash
25 | docker run -t -v "$(pwd)":/app/ "ghcr.io/orhun/git-cliff/git-cliff:${TAG:-latest}"
26 | ```
27 | 
28 | ### Building
29 | 
30 | Custom Docker images can be built from the [Dockerfile](https://github.com/orhun/git-cliff/blob/main/Dockerfile):
31 | 
32 | ```bash
33 | DOCKER_BUILDKIT=1 docker build -t git-cliff .
34 | ```
35 | 


--------------------------------------------------------------------------------
/website/docs/github-actions/_category_.json:
--------------------------------------------------------------------------------
1 | {
2 |   "label": "GitHub Actions",
3 |   "position": 9,
4 |   "link": {
5 |     "type": "generated-index"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/website/docs/github-actions/git-cliff-action.md:
--------------------------------------------------------------------------------
 1 | # git-cliff-action
 2 | 
 3 | It is possible to generate changelogs using [GitHub Actions](https://github.com/features/actions) via [git-cliff-action](https://github.com/orhun/git-cliff-action).
 4 | 
 5 | ```yml
 6 | - name: Check out repository
 7 |   uses: actions/checkout@v3
 8 |   with:
 9 |     fetch-depth: 0
10 | 
11 | - name: Generate a changelog
12 |   uses: orhun/git-cliff-action@v3
13 |   with:
14 |     config: cliff.toml
15 |     args: --verbose
16 |   env:
17 |     OUTPUT: CHANGELOG.md
18 |     GITHUB_REPO: ${{ github.repository }}
19 | ```
20 | 
21 | See the [repository](https://github.com/orhun/git-cliff-action) for other [examples](https://github.com/orhun/git-cliff-action#examples).
22 | 
23 | Also, see the [continuous deployment workflow](https://github.com/orhun/git-cliff/tree/main/.github/workflows/cd.yml) of this project which sets the release notes for GitHub releases using this action.
24 | 


--------------------------------------------------------------------------------
/website/docs/github-actions/setup-git-cliff.md:
--------------------------------------------------------------------------------
 1 | # setup-git-cliff
 2 | 
 3 | There is also another GitHub Action which is [setup-git-cliff](https://github.com/kenji-miyake/setup-git-cliff).
 4 | 
 5 | While `git-cliff-action` uses the Docker image generated by [docker.yml](https://github.com/orhun/git-cliff/blob/main/.github/workflows/docker.yml), `setup-git-cliff` installs the binary executable in the [release artifacts](https://github.com/orhun/git-cliff/releases/latest):
 6 | 
 7 | ```yml
 8 | - name: Check out repository
 9 |   uses: actions/checkout@v3
10 |   with:
11 |     fetch-depth: 0
12 | 
13 | - name: Set up git-cliff
14 |   uses: kenji-miyake/setup-git-cliff@v1
15 | 
16 | - name: Run git-cliff
17 |   run: git cliff
18 | ```
19 | 
20 | See a practical example [here](https://github.com/autowarefoundation/autoware-github-actions/blob/v1/generate-changelog/action.yaml).
21 | 


--------------------------------------------------------------------------------
/website/docs/github-actions/taiki-e-install-action.md:
--------------------------------------------------------------------------------
 1 | # taiki-e/install-action
 2 | 
 3 | [taiki-e/install-action](https://github.com/taiki-e/install-action) enables a manual workflow
 4 | where `git-cliff` is automatically installed into your GitHub Actions environment from pre-built releases
 5 | and you can invoke it in subsequent shell script steps.
 6 | 
 7 | For example:
 8 | 
 9 | ```yml
10 | - name: Check out repository
11 |   uses: actions/checkout@v3
12 |   with:
13 |     fetch-depth: 0
14 | 
15 | - name: Install git-cliff
16 |   uses: taiki-e/install-action@git-cliff
17 | 
18 | - name: Generate changelog
19 |   run: git-cliff
20 | ```
21 | 


--------------------------------------------------------------------------------
/website/docs/gitlab.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 10
 3 | ---
 4 | 
 5 | # GitLab CI/CD
 6 | 
 7 | It is possible to generate changelogs using [GitLab CI/CD](https://docs.gitlab.com/ee/ci/).
 8 | 
 9 | This minimal example creates artifacts that can be used on another job.
10 | 
11 | ```yml
12 | - changelog:
13 |     image:
14 |       name: orhunp/git-cliff:latest
15 |       entrypoint: [""]
16 |     variables:
17 |       GIT_STRATEGY: clone # clone entire repo instead of reusing workspace
18 |       GIT_DEPTH: 0 # avoid shallow clone to give cliff all the info it needs
19 |     stage: doc
20 |     script:
21 |       - git-cliff -r . > CHANGELOG.md
22 |     artifacts:
23 |       paths:
24 |         - CHANGELOG.md
25 | ```
26 | 
27 | Please note that the stage is `doc` and has to be changed accordingly to your need.
28 | 


--------------------------------------------------------------------------------
/website/docs/index.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 1
 3 | ---
 4 | 
 5 | # Getting Started
 6 | 
 7 | **git-cliff** can generate [changelog](https://en.wikipedia.org/wiki/Changelog) files from the [Git](https://git-scm.com/) history by utilizing [conventional commits](/docs/configuration/git#conventional_commits) as well as regex-powered [custom parsers](/docs/configuration/git#commit_parsers).
 8 | 
 9 | The [changelog template](category/templating) can be customized with a [configuration file](configuration) to match the desired format.
10 | 
11 | ## Quickstart
12 | 
13 | 1. Install **git-cliff**:
14 | 
15 | ```bash
16 | cargo install git-cliff
17 | ```
18 | 
19 | Also, see the other [installation options](installation).
20 | 
21 | 2. Initialize **git-cliff**:
22 | 
23 | ```bash
24 | git-cliff --init
25 | ```
26 | 
27 | Edit the default [configuration](configuration) (`cliff.toml`) as you like. Check out the [examples](templating/examples) for different templates.
28 | 
29 | 3. Generate a changelog:
30 | 
31 | ```bash
32 | git-cliff -o CHANGELOG.md
33 | ```
34 | 
35 | See the [command-line usage examples](usage/examples).
36 | 
37 | :::note
38 | The `git cliff` command can also be used interchangeably with `git-cliff` (with a `-`) in most environments (when `git` is installed). However, when using the [NPM](/docs/installation/npm) installation method, the `git-cliff` command should be used.
39 | :::
40 | 
41 | ## Contribute
42 | 
43 | Contributions are highly appreciated! See the [contribution guidelines](https://github.com/orhun/git-cliff/blob/main/CONTRIBUTING.md) for getting started.
44 | 
45 | Feel free to submit issues and toss ideas!
46 | 


--------------------------------------------------------------------------------
/website/docs/installation/alpine-linux.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 5
 3 | ---
 4 | # Alpine Linux
 5 | 
 6 | If you are using Alpine Linux, **git-cliff** is available for [Alpine Edge](https://pkgs.alpinelinux.org/packages?name=git-cliff&branch=edge) and it can be installed via [apk](https://wiki.alpinelinux.org/wiki/Alpine_Package_Keeper) (Alpine Package Keeper) after enabling the [community repository](https://wiki.alpinelinux.org/wiki/Repositories):
 7 | 
 8 | ```bash
 9 | apk add git-cliff
10 | ```
11 | 


--------------------------------------------------------------------------------
/website/docs/installation/arch-linux.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 4
 3 | ---
 4 | # Arch Linux
 5 | 
 6 | If you are using Arch Linux, **git-cliff** can be installed from the [official repositories](https://archlinux.org/packages/extra/x86_64/git-cliff/):
 7 | 
 8 | ```bash
 9 | pacman -S git-cliff
10 | ```
11 | 


--------------------------------------------------------------------------------
/website/docs/installation/binary-releases.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 3
 3 | ---
 4 | # Binary releases
 5 | 
 6 | See the available binaries for different operating systems/architectures from the [releases page](https://github.com/orhun/git-cliff/releases).
 7 | 
 8 | Release tarballs are signed with the following PGP key: [1D2D410A741137EBC544826F4A92FA17B6619297](https://keyserver.ubuntu.com/pks/lookup?search=0x4A92FA17B6619297&op=vindex)
 9 | 
10 | ### Linux
11 | 
12 | 1. Download the latest binary from [releases](https://github.com/orhun/git-cliff/releases) section and pick between [glibc](https://en.wikipedia.org/wiki/Glibc) or [musl-libc](https://musl.libc.org/) binary.
13 | 
14 | 2. To download the package compiled with `glibc`:
15 | 
16 | ```bash
17 | # version="1.0.0"
18 | wget "https://github.com/orhun/git-cliff/releases/download/v${version}/git-cliff-${version}-x86_64-unknown-linux-gnu.tar.gz"
19 | ```
20 | 
21 | 2. To download the package compiled with `musl-libc`:
22 | 
23 | ```bash
24 | # version="1.0.0"
25 | wget "https://github.com/orhun/git-cliff/releases/download/v${version}/git-cliff-${version}-x86_64-unknown-linux-musl.tar.gz"
26 | ```
27 | 
28 | 3. Extract the files:
29 | 
30 | ```bash
31 | tar -xvzf git-cliff-*.tar.gz
32 | ```
33 | 
34 | 4. Enter the folder:
35 | 
36 | ```bash
37 | cd "git-cliff-${version}"
38 | ```
39 | 
40 | 5. Run the binary:
41 | 
42 | ```bash
43 | ./git-cliff
44 | ```
45 | 
46 | 6. Move binary to `/usr/local/bin/` for running it from the terminal using `git-cliff` command.
47 | 


--------------------------------------------------------------------------------
/website/docs/installation/build-from-source.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 2
 3 | ---
 4 | 
 5 | # Build from source
 6 | 
 7 | ### Prerequisites
 8 | 
 9 | - [Rust](https://www.rust-lang.org/) (nightly)
10 |   - The minimum supported Rust version is `1.75.0`.
11 | - [zlib](https://zlib.net/)
12 | - [libgit2](https://libgit2.org/)
13 | 
14 | ### Instructions
15 | 
16 | 1. Clone the repository.
17 | 
18 | ```bash
19 | git clone https://github.com/orhun/git-cliff
20 | cd git-cliff/
21 | ```
22 | 
23 | 2. Build.
24 | 
25 | ```bash
26 | CARGO_TARGET_DIR=target cargo build --release
27 | ```
28 | 
29 | Binary will be located at `target/release/git-cliff`.
30 | 
31 | Also, see the [available feature flags](/docs/installation/crates-io).
32 | 
33 | ### Shell completions
34 | 
35 | To generate completions in `target`:
36 | 
37 | ```bash
38 | OUT_DIR=target target/release/git-cliff-completions
39 | ```
40 | 
41 | ### Manpage
42 | 
43 | To generate a manpage in `target`:
44 | 
45 | ```bash
46 | OUT_DIR=target target/release/git-cliff-mangen
47 | ```
48 | 


--------------------------------------------------------------------------------
/website/docs/installation/conda-forge.md:
--------------------------------------------------------------------------------
1 | # Conda-forge
2 | 
3 | You can install **git-cliff** from [conda-forge](https://anaconda.org/conda-forge/git-cliff) using [`pixi`](https://pixi.sh):
4 | 
5 | ```bash
6 | pixi global install git-cliff
7 | ```
8 | 


--------------------------------------------------------------------------------
/website/docs/installation/crates-io.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 1
 3 | ---
 4 | 
 5 | # Crates.io
 6 | 
 7 | **git-cliff** can be installed from [crates.io](https://crates.io/crates/git-cliff):
 8 | 
 9 | ```bash
10 | cargo install git-cliff
11 | ```
12 | 
13 | If you want to install the latest git version:
14 | 
15 | ```bash
16 | cargo install --git https://github.com/orhun/git-cliff
17 | ```
18 | 
19 | The minimum supported Rust version is `1.83.0`.
20 | 
21 | Also, **git-cliff** has the following feature flags which can be enabled via `--features` argument:
22 | 
23 | - `update-informer`: inform about the new releases of **git-cliff**
24 | - `github`: enables the [GitHub integration](/docs/integration/github)
25 | - `gitlab`: enables the [GitLab integration](/docs/integration/gitlab)
26 | - `bitbucket`: enables the [Bitbucket integration](/docs/integration/bitbucket)
27 | 
28 | All these features are enabled as default.
29 | 
30 | To install without these features:
31 | 
32 | ```bash
33 | cargo install git-cliff --no-default-features
34 | ```
35 | 
36 | e.g. disable GitHub integration but enable the new version notifier:
37 | 
38 | ```bash
39 | cargo install git-cliff --no-default-features --features update-informer
40 | ```
41 | 


--------------------------------------------------------------------------------
/website/docs/installation/gentoo-linux.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 5
 3 | ---
 4 | # Gentoo Linux
 5 | 
 6 | If you are using Gentoo Linux, **git-cliff** can be installed from [gentoo-packages](https://packages.gentoo.org/packages/dev-vcs/git-cliff), using:
 7 | 
 8 | ```bash
 9 | emerge git-cliff
10 | ```
11 | 
12 | ::note
13 | 
14 | The package is (currently) only available for `amd64`(~) architecture.
15 | 
16 | :::
17 | 


--------------------------------------------------------------------------------
/website/docs/installation/homebrew.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 6
 3 | ---
 4 | # Homebrew
 5 | 
 6 | On macOS, **git-cliff** can be installed via [Homebrew](https://formulae.brew.sh/formula/git-cliff):
 7 | 
 8 | ```bash
 9 | brew install git-cliff
10 | ```
11 | 


--------------------------------------------------------------------------------
/website/docs/installation/index.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 2
 3 | ---
 4 | # Installation
 5 | 
 6 | <details>
 7 |   <summary>Packaging status</summary>
 8 | 
 9 | [![Packaging status](https://repology.org/badge/vertical-allrepos/git-cliff.svg)](https://repology.org/project/git-cliff/versions)
10 | 
11 | </details>
12 | 


--------------------------------------------------------------------------------
/website/docs/installation/macports.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 7
 3 | ---
 4 | # MacPorts
 5 | 
 6 | On macOS, **git-cliff** can be installed via [MacPorts](https://www.macports.org):
 7 | 
 8 | ```bash
 9 | sudo port install git-cliff
10 | ```
11 | 
12 | [Port page](https://ports.macports.org/port/git-cliff/)
13 | 


--------------------------------------------------------------------------------
/website/docs/installation/npm.md:
--------------------------------------------------------------------------------
 1 | # NPM
 2 | 
 3 | You can install and run **git-cliff** from [NPM](https://www.npmjs.com/package/git-cliff) with a single command:
 4 | 
 5 | ```bash
 6 | npx git-cliff@latest
 7 | ```
 8 | 
 9 | Also, if you want to add **git-cliff** to your project:
10 | 
11 | ```bash
12 | # with yarn
13 | yarn add -D git-cliff
14 | 
15 | # with npm
16 | npm install git-cliff --save-dev
17 | ```
18 | 
19 | Afterwards, you can run **git-cliff** via `npm exec git-cliff` or `npx git-cliff@latest`.
20 | 
21 | ## Programmatic API
22 | 
23 | **git-cliff** also provides a fully typed programmatic API. You can use it to integrate **git-cliff** into your own tooling.
24 | 
25 | ```typescript
26 | import { runGitCliff, type Options } from "git-cliff";
27 | 
28 | const options: Options = {
29 |   // ...
30 | };
31 | 
32 | runGitCliff(options);
33 | ```
34 | 
35 | Under the hood this will parse the options, set up the environment and call the **git-cliff** binary for you.
36 | 
37 | ## Supported Node.js Versions
38 | 
39 | The following minimum versions of Node are currently supported:
40 | 
41 | - `>=18.19`
42 | - `>=20.6`
43 | - `>=21`
44 | 
45 | ## Supported Platforms
46 | 
47 | NPM packages are distributed for the following platforms:
48 | 
49 | - Linux (x64, arm64)
50 | - Windows (x64, arm64)
51 | - macOS (x64, arm64)
52 | 


--------------------------------------------------------------------------------
/website/docs/installation/pypi.md:
--------------------------------------------------------------------------------
1 | # PyPI
2 | 
3 | If you are a Python user, you can install and run **git-cliff** from [PyPI](https://pypi.org/project/git-cliff/) using `pip`: 
4 | 
5 | ```bash
6 | pip install git-cliff
7 | ```
8 | 


--------------------------------------------------------------------------------
/website/docs/installation/winget.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 8
 3 | ---
 4 | # WinGet
 5 | 
 6 | On Windows, **git-cliff** can be installed via [WinGet](https://winstall.app/apps/orhun.git-cliff/):
 7 | 
 8 | ```shell
 9 | winget install git-cliff
10 | ```
11 | 


--------------------------------------------------------------------------------
/website/docs/integration/_category_.json:
--------------------------------------------------------------------------------
1 | {
2 |   "label": "Integration",
3 |   "position": 7,
4 |   "link": {
5 |     "type": "generated-index"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/website/docs/integration/python.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 6
 3 | ---
 4 | 
 5 | # Python 🐍
 6 | 
 7 | For Python projects, **git-cliff** can be configured in `pyproject.toml` via the [tool table](https://peps.python.org/pep-0518/#tool-table). To do this, simply replace the available configuration sections with `[tool.git-cliff.<section>]` and place them inside `pyproject.toml`. For example:
 8 | 
 9 | ```toml
10 | name = "..."
11 | 
12 | [project]
13 | dependencies = []
14 | 
15 | [tool.git-cliff.changelog]
16 | header = "All notable changes to this project will be documented in this file."
17 | body = "..."
18 | footer = "<!-- generated by git-cliff -->"
19 | # see [changelog] section for more keys
20 | 
21 | [tool.git-cliff.git]
22 | conventional_commits = true
23 | commit_parsers = []
24 | filter_commits = false
25 | # see [git] section for more keys
26 | ```
27 | 


--------------------------------------------------------------------------------
/website/docs/integration/rust.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 5
 3 | ---
 4 | 
 5 | # Rust/Cargo 🦀
 6 | 
 7 | For Rust projects, **git-cliff** can be configured in `Cargo.toml` via [metadata table](https://doc.rust-lang.org/cargo/reference/manifest.html#the-metadata-table). To do this, simply replace the available configuration sections with `[package.metadata.git-cliff.<section>]` and place them inside `Cargo.toml`. For example:
 8 | 
 9 | ```toml
10 | [package]
11 | name = "..."
12 | 
13 | [dependencies]
14 | # ...
15 | 
16 | [package.metadata.git-cliff.changelog]
17 | header = "All notable changes to this project will be documented in this file."
18 | body = "..."
19 | footer = "<!-- generated by git-cliff -->"
20 | # see [changelog] section for more keys
21 | 
22 | [package.metadata.git-cliff.git]
23 | conventional_commits = true
24 | commit_parsers = []
25 | filter_commits = false
26 | # see [git] section for more keys
27 | ```
28 | 
29 | For Cargo workspaces, [`workspace.metadata`](https://doc.rust-lang.org/cargo/reference/workspaces.html#the-workspacemetadata-table) table can be used. (e.g. `[workspace.metadata.git-cliff.<section>]`)
30 | 


--------------------------------------------------------------------------------
/website/docs/sourcehut.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 11
 3 | ---
 4 | 
 5 | # Sourcehut Builds
 6 | 
 7 | It is possible to generate changelogs using [SourceHut builds](https://builds.sr.ht).
 8 | 
 9 | ```yaml
10 | image: alpine/edge
11 | packages:
12 |   - git-cliff
13 | secrets:
14 |   - <your-builds.sr.ht-secret>
15 | sources:
16 |   - git://git@git.sr.ht:~<username>/<repo-name>
17 | environment:
18 |   dir: <repo-name>
19 |   source: <your-source>
20 | tasks:
21 |   - git-cliff: |
22 |       cd $dir
23 |       git cliff -o CHANGELOG.md
24 |       ssh-keyscan -t rsa git.sr.ht >> ~/.ssh/known_hosts
25 |       git remote set-url origin $source
26 |       git checkout main
27 |       git add CHANGELOG.md
28 |       git commit -m "chore(release): Update CHANGELOG"
29 |       git push -o skip-ci
30 | ```
31 | 
32 | 1. Generate a new SSH-key for SourceHut builds:
33 |    `ssh-keygen -t ed25519 -C "builds.sr.ht" -f ~/.ssh/builds-srht`
34 | 2. Add the newly generated public key to your
35 |    [SourceHut account](https://meta.sr.ht/keys).
36 | 3. Add the private key as a secret to your
37 |    [Sourcehut Builds](https://builds.sr.ht/secrets).
38 | 4. Replace all the placeholders in your `.build.yml`:
39 |    - `<your-builds.sr.ht-secret>`
40 |    - `<username>`
41 |    - `<repo-name>`
42 |    - `<your-source>`
43 | 


--------------------------------------------------------------------------------
/website/docs/templating/_category_.json:
--------------------------------------------------------------------------------
1 | {
2 |   "label": "Templating",
3 |   "position": 5,
4 |   "link": {
5 |     "type": "generated-index",
6 |     "description": "A template is a text where variables and expressions get replaced with values when it is rendered."
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/website/docs/templating/syntax.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 2
 3 | ---
 4 | # Syntax
 5 | 
 6 | **git-cliff** uses [Tera](https://github.com/Keats/tera) as the template engine. It has a syntax based on [Jinja2](http://jinja.pocoo.org/) and [Django](https://docs.djangoproject.com/en/3.1/topics/templates/) templates.
 7 | 
 8 | There are 3 kinds of delimiters and those cannot be changed:
 9 | 
10 | <!-- {% raw %} -->
11 | 
12 | - `{{` and `}}` for expressions
13 | - `{%` or `{%-` and `%}` or `-%}` for statements
14 | - `{#` and `#}` for comments
15 | 
16 | <!-- {% endraw %} -->
17 | 
18 | See the [Tera Documentation](https://keats.github.io/tera/docs/#templates) for more information about [control structures](https://keats.github.io/tera/docs/#control-structures), [built-ins filters](https://keats.github.io/tera/docs/#built-ins), etc.
19 | 
20 | Custom built-in filters that **git-cliff** uses:
21 | 
22 | - `upper_first`: Converts the first character of a string to uppercase.
23 | 


--------------------------------------------------------------------------------
/website/docs/usage/_category_.json:
--------------------------------------------------------------------------------
1 | {
2 |   "label": "Usage",
3 |   "position": 3,
4 |   "link": {
5 |     "type": "generated-index"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/website/docs/usage/adding-commits.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 9
 3 | ---
 4 | 
 5 | # Adding custom commits
 6 | 
 7 | In some cases, you might want to include commit messages in the changelog that yet don't exist. One example would be having "the commit message that updates the changelog" in the changelog. (🤔)
 8 | 
 9 | ```bash
10 | git cliff -o CHANGELOG.md
11 | git add CHANGELOG.md
12 | git commit -m "chore(release): update CHANGELOG.md for 1.0.0"
13 | ```
14 | 
15 | In the example above, `CHANGELOG.md` will not have the latest commit message since the commit is created afterward. So if you want to include custom commit messages like that in the changelog, you can use the `--with-commit` argument as follows:
16 | 
17 | ```bash
18 | # define the commit message
19 | commit_msg="chore(release): update CHANGELOG.md for 1.0.0"
20 | 
21 | # generate changelog and pretend a commit exists as "$commit_msg"
22 | git cliff --with-commit "$commit_msg" -o CHANGELOG.md
23 | 
24 | # create the actual commit
25 | git add CHANGELOG.md
26 | git commit -m "$commit_msg"
27 | ```
28 | 
29 | The commit SHA will be empty as default when `--with-commit` is used. Specify the hash with a message separated by single whitespace for setting the commit SHA. e.g. `--with-commit "8f55e69eba6e6ce811ace32bd84cc82215673cb6 feat: add X"`
30 | 
31 | :::info
32 | 
33 | Adding custom commits without a SHA will affect the [`commit_range`](/docs/templating/context) template variable.
34 | 
35 | :::
36 | 


--------------------------------------------------------------------------------
/website/docs/usage/adding-tag-messages.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 10
 3 | ---
 4 | 
 5 | # Adding version (tag) message
 6 | 
 7 | Sometimes, you might want to include a special message or note related to a version of your project.
 8 | This can be used to highlight significant milestones, provide additional context, or share information not captured by individual commit messages.
 9 | 
10 | There are currently 2 ways of doing this, in both ways, the message is available in the context of the template under the name `message`:
11 | 
12 | ```
13 | {% if message %}
14 |     {{ message }}
15 | {% endif %}\
16 | ```
17 | 
18 | ## Using annotated tags
19 | 
20 | The recommended way of adding a version message is to add the message to the tag:
21 | 
22 | ```bash
23 | git tag v1.0.0 -m "first release, yay!"
24 | ```
25 | 
26 | So in the release's context, `message` will be "first release, yay!" (even if it is signed).
27 | 
28 | ## Using `--with-tag-message`
29 | 
30 | If for some reason you don't want to have the message in the tag (or don't have a tag yet) but want to include it in the generated changelog, you can use the `--with-tag-message` flag:
31 | 
32 | ```bash
33 | git cliff --bump --unreleased --with-tag-message "some text"
34 | ```
35 | 
36 | In this case, you can only add a message to the latest release.
37 | 
38 | :::note
39 | 
40 | Please note that if you use `--with-tag-message` on a version it will ignore the original tag's message and use the one from the argument.
41 | 
42 | :::
43 | 


--------------------------------------------------------------------------------
/website/docs/usage/jujutsu.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 13
 3 | ---
 4 | 
 5 | # Jujutsu
 6 | 
 7 | You can use with a repository that has been cloned using [jujutsu](https://jj-vcs.github.io/jj/latest/).
 8 | 
 9 | ## Colocated
10 | 
11 | If the repository was cloned by `jujutsu` using the `--colocate` option, then all you need to do is make sure that
12 | you have checked out your mainline branch using git.
13 | If you don't, then you will likely see an error about an unborn branch.
14 | 
15 | ## Non-colocated
16 | 
17 | If the repository was cloned by `jujutsu` but _not_ using the `--colocate` option,
18 | then the Git repository, normally the `.git` directory, is located in `.jj/repo/store/git`
19 | 
20 | Create a file in the root of your repository that tells Git, and `git-cliff` where the Git repository is
21 | and update the `HEAD` to point to your main remote branch:
22 | 
23 | e.g.:
24 | 
25 | ```bash
26 | jj git clone https://github.com/orhun/menyoki
27 | cd menyoki
28 | echo "gitdir: .jj/repo/store/git" > .git
29 | echo "ref: refs/remotes/origin/master" > .jj/repo/store/git/HEAD
30 | ```
31 | 
32 | N.B.: Replace `master` in the last command with the name of your main remote branch. e.g. `main`, `trunk`, etc.
33 | 


--------------------------------------------------------------------------------
/website/docs/usage/load-context.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 12
 3 | ---
 4 | 
 5 | # Load context
 6 | 
 7 | :::tip
 8 | 
 9 | This is useful if you want to [print context](/docs/usage/print-context), modify it with an external tool and then "pipe" it back into **git-cliff**.
10 | 
11 | :::
12 | 
13 | To load a context from a file and output the generated changelog:
14 | 
15 | ```bash
16 | # create a context
17 | git cliff --context -o context.json
18 | 
19 | # process context and generate a changelog
20 | git cliff --from-context context.json
21 | 
22 | # process context loaded from stdin
23 | git cliff --from-context -
24 | ```
25 | 
26 | Free-form metadata can be added to release objects and commit objects in the context using the `extra` field:
27 | 
28 | ```json
29 | {
30 |   "id": "5061081d6272b1da2146fab49d803c193db309d9",
31 |   "message": "commit message",
32 |   "extra": {
33 |     "note": "this is some arbitrary data"
34 |   }
35 | }
36 | ```
37 | 


--------------------------------------------------------------------------------
/website/docs/usage/monorepos.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 5
 3 | ---
 4 | 
 5 | # Monorepos
 6 | 
 7 | You can generate a changelog scoped to a specific directory by just switching to that directory:
 8 | 
 9 | ```bash
10 | cd packages/some_library
11 | git cliff
12 | ```
13 | 
14 | To include/exclude specific paths, use the `--include-path` and `--exclude-path` arguments:
15 | 
16 | ```bash
17 | cd packages/some_library
18 | git cliff --include-path "packages/some_library/**/*" --exclude-path ".github/*"
19 | ```
20 | 
21 | These paths must be relative to the repository's root and should be a valid glob pattern.
22 | 


--------------------------------------------------------------------------------
/website/docs/usage/multiple-repos.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 6
 3 | ---
 4 | 
 5 | # Multiple repositories
 6 | 
 7 | To generate a changelog for multiple git repositories:
 8 | 
 9 | ```bash
10 | git cliff --repository path1 path2
11 | ```
12 | 
13 | Note that the changelog will be generated using the merged history of the given repositories.
14 | 
15 | :::tip
16 | 
17 | You can use the `{{ repository }}` variable in the template to display which release belongs to which repository.
18 | 
19 | See [context](/docs/templating/context) for more information.
20 | 
21 | :::
22 | 


--------------------------------------------------------------------------------
/website/docs/usage/print-context.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 11
 3 | ---
 4 | 
 5 | # Print context
 6 | 
 7 | To print the changelog [context](/docs/templating/context) as JSON:
 8 | 
 9 | ```bash
10 | # print context to stdout
11 | git cliff --context
12 | 
13 | # save context to a file
14 | git cliff --context --output context.json
15 | ```
16 | 


--------------------------------------------------------------------------------
/website/docs/usage/skipping-commits.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 8
 3 | ---
 4 | 
 5 | # Skipping commits
 6 | 
 7 | You can use `--skip-commit` argument to skip specific commits by their SHA1 value:
 8 | 
 9 | ```bash
10 | git cliff --skip-commit a78bc368e9ee382a3016c0c4bab41f7de4503bcd
11 | ```
12 | 
13 | If you have multiple commits to skip, you can either use this argument multiple times or create `.cliffignore` at the root of your repository.
14 | 
15 | For example:
16 | 
17 | ```bash
18 | # contents of .cliffignore
19 | 
20 | 4f88dda8c746173ea59f920b7579b7f6c74bd6c8
21 | 10c3194381f2cc4f93eb97404369568882ed8677
22 | ```
23 | 


--------------------------------------------------------------------------------
/website/docs/usage/submodules.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | sidebar_position: 7
 3 | ---
 4 | 
 5 | # Submodules
 6 | 
 7 | If [`recurse_submodules`](/docs/configuration/git#recurse_submodules) is set to `true`, you can include submodule commits into your changelog.
 8 | 
 9 | For example:
10 | 
11 | ```toml
12 | [git]
13 | recurse_submodules = true
14 | 
15 | [changelog]
16 | body = """
17 | {% for submodule_path, commits in submodule_commits %}
18 |     ### {{ submodule_path | upper_first }}
19 |     {% for group, commits in commits | group_by(attribute="group") %}
20 |         #### {{ group | upper_first }}
21 |         {% for commit in commits %}
22 |             - {{ commit.message | upper_first }}\
23 |         {% endfor %}
24 |     {% endfor %}
25 | {% endfor %}\n
26 | """
27 | ```
28 | 
29 | :::info
30 | 
31 | If a release does not contain any submodule updates, `submodule_commits` is just an empty map.
32 | 
33 | :::
34 | 


--------------------------------------------------------------------------------
/website/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "git-cliff-website",
 3 |   "version": "0.0.0",
 4 |   "license": "MIT OR Apache-2.0",
 5 |   "private": true,
 6 |   "scripts": {
 7 |     "docusaurus": "docusaurus",
 8 |     "start": "docusaurus start",
 9 |     "build": "docusaurus build",
10 |     "swizzle": "docusaurus swizzle",
11 |     "deploy": "docusaurus deploy",
12 |     "clear": "docusaurus clear",
13 |     "serve": "docusaurus serve",
14 |     "write-translations": "docusaurus write-translations",
15 |     "write-heading-ids": "docusaurus write-heading-ids",
16 |     "typecheck": "tsc"
17 |   },
18 |   "dependencies": {
19 |     "@docusaurus/core": "^3.7.0",
20 |     "@docusaurus/preset-classic": "^3.7.0",
21 |     "@easyops-cn/docusaurus-search-local": "^0.49.2",
22 |     "@mdx-js/react": "^3.1.0",
23 |     "clsx": "^2.1.1",
24 |     "prism-react-renderer": "^2.4.1",
25 |     "react": "^18.3.1",
26 |     "react-dom": "^18.3.1"
27 |   },
28 |   "devDependencies": {
29 |     "@docusaurus/module-type-aliases": "^3.4.0",
30 |     "@docusaurus/tsconfig": "^3.7.0",
31 |     "typescript": "^5.8.3"
32 |   },
33 |   "browserslist": {
34 |     "production": [
35 |       ">0.5%",
36 |       "not dead",
37 |       "not op_mini all"
38 |     ],
39 |     "development": [
40 |       "last 1 chrome version",
41 |       "last 1 firefox version",
42 |       "last 1 safari version"
43 |     ]
44 |   },
45 |   "engines": {
46 |     "node": ">=18.0"
47 |   }
48 | }
49 | 


--------------------------------------------------------------------------------
/website/sidebars.js:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * Creating a sidebar enables you to:
 3 |  - create an ordered group of docs
 4 |  - render a sidebar for each doc of that group
 5 |  - provide next/previous navigation
 6 | 
 7 |  The sidebars can be generated from the filesystem, or explicitly defined here.
 8 | 
 9 |  Create as many sidebars as you want.
10 |  */
11 | 
12 | // @ts-check
13 | 
14 | /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
15 | const sidebars = {
16 |   // By default, Docusaurus generates a sidebar from the docs folder structure
17 |   tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
18 | 
19 |   // But you can create a sidebar manually
20 |   /*
21 |   tutorialSidebar: [
22 |     'intro',
23 |     'hello',
24 |     {
25 |       type: 'category',
26 |       label: 'Tutorial',
27 |       items: ['tutorial-basics/create-a-document'],
28 |     },
29 |   ],
30 |    */
31 | };
32 | 
33 | module.exports = sidebars;
34 | 


--------------------------------------------------------------------------------
/website/src/components/HomepageFeatures/styles.module.css:
--------------------------------------------------------------------------------
 1 | .features {
 2 |   display: flex;
 3 |   align-items: center;
 4 |   padding-top: 2rem;
 5 |   width: 100%;
 6 | }
 7 | 
 8 | .featureSvg {
 9 |   height: 200px;
10 |   width: 200px;
11 | }
12 | 
13 | .text {
14 |   font-family: "A Angkanya Sebelas";
15 |   font-size: 1.5em;
16 | }
17 | 


--------------------------------------------------------------------------------
/website/src/components/Testimonials/styles.module.css:
--------------------------------------------------------------------------------
 1 | .testimonialsList {
 2 |   display: flex;
 3 |   flex-direction: column;
 4 |   gap: 0.5rem;
 5 |   margin: 1rem auto;
 6 |   max-width: 600px;
 7 |   padding: 0 1rem;
 8 | }
 9 | 
10 | .testimonial {
11 |   line-height: 1.4;
12 |   padding: 0.5rem 0;
13 |   text-align: center;
14 |   font-size: 1.1rem;
15 | }
16 | 
17 | .content {
18 |   margin: 0;
19 |   font-style: italic;
20 | }
21 | 
22 | .details {
23 |   display: flex;
24 |   flex-direction: column;
25 |   align-items: flex-end;
26 |   margin-top: 0.8rem;
27 |   font-size: 1rem;
28 | }
29 | 


--------------------------------------------------------------------------------
/website/src/pages/index.module.css:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * CSS files with the .module.css suffix will be treated as CSS modules
 3 |  * and scoped locally.
 4 |  */
 5 | 
 6 | @font-face {
 7 |   font-family: "A Angkanya Sebelas";
 8 |   src: url("/static/fonts/aAngkanyaSebelas.ttf") format("truetype");
 9 | }
10 | 
11 | @keyframes intro {
12 |   0% {
13 |     opacity: 0;
14 |   }
15 | 
16 |   100% {
17 |     opacity: 1;
18 |   }
19 | }
20 | 
21 | .heroBanner {
22 |   padding: 1rem 2rem;
23 |   text-align: center;
24 |   position: relative;
25 |   overflow: hidden;
26 |   background-color: #c5cdd0;
27 |   color: #1c2c2e;
28 | }
29 | 
30 | @media screen and (max-width: 996px) {
31 |   .heroBanner {
32 |     padding: 2rem;
33 |   }
34 | }
35 | 
36 | .buttons {
37 |   display: flex;
38 |   align-items: center;
39 |   justify-content: center;
40 |   padding-bottom: 10px;
41 | }
42 | 
43 | .bodyContainer {
44 |   animation: intro 1s both;
45 |   animation-delay: 0.15s;
46 | }
47 | 
48 | .animContainer {
49 |   padding: 20px;
50 | }
51 | 


--------------------------------------------------------------------------------
/website/static/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/.nojekyll


--------------------------------------------------------------------------------
/website/static/favicon/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/favicon/android-chrome-192x192.png


--------------------------------------------------------------------------------
/website/static/favicon/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/favicon/android-chrome-512x512.png


--------------------------------------------------------------------------------
/website/static/favicon/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/favicon/apple-touch-icon.png


--------------------------------------------------------------------------------
/website/static/favicon/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/favicon/favicon-16x16.png


--------------------------------------------------------------------------------
/website/static/favicon/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/favicon/favicon-32x32.png


--------------------------------------------------------------------------------
/website/static/favicon/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/favicon/favicon.ico


--------------------------------------------------------------------------------
/website/static/favicon/site.webmanifest:
--------------------------------------------------------------------------------
1 | {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}


--------------------------------------------------------------------------------
/website/static/fonts/aAngkanyaSebelas.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/fonts/aAngkanyaSebelas.ttf


--------------------------------------------------------------------------------
/website/static/img/10k-giveaway.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/10k-giveaway.jpg


--------------------------------------------------------------------------------
/website/static/img/git-cliff-anim.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/git-cliff-anim.gif


--------------------------------------------------------------------------------
/website/static/img/git-cliff-banner.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/git-cliff-banner.jpg


--------------------------------------------------------------------------------
/website/static/img/git-cliff-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/git-cliff-logo.png


--------------------------------------------------------------------------------
/website/static/img/git-cliff-social-card.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/git-cliff-social-card.jpg


--------------------------------------------------------------------------------
/website/static/img/git-cliff-star-history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/git-cliff-star-history.png


--------------------------------------------------------------------------------
/website/static/img/git-cliff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/git-cliff.png


--------------------------------------------------------------------------------
/website/static/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/logo.png


--------------------------------------------------------------------------------
/website/static/img/rustlab2023.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/rustlab2023.png


--------------------------------------------------------------------------------
/website/static/img/tee-ash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/tee-ash.jpg


--------------------------------------------------------------------------------
/website/static/img/tee-black.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/tee-black.jpg


--------------------------------------------------------------------------------
/website/static/img/tee-dark-heather.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/tee-dark-heather.jpg


--------------------------------------------------------------------------------
/website/static/img/tee-sport-grey.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/tee-sport-grey.jpg


--------------------------------------------------------------------------------
/website/static/img/tee-white.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/orhun/git-cliff/a32deca80823cf99fd968647217f72fa58c8ccc2/website/static/img/tee-white.jpg


--------------------------------------------------------------------------------
/website/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 |   // This file is not used in compilation. It is here just for a nice editor experience.
3 |   "extends": "@docusaurus/tsconfig",
4 |   "compilerOptions": {
5 |     "baseUrl": "."
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------