diff --git a/.dockerignore b/.dockerignore index 4cf045c0ce..56eea687a2 100644 --- a/.dockerignore +++ b/.dockerignore @@ -15,3 +15,9 @@ LICENSE rustfmt.toml _config.yml .lycheeignore + +# Ignore rust toolchain files as they would needlessly fetch the toolchain. +# But the image already contains a sufficient toolchain. +# Ignore both the latest naming and the legacy naming +rust-toolchain.toml +rust-toolchain diff --git a/.envrc b/.envrc new file mode 100644 index 0000000000..fb9d00cc65 --- /dev/null +++ b/.envrc @@ -0,0 +1,2 @@ +use flake +dotenv_if_exists .env diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000000..26410acbdd --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1 @@ +00273009e7553229bccc02e9f4a00d6f8acb9cd5 diff --git a/.github/ISSUE_TEMPLATE/github_integration.yml b/.github/ISSUE_TEMPLATE/integration.yml similarity index 88% rename from .github/ISSUE_TEMPLATE/github_integration.yml rename to .github/ISSUE_TEMPLATE/integration.yml index 134709266c..c93f63ebf8 100644 --- a/.github/ISSUE_TEMPLATE/github_integration.yml +++ b/.github/ISSUE_TEMPLATE/integration.yml @@ -1,14 +1,14 @@ -name: GitHub Integration ⚙️ -description: Report a bug or request a feature about GitHub integration -labels: ['github_integration'] -assignees: +name: Integration ⚙️ +description: Report a bug or request a feature about an integration (e.g GitHub/GitLab/Gitea/Bitbucket) +labels: ["integration"] +assignees: - orhun body: - type: markdown attributes: value: | Thanks for taking the time to fill out this bug report! - Please see https://git-cliff.org/docs/integration/github for more information about GitHub integration. + Please see https://git-cliff.org/docs/category/integration for more information about integrations. - type: checkboxes id: new-bug attributes: diff --git a/.github/actions/run-fixtures-test/action.yml b/.github/actions/run-fixtures-test/action.yml index d733fe7041..ba6c52e7c1 100644 --- a/.github/actions/run-fixtures-test/action.yml +++ b/.github/actions/run-fixtures-test/action.yml @@ -13,6 +13,10 @@ inputs: description: The date format to use required: false default: "%Y-%m-%d" + previous-release-timestamp: + description: The timestamp of the previous release + required: false + default: "1970-01-01 00:00:00" runs: using: composite @@ -21,7 +25,7 @@ runs: uses: dtolnay/rust-toolchain@nightly - name: Install git-cliff - run: cargo install --path git-cliff/ + run: cargo install --path git-cliff/ --profile dev shell: bash - name: Set git config @@ -39,16 +43,50 @@ runs: - name: Generate a changelog working-directory: ${{ inputs.fixtures-dir }} - run: git cliff --config cliff.toml ${{ inputs.command }} > output.md shell: bash + run: | + set +e + git cliff --config cliff.toml ${{ inputs.command }} > output.md + echo "$?" > output.rc + if [ -f output.md ]; then + cat output.md + fi - name: Compare the output with the expected output working-directory: ${{ inputs.fixtures-dir }} env: IN_DATE_FORMAT: ${{ inputs.date-format }} + IN_PREVIOUS_RELEASE_TIMESTAMP: ${{ inputs.previous-release-timestamp }} + shell: bash run: | - cat output.md - current_date=$(date +"$IN_DATE_FORMAT") - sed -i "s/<>/$current_date/g" expected.md - diff --strip-trailing-cr output.md expected.md + if [ -f expected.md ]; then + current_date=$(date +"$IN_DATE_FORMAT") + previous_release_timestamp="$IN_PREVIOUS_RELEASE_TIMESTAMP" + previous_release_timestamp=$(date -d "$previous_release_timestamp" +%s) + current_release_timestamp=$(date +%s) + days_since_last_release=$(( (current_release_timestamp - previous_release_timestamp) / 86400 )) + sed -i "s/<>/$current_date/g" expected.md + sed -i "s/<>/$days_since_last_release/g" expected.md + if ! diff --strip-trailing-cr output.md expected.md; then + + echo '> expected' + cat expected.md + + echo '> output' + cat output.md + + echo "The generated changelog does not match the expected changelog." + exit 1 + fi + fi + + - name: Compare the return code with the expected return code + working-directory: ${{ inputs.fixtures-dir }} shell: bash + run: | + if [ -f expected.rc ]; then + if ! diff --strip-trailing-cr --ignore-all-space output.rc expected.rc; then + echo "The return code does not match the expected return code." + exit 1 + fi + fi diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b4b6dafeaa..674100bf51 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,14 +4,21 @@ updates: - package-ecosystem: cargo directory: "/" schedule: - interval: daily + interval: monthly open-pull-requests-limit: 10 + groups: + minor: + update-types: + - "minor" + patch: + update-types: + - "patch" # Maintain dependencies for GitHub Actions - package-ecosystem: github-actions directory: "/" schedule: - interval: daily + interval: monthly open-pull-requests-limit: 10 groups: minor: @@ -25,7 +32,20 @@ updates: - package-ecosystem: "npm" directory: "/website" schedule: - interval: daily + interval: monthly + open-pull-requests-limit: 10 + groups: + minor: + update-types: + - "minor" + patch: + update-types: + - "patch" + + - package-ecosystem: npm + directory: /npm/git-cliff + schedule: + interval: monthly open-pull-requests-limit: 10 groups: minor: @@ -34,3 +54,10 @@ updates: patch: update-types: - "patch" + + # Maintain dependencies for Docker + - package-ecosystem: docker + directory: / + schedule: + interval: monthly + open-pull-requests-limit: 10 diff --git a/.github/fixtures/new-fixture-template/cliff.toml b/.github/fixtures/new-fixture-template/cliff.toml index 9a9d380abc..80b4336a91 100644 --- a/.github/fixtures/new-fixture-template/cliff.toml +++ b/.github/fixtures/new-fixture-template/cliff.toml @@ -1,17 +1,16 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} {% else %}\ ## [unreleased] {% endif %}\ + {% for group, commits in commits | group_by(attribute="group") %} ### {{ group | upper_first }} {% for commit in commits %} @@ -19,15 +18,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "Features", default_scope = "app" }, { message = "^fix", group = "Bug Fixes", scope = "cli" }, diff --git a/.github/fixtures/new-fixture-template/expected.md b/.github/fixtures/new-fixture-template/expected.md index 72e96a6f09..44dd845f80 100644 --- a/.github/fixtures/new-fixture-template/expected.md +++ b/.github/fixtures/new-fixture-template/expected.md @@ -1,7 +1,3 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [unreleased] ### Test @@ -28,4 +24,3 @@ All notable changes to this project will be documented in this file. - Add feature 1 - diff --git a/.github/fixtures/test-always-render-unreleased/cliff.toml b/.github/fixtures/test-always-render-unreleased/cliff.toml new file mode 100644 index 0000000000..dc75319268 --- /dev/null +++ b/.github/fixtures/test-always-render-unreleased/cliff.toml @@ -0,0 +1,21 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% if commits | length == 0 %} +No significant changes. + +{% else %}\ +{% for group, commits in commits | group_by(attribute="group") -%} + ### {{ group | upper_first }} + etc. +{% endfor %} +{% endif %}\ +""" +# render body even when there are no releases to process +render_always = true diff --git a/.github/fixtures/test-always-render-unreleased/commit.sh b/.github/fixtures/test-always-render-unreleased/commit.sh new file mode 100755 index 0000000000..3dc1a2fc3f --- /dev/null +++ b/.github/fixtures/test-always-render-unreleased/commit.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1" +git tag v0.1.0 diff --git a/.github/fixtures/test-always-render-unreleased/expected.md b/.github/fixtures/test-always-render-unreleased/expected.md new file mode 100644 index 0000000000..5fa92cb5bd --- /dev/null +++ b/.github/fixtures/test-always-render-unreleased/expected.md @@ -0,0 +1,4 @@ +## [unreleased] + +No significant changes. + diff --git a/.github/fixtures/test-always-render/cliff.toml b/.github/fixtures/test-always-render/cliff.toml new file mode 100644 index 0000000000..dc75319268 --- /dev/null +++ b/.github/fixtures/test-always-render/cliff.toml @@ -0,0 +1,21 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% if commits | length == 0 %} +No significant changes. + +{% else %}\ +{% for group, commits in commits | group_by(attribute="group") -%} + ### {{ group | upper_first }} + etc. +{% endfor %} +{% endif %}\ +""" +# render body even when there are no releases to process +render_always = true diff --git a/.github/fixtures/test-always-render/commit.sh b/.github/fixtures/test-always-render/commit.sh new file mode 100755 index 0000000000..3dc1a2fc3f --- /dev/null +++ b/.github/fixtures/test-always-render/commit.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1" +git tag v0.1.0 diff --git a/.github/fixtures/test-always-render/expected.md b/.github/fixtures/test-always-render/expected.md new file mode 100644 index 0000000000..29918d269e --- /dev/null +++ b/.github/fixtures/test-always-render/expected.md @@ -0,0 +1,4 @@ +## [0.2.0] - <> + +No significant changes. + diff --git a/.github/fixtures/test-bitbucket-integration-custom-range/cliff.toml b/.github/fixtures/test-bitbucket-integration-custom-range/cliff.toml new file mode 100644 index 0000000000..17e71e0c7b --- /dev/null +++ b/.github/fixtures/test-bitbucket-integration-custom-range/cliff.toml @@ -0,0 +1,52 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +# Bitbucket integration for fetching commit metadata. +[remote.bitbucket] +owner = "mcwarman-playground" +repo = "git-cliff-readme-example" + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{%- macro remote_url() -%} + https://bitbucket.org/{{ remote.bitbucket.owner }}/{{ remote.bitbucket.repo }} +{%- endmacro -%} + +## What's Changed +{%- if version %} in {{ version }}{%- endif -%} +{% for commit in commits %} + * {{ commit.message | split(pat="\n") | first | trim }}\ + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in \ + [#{{ commit.remote.pr_number }}]({{ self::remote_url() }}/pull-requests/{{ commit.remote.pr_number }})\ + {%- endif %} +{%- endfor -%} + +{% if bitbucket.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} + {% raw %}\n{% endraw -%} + ### New Contributors +{%- endif %}\ +{% for contributor in bitbucket.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull-requests/{{ contributor.pr_number }}) \ + {%- endif %} +{% endfor %}\ +\n\n +""" + +[git] +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = false +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = true +# Split commits on newlines, treating each line as an individual commit. +split_commits = false +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [ + # Remove issue numbers. + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, +] diff --git a/.github/fixtures/test-bitbucket-integration-custom-range/commit.sh b/.github/fixtures/test-bitbucket-integration-custom-range/commit.sh new file mode 100755 index 0000000000..7bed941a15 --- /dev/null +++ b/.github/fixtures/test-bitbucket-integration-custom-range/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://bitbucket.org/mcwarman-playground/git-cliff-readme-example +git pull origin master +git fetch --tags diff --git a/.github/fixtures/test-bitbucket-integration-custom-range/expected.md b/.github/fixtures/test-bitbucket-integration-custom-range/expected.md new file mode 100644 index 0000000000..111584024a --- /dev/null +++ b/.github/fixtures/test-bitbucket-integration-custom-range/expected.md @@ -0,0 +1,4 @@ +## What's Changed in v1.0.1 +* refactor(parser): expose string functions by @orhun +* chore(release): add release script by @orhun + diff --git a/.github/fixtures/test-bitbucket-integration/cliff.toml b/.github/fixtures/test-bitbucket-integration/cliff.toml new file mode 100644 index 0000000000..1138556b82 --- /dev/null +++ b/.github/fixtures/test-bitbucket-integration/cliff.toml @@ -0,0 +1,50 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +# Bitbucket integration for fetching commit metadata. +[remote.bitbucket] +owner = "mcwarman-playground" +repo = "git-cliff-readme-example" + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{%- macro remote_url() -%} + https://bitbucket.org/{{ remote.bitbucket.owner }}/{{ remote.bitbucket.repo }} +{%- endmacro -%} + +## What's Changed +{%- if version %} in {{ version }}{%- endif -%} +{% for commit in commits %} + * {{ commit.message | split(pat="\n") | first | trim }}\ + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in \ + [#{{ commit.remote.pr_number }}]({{ self::remote_url() }}/pull-requests/{{ commit.remote.pr_number }})\ + {%- endif %} +{%- endfor -%} + +{% if bitbucket.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} + {% raw %}\n{% endraw -%} + ### New Contributors +{%- endif %}\ +{% for contributor in bitbucket.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull-requests/{{ contributor.pr_number }}) \ + {%- endif %} +{% endfor %}\ +\n\n +""" + +[git] +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = false +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = true +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [ + # Remove issue numbers. + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, +] diff --git a/.github/fixtures/test-bitbucket-integration/commit.sh b/.github/fixtures/test-bitbucket-integration/commit.sh new file mode 100755 index 0000000000..7bed941a15 --- /dev/null +++ b/.github/fixtures/test-bitbucket-integration/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://bitbucket.org/mcwarman-playground/git-cliff-readme-example +git pull origin master +git fetch --tags diff --git a/.github/fixtures/test-bitbucket-integration/expected.md b/.github/fixtures/test-bitbucket-integration/expected.md new file mode 100644 index 0000000000..5110a5705b --- /dev/null +++ b/.github/fixtures/test-bitbucket-integration/expected.md @@ -0,0 +1,20 @@ +## What's Changed +* feat(config): support multiple file formats by @orhun +* feat(cache): use cache while fetching pages by @orhun +* 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) + +## What's Changed in v1.0.1 +* refactor(parser): expose string functions by @orhun +* chore(release): add release script by @orhun + +## What's Changed in v1.0.0 +* Initial commit by @orhun +* docs(project): add README.md by @orhun +* feat(parser): add ability to parse arrays by @orhun +* fix(args): rename help argument due to conflict by @orhun +* docs(example)!: add tested usage example by @orhun + +### New Contributors +* @orhun made their first contribution + + diff --git a/.github/fixtures/test-bump-initial-tag-cli-arg/cliff.toml b/.github/fixtures/test-bump-initial-tag-cli-arg/cliff.toml new file mode 100644 index 0000000000..2bed9621e6 --- /dev/null +++ b/.github/fixtures/test-bump-initial-tag-cli-arg/cliff.toml @@ -0,0 +1,31 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] + +[bump] +initial_tag = "test" diff --git a/.github/fixtures/test-bump-initial-tag-cli-arg/commit.sh b/.github/fixtures/test-bump-initial-tag-cli-arg/commit.sh new file mode 100755 index 0000000000..8897f4d8ef --- /dev/null +++ b/.github/fixtures/test-bump-initial-tag-cli-arg/commit.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests" diff --git a/.github/fixtures/test-bump-initial-tag-cli-arg/expected.md b/.github/fixtures/test-bump-initial-tag-cli-arg/expected.md new file mode 100644 index 0000000000..0c4cb029e6 --- /dev/null +++ b/.github/fixtures/test-bump-initial-tag-cli-arg/expected.md @@ -0,0 +1,6 @@ +## [2.1.1] + +### Test + +- Add tests + diff --git a/.github/fixtures/test-bump-initial-tag-default/cliff.toml b/.github/fixtures/test-bump-initial-tag-default/cliff.toml new file mode 100644 index 0000000000..32aff3fa71 --- /dev/null +++ b/.github/fixtures/test-bump-initial-tag-default/cliff.toml @@ -0,0 +1,28 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] diff --git a/.github/fixtures/test-bump-initial-tag-default/commit.sh b/.github/fixtures/test-bump-initial-tag-default/commit.sh new file mode 100755 index 0000000000..8897f4d8ef --- /dev/null +++ b/.github/fixtures/test-bump-initial-tag-default/commit.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests" diff --git a/.github/fixtures/test-bump-initial-tag-default/expected.md b/.github/fixtures/test-bump-initial-tag-default/expected.md new file mode 100644 index 0000000000..5af08d2a71 --- /dev/null +++ b/.github/fixtures/test-bump-initial-tag-default/expected.md @@ -0,0 +1,6 @@ +## [0.1.0] + +### Test + +- Add tests + diff --git a/.github/fixtures/test-bump-initial-tag/cliff.toml b/.github/fixtures/test-bump-initial-tag/cliff.toml new file mode 100644 index 0000000000..6cb5f85aa4 --- /dev/null +++ b/.github/fixtures/test-bump-initial-tag/cliff.toml @@ -0,0 +1,31 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] + +[bump] +initial_tag = "1.15.5" diff --git a/.github/fixtures/test-bump-initial-tag/commit.sh b/.github/fixtures/test-bump-initial-tag/commit.sh new file mode 100755 index 0000000000..8897f4d8ef --- /dev/null +++ b/.github/fixtures/test-bump-initial-tag/commit.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests" diff --git a/.github/fixtures/test-bump-initial-tag/expected.md b/.github/fixtures/test-bump-initial-tag/expected.md new file mode 100644 index 0000000000..84e356e47f --- /dev/null +++ b/.github/fixtures/test-bump-initial-tag/expected.md @@ -0,0 +1,6 @@ +## [1.15.5] + +### Test + +- Add tests + diff --git a/.github/fixtures/test-bump-unreleased-with-tag-message-arg/cliff.toml b/.github/fixtures/test-bump-unreleased-with-tag-message-arg/cliff.toml new file mode 100644 index 0000000000..891166749a --- /dev/null +++ b/.github/fixtures/test-bump-unreleased-with-tag-message-arg/cliff.toml @@ -0,0 +1,26 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] + {% if message %} + {{ message }} + {% endif %}\ +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] diff --git a/.github/fixtures/test-bump-unreleased-with-tag-message-arg/commit.sh b/.github/fixtures/test-bump-unreleased-with-tag-message-arg/commit.sh new file mode 100755 index 0000000000..7c6fe32718 --- /dev/null +++ b/.github/fixtures/test-bump-unreleased-with-tag-message-arg/commit.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1" +git tag v0.1.0 +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2" +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2" +git tag v0.2.0 +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests" diff --git a/.github/fixtures/test-bump-unreleased-with-tag-message-arg/expected.md b/.github/fixtures/test-bump-unreleased-with-tag-message-arg/expected.md new file mode 100644 index 0000000000..6584c023b7 --- /dev/null +++ b/.github/fixtures/test-bump-unreleased-with-tag-message-arg/expected.md @@ -0,0 +1,8 @@ +## [0.2.1] + +Some text + +### Test + +- Add tests + diff --git a/.github/fixtures/test-bump-version-custom-minor/cliff.toml b/.github/fixtures/test-bump-version-custom-minor/cliff.toml new file mode 100644 index 0000000000..1944647e91 --- /dev/null +++ b/.github/fixtures/test-bump-version-custom-minor/cliff.toml @@ -0,0 +1,21 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[bump] +features_always_bump_minor = true +breaking_always_bump_major = true +custom_minor_increment_regex = "minor|more" diff --git a/.github/fixtures/test-bump-version-custom-minor/commit.sh b/.github/fixtures/test-bump-version-custom-minor/commit.sh new file mode 100755 index 0000000000..8d9f2776f6 --- /dev/null +++ b/.github/fixtures/test-bump-version-custom-minor/commit.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2" +git tag v0.1.0 + +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "minor: add minor" +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2" diff --git a/.github/fixtures/test-bump-version-custom-minor/expected.md b/.github/fixtures/test-bump-version-custom-minor/expected.md new file mode 100644 index 0000000000..6f744092ef --- /dev/null +++ b/.github/fixtures/test-bump-version-custom-minor/expected.md @@ -0,0 +1,17 @@ +## [0.2.0] + +### 🐛 Bug Fixes + +- Fix feature 2 + +### 💼 Other + +- Add minor + +## [0.1.0] + +### 🚀 Features + +- Add feature 1 +- Add feature 2 + diff --git a/.github/fixtures/test-bump-version-keep-zerover/cliff.toml b/.github/fixtures/test-bump-version-keep-zerover/cliff.toml index 15414304ae..96839f1429 100644 --- a/.github/fixtures/test-bump-version-keep-zerover/cliff.toml +++ b/.github/fixtures/test-bump-version-keep-zerover/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] @@ -19,12 +17,6 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [bump] features_always_bump_minor = false diff --git a/.github/fixtures/test-bump-version-keep-zerover/expected.md b/.github/fixtures/test-bump-version-keep-zerover/expected.md index b222642be6..89997120f2 100644 --- a/.github/fixtures/test-bump-version-keep-zerover/expected.md +++ b/.github/fixtures/test-bump-version-keep-zerover/expected.md @@ -1,7 +1,3 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.2.0] ### Feat @@ -19,4 +15,3 @@ All notable changes to this project will be documented in this file. - Add feature 1 - Add feature 2 - diff --git a/.github/fixtures/test-bump-version-major/cliff.toml b/.github/fixtures/test-bump-version-major/cliff.toml new file mode 100644 index 0000000000..7d651ff0cd --- /dev/null +++ b/.github/fixtures/test-bump-version-major/cliff.toml @@ -0,0 +1,16 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" diff --git a/.github/fixtures/test-bump-version-major/commit.sh b/.github/fixtures/test-bump-version-major/commit.sh new file mode 100755 index 0000000000..3d7ef4718b --- /dev/null +++ b/.github/fixtures/test-bump-version-major/commit.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2" +git tag v0.1.0 + +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 1" +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2" diff --git a/.github/fixtures/test-bump-version-major/expected.md b/.github/fixtures/test-bump-version-major/expected.md new file mode 100644 index 0000000000..77f264fc4c --- /dev/null +++ b/.github/fixtures/test-bump-version-major/expected.md @@ -0,0 +1,14 @@ +## [1.0.0] + +### 🐛 Bug Fixes + +- Fix feature 1 +- Fix feature 2 + +## [0.1.0] + +### 🚀 Features + +- Add feature 1 +- Add feature 2 + diff --git a/.github/fixtures/test-bump-version-minor/cliff.toml b/.github/fixtures/test-bump-version-minor/cliff.toml new file mode 100644 index 0000000000..7d651ff0cd --- /dev/null +++ b/.github/fixtures/test-bump-version-minor/cliff.toml @@ -0,0 +1,16 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" diff --git a/.github/fixtures/test-bump-version-minor/commit.sh b/.github/fixtures/test-bump-version-minor/commit.sh new file mode 100755 index 0000000000..0fd84c20f6 --- /dev/null +++ b/.github/fixtures/test-bump-version-minor/commit.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2" +git tag v0.1.0 + +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat!: add breaking feature" +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2" diff --git a/.github/fixtures/test-bump-version-minor/expected.md b/.github/fixtures/test-bump-version-minor/expected.md new file mode 100644 index 0000000000..1c073889ce --- /dev/null +++ b/.github/fixtures/test-bump-version-minor/expected.md @@ -0,0 +1,17 @@ +## [0.2.0] + +### 🚀 Features + +- [**breaking**] Add breaking feature + +### 🐛 Bug Fixes + +- Fix feature 2 + +## [0.1.0] + +### 🚀 Features + +- Add feature 1 +- Add feature 2 + diff --git a/.github/fixtures/test-bump-version-patch/cliff.toml b/.github/fixtures/test-bump-version-patch/cliff.toml new file mode 100644 index 0000000000..7d651ff0cd --- /dev/null +++ b/.github/fixtures/test-bump-version-patch/cliff.toml @@ -0,0 +1,16 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" diff --git a/.github/fixtures/test-bump-version-patch/commit.sh b/.github/fixtures/test-bump-version-patch/commit.sh new file mode 100755 index 0000000000..0fd84c20f6 --- /dev/null +++ b/.github/fixtures/test-bump-version-patch/commit.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2" +git tag v0.1.0 + +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat!: add breaking feature" +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2" diff --git a/.github/fixtures/test-bump-version-patch/expected.md b/.github/fixtures/test-bump-version-patch/expected.md new file mode 100644 index 0000000000..aad9f2aa5a --- /dev/null +++ b/.github/fixtures/test-bump-version-patch/expected.md @@ -0,0 +1,17 @@ +## [0.1.1] + +### 🚀 Features + +- [**breaking**] Add breaking feature + +### 🐛 Bug Fixes + +- Fix feature 2 + +## [0.1.0] + +### 🚀 Features + +- Add feature 1 +- Add feature 2 + diff --git a/.github/fixtures/test-bump-version/cliff.toml b/.github/fixtures/test-bump-version/cliff.toml index ec2fc39132..afd9a1f10c 100644 --- a/.github/fixtures/test-bump-version/cliff.toml +++ b/.github/fixtures/test-bump-version/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] @@ -19,9 +17,3 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true diff --git a/.github/fixtures/test-bump-version/expected.md b/.github/fixtures/test-bump-version/expected.md index 5fbc9b8aeb..a6c30273cb 100644 --- a/.github/fixtures/test-bump-version/expected.md +++ b/.github/fixtures/test-bump-version/expected.md @@ -1,22 +1,17 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [1.0.0] -### Feat +### 🚀 Features - [**breaking**] Add breaking feature -### Fix +### 🐛 Bug Fixes - Fix feature 2 ## [0.1.0] -### Feat +### 🚀 Features - Add feature 1 - Add feature 2 - diff --git a/.github/fixtures/test-bumped-version/cliff.toml b/.github/fixtures/test-bumped-version/cliff.toml index ec2fc39132..afd9a1f10c 100644 --- a/.github/fixtures/test-bumped-version/cliff.toml +++ b/.github/fixtures/test-bumped-version/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] @@ -19,9 +17,3 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true diff --git a/.github/fixtures/test-cli-arg-ignore-tags/cliff.toml b/.github/fixtures/test-cli-arg-ignore-tags/cliff.toml new file mode 100644 index 0000000000..eabd6f85da --- /dev/null +++ b/.github/fixtures/test-cli-arg-ignore-tags/cliff.toml @@ -0,0 +1,22 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# regex for skipping tags +skip_tags = "" +# regex for ignoring tags +ignore_tags = "" diff --git a/.github/fixtures/test-cli-arg-ignore-tags/commit.sh b/.github/fixtures/test-cli-arg-ignore-tags/commit.sh new file mode 100755 index 0000000000..4cc91676ac --- /dev/null +++ b/.github/fixtures/test-cli-arg-ignore-tags/commit.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add first beta feature" +git tag v1.0.0-beta.1 + +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add second beta feature" +git tag v1.0.0-beta.2 + +# WARNING: If we won't create this commit, 1.0.0 won't be created! +GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "chore: why do i need a commit here?" +git tag v1.0.0 + +GIT_COMMITTER_DATE="2021-01-23 01:23:49" git commit --allow-empty -m "fix: simple fix" +git tag v1.0.1 diff --git a/.github/fixtures/test-cli-arg-ignore-tags/expected.md b/.github/fixtures/test-cli-arg-ignore-tags/expected.md new file mode 100644 index 0000000000..c24f50305d --- /dev/null +++ b/.github/fixtures/test-cli-arg-ignore-tags/expected.md @@ -0,0 +1,17 @@ +## [1.0.1] - 2021-01-23 + +### 🐛 Bug Fixes + +- Simple fix + +## [1.0.0] - 2021-01-23 + +### 🚀 Features + +- Add first beta feature +- Add second beta feature + +### ⚙️ Miscellaneous Tasks + +- Why do i need a commit here? + diff --git a/.github/fixtures/test-commit-footers/cliff.toml b/.github/fixtures/test-commit-footers/cliff.toml index e143f3b6e9..d7cfbda759 100644 --- a/.github/fixtures/test-commit-footers/cliff.toml +++ b/.github/fixtures/test-commit-footers/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -16,15 +14,11 @@ body = """ ### {{ group | upper_first }} {% for commit in commits %} - {{ commit.message | upper_first }}\ - {% for footer in commit.footers -%} - , {{ footer.token }}{{ footer.separator }}{{ footer.value }}\ - {% endfor %}\ + {% if commit.footers %}\ + {% for footer in commit.footers -%} + , {{ footer.token }}{{ footer.separator }}{{ footer.value }}\ + {% endfor %}\ + {% endif %}\ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true diff --git a/.github/fixtures/test-commit-footers/expected.md b/.github/fixtures/test-commit-footers/expected.md index 9e6c74dc43..b9193074ba 100644 --- a/.github/fixtures/test-commit-footers/expected.md +++ b/.github/fixtures/test-commit-footers/expected.md @@ -1,18 +1,13 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [unreleased] -### Fix +### 🐛 Bug Fixes - Fix feature 1, footer1:xyz, footer2:abc ## [0.1.0] - 2021-01-23 -### Feat +### 🚀 Features - Add feature 1, footer:test - Add feature 2, Signed-off-by:bot - diff --git a/.github/fixtures/test-commit-preprocessors/cliff.toml b/.github/fixtures/test-commit-preprocessors/cliff.toml index 2d86f4cd02..ab060cb1e8 100644 --- a/.github/fixtures/test-commit-preprocessors/cliff.toml +++ b/.github/fixtures/test-commit-preprocessors/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,16 +17,12 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] -# regex for preprocessing the commit messages +# An array of regex based parsers to modify commit messages prior to further processing. commit_preprocessors = [ + # Replace issue numbers with links to the issue. { pattern = '\(#([0-9]+)\)', replace = "([issue#${1}](https://github.com/orhun/git-cliff/issues/${1}))" }, + # Trim multiple spaces. { pattern = " +", replace = " " }, ] diff --git a/.github/fixtures/test-commit-preprocessors/expected.md b/.github/fixtures/test-commit-preprocessors/expected.md index 5eed9c6bf9..3149dc823c 100644 --- a/.github/fixtures/test-commit-preprocessors/expected.md +++ b/.github/fixtures/test-commit-preprocessors/expected.md @@ -1,19 +1,14 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.1.0] - 2022-04-06 -### Feat +### 🚀 Features - Add feature 1 -### Fix +### 🐛 Bug Fixes - Fix feature 1 ([issue#1](https://github.com/orhun/git-cliff/issues/1)) -### Refactor +### 🚜 Refactor - Move classes - diff --git a/.github/fixtures/test-commit-range-with-given-range/cliff.toml b/.github/fixtures/test-commit-range-with-given-range/cliff.toml new file mode 100644 index 0000000000..075847e1d1 --- /dev/null +++ b/.github/fixtures/test-commit-range-with-given-range/cliff.toml @@ -0,0 +1,29 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %} +{{ commit_range.from }}..{{ commit_range.to }} +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] diff --git a/.github/fixtures/test-commit-range-with-given-range/commit.sh b/.github/fixtures/test-commit-range-with-given-range/commit.sh new file mode 100755 index 0000000000..0089053fba --- /dev/null +++ b/.github/fixtures/test-commit-range-with-given-range/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://github.com/orhun/git-cliff-readme-example +git pull origin master +git fetch --tags diff --git a/.github/fixtures/test-commit-range-with-given-range/expected.md b/.github/fixtures/test-commit-range-with-given-range/expected.md new file mode 100644 index 0000000000..86ceee3fe2 --- /dev/null +++ b/.github/fixtures/test-commit-range-with-given-range/expected.md @@ -0,0 +1,25 @@ +## [unreleased] + +a140cef0405e0bcbfb5de44ff59e091527d91b38..a9d4050212a18f6b3bd76e2e41fbb9045d268b80 + +### Bug Fixes + +- Rename help argument due to conflict + +### Features + +- Add ability to parse arrays +- Support multiple file formats + +### Chore + +- Add release script + +### Docs + +- Add tested usage example + +### Refactor + +- Expose string functions + diff --git a/.github/fixtures/test-commit-range-with-sort-commits/cliff.toml b/.github/fixtures/test-commit-range-with-sort-commits/cliff.toml new file mode 100644 index 0000000000..9f551bc3e0 --- /dev/null +++ b/.github/fixtures/test-commit-range-with-sort-commits/cliff.toml @@ -0,0 +1,30 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %} +{{ commit_range.from }}..{{ commit_range.to }} +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] +sort_commits = "newest" diff --git a/.github/fixtures/test-commit-range-with-sort-commits/commit.sh b/.github/fixtures/test-commit-range-with-sort-commits/commit.sh new file mode 100755 index 0000000000..0089053fba --- /dev/null +++ b/.github/fixtures/test-commit-range-with-sort-commits/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://github.com/orhun/git-cliff-readme-example +git pull origin master +git fetch --tags diff --git a/.github/fixtures/test-commit-range-with-sort-commits/expected.md b/.github/fixtures/test-commit-range-with-sort-commits/expected.md new file mode 100644 index 0000000000..fc3fa66330 --- /dev/null +++ b/.github/fixtures/test-commit-range-with-sort-commits/expected.md @@ -0,0 +1,38 @@ +## [unreleased] + +a9d4050212a18f6b3bd76e2e41fbb9045d268b80..df6aef41292f3ffe5887754232e6ea7831c50ba5 + +### Features + +- Use cache while fetching pages +- Support multiple file formats + +## [1.0.1] - 2021-07-18 + +e4fd3cf8e2e6f49c0b57f66416e886c37cbb3715..06412ac1dd4071006c465dde6597a21d4367a158 + +### Chore + +- Add release script + +### Refactor + +- Expose string functions + +## [1.0.0] - 2021-07-18 + +a78bc368e9ee382a3016c0c4bab41f7de4503bcd..ad27b43e8032671afb4809a1a3ecf12f45c60e0e + +### Bug Fixes + +- Rename help argument due to conflict + +### Features + +- Add ability to parse arrays + +### Docs + +- Add tested usage example +- Add README.md + diff --git a/.github/fixtures/test-commit-range/cliff.toml b/.github/fixtures/test-commit-range/cliff.toml new file mode 100644 index 0000000000..075847e1d1 --- /dev/null +++ b/.github/fixtures/test-commit-range/cliff.toml @@ -0,0 +1,29 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %} +{{ commit_range.from }}..{{ commit_range.to }} +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] diff --git a/.github/fixtures/test-commit-range/commit.sh b/.github/fixtures/test-commit-range/commit.sh new file mode 100755 index 0000000000..0089053fba --- /dev/null +++ b/.github/fixtures/test-commit-range/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://github.com/orhun/git-cliff-readme-example +git pull origin master +git fetch --tags diff --git a/.github/fixtures/test-commit-range/expected.md b/.github/fixtures/test-commit-range/expected.md new file mode 100644 index 0000000000..06ddb9259f --- /dev/null +++ b/.github/fixtures/test-commit-range/expected.md @@ -0,0 +1,38 @@ +## [unreleased] + +a9d4050212a18f6b3bd76e2e41fbb9045d268b80..df6aef41292f3ffe5887754232e6ea7831c50ba5 + +### Features + +- Support multiple file formats +- Use cache while fetching pages + +## [1.0.1] - 2021-07-18 + +e4fd3cf8e2e6f49c0b57f66416e886c37cbb3715..06412ac1dd4071006c465dde6597a21d4367a158 + +### Chore + +- Add release script + +### Refactor + +- Expose string functions + +## [1.0.0] - 2021-07-18 + +a78bc368e9ee382a3016c0c4bab41f7de4503bcd..ad27b43e8032671afb4809a1a3ecf12f45c60e0e + +### Bug Fixes + +- Rename help argument due to conflict + +### Features + +- Add ability to parse arrays + +### Docs + +- Add README.md +- Add tested usage example + diff --git a/.github/fixtures/test-configure-from-cargo-toml/Cargo.toml b/.github/fixtures/test-configure-from-cargo-toml/Cargo.toml index d44e73bd9d..765b671f80 100644 --- a/.github/fixtures/test-configure-from-cargo-toml/Cargo.toml +++ b/.github/fixtures/test-configure-from-cargo-toml/Cargo.toml @@ -4,13 +4,14 @@ version = "0.1.0" edition = "2021" [package.metadata.git-cliff.changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file.\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -24,15 +25,18 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ """ -# remove the leading and trailing whitespace from the templates +# Remove leading and trailing whitespaces from the changelog's body. trim = true [package.metadata.git-cliff.git] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "Features", default_scope = "app" }, { message = "^fix", group = "Bug Fixes", scope = "cli" }, diff --git a/.github/fixtures/test-conventional-commit/cliff.toml b/.github/fixtures/test-conventional-commit/cliff.toml new file mode 100644 index 0000000000..458586af0d --- /dev/null +++ b/.github/fixtures/test-conventional-commit/cliff.toml @@ -0,0 +1,25 @@ +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% for group, commits in commits | group_by(attribute="group") %}\ + ## {{ group | striptags | trim | upper_first }} + {% for commit in commits %} + {% if commit.scope %}*({{ commit.scope }})* {% endif %}\ + {% if commit.breaking %}[**breaking**]: {{ commit.breaking_description }}{% endif %} + {{ commit.message }}: {{ commit.body }}\ + {% for footer in commit.footers %} + - {{ footer.token }}{{ footer.separator }} {{ footer.value }}\ + {% endfor %} + {% endfor %} +{% endfor %}\ +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix" }, +] diff --git a/.github/fixtures/test-conventional-commit/commit.sh b/.github/fixtures/test-conventional-commit/commit.sh new file mode 100755 index 0000000000..b55c2524a3 --- /dev/null +++ b/.github/fixtures/test-conventional-commit/commit.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m \ + "feat(web): feature 1, breaking change in footer + +Body feature 1 + +BREAKING CHANGE: breaking change description feature 1 +Signed-off-by: user1 +Reviewed-by: user2 +" + +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m \ + "feat(web)!: feature 2, breaking chain in description + +Body feature 2 + +Signed-off-by: user3 +" + +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m \ + "feat!: feature 3, use default scope = app + +Body feature 2 + +Signed-off-by: user3 +" + +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m \ + "fix(scope): fix 1, use scope as group + +Body fix 1 + +Fix: #1 +" + +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m \ + "fix(front-end): fix 2, no footer + +Body fix 2 +" + +GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty -m \ + "fix(front-end): fix 3 and 4, no body but footer + +Fix: #3 +Fix: #4 +" + +git tag v0.1.0 diff --git a/.github/fixtures/test-conventional-commit/expected.md b/.github/fixtures/test-conventional-commit/expected.md new file mode 100644 index 0000000000..887d5947b6 --- /dev/null +++ b/.github/fixtures/test-conventional-commit/expected.md @@ -0,0 +1,30 @@ +## Features + +*(web)* [**breaking**]: breaking change description feature 1 +feature 1, breaking change in footer: Body feature 1 +- BREAKING CHANGE: breaking change description feature 1 +- Signed-off-by: user1 +- Reviewed-by: user2 + +*(web)* [**breaking**]: feature 2, breaking chain in description +feature 2, breaking chain in description: Body feature 2 +- Signed-off-by: user3 + +*(app)* [**breaking**]: feature 3, use default scope = app +feature 3, use default scope = app: Body feature 2 +- Signed-off-by: user3 + +## Fix + +*(scope)* +fix 1, use scope as group: Body fix 1 +- Fix: #1 + +*(front-end)* +fix 2, no footer: Body fix 2 + +*(front-end)* +fix 3 and 4, no body but footer: +- Fix: #3 +- Fix: #4 + diff --git a/.github/fixtures/test-custom-remote-api-url/cliff.toml b/.github/fixtures/test-custom-remote-api-url/cliff.toml new file mode 100644 index 0000000000..304d4a35ca --- /dev/null +++ b/.github/fixtures/test-custom-remote-api-url/cliff.toml @@ -0,0 +1,50 @@ +[remote.gitlab] +owner = "archlinux" +repo = "arch-repro-status" +api_url = "https://gitlab.archlinux.org/api/v4" + +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +## What's Changed + +{%- if version %} in {{ version }}{%- endif -%} +{% for commit in commits %} + * {{ commit.message | split(pat="\n") | first | trim }}\ + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in #{{ commit.remote.pr_number }}{%- endif %} +{%- endfor -%} + +{% if gitlab.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} + {% raw %}\n{% endraw -%} + ### New Contributors +{%- endif %}\ +{% for contributor in gitlab.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ + {%- endif %} +{%- endfor -%} + +{% if version %} + {% if previous.version %} + **Full Changelog**: https://gitlab.com/{{ remote.gitlab.owner }}/{{ remote.gitlab.repo }}/compare/{{ previous.version }}...{{ version }} + {% endif %} +{% else -%} + {% raw %}\n{% endraw %} +{% endif %} +""" + +[git] +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = false +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [ + # Remove issue numbers. + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, +] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. +commit_parsers = [] diff --git a/.github/fixtures/test-custom-remote-api-url/commit.sh b/.github/fixtures/test-custom-remote-api-url/commit.sh new file mode 100755 index 0000000000..fc3b7b7016 --- /dev/null +++ b/.github/fixtures/test-custom-remote-api-url/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://gitlab.archlinux.org/archlinux/arch-repro-status +git fetch +git checkout 5fe2f324db566756ccaf066fe186100a09a87625 diff --git a/.github/fixtures/test-custom-remote-api-url/expected.md b/.github/fixtures/test-custom-remote-api-url/expected.md new file mode 100644 index 0000000000..2c3f7392b5 --- /dev/null +++ b/.github/fixtures/test-custom-remote-api-url/expected.md @@ -0,0 +1,8 @@ +## What's Changed in v1.4.1 +* Update the copyright year in license by @Orhun Parmaksız +* bump dependencies by @Orhun Parmaksız +* update cargo-deny config by @Orhun Parmaksız +* prepare for 1.4.1 by @Orhun Parmaksız + +**Full Changelog**: https://gitlab.com/archlinux/arch-repro-status/compare/v1.4.0...v1.4.1 + diff --git a/.github/fixtures/test-custom-scope/cliff.toml b/.github/fixtures/test-custom-scope/cliff.toml index fe30b9070c..856c2efd2e 100644 --- a/.github/fixtures/test-custom-scope/cliff.toml +++ b/.github/fixtures/test-custom-scope/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -22,15 +20,11 @@ body = """ {% endfor %}\ {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "Features", default_scope = "app" }, { message = "^fix", group = "Bug Fixes", scope = "cli" }, diff --git a/.github/fixtures/test-custom-scope/expected.md b/.github/fixtures/test-custom-scope/expected.md index 9513fbce90..f2f8758120 100644 --- a/.github/fixtures/test-custom-scope/expected.md +++ b/.github/fixtures/test-custom-scope/expected.md @@ -1,7 +1,3 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.1.0] - 2022-04-06 ### Bug Fixes @@ -21,4 +17,3 @@ All notable changes to this project will be documented in this file. - Add feature 2 - diff --git a/.github/fixtures/test-custom-tag-pattern/cliff.toml b/.github/fixtures/test-custom-tag-pattern/cliff.toml index fc3d5db2a2..3a2fa9da3e 100644 --- a/.github/fixtures/test-custom-tag-pattern/cliff.toml +++ b/.github/fixtures/test-custom-tag-pattern/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="alpha-") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,15 +17,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "Features", default_scope = "app" }, { message = "^fix", group = "Bug Fixes", scope = "cli" }, diff --git a/.github/fixtures/test-custom-tag-pattern/expected.md b/.github/fixtures/test-custom-tag-pattern/expected.md index 72e96a6f09..44dd845f80 100644 --- a/.github/fixtures/test-custom-tag-pattern/expected.md +++ b/.github/fixtures/test-custom-tag-pattern/expected.md @@ -1,7 +1,3 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [unreleased] ### Test @@ -28,4 +24,3 @@ All notable changes to this project will be documented in this file. - Add feature 1 - diff --git a/.github/fixtures/test-date-order/cliff.toml b/.github/fixtures/test-date-order/cliff.toml index 5504810e90..98a2a5ce75 100644 --- a/.github/fixtures/test-date-order/cliff.toml +++ b/.github/fixtures/test-date-order/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,9 +17,3 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true diff --git a/.github/fixtures/test-date-order/expected.md b/.github/fixtures/test-date-order/expected.md index dec0b23518..f8ade5b7ef 100644 --- a/.github/fixtures/test-date-order/expected.md +++ b/.github/fixtures/test-date-order/expected.md @@ -1,11 +1,6 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.1.1] - 2021-01-23 -### Feat +### 🚀 Features - Fix feature 1 - diff --git a/.github/fixtures/test-fixtures-locally.sh b/.github/fixtures/test-fixtures-locally.sh index 6287ba4667..01bdf273ae 100755 --- a/.github/fixtures/test-fixtures-locally.sh +++ b/.github/fixtures/test-fixtures-locally.sh @@ -12,11 +12,28 @@ export FIXTURES_DIR="$SCRIPT_DIR/$1" # Set up a temporary repository cd "$(mktemp -d)" -git init +git init >&2 # Commit "$FIXTURES_DIR/commit.sh" +# Check if we are running on Windows with MINGW64 and if cygpath is available +if [ -n "$MSYSTEM" ] && [ "$MSYSTEM" = "MINGW64" ]; then + echo "Running inside MINGW64 trying to convert paths to Windows format." + if command -v cygpath > /dev/null 2>&1; then + # Convert the path to Windows format + SCRIPT_DIR=$(cygpath -w "$SCRIPT_DIR") + FIXTURES_DIR=$(cygpath -w "$FIXTURES_DIR") + else + echo "WARNING: cygpath command not found in the PATH. The script may not work correctly on Windows." + exit 1 + fi +fi + # Show results -echo -e "\n---Run git-cliff---" -cargo run --manifest-path "$SCRIPT_DIR/../../Cargo.toml" -- -vv --config "$FIXTURES_DIR/cliff.toml" "${@:2}" +echo -e "\n---Run git-cliff---" >&2 +cargo run --manifest-path "$SCRIPT_DIR/../../Cargo.toml" -- -vv --config "$FIXTURES_DIR/cliff.toml" "${@:2}" -o "$FIXTURES_DIR/output.md" + +sed -i "s/2022-04-05/2022-04-06/g" "$FIXTURES_DIR/output.md" + +diff --strip-trailing-cr "$FIXTURES_DIR/output.md" "$FIXTURES_DIR/expected.md" diff --git a/.github/fixtures/test-footer-filter/cliff.toml b/.github/fixtures/test-footer-filter/cliff.toml new file mode 100644 index 0000000000..083c0a90f7 --- /dev/null +++ b/.github/fixtures/test-footer-filter/cliff.toml @@ -0,0 +1,28 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, + # Accept both separators, ": " and ":". + # Conventional commits require the separator to be ": ", but the reference implementation of the + # conventional commits parser currently does not adhere to the specification. See also: + # https://github.com/conventional-commits/parser/issues/47 + { footer = "^changelog: ?ignore", skip = true }, +] diff --git a/.github/fixtures/test-footer-filter/commit.sh b/.github/fixtures/test-footer-filter/commit.sh new file mode 100755 index 0000000000..61da0775e6 --- /dev/null +++ b/.github/fixtures/test-footer-filter/commit.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 00:00:00" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 00:10:00" git commit --allow-empty -m "feat: add feature 1" +git tag v0.1.0 +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" +GIT_COMMITTER_DATE="2022-04-06 01:10:00" git commit --allow-empty -m "chore: upgrade dependencies" -m "changelog: ignore" +git tag v0.2.0 +GIT_COMMITTER_DATE="2022-04-06 02:00:00" git commit --allow-empty -m "test: add tests" -m "footer: some more info" +GIT_COMMITTER_DATE="2022-04-06 02:10:00" git commit --allow-empty -m "test: add more tests" -m "changelog: ignore" diff --git a/.github/fixtures/test-footer-filter/expected.md b/.github/fixtures/test-footer-filter/expected.md new file mode 100644 index 0000000000..af5e16305a --- /dev/null +++ b/.github/fixtures/test-footer-filter/expected.md @@ -0,0 +1,18 @@ +## [unreleased] + +### Test + +- Add tests + +## [0.2.0] - 2022-04-06 + +### Refactor + +- Change feature 1 + +## [0.1.0] - 2022-04-06 + +### Features + +- Add feature 1 + diff --git a/.github/fixtures/test-footer-template/cliff.toml b/.github/fixtures/test-footer-template/cliff.toml index ebfa371d5a..3f6bacd84d 100644 --- a/.github/fixtures/test-footer-template/cliff.toml +++ b/.github/fixtures/test-footer-template/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] @@ -19,7 +17,8 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ {% for release in releases %}\ {% if release.version %}\ @@ -31,5 +30,3 @@ footer = """ {% endif %}\ {% endfor %}\ """ -# remove the leading and trailing whitespace from the templates -trim = true diff --git a/.github/fixtures/test-footer-template/expected.md b/.github/fixtures/test-footer-template/expected.md index 8ed45d5452..7a47df67de 100644 --- a/.github/fixtures/test-footer-template/expected.md +++ b/.github/fixtures/test-footer-template/expected.md @@ -1,33 +1,29 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [unreleased] -### Perf +### ⚡ Performance - Footer -### Test +### 🧪 Testing - Footer ## [3.0.0] -### Feat +### 🚀 Features - Add footer ## [0.2.0] -### Fix +### 🐛 Bug Fixes - Fix feature 1 - Fix feature 2 ## [0.1.0] -### Feat +### 🚀 Features - Add feature 1 - Add feature 2 diff --git a/.github/fixtures/test-from-context-does-not-discard-fields/cliff.toml b/.github/fixtures/test-from-context-does-not-discard-fields/cliff.toml new file mode 100644 index 0000000000..4765e8e33c --- /dev/null +++ b/.github/fixtures/test-from-context-does-not-discard-fields/cliff.toml @@ -0,0 +1,25 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% for group, commits in commits | group_by(attribute="group") %} + ## {{ group | striptags | trim | upper_first }} + {% for commit in commits %} + {% if commit.scope %}*({{ commit.scope }})* {% endif %}\ + {% if commit.breaking %}[**breaking**]: {{ commit.breaking_description }}{% endif %} + {{ commit.message }}: {{ commit.body }}\ + {% for footer in commit.footers %} + - {{ footer.token }}{{ footer.separator }} {{ footer.value }}\ + {% endfor %} + {% endfor %}\ +{% endfor %}\n +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix" }, +] diff --git a/.github/fixtures/test-from-context-does-not-discard-fields/commit.sh b/.github/fixtures/test-from-context-does-not-discard-fields/commit.sh new file mode 100755 index 0000000000..b55c2524a3 --- /dev/null +++ b/.github/fixtures/test-from-context-does-not-discard-fields/commit.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m \ + "feat(web): feature 1, breaking change in footer + +Body feature 1 + +BREAKING CHANGE: breaking change description feature 1 +Signed-off-by: user1 +Reviewed-by: user2 +" + +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m \ + "feat(web)!: feature 2, breaking chain in description + +Body feature 2 + +Signed-off-by: user3 +" + +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m \ + "feat!: feature 3, use default scope = app + +Body feature 2 + +Signed-off-by: user3 +" + +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m \ + "fix(scope): fix 1, use scope as group + +Body fix 1 + +Fix: #1 +" + +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m \ + "fix(front-end): fix 2, no footer + +Body fix 2 +" + +GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty -m \ + "fix(front-end): fix 3 and 4, no body but footer + +Fix: #3 +Fix: #4 +" + +git tag v0.1.0 diff --git a/.github/fixtures/test-from-context-does-not-discard-fields/context.json b/.github/fixtures/test-from-context-does-not-discard-fields/context.json new file mode 100644 index 0000000000..1029b0de78 --- /dev/null +++ b/.github/fixtures/test-from-context-does-not-discard-fields/context.json @@ -0,0 +1,421 @@ +[ + { + "version": "v0.1.0", + "message": null, + "commits": [ + { + "id": "ab06a042344dbd1c4af974ef393049b44ad0ae28", + "message": "feature 1, breaking change in footer", + "body": "Body feature 1", + "footers": [ + { + "token": "BREAKING CHANGE", + "separator": ":", + "value": "breaking change description feature 1", + "breaking": true + }, + { + "token": "Signed-off-by", + "separator": ":", + "value": "user1 ", + "breaking": false + }, + { + "token": "Reviewed-by", + "separator": ":", + "value": "user2", + "breaking": false + } + ], + "group": "Features", + "breaking_description": "breaking change description feature 1", + "breaking": true, + "scope": "web", + "links": [], + "author": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1728938297 + }, + "committer": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1649175909 + }, + "conventional": true, + "merge_commit": false, + "extra": null, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "raw_message": "feat(web): feature 1, breaking change in footer\n\nBody feature 1\n\nBREAKING CHANGE: breaking change description feature 1\nSigned-off-by: user1 \nReviewed-by: user2" + }, + { + "id": "a87599e6ecaf05e80ac4d87edd9a852fd8cad189", + "message": "feature 2, breaking chain in description", + "body": "Body feature 2", + "footers": [ + { + "token": "Signed-off-by", + "separator": ":", + "value": "user3 ", + "breaking": false + } + ], + "group": "Features", + "breaking_description": "feature 2, breaking chain in description", + "breaking": true, + "scope": "web", + "links": [], + "author": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1728938297 + }, + "committer": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1649175910 + }, + "conventional": true, + "merge_commit": false, + "extra": null, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "raw_message": "feat(web)!: feature 2, breaking chain in description\n\nBody feature 2\n\nSigned-off-by: user3 " + }, + { + "id": "9d83e631a1c57eec825f724283041662edd9230b", + "message": "feature 3, use default scope = app", + "body": "Body feature 2", + "footers": [ + { + "token": "Signed-off-by", + "separator": ":", + "value": "user3 ", + "breaking": false + } + ], + "group": "Features", + "breaking_description": "feature 3, use default scope = app", + "breaking": true, + "scope": "app", + "links": [], + "author": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1728938297 + }, + "committer": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1649175911 + }, + "conventional": true, + "merge_commit": false, + "extra": null, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "raw_message": "feat!: feature 3, use default scope = app\n\nBody feature 2\n\nSigned-off-by: user3 " + }, + { + "id": "3bb5b6f741fd40cc71f09d3c6a339e4b5d0843cc", + "message": "fix 1, use scope as group", + "body": "Body fix 1", + "footers": [ + { + "token": "Fix", + "separator": ":", + "value": "#1", + "breaking": false + } + ], + "group": "fix", + "breaking_description": null, + "breaking": false, + "scope": "scope", + "links": [], + "author": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1728938297 + }, + "committer": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1649175912 + }, + "conventional": true, + "merge_commit": false, + "extra": null, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "raw_message": "fix(scope): fix 1, use scope as group\n\nBody fix 1\n\nFix: #1" + }, + { + "id": "856472f0e5b238278fe331dcc151a96982c5bbad", + "message": "fix 2, no footer", + "body": "Body fix 2", + "footers": [], + "group": "fix", + "breaking_description": null, + "breaking": false, + "scope": "front-end", + "links": [], + "author": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1728938297 + }, + "committer": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1649175913 + }, + "conventional": true, + "merge_commit": false, + "extra": null, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "raw_message": "fix(front-end): fix 2, no footer\n\nBody fix 2" + }, + { + "id": "6e7a2b8e670a348ccfbae696fd850d8769c54360", + "message": "fix 3 and 4, no body but footer", + "body": null, + "footers": [ + { + "token": "Fix", + "separator": ":", + "value": "#3", + "breaking": false + }, + { + "token": "Fix", + "separator": ":", + "value": "#4", + "breaking": false + } + ], + "group": "fix", + "breaking_description": null, + "breaking": false, + "scope": "front-end", + "links": [], + "author": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1728938297 + }, + "committer": { + "name": "github-actions[bot]", + "email": "github-actions[bot]@users.noreply.github.com", + "timestamp": 1649175914 + }, + "conventional": true, + "merge_commit": false, + "extra": null, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "raw_message": "fix(front-end): fix 3 and 4, no body but footer\n\nFix: #3\nFix: #4" + } + ], + "commit_id": "6e7a2b8e670a348ccfbae696fd850d8769c54360", + "timestamp": 1649175914, + "previous": { + "version": null, + "message": null, + "commits": [], + "commit_id": null, + "timestamp": 0, + "previous": null, + "repository": null, + "commit_range": null, + "submodule_commits": {}, + "extra": null, + "github": { + "contributors": [] + }, + "gitlab": { + "contributors": [] + }, + "gitea": { + "contributors": [] + }, + "bitbucket": { + "contributors": [] + } + }, + "repository": "/path/to/repository", + "commit_range": null, + "submodule_commits": {}, + "extra": null, + "github": { + "contributors": [] + }, + "gitlab": { + "contributors": [] + }, + "gitea": { + "contributors": [] + }, + "bitbucket": { + "contributors": [] + } + } +] \ No newline at end of file diff --git a/.github/fixtures/test-from-context-does-not-discard-fields/expected.md b/.github/fixtures/test-from-context-does-not-discard-fields/expected.md new file mode 100644 index 0000000000..98c35d4827 --- /dev/null +++ b/.github/fixtures/test-from-context-does-not-discard-fields/expected.md @@ -0,0 +1,31 @@ + +## Features + +*(web)* [**breaking**]: breaking change description feature 1 +feature 1, breaking change in footer: Body feature 1 +- BREAKING CHANGE: breaking change description feature 1 +- Signed-off-by: user1 +- Reviewed-by: user2 + +*(web)* [**breaking**]: feature 2, breaking chain in description +feature 2, breaking chain in description: Body feature 2 +- Signed-off-by: user3 + +*(app)* [**breaking**]: feature 3, use default scope = app +feature 3, use default scope = app: Body feature 2 +- Signed-off-by: user3 + +## Fix + +*(scope)* +fix 1, use scope as group: Body fix 1 +- Fix: #1 + +*(front-end)* +fix 2, no footer: Body fix 2 + +*(front-end)* +fix 3 and 4, no body but footer: +- Fix: #3 +- Fix: #4 + diff --git a/.github/fixtures/test-from-context/cliff.toml b/.github/fixtures/test-from-context/cliff.toml new file mode 100644 index 0000000000..7e28ea94d6 --- /dev/null +++ b/.github/fixtures/test-from-context/cliff.toml @@ -0,0 +1,23 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}{% if extra.note %} - {{ extra.note }}{% endif %} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}{% if commit.extra.note %} ({{ commit.extra.note }}){% endif %}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] diff --git a/.github/fixtures/test-from-context/commit.sh b/.github/fixtures/test-from-context/commit.sh new file mode 100755 index 0000000000..86dc2c57eb --- /dev/null +++ b/.github/fixtures/test-from-context/commit.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1" +git tag v0.1.0 +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2" +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" +git tag v0.2.0 +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests" diff --git a/.github/fixtures/test-from-context/context.json b/.github/fixtures/test-from-context/context.json new file mode 100644 index 0000000000..d7dd0532cf --- /dev/null +++ b/.github/fixtures/test-from-context/context.json @@ -0,0 +1,638 @@ +[ + { + "version": null, + "message": null, + "commits": [ + { + "id": "c7541276668616c136d12a9ccd87087314d66fb6", + "message": "add tests", + "body": null, + "footers": [], + "group": "test", + "breaking_description": null, + "breaking": false, + "scope": null, + "links": [], + "author": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1723730666 + }, + "committer": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1649201113 + }, + "conventional": true, + "merge_commit": false, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + } + } + ], + "commit_id": null, + "timestamp": 0, + "previous": { + "version": "v0.2.0", + "message": null, + "commits": [ + { + "id": "ce8cecc9834e5cbdb5b4e79c8260cace3c0dd949", + "message": "feat(gui): add feature 2\n", + "group": null, + "scope": null, + "links": [], + "author": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1723730666 + }, + "committer": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1649201111 + }, + "conventional": false, + "merge_commit": false, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + } + }, + { + "id": "5061081d6272b1da2146fab49d803c193db309d9", + "message": "fix(gui): fix feature 2\n", + "group": null, + "scope": null, + "links": [], + "author": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1723730666 + }, + "committer": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1649201112 + }, + "conventional": false, + "merge_commit": false, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + } + } + ], + "commit_id": "5061081d6272b1da2146fab49d803c193db309d9", + "timestamp": 1649201112, + "previous": null, + "repository": "/home/johndoe/repo/", + "commit_range": null, + "submodule_commits": {}, + "github": { + "contributors": [] + }, + "gitlab": { + "contributors": [] + }, + "gitea": { + "contributors": [] + }, + "bitbucket": { + "contributors": [] + } + }, + "repository": "/home/johndoe/repo/", + "commit_range": null, + "submodule_commits": {}, + "github": { + "contributors": [] + }, + "gitlab": { + "contributors": [] + }, + "gitea": { + "contributors": [] + }, + "bitbucket": { + "contributors": [] + } + }, + { + "version": "v0.2.0", + "message": null, + "commits": [ + { + "id": "ce8cecc9834e5cbdb5b4e79c8260cace3c0dd949", + "message": "add feature 2", + "body": null, + "footers": [], + "group": "Features", + "breaking_description": null, + "breaking": false, + "scope": "gui", + "links": [], + "author": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1723730666 + }, + "committer": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1649201111 + }, + "conventional": true, + "merge_commit": false, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + } + }, + { + "id": "5061081d6272b1da2146fab49d803c193db309d9", + "message": "fix feature 2", + "body": null, + "footers": [], + "group": "Bug Fixes", + "breaking_description": null, + "breaking": false, + "scope": "cli", + "links": [], + "author": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1723730666 + }, + "committer": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1649201112 + }, + "conventional": true, + "merge_commit": false, + "extra": { + "note": "that was a tough one" + }, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + } + } + ], + "commit_id": "5061081d6272b1da2146fab49d803c193db309d9", + "timestamp": 1649201112, + "previous": { + "version": "v0.1.0", + "message": null, + "commits": [ + { + "id": "c6ba7fe73c3b639ff2f934f3f98e5f50350ab463", + "message": "Initial commit\n", + "group": null, + "scope": null, + "links": [], + "author": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1723730666 + }, + "committer": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1649201108 + }, + "conventional": false, + "merge_commit": false, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + } + }, + { + "id": "9c10e506bf103998e303d8164c7b4a1a841e2471", + "message": "feat: add feature 1\n", + "group": null, + "scope": null, + "links": [], + "author": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1723730666 + }, + "committer": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1649201109 + }, + "conventional": false, + "merge_commit": false, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + } + }, + { + "id": "98b1464c2f99a0c6812ce6d3ea4a5b953dd35fe2", + "message": "fix: fix feature 1\n", + "group": null, + "scope": null, + "links": [], + "author": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1723730666 + }, + "committer": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1649201110 + }, + "conventional": false, + "merge_commit": false, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + } + } + ], + "commit_id": "98b1464c2f99a0c6812ce6d3ea4a5b953dd35fe2", + "timestamp": 1649201110, + "previous": null, + "repository": "/home/johndoe/repo/", + "commit_range": null, + "submodule_commits": {}, + "github": { + "contributors": [] + }, + "gitlab": { + "contributors": [] + }, + "gitea": { + "contributors": [] + }, + "bitbucket": { + "contributors": [] + } + }, + "extra": { + "note": "This is so awesome!" + }, + "repository": "/home/johndoe/repo/", + "commit_range": null, + "submodule_commits": {}, + "github": { + "contributors": [] + }, + "gitlab": { + "contributors": [] + }, + "gitea": { + "contributors": [] + }, + "bitbucket": { + "contributors": [] + } + }, + { + "version": "v0.1.0", + "message": null, + "commits": [ + { + "id": "9c10e506bf103998e303d8164c7b4a1a841e2471", + "message": "add feature 1", + "body": null, + "footers": [], + "group": "Features", + "breaking_description": null, + "breaking": false, + "scope": "app", + "links": [], + "author": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1723730666 + }, + "committer": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1649201109 + }, + "conventional": true, + "merge_commit": false, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + } + }, + { + "id": "98b1464c2f99a0c6812ce6d3ea4a5b953dd35fe2", + "message": "fix feature 1", + "body": null, + "footers": [], + "group": "Bug Fixes", + "breaking_description": null, + "breaking": false, + "scope": "cli", + "links": [], + "author": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1723730666 + }, + "committer": { + "name": "John Doe", + "email": "john@doe.com", + "timestamp": 1649201110 + }, + "conventional": true, + "merge_commit": false, + "github": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitlab": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "gitea": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + }, + "bitbucket": { + "username": null, + "pr_title": null, + "pr_number": null, + "pr_labels": [], + "is_first_time": false + } + } + ], + "commit_id": "98b1464c2f99a0c6812ce6d3ea4a5b953dd35fe2", + "timestamp": 1649201110, + "previous": { + "version": null, + "message": null, + "commits": [], + "commit_id": null, + "timestamp": 0, + "previous": null, + "repository": null, + "commit_range": null, + "submodule_commits": {}, + "github": { + "contributors": [] + }, + "gitlab": { + "contributors": [] + }, + "gitea": { + "contributors": [] + }, + "bitbucket": { + "contributors": [] + } + }, + "repository": "/home/johndoe/repo/", + "commit_range": null, + "submodule_commits": {}, + "github": { + "contributors": [] + }, + "gitlab": { + "contributors": [] + }, + "gitea": { + "contributors": [] + }, + "bitbucket": { + "contributors": [] + } + } +] \ No newline at end of file diff --git a/.github/fixtures/test-from-context/expected.md b/.github/fixtures/test-from-context/expected.md new file mode 100644 index 0000000000..fd3f8a1a14 --- /dev/null +++ b/.github/fixtures/test-from-context/expected.md @@ -0,0 +1,26 @@ +## [unreleased] + +### Test + +- Add tests + +## [0.2.0] - 2022-04-05 - This is so awesome! + +### Bug Fixes + +- Fix feature 2 (that was a tough one) + +### Features + +- Add feature 2 + +## [0.1.0] - 2022-04-05 + +### Bug Fixes + +- Fix feature 1 + +### Features + +- Add feature 1 + diff --git a/.github/fixtures/test-gitea-integration-custom-range/cliff.toml b/.github/fixtures/test-gitea-integration-custom-range/cliff.toml new file mode 100644 index 0000000000..90e328ad1a --- /dev/null +++ b/.github/fixtures/test-gitea-integration-custom-range/cliff.toml @@ -0,0 +1,46 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +# Gitea integration for fetching commit metadata. +[remote.gitea] +owner = "ThetaDev" +repo = "git-cliff-readme-example" + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +## What's Changed +{%- if version %} in {{ version }}{%- endif -%} +{% for commit in commits %} + * {{ commit.message | split(pat="\n") | first | trim }}\ + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in #{{ commit.remote.pr_number }}{%- endif %} +{%- endfor -%} + +{% if gitea.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} + {% raw %}\n{% endraw -%} + ### New Contributors +{%- endif %}\ +{% for contributor in gitea.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ + {%- endif %} +{%- endfor -%} +{% raw %}\n\n{% endraw -%} +""" + +[git] +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = false +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = true +# Split commits on newlines, treating each line as an individual commit. +split_commits = false +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [ + # Remove issue numbers. + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, +] diff --git a/.github/fixtures/test-gitea-integration-custom-range/commit.sh b/.github/fixtures/test-gitea-integration-custom-range/commit.sh new file mode 100755 index 0000000000..d15ef150ec --- /dev/null +++ b/.github/fixtures/test-gitea-integration-custom-range/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://codeberg.org/ThetaDev/git-cliff-readme-example.git +git pull origin master +git fetch --tags diff --git a/.github/fixtures/test-gitea-integration-custom-range/expected.md b/.github/fixtures/test-gitea-integration-custom-range/expected.md new file mode 100644 index 0000000000..857ce6beaa --- /dev/null +++ b/.github/fixtures/test-gitea-integration-custom-range/expected.md @@ -0,0 +1,4 @@ +## What's Changed +* feat(config): support multiple file formats by @ThetaDev +* feat(cache): use cache while fetching pages by @ThetaDev + diff --git a/.github/fixtures/test-gitea-integration/cliff.toml b/.github/fixtures/test-gitea-integration/cliff.toml new file mode 100644 index 0000000000..db90a0c213 --- /dev/null +++ b/.github/fixtures/test-gitea-integration/cliff.toml @@ -0,0 +1,44 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +# Gitea integration for fetching commit metadata. +[remote.gitea] +owner = "ThetaDev" +repo = "git-cliff-readme-example" + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +## What's Changed +{%- if version %} in {{ version }}{%- endif -%} +{% for commit in commits %} + * {{ commit.message | split(pat="\n") | first | trim }}\ + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in #{{ commit.remote.pr_number }}{%- endif %} +{%- endfor -%} + +{% if gitea.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} + {% raw %}\n{% endraw -%} + ### New Contributors +{%- endif %}\ +{% for contributor in gitea.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ + {%- endif %} +{%- endfor -%} +{% raw %}\n\n{% endraw -%} +""" + +[git] +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = false +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = true +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [ + # Remove issue numbers. + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, +] diff --git a/.github/fixtures/test-gitea-integration/commit.sh b/.github/fixtures/test-gitea-integration/commit.sh new file mode 100755 index 0000000000..d15ef150ec --- /dev/null +++ b/.github/fixtures/test-gitea-integration/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://codeberg.org/ThetaDev/git-cliff-readme-example.git +git pull origin master +git fetch --tags diff --git a/.github/fixtures/test-gitea-integration/expected.md b/.github/fixtures/test-gitea-integration/expected.md new file mode 100644 index 0000000000..67fd5f2245 --- /dev/null +++ b/.github/fixtures/test-gitea-integration/expected.md @@ -0,0 +1,14 @@ +## What's Changed +* Initial commit by @ThetaDev +* docs(project): add README.md by @ThetaDev +* feat(parser): add ability to parse arrays by @ThetaDev +* fix(args): rename help argument due to conflict by @ThetaDev +* docs(example)!: add tested usage example by @ThetaDev +* refactor(parser): expose string functions by @ThetaDev +* chore(release): add release script by @ThetaDev +* feat(config): support multiple file formats by @ThetaDev +* feat(cache): use cache while fetching pages by @ThetaDev + +### New Contributors +* @ThetaDev made their first contribution + diff --git a/.github/fixtures/test-github-integration-custom-range/cliff.toml b/.github/fixtures/test-github-integration-custom-range/cliff.toml new file mode 100644 index 0000000000..36f9acacbf --- /dev/null +++ b/.github/fixtures/test-github-integration-custom-range/cliff.toml @@ -0,0 +1,54 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +# GitHub integration for fetching commit metadata. +[remote.github] +owner = "orhun" +repo = "git-cliff-readme-example" + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +## What's Changed + +{%- if version %} in {{ version }}{%- endif -%} +{% for commit in commits %} + * {{ commit.message | split(pat="\n") | first | trim }}\ + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in #{{ commit.remote.pr_number }}{%- endif %} +{%- endfor -%} + +{% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} + {% raw %}\n{% endraw -%} + ### New Contributors +{%- endif %}\ +{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ + {%- endif %} +{%- endfor -%} + +{% if version %} + {% if previous.version %} + **Full Changelog**: https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}/compare/{{ previous.version }}...{{ version }} + {% endif %} +{% else -%} + {% raw %}\n{% endraw %} +{% endif %} +""" + +[git] +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = false +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = true +# Split commits on newlines, treating each line as an individual commit. +split_commits = false +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [ + # Remove issue numbers. + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, +] diff --git a/.github/fixtures/test-github-integration-custom-range/commit.sh b/.github/fixtures/test-github-integration-custom-range/commit.sh new file mode 100755 index 0000000000..0089053fba --- /dev/null +++ b/.github/fixtures/test-github-integration-custom-range/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://github.com/orhun/git-cliff-readme-example +git pull origin master +git fetch --tags diff --git a/.github/fixtures/test-github-integration-custom-range/expected.md b/.github/fixtures/test-github-integration-custom-range/expected.md new file mode 100644 index 0000000000..d2e89f7177 --- /dev/null +++ b/.github/fixtures/test-github-integration-custom-range/expected.md @@ -0,0 +1,6 @@ +## What's Changed in v1.0.1 +* refactor(parser): expose string functions by @orhun +* chore(release): add release script by @orhun + +**Full Changelog**: https://github.com/orhun/git-cliff-readme-example/compare/v1.0.0...v1.0.1 + diff --git a/.github/fixtures/test-github-integration/cliff.toml b/.github/fixtures/test-github-integration/cliff.toml index fcddf67338..0603a440eb 100644 --- a/.github/fixtures/test-github-integration/cliff.toml +++ b/.github/fixtures/test-github-integration/cliff.toml @@ -1,26 +1,33 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +# GitHub integration for fetching commit metadata. [remote.github] owner = "orhun" repo = "git-cliff-readme-example" [changelog] -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ ## What's Changed {%- if version %} in {{ version }}{%- endif -%} {% for commit in commits %} * {{ commit.message | split(pat="\n") | first | trim }}\ - {% if commit.github.username %} by @{{ commit.github.username }}{%- endif -%} - {% if commit.github.pr_number %} in #{{ commit.github.pr_number }}{%- endif %} + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in #{{ commit.remote.pr_number }}{%- endif %} {%- endfor -%} {% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} {% raw %}\n{% endraw -%} - ## New Contributors + ### New Contributors {%- endif %}\ {% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %} - * @{{ contributor.username }} made their first contribution in #{{ contributor.pr_number }} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ + {%- endif %} {%- endfor -%} {% if version %} @@ -31,21 +38,13 @@ body = """ {% raw %}\n{% endraw %} {% endif %} """ -# remove the leading and trailing whitespace from the template -trim = true -# changelog footer -footer = """ - -""" [git] -# parse the commits based on https://www.conventionalcommits.org +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org conventional_commits = false -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for preprocessing the commit messages -commit_preprocessors = [{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [ + # Remove issue numbers. + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, +] diff --git a/.github/fixtures/test-github-integration/expected.md b/.github/fixtures/test-github-integration/expected.md index 82c8ed1243..ad3fd1181c 100644 --- a/.github/fixtures/test-github-integration/expected.md +++ b/.github/fixtures/test-github-integration/expected.md @@ -15,4 +15,6 @@ * fix(args): rename help argument due to conflict by @orhun * docs(example)!: add tested usage example by @orhun - +### New Contributors +* @orhun made their first contribution + diff --git a/.github/fixtures/test-gitlab-integration-custom-range/cliff.toml b/.github/fixtures/test-gitlab-integration-custom-range/cliff.toml new file mode 100644 index 0000000000..64e297e7ca --- /dev/null +++ b/.github/fixtures/test-gitlab-integration-custom-range/cliff.toml @@ -0,0 +1,54 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +# GitLab integration for fetching commit metadata. +[remote.gitlab] +owner = "dark0dave" +repo = "dotfiles" + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +## What's Changed + +{%- if version %} in {{ version }}{%- endif -%} +{% for commit in commits %} + * {{ commit.message | split(pat="\n") | first | trim }}\ + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in #{{ commit.remote.pr_number }}{%- endif %} +{%- endfor -%} + +{% if gitlab.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} + {% raw %}\n{% endraw -%} + ### New Contributors +{%- endif %}\ +{% for contributor in gitlab.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ + {%- endif %} +{%- endfor -%} + +{% if version %} + {% if previous.version %} + **Full Changelog**: https://gitlab.com/{{ remote.gitlab.owner }}/{{ remote.gitlab.repo }}/compare/{{ previous.version }}...{{ version }} + {% endif %} +{% else -%} + {% raw %}\n{% endraw %} +{% endif %} +""" + +[git] +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = false +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = true +# Split commits on newlines, treating each line as an individual commit. +split_commits = false +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [ + # Remove issue numbers. + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, +] diff --git a/.github/fixtures/test-gitlab-integration-custom-range/commit.sh b/.github/fixtures/test-gitlab-integration-custom-range/commit.sh new file mode 100755 index 0000000000..8cbedcad3a --- /dev/null +++ b/.github/fixtures/test-gitlab-integration-custom-range/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://gitlab.com/dark0dave/dotfiles +git fetch +git checkout 3c048a1b6a32e6d1076581225b06dd41ee5a02ff diff --git a/.github/fixtures/test-gitlab-integration-custom-range/expected.md b/.github/fixtures/test-gitlab-integration-custom-range/expected.md new file mode 100644 index 0000000000..1df174bea9 --- /dev/null +++ b/.github/fixtures/test-gitlab-integration-custom-range/expected.md @@ -0,0 +1,7 @@ +## What's Changed +* Added curl files by @dark0dave +* Zsh update by @dark0dave +* Update README.md by @dark0dave +* Fix for path by @dark0dave +* Update README.md by @dark0dave + diff --git a/.github/fixtures/test-gitlab-integration/cliff.toml b/.github/fixtures/test-gitlab-integration/cliff.toml new file mode 100644 index 0000000000..032a8f983e --- /dev/null +++ b/.github/fixtures/test-gitlab-integration/cliff.toml @@ -0,0 +1,50 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +# GitLab integration for fetching commit metadata. +[remote.gitlab] +owner = "dark0dave" +repo = "dotfiles" + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +## What's Changed + +{%- if version %} in {{ version }}{%- endif -%} +{% for commit in commits %} + * {{ commit.message | split(pat="\n") | first | trim }}\ + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in #{{ commit.remote.pr_number }}{%- endif %} +{%- endfor -%} + +{% if gitlab.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} + {% raw %}\n{% endraw -%} + ### New Contributors +{%- endif %}\ +{% for contributor in gitlab.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ + {%- endif %} +{%- endfor -%} + +{% if version %} + {% if previous.version %} + **Full Changelog**: https://gitlab.com/{{ remote.gitlab.owner }}/{{ remote.gitlab.repo }}/compare/{{ previous.version }}...{{ version }} + {% endif %} +{% else -%} + {% raw %}\n{% endraw %} +{% endif %} +""" + +[git] +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = false +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [ + # Remove issue numbers. + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, +] diff --git a/.github/fixtures/test-gitlab-integration/commit.sh b/.github/fixtures/test-gitlab-integration/commit.sh new file mode 100755 index 0000000000..8cbedcad3a --- /dev/null +++ b/.github/fixtures/test-gitlab-integration/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://gitlab.com/dark0dave/dotfiles +git fetch +git checkout 3c048a1b6a32e6d1076581225b06dd41ee5a02ff diff --git a/.github/fixtures/test-gitlab-integration/expected.md b/.github/fixtures/test-gitlab-integration/expected.md new file mode 100644 index 0000000000..d19a1c6ece --- /dev/null +++ b/.github/fixtures/test-gitlab-integration/expected.md @@ -0,0 +1,15 @@ +## What's Changed +* Initial commit by @dark0dave +* Added tmux files by @dark0dave +* Updated readme by @dark0dave +* Updated readme and added zshrc files by @dark0dave +* Added python files by @dark0dave +* Added curl files by @dark0dave +* Zsh update by @dark0dave +* Update README.md by @dark0dave +* Fix for path by @dark0dave +* Update README.md by @dark0dave +* Started setup files by @dark0dave +* Updated tmux to be a little nicer by @dark0dave +* Merge branch 'feature/tmux-improvements' into 'master' by @dark0dave in #2 + diff --git a/.github/fixtures/test-header-template/cliff.toml b/.github/fixtures/test-header-template/cliff.toml new file mode 100644 index 0000000000..4231125b17 --- /dev/null +++ b/.github/fixtures/test-header-template/cliff.toml @@ -0,0 +1,29 @@ +[changelog] +# template for the changelog footer +header = """ +# Changelog +{% for release in releases %}\ + {% if release.version %}\ + {% if release.previous.version %}\ + + {% endif %}\ + {% else %}\ + + {% endif %}\ +{% endfor %}\ +""" +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" diff --git a/.github/fixtures/test-header-template/commit.sh b/.github/fixtures/test-header-template/commit.sh new file mode 100644 index 0000000000..ed35b19af4 --- /dev/null +++ b/.github/fixtures/test-header-template/commit.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add feature 2" +git tag v0.1.0 + +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 1" +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "fix: fix feature 2" +git tag v0.2.0 + +GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "feat: add footer" +git tag v3.0.0 + +GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "test: footer" +GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "perf: footer" diff --git a/.github/fixtures/test-header-template/expected.md b/.github/fixtures/test-header-template/expected.md new file mode 100644 index 0000000000..f9b52bfa64 --- /dev/null +++ b/.github/fixtures/test-header-template/expected.md @@ -0,0 +1,33 @@ +# Changelog + + + +## [unreleased] + +### Perf + +- Footer + +### Test + +- Footer + +## [3.0.0] + +### Feat + +- Add footer + +## [0.2.0] + +### Fix + +- Fix feature 1 +- Fix feature 2 + +## [0.1.0] + +### Feat + +- Add feature 1 +- Add feature 2 diff --git a/.github/fixtures/test-ignore-tags/cliff.toml b/.github/fixtures/test-ignore-tags/cliff.toml index 62a656124d..f9925b94c3 100644 --- a/.github/fixtures/test-ignore-tags/cliff.toml +++ b/.github/fixtures/test-ignore-tags/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,15 +17,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] -# regex for skipping tags +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags +# Regex to exclude git tags after applying the tag_pattern. ignore_tags = "v.*-beta.*" diff --git a/.github/fixtures/test-ignore-tags/expected.md b/.github/fixtures/test-ignore-tags/expected.md index 740a172dd6..e5b708619a 100644 --- a/.github/fixtures/test-ignore-tags/expected.md +++ b/.github/fixtures/test-ignore-tags/expected.md @@ -1,19 +1,14 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.2.0] - 2021-01-23 -### Feat +### 🚀 Features - Add feature 2 - Add feature 3 ## [0.1.0] - 2021-01-23 -### Feat +### 🚀 Features - Add feature 1 - Fix feature 1 - diff --git a/.github/fixtures/test-invert-ignore-tags/cliff.toml b/.github/fixtures/test-invert-ignore-tags/cliff.toml new file mode 100644 index 0000000000..ed67305403 --- /dev/null +++ b/.github/fixtures/test-invert-ignore-tags/cliff.toml @@ -0,0 +1,23 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# regex for skipping tags +skip_tags = "v0.1.0-beta.1" +# regex for ignoring tags +ignore_tags = "v.*-beta.*" +count_tags = "v0.2.0" diff --git a/.github/fixtures/test-invert-ignore-tags/commit.sh b/.github/fixtures/test-invert-ignore-tags/commit.sh new file mode 100755 index 0000000000..fa448ec4ea --- /dev/null +++ b/.github/fixtures/test-invert-ignore-tags/commit.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: add skip feature" +git tag v0.1.0-beta.1 + +GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2021-01-23 01:23:47" git commit --allow-empty -m "feat: fix feature 1" +git tag v0.1.0 + +GIT_COMMITTER_DATE="2021-01-23 01:23:48" git commit --allow-empty -m "feat: add feature 2" +git tag v0.2.0-beta.1 + +GIT_COMMITTER_DATE="2021-01-23 01:23:49" git commit --allow-empty -m "feat: add feature 3" +git tag v0.2.0 diff --git a/.github/fixtures/test-invert-ignore-tags/expected.md b/.github/fixtures/test-invert-ignore-tags/expected.md new file mode 100644 index 0000000000..57a6e35cfb --- /dev/null +++ b/.github/fixtures/test-invert-ignore-tags/expected.md @@ -0,0 +1,9 @@ +## [0.2.0] - 2021-01-23 + +### 🚀 Features + +- Add feature 1 +- Fix feature 1 +- Add feature 2 +- Add feature 3 + diff --git a/.github/fixtures/test-keep-a-changelog-links-current-arg/cliff.toml b/.github/fixtures/test-keep-a-changelog-links-current-arg/cliff.toml index c96c37331f..e44c805c9b 100644 --- a/.github/fixtures/test-keep-a-changelog-links-current-arg/cliff.toml +++ b/.github/fixtures/test-keep-a-changelog-links-current-arg/cliff.toml @@ -1,5 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. @@ -7,8 +11,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ {% if previous %}\ @@ -36,21 +40,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# remove the leading and trailing whitespace from the template -trim = true -# changelog footer -footer = """ - -""" [git] -# parse the commits based on https://www.conventionalcommits.org -conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^.*: add", group = "Added" }, { message = "^.*: support", group = "Added" }, @@ -61,17 +55,11 @@ commit_parsers = [ { message = "^.*: fix", group = "Fixed" }, { message = "^.*", group = "Changed" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = true -# glob pattern for matching git tags +# Regex to select git tags that represent releases. tag_pattern = "v[0-9]*" -# regex for skipping tags +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically -topo_order = false -# sort the commits inside sections by oldest/newest order -sort_commits = "oldest" diff --git a/.github/fixtures/test-keep-a-changelog-links-current-arg/expected.md b/.github/fixtures/test-keep-a-changelog-links-current-arg/expected.md index 259dfff457..21d450bd5a 100644 --- a/.github/fixtures/test-keep-a-changelog-links-current-arg/expected.md +++ b/.github/fixtures/test-keep-a-changelog-links-current-arg/expected.md @@ -11,4 +11,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add feature 2 - diff --git a/.github/fixtures/test-keep-a-changelog-links-latest-arg/cliff.toml b/.github/fixtures/test-keep-a-changelog-links-latest-arg/cliff.toml index c96c37331f..e44c805c9b 100644 --- a/.github/fixtures/test-keep-a-changelog-links-latest-arg/cliff.toml +++ b/.github/fixtures/test-keep-a-changelog-links-latest-arg/cliff.toml @@ -1,5 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. @@ -7,8 +11,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ {% if previous %}\ @@ -36,21 +40,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# remove the leading and trailing whitespace from the template -trim = true -# changelog footer -footer = """ - -""" [git] -# parse the commits based on https://www.conventionalcommits.org -conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^.*: add", group = "Added" }, { message = "^.*: support", group = "Added" }, @@ -61,17 +55,11 @@ commit_parsers = [ { message = "^.*: fix", group = "Fixed" }, { message = "^.*", group = "Changed" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = true -# glob pattern for matching git tags +# Regex to select git tags that represent releases. tag_pattern = "v[0-9]*" -# regex for skipping tags +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically -topo_order = false -# sort the commits inside sections by oldest/newest order -sort_commits = "oldest" diff --git a/.github/fixtures/test-keep-a-changelog-links-latest-arg/expected.md b/.github/fixtures/test-keep-a-changelog-links-latest-arg/expected.md index 259dfff457..21d450bd5a 100644 --- a/.github/fixtures/test-keep-a-changelog-links-latest-arg/expected.md +++ b/.github/fixtures/test-keep-a-changelog-links-latest-arg/expected.md @@ -11,4 +11,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add feature 2 - diff --git a/.github/fixtures/test-keep-a-changelog-links-no-tags/cliff.toml b/.github/fixtures/test-keep-a-changelog-links-no-tags/cliff.toml index c96c37331f..e44c805c9b 100644 --- a/.github/fixtures/test-keep-a-changelog-links-no-tags/cliff.toml +++ b/.github/fixtures/test-keep-a-changelog-links-no-tags/cliff.toml @@ -1,5 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. @@ -7,8 +11,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ {% if previous %}\ @@ -36,21 +40,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# remove the leading and trailing whitespace from the template -trim = true -# changelog footer -footer = """ - -""" [git] -# parse the commits based on https://www.conventionalcommits.org -conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^.*: add", group = "Added" }, { message = "^.*: support", group = "Added" }, @@ -61,17 +55,11 @@ commit_parsers = [ { message = "^.*: fix", group = "Fixed" }, { message = "^.*", group = "Changed" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = true -# glob pattern for matching git tags +# Regex to select git tags that represent releases. tag_pattern = "v[0-9]*" -# regex for skipping tags +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically -topo_order = false -# sort the commits inside sections by oldest/newest order -sort_commits = "oldest" diff --git a/.github/fixtures/test-keep-a-changelog-links-no-tags/expected.md b/.github/fixtures/test-keep-a-changelog-links-no-tags/expected.md index c721d4b523..c845ac4184 100644 --- a/.github/fixtures/test-keep-a-changelog-links-no-tags/expected.md +++ b/.github/fixtures/test-keep-a-changelog-links-no-tags/expected.md @@ -16,4 +16,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix feature 1 - diff --git a/.github/fixtures/test-keep-a-changelog-links-one-tag-bump-arg/cliff.toml b/.github/fixtures/test-keep-a-changelog-links-one-tag-bump-arg/cliff.toml index c96c37331f..e44c805c9b 100644 --- a/.github/fixtures/test-keep-a-changelog-links-one-tag-bump-arg/cliff.toml +++ b/.github/fixtures/test-keep-a-changelog-links-one-tag-bump-arg/cliff.toml @@ -1,5 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. @@ -7,8 +11,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ {% if previous %}\ @@ -36,21 +40,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# remove the leading and trailing whitespace from the template -trim = true -# changelog footer -footer = """ - -""" [git] -# parse the commits based on https://www.conventionalcommits.org -conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^.*: add", group = "Added" }, { message = "^.*: support", group = "Added" }, @@ -61,17 +55,11 @@ commit_parsers = [ { message = "^.*: fix", group = "Fixed" }, { message = "^.*", group = "Changed" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = true -# glob pattern for matching git tags +# Regex to select git tags that represent releases. tag_pattern = "v[0-9]*" -# regex for skipping tags +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically -topo_order = false -# sort the commits inside sections by oldest/newest order -sort_commits = "oldest" diff --git a/.github/fixtures/test-keep-a-changelog-links-one-tag-bump-arg/expected.md b/.github/fixtures/test-keep-a-changelog-links-one-tag-bump-arg/expected.md index 2a981932c8..51f600404e 100644 --- a/.github/fixtures/test-keep-a-changelog-links-one-tag-bump-arg/expected.md +++ b/.github/fixtures/test-keep-a-changelog-links-one-tag-bump-arg/expected.md @@ -17,4 +17,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add feature 1 - diff --git a/.github/fixtures/test-keep-a-changelog-links-one-tag/cliff.toml b/.github/fixtures/test-keep-a-changelog-links-one-tag/cliff.toml index c96c37331f..e44c805c9b 100644 --- a/.github/fixtures/test-keep-a-changelog-links-one-tag/cliff.toml +++ b/.github/fixtures/test-keep-a-changelog-links-one-tag/cliff.toml @@ -1,5 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. @@ -7,8 +11,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ {% if previous %}\ @@ -36,21 +40,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# remove the leading and trailing whitespace from the template -trim = true -# changelog footer -footer = """ - -""" [git] -# parse the commits based on https://www.conventionalcommits.org -conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^.*: add", group = "Added" }, { message = "^.*: support", group = "Added" }, @@ -61,17 +55,11 @@ commit_parsers = [ { message = "^.*: fix", group = "Fixed" }, { message = "^.*", group = "Changed" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = true -# glob pattern for matching git tags +# Regex to select git tags that represent releases. tag_pattern = "v[0-9]*" -# regex for skipping tags +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically -topo_order = false -# sort the commits inside sections by oldest/newest order -sort_commits = "oldest" diff --git a/.github/fixtures/test-keep-a-changelog-links-one-tag/expected.md b/.github/fixtures/test-keep-a-changelog-links-one-tag/expected.md index 11d38addf1..d0bd092e0b 100644 --- a/.github/fixtures/test-keep-a-changelog-links-one-tag/expected.md +++ b/.github/fixtures/test-keep-a-changelog-links-one-tag/expected.md @@ -11,4 +11,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add feature 1 - diff --git a/.github/fixtures/test-keep-a-changelog-links-tag-arg/cliff.toml b/.github/fixtures/test-keep-a-changelog-links-tag-arg/cliff.toml index c96c37331f..e44c805c9b 100644 --- a/.github/fixtures/test-keep-a-changelog-links-tag-arg/cliff.toml +++ b/.github/fixtures/test-keep-a-changelog-links-tag-arg/cliff.toml @@ -1,5 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. @@ -7,8 +11,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ {% if previous %}\ @@ -36,21 +40,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# remove the leading and trailing whitespace from the template -trim = true -# changelog footer -footer = """ - -""" [git] -# parse the commits based on https://www.conventionalcommits.org -conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^.*: add", group = "Added" }, { message = "^.*: support", group = "Added" }, @@ -61,17 +55,11 @@ commit_parsers = [ { message = "^.*: fix", group = "Fixed" }, { message = "^.*", group = "Changed" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = true -# glob pattern for matching git tags +# Regex to select git tags that represent releases. tag_pattern = "v[0-9]*" -# regex for skipping tags +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically -topo_order = false -# sort the commits inside sections by oldest/newest order -sort_commits = "oldest" diff --git a/.github/fixtures/test-keep-a-changelog-links-tag-arg/expected.md b/.github/fixtures/test-keep-a-changelog-links-tag-arg/expected.md index 348dc2f827..0bdd1a829d 100644 --- a/.github/fixtures/test-keep-a-changelog-links-tag-arg/expected.md +++ b/.github/fixtures/test-keep-a-changelog-links-tag-arg/expected.md @@ -23,4 +23,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add feature 1 - diff --git a/.github/fixtures/test-keep-a-changelog-links-unreleased-arg/cliff.toml b/.github/fixtures/test-keep-a-changelog-links-unreleased-arg/cliff.toml index c96c37331f..e44c805c9b 100644 --- a/.github/fixtures/test-keep-a-changelog-links-unreleased-arg/cliff.toml +++ b/.github/fixtures/test-keep-a-changelog-links-unreleased-arg/cliff.toml @@ -1,5 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. @@ -7,8 +11,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ {% if previous %}\ @@ -36,21 +40,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# remove the leading and trailing whitespace from the template -trim = true -# changelog footer -footer = """ - -""" [git] -# parse the commits based on https://www.conventionalcommits.org -conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^.*: add", group = "Added" }, { message = "^.*: support", group = "Added" }, @@ -61,17 +55,11 @@ commit_parsers = [ { message = "^.*: fix", group = "Fixed" }, { message = "^.*", group = "Changed" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = true -# glob pattern for matching git tags +# Regex to select git tags that represent releases. tag_pattern = "v[0-9]*" -# regex for skipping tags +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically -topo_order = false -# sort the commits inside sections by oldest/newest order -sort_commits = "oldest" diff --git a/.github/fixtures/test-keep-a-changelog-links-unreleased-arg/expected.md b/.github/fixtures/test-keep-a-changelog-links-unreleased-arg/expected.md index dfaf58eaf7..e860d21a88 100644 --- a/.github/fixtures/test-keep-a-changelog-links-unreleased-arg/expected.md +++ b/.github/fixtures/test-keep-a-changelog-links-unreleased-arg/expected.md @@ -11,4 +11,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix feature 1 - diff --git a/.github/fixtures/test-keep-a-changelog-links/cliff.toml b/.github/fixtures/test-keep-a-changelog-links/cliff.toml index 59ef355cf0..e44c805c9b 100644 --- a/.github/fixtures/test-keep-a-changelog-links/cliff.toml +++ b/.github/fixtures/test-keep-a-changelog-links/cliff.toml @@ -1,5 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. @@ -7,8 +11,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ {% if previous %}\ @@ -36,21 +40,11 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] -# parse the commits based on https://www.conventionalcommits.org -conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^.*: add", group = "Added" }, { message = "^.*: support", group = "Added" }, @@ -61,17 +55,11 @@ commit_parsers = [ { message = "^.*: fix", group = "Fixed" }, { message = "^.*", group = "Changed" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = true -# glob pattern for matching git tags +# Regex to select git tags that represent releases. tag_pattern = "v[0-9]*" -# regex for skipping tags +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically -topo_order = false -# sort the commits inside sections by oldest/newest order -sort_commits = "oldest" diff --git a/.github/fixtures/test-keep-a-changelog-links/expected.md b/.github/fixtures/test-keep-a-changelog-links/expected.md index 0a03c13e5b..d4be6dd086 100644 --- a/.github/fixtures/test-keep-a-changelog-links/expected.md +++ b/.github/fixtures/test-keep-a-changelog-links/expected.md @@ -23,4 +23,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add feature 1 - diff --git a/.github/fixtures/test-latest-with-one-tag/cliff.toml b/.github/fixtures/test-latest-with-one-tag/cliff.toml index 5504810e90..98a2a5ce75 100644 --- a/.github/fixtures/test-latest-with-one-tag/cliff.toml +++ b/.github/fixtures/test-latest-with-one-tag/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,9 +17,3 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true diff --git a/.github/fixtures/test-latest-with-one-tag/commit.sh b/.github/fixtures/test-latest-with-one-tag/commit.sh index 6c5c90caaf..361943d085 100755 --- a/.github/fixtures/test-latest-with-one-tag/commit.sh +++ b/.github/fixtures/test-latest-with-one-tag/commit.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -e -GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2021-01-23 01:23:45" git commit --allow-empty -m "feat: initial commit" GIT_COMMITTER_DATE="2021-01-23 01:23:46" git commit --allow-empty -m "feat: add feature 1" git tag v0.1.0 diff --git a/.github/fixtures/test-latest-with-one-tag/expected.md b/.github/fixtures/test-latest-with-one-tag/expected.md index 1b15d95c46..98d52292df 100644 --- a/.github/fixtures/test-latest-with-one-tag/expected.md +++ b/.github/fixtures/test-latest-with-one-tag/expected.md @@ -1,11 +1,7 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.1.0] - 2021-01-23 -### Feat +### 🚀 Features +- Initial commit - Add feature 1 - diff --git a/.github/fixtures/test-limit-commits/cliff.toml b/.github/fixtures/test-limit-commits/cliff.toml index f053d363b3..f638105cdd 100644 --- a/.github/fixtures/test-limit-commits/cliff.toml +++ b/.github/fixtures/test-limit-commits/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,12 +17,7 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] +# Limit the total number of commits contained in the changelog. limit_commits = 2 diff --git a/.github/fixtures/test-limit-commits/expected.md b/.github/fixtures/test-limit-commits/expected.md index f0e13df9db..50ac6b9152 100644 --- a/.github/fixtures/test-limit-commits/expected.md +++ b/.github/fixtures/test-limit-commits/expected.md @@ -1,15 +1,10 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.1.0] - 2022-04-06 -### Fix +### 🐛 Bug Fixes - Fix feature 1 (#1) -### Refactor +### 🚜 Refactor - Move classes - diff --git a/.github/fixtures/test-monorepo-include-path/cliff.toml b/.github/fixtures/test-monorepo-include-path/cliff.toml new file mode 100644 index 0000000000..eaf1d74045 --- /dev/null +++ b/.github/fixtures/test-monorepo-include-path/cliff.toml @@ -0,0 +1,23 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] diff --git a/.github/fixtures/test-monorepo-include-path/commit.sh b/.github/fixtures/test-monorepo-include-path/commit.sh new file mode 100755 index 0000000000..641a2f761e --- /dev/null +++ b/.github/fixtures/test-monorepo-include-path/commit.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://github.com/orhun/git-cliff +git fetch +mv cliff.toml cliff.toml.bak +git checkout 076feb74b4d8c8634669f57d4e2765c39490d80e +mv cliff.toml.bak cliff.toml diff --git a/.github/fixtures/test-monorepo-include-path/expected.md b/.github/fixtures/test-monorepo-include-path/expected.md new file mode 100644 index 0000000000..b605da8fb0 --- /dev/null +++ b/.github/fixtures/test-monorepo-include-path/expected.md @@ -0,0 +1,13 @@ +## [unreleased] + +### Bug Fixes + +- Include the root commit when `--latest` is used with one tag (#901) +- Match PR and release metadata correctly (#907) +- Fix missing commit fields in context (#837) (#920) +- Preserve first time contributors (#925) + +### Features + +- Allow overriding the remote API URL via config (#896) + diff --git a/.github/fixtures/test-no-exec/cliff.toml b/.github/fixtures/test-no-exec/cliff.toml index 7a8024d7a1..8a2f62f8c5 100644 --- a/.github/fixtures/test-no-exec/cliff.toml +++ b/.github/fixtures/test-no-exec/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,24 +17,20 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true -# postprocessors +# An array of regex based postprocessors to modify the changelog. postprocessors = [ - { pattern = '.*', replace_command = 'this_command_does_not_exist' }, + { pattern = '.*', replace_command = 'this_command_does_not_exist' }, ] [git] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ - { message = "^feat", group = "Features", default_scope = "app" }, - { message = "^fix", group = "Bug Fixes", scope = "cli" }, + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, ] -# regex for preprocessing the commit messages +# An array of regex based parsers to modify commit messages prior to further processing. commit_preprocessors = [ - { pattern = '.*', replace_command = "this_command_does_not_exist" }, + { pattern = '.*', replace_command = "this_command_does_not_exist" }, ] diff --git a/.github/fixtures/test-no-exec/expected.md b/.github/fixtures/test-no-exec/expected.md index 72e96a6f09..44dd845f80 100644 --- a/.github/fixtures/test-no-exec/expected.md +++ b/.github/fixtures/test-no-exec/expected.md @@ -1,7 +1,3 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [unreleased] ### Test @@ -28,4 +24,3 @@ All notable changes to this project will be documented in this file. - Add feature 1 - diff --git a/.github/fixtures/test-override-scope/cliff.toml b/.github/fixtures/test-override-scope/cliff.toml new file mode 100644 index 0000000000..c797a94231 --- /dev/null +++ b/.github/fixtures/test-override-scope/cliff.toml @@ -0,0 +1,32 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## Unreleased +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for group, commits in commits | group_by(attribute="scope") %} + #### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} + {% endfor %}\ +{% endfor %}\n +""" + +[git] +conventional_commits = true +filter_unconventional = false +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "([Xx]enon)", scope = "Xenon" } +] diff --git a/.github/fixtures/test-override-scope/commit.sh b/.github/fixtures/test-override-scope/commit.sh new file mode 100755 index 0000000000..3ee55d2c7b --- /dev/null +++ b/.github/fixtures/test-override-scope/commit.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "fix(Xenon): first commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix(Xenon): second commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix(xenon): third commit" +git tag v0.1.0 diff --git a/.github/fixtures/test-override-scope/expected.md b/.github/fixtures/test-override-scope/expected.md new file mode 100644 index 0000000000..b9aeff0d2b --- /dev/null +++ b/.github/fixtures/test-override-scope/expected.md @@ -0,0 +1,10 @@ +## 0.1.0 - 2022-04-06 + +### Fix + +#### Xenon + +- First commit +- Second commit +- Third commit + diff --git a/.github/fixtures/test-regex-json-array/cliff.toml b/.github/fixtures/test-regex-json-array/cliff.toml new file mode 100644 index 0000000000..60ca57d20a --- /dev/null +++ b/.github/fixtures/test-regex-json-array/cliff.toml @@ -0,0 +1,43 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[remote.github] +owner = "orhun" +repo = "git-cliff-readme-example-one-pr-one-commit" + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | split(pat="\n") | nth(n=0) | trim_end }} \ + {%- if commit.remote.pr_number -%} + ([PR #{{ commit.remote.pr_number }}](https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}/pull/{{ commit.remote.pr_number }}))\ + {%- endif -%} + {% endfor %} +{% endfor %}\n +""" + +[git] +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = false +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. +commit_parsers = [ + { field = "remote.pr_labels", pattern = "area/documentation", group = "📝 Documentation" }, + { field = "remote.pr_labels", pattern = "breaking change", group = "💥 Breaking Changes" }, + { field = "remote.pr_labels", pattern = "type/bug", group = "🐛 Bug Fixes" }, + { field = "remote.pr_labels", pattern = "type/enhancement", group = "✨ Enhancements" }, + { field = "remote.pr_labels", pattern = "type/refactor", group = "🧹 Refactoring" }, + { field = "remote.pr_labels", pattern = "type/update", group = "🚀 Feature Updates" }, + { message = ".*", group = "🌀 Miscellaneous" }, +] diff --git a/.github/fixtures/test-regex-json-array/commit.sh b/.github/fixtures/test-regex-json-array/commit.sh new file mode 100755 index 0000000000..04082ce895 --- /dev/null +++ b/.github/fixtures/test-regex-json-array/commit.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +git remote add origin https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit +git pull origin main +git fetch --tags diff --git a/.github/fixtures/test-regex-json-array/expected.md b/.github/fixtures/test-regex-json-array/expected.md new file mode 100644 index 0000000000..55945c3417 --- /dev/null +++ b/.github/fixtures/test-regex-json-array/expected.md @@ -0,0 +1,34 @@ +## [unreleased] + +### ✨ Enhancements + +- feat(cache): use cache while fetching pages([PR #7](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/7)) +- feat(config): support multiple file formats([PR #8](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/8)) +- feat(parser): add ability to parse arrays([PR #9](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/9)) + +## [1.0.1] - 2025-06-18 + +### 🚀 Feature Updates + +- chore(release): add release script([PR #6](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/6)) + +### 🐛 Bug Fixes + +- fix(args): rename help argument due to conflict([PR #5](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/5)) + +## [1.0.0] - 2025-06-18 + +### 💥 Breaking Changes + +- refactor(parser): expose string functions([PR #3](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/3)) + +### 📝 Documentation + +- docs(project): add README.md([PR #2](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/2)) +- docs(example)!: add tested usage example([PR #4](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/4)) + +### 🌀 Miscellaneous + +- chore: initialize main +- initial commit([PR #1](https://github.com/orhun/git-cliff-readme-example-one-pr-one-commit/pull/1)) + diff --git a/.github/fixtures/test-regex-label-grouping/cliff.toml b/.github/fixtures/test-regex-label-grouping/cliff.toml new file mode 100644 index 0000000000..9b4ebd943c --- /dev/null +++ b/.github/fixtures/test-regex-label-grouping/cliff.toml @@ -0,0 +1,17 @@ +[changelog] +body = """ +### What's changed +{% for group, commits in commits | group_by(attribute="group") %} + #### {{ group }} + {% for commit in commits -%} + - {{ commit.message }} + {% endfor -%}\n +{% endfor %}\n +""" + +[git] +commit_parsers = [ + { field = "author.name", pattern = "testa", group = "TEST A" }, + { field = "author.name", pattern = "testb", group = "TEST B" }, + { field = "author.name", pattern = "testc", group = "TEST C" }, +] diff --git a/.github/fixtures/test-regex-label-grouping/commit.sh b/.github/fixtures/test-regex-label-grouping/commit.sh new file mode 100755 index 0000000000..3a190fd5b4 --- /dev/null +++ b/.github/fixtures/test-regex-label-grouping/commit.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty --author="testa " -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty --author="testa " -m "feat: add feature 2" +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty --author="testb " -m "feat: add feature 3" +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty --author="testb " -m "feat: add feature 4" +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty --author="testc " -m "feat: add feature 5" +GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty --author="testc " -m "feat: add feature 6" diff --git a/.github/fixtures/test-regex-label-grouping/expected.md b/.github/fixtures/test-regex-label-grouping/expected.md new file mode 100644 index 0000000000..a80a0c3fb2 --- /dev/null +++ b/.github/fixtures/test-regex-label-grouping/expected.md @@ -0,0 +1,14 @@ +### What's changed + +#### TEST A +- add feature 1 +- add feature 2 + +#### TEST B +- add feature 3 +- add feature 4 + +#### TEST C +- add feature 5 +- add feature 6 + diff --git a/.github/fixtures/test-regex-replace-parser/cliff.toml b/.github/fixtures/test-regex-replace-parser/cliff.toml index b464addd34..e8fa1582a7 100644 --- a/.github/fixtures/test-regex-replace-parser/cliff.toml +++ b/.github/fixtures/test-regex-replace-parser/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,17 +17,13 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ - { message = '^fix\((.*)\)', group = 'Fix (${1}) 🧰' }, - { message = '^feat\((.*)\)', group = 'Feature (${1}) 🚀' }, - { message = "^\\[(.*)\\]", group = "Changes to ${1}", scope = "${1}" }, + { message = '^fix\((.*)\)', group = 'Fix (${1}) 🧰' }, + { message = '^feat\((.*)\)', group = 'Feature (${1}) 🚀' }, + { message = "^\\[(.*)\\]", group = "Changes to ${1}", scope = "${1}" }, ] diff --git a/.github/fixtures/test-regex-replace-parser/expected.md b/.github/fixtures/test-regex-replace-parser/expected.md index 1ef55bb314..80eed208fa 100644 --- a/.github/fixtures/test-regex-replace-parser/expected.md +++ b/.github/fixtures/test-regex-replace-parser/expected.md @@ -1,7 +1,3 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [unreleased] ### Changes to codebase @@ -37,4 +33,3 @@ All notable changes to this project will be documented in this file. - (config) Fix feature 1 - diff --git a/.github/fixtures/test-release-statistics/cliff.toml b/.github/fixtures/test-release-statistics/cliff.toml new file mode 100644 index 0000000000..a025705e0c --- /dev/null +++ b/.github/fixtures/test-release-statistics/cliff.toml @@ -0,0 +1,46 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %} +### Commit Statistics\n +- {{ statistics.commit_count }} commit(s) contributed to the release. +- {{ statistics.commits_timespan | default(value=0) }} day(s) passed between the first and last commit. +- {{ statistics.conventional_commit_count }} commit(s) parsed as conventional. +- {{ statistics.links | length }} linked issue(s) detected in commits. +{%- if statistics.links | length > 0 %} + {%- for link in statistics.links %} + {{ " " }}- [{{ link.text }}]({{ link.href }}) (referenced {{ link.count }} time(s)) + {%- endfor %} +{%- endif %} +{%- if statistics.days_passed_since_last_release %} + - {{ statistics.days_passed_since_last_release }} day(s) passed between releases. +{%- endif %}\n\n +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] +# An array of link parsers for extracting external references, and turning them into URLs, using regex. +link_parsers = [ + { pattern = "#(\\d+)", href = "https://github.com/orhun/git-cliff/issues/$1"}, + { pattern = "RFC(\\d+)", text = "ietf-rfc$1", href = "https://datatracker.ietf.org/doc/html/rfc$1"}, +] diff --git a/.github/fixtures/test-release-statistics/commit.sh b/.github/fixtures/test-release-statistics/commit.sh new file mode 100755 index 0000000000..59be69e3a5 --- /dev/null +++ b/.github/fixtures/test-release-statistics/commit.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1" +git tag v0.1.0 +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2" +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2" +git tag v0.2.0 +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests" +GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty -m "feat: add release statistics feature(#452)" +GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty -m "fix: remove duplication (#452)" +GIT_COMMITTER_DATE="2022-04-06 01:25:14" git commit --allow-empty -m "feat: make git short shat available(#1148)" +GIT_COMMITTER_DATE="2022-04-06 01:25:15" git commit --allow-empty -m "fix(parser): ensure URI parsing is RFC3986-compliant" diff --git a/.github/fixtures/test-release-statistics/expected.md b/.github/fixtures/test-release-statistics/expected.md new file mode 100644 index 0000000000..f4f2a4a21b --- /dev/null +++ b/.github/fixtures/test-release-statistics/expected.md @@ -0,0 +1,57 @@ +## [unreleased] + +### Bug Fixes + +- Remove duplication (#452) +- Ensure URI parsing is RFC3986-compliant + +### Features + +- Add release statistics feature(#452) +- Make git short shat available(#1148) + +### Test + +- Add tests + +### Commit Statistics + +- 5 commit(s) contributed to the release. +- 0 day(s) passed between the first and last commit. +- 5 commit(s) parsed as conventional. +- 3 linked issue(s) detected in commits. + - [#452](https://github.com/orhun/git-cliff/issues/452) (referenced 2 time(s)) + - [#1148](https://github.com/orhun/git-cliff/issues/1148) (referenced 1 time(s)) + - [ietf-rfc3986](https://datatracker.ietf.org/doc/html/rfc3986) (referenced 1 time(s)) +- <> day(s) passed between releases. + +## [0.2.0] - 2022-04-06 + +### Bug Fixes + +- Fix feature 2 + +### Features + +- Add feature 2 + +### Commit Statistics + +- 2 commit(s) contributed to the release. +- 0 day(s) passed between the first and last commit. +- 2 commit(s) parsed as conventional. +- 0 linked issue(s) detected in commits. + +## [0.1.0] - 2022-04-06 + +### Bug Fixes + +- Fix feature 1 + +### Commit Statistics + +- 1 commit(s) contributed to the release. +- 0 day(s) passed between the first and last commit. +- 1 commit(s) parsed as conventional. +- 0 linked issue(s) detected in commits. + diff --git a/.github/fixtures/test-remote-config/cliff.toml b/.github/fixtures/test-remote-config/cliff.toml new file mode 100644 index 0000000000..6c17375681 --- /dev/null +++ b/.github/fixtures/test-remote-config/cliff.toml @@ -0,0 +1,2 @@ +[changelog] +header = "This is going to be overriden" diff --git a/.github/fixtures/test-remote-config/commit.sh b/.github/fixtures/test-remote-config/commit.sh new file mode 100755 index 0000000000..7c6fe32718 --- /dev/null +++ b/.github/fixtures/test-remote-config/commit.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1" +git tag v0.1.0 +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2" +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2" +git tag v0.2.0 +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests" diff --git a/.github/fixtures/test-remote-config/expected.md b/.github/fixtures/test-remote-config/expected.md new file mode 100644 index 0000000000..44dd845f80 --- /dev/null +++ b/.github/fixtures/test-remote-config/expected.md @@ -0,0 +1,26 @@ +## [unreleased] + +### Test + +- Add tests + +## [0.2.0] - 2022-04-06 + +### Bug Fixes + +- Fix feature 2 + +### Features + +- Add feature 2 + +## [0.1.0] - 2022-04-06 + +### Bug Fixes + +- Fix feature 1 + +### Features + +- Add feature 1 + diff --git a/.github/fixtures/test-require-conventional-negative/cliff.toml b/.github/fixtures/test-require-conventional-negative/cliff.toml new file mode 100644 index 0000000000..eababf4ac7 --- /dev/null +++ b/.github/fixtures/test-require-conventional-negative/cliff.toml @@ -0,0 +1,34 @@ +[changelog] +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction +header = """ +# Changelog\n +All notable changes to this project will be documented in this file. +""" +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% for group, commits in commits | group_by(attribute="group") %} + ## {{ group | striptags | trim | upper_first }} + {% for commit in commits %} + {% if commit.scope %}*({{ commit.scope }})* {% endif %}\ + {% if commit.breaking %}[**breaking**]: {{ commit.breaking_description }}{% endif %} + {{ commit.message }}: {{ commit.body }}\ + {% for footer in commit.footers %} + - {{ footer.token }}{{ footer.separator }} {{ footer.value }}\ + {% endfor %} + {% endfor %}\ +{% endfor %}\n +""" + +[git] +# Require all commits to be conventional. +# Takes precedence over filter_unconventional. +require_conventional = true +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix" }, +] diff --git a/.github/fixtures/test-require-conventional-negative/commit.sh b/.github/fixtures/test-require-conventional-negative/commit.sh new file mode 100755 index 0000000000..ee6d55cba7 --- /dev/null +++ b/.github/fixtures/test-require-conventional-negative/commit.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "This is unconventional." +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m \ + "This is unconventional on multiple lines. + +Line 2 + +Some Footer: user3 +" +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui)!: fix feature 2" + +git tag v0.1.0 diff --git a/.github/fixtures/test-require-conventional-negative/expected.rc b/.github/fixtures/test-require-conventional-negative/expected.rc new file mode 100644 index 0000000000..56a6051ca2 --- /dev/null +++ b/.github/fixtures/test-require-conventional-negative/expected.rc @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/.github/fixtures/test-require-conventional-skipped/cliff.toml b/.github/fixtures/test-require-conventional-skipped/cliff.toml new file mode 100644 index 0000000000..6e42550136 --- /dev/null +++ b/.github/fixtures/test-require-conventional-skipped/cliff.toml @@ -0,0 +1,37 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for group, commits in commits | group_by(attribute="scope") %} + #### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} + {% endfor %}\ +{% endfor %}\n +""" + +[git] +# Require all commits to be conventional. +# Takes precedence over filter_unconventional. +require_conventional = true +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", skip = true }, + { message = "Initial commit", skip = true }, +] +# Prevent commits that are breaking from being excluded by commit parsers. +protect_breaking_commits = true diff --git a/.github/fixtures/test-require-conventional-skipped/commit.sh b/.github/fixtures/test-require-conventional-skipped/commit.sh new file mode 100755 index 0000000000..7071934d60 --- /dev/null +++ b/.github/fixtures/test-require-conventional-skipped/commit.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui)!: add feature 2" +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui)!: fix feature 2" + +git tag v0.1.0 diff --git a/.github/fixtures/test-require-conventional-skipped/expected.md b/.github/fixtures/test-require-conventional-skipped/expected.md new file mode 100644 index 0000000000..57864513f6 --- /dev/null +++ b/.github/fixtures/test-require-conventional-skipped/expected.md @@ -0,0 +1,18 @@ +## [0.1.0] - 2022-04-06 + +### Bug Fixes + +#### Gui + +- Fix feature 2 + +### Features + +#### App + +- Add feature 1 + +#### Gui + +- Add feature 2 + diff --git a/.github/fixtures/test-skip-breaking-changes/cliff.toml b/.github/fixtures/test-skip-breaking-changes/cliff.toml index d0574838ca..691370d81e 100644 --- a/.github/fixtures/test-skip-breaking-changes/cliff.toml +++ b/.github/fixtures/test-skip-breaking-changes/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -22,18 +20,14 @@ body = """ {% endfor %}\ {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "Features", default_scope = "app", skip = true }, { message = "^fix", group = "Bug Fixes", scope = "cli", skip = true }, ] -# protect breaking changes from being skipped +# Prevent commits that are breaking from being excluded by commit parsers. protect_breaking_commits = true diff --git a/.github/fixtures/test-skip-breaking-changes/expected.md b/.github/fixtures/test-skip-breaking-changes/expected.md index 74a4d73bb9..a362adbeb0 100644 --- a/.github/fixtures/test-skip-breaking-changes/expected.md +++ b/.github/fixtures/test-skip-breaking-changes/expected.md @@ -1,7 +1,3 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.1.0] - 2022-04-06 ### Bug Fixes @@ -17,4 +13,3 @@ All notable changes to this project will be documented in this file. - Add feature 2 - diff --git a/.github/fixtures/test-skip-commits/cliff.toml b/.github/fixtures/test-skip-commits/cliff.toml index 9a9d380abc..d4389354ad 100644 --- a/.github/fixtures/test-skip-commits/cliff.toml +++ b/.github/fixtures/test-skip-commits/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,16 +17,14 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ - { message = "^feat", group = "Features", default_scope = "app" }, - { message = "^fix", group = "Bug Fixes", scope = "cli" }, + { message = "^feat", group = "🚀 Features", default_scope = "app" }, + { message = "^fix", group = "🐛 Bug Fixes", scope = "cli" }, ] +# Exclude commits that are not matched by any commit parser. +filter_commits = true diff --git a/.github/fixtures/test-skip-commits/expected.md b/.github/fixtures/test-skip-commits/expected.md index d2e5ab4c77..401f31fa7f 100644 --- a/.github/fixtures/test-skip-commits/expected.md +++ b/.github/fixtures/test-skip-commits/expected.md @@ -1,22 +1,17 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [unreleased] -### Features +### 🚀 Features - Support multiple file formats - Use cache while fetching pages ## [1.0.0] - 2021-07-18 -### Bug Fixes +### 🚀 Features -- Rename help argument due to conflict +- Add ability to parse arrays -### Features +### 🐛 Bug Fixes -- Add ability to parse arrays +- Rename help argument due to conflict - diff --git a/.github/fixtures/test-skip-tags/cliff.toml b/.github/fixtures/test-skip-tags/cliff.toml new file mode 100644 index 0000000000..4e62b2f8a9 --- /dev/null +++ b/.github/fixtures/test-skip-tags/cliff.toml @@ -0,0 +1,25 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. +skip_tags = "v0.0.1" diff --git a/.github/fixtures/test-skip-tags/commit.sh b/.github/fixtures/test-skip-tags/commit.sh new file mode 100755 index 0000000000..2320865888 --- /dev/null +++ b/.github/fixtures/test-skip-tags/commit.sh @@ -0,0 +1,8 @@ +set -e + +GIT_COMMITTER_DATE="2025-06-24 21:01:21" git commit --allow-empty -m "init" +git tag v0.0.1 + +GIT_COMMITTER_DATE="2025-06-24 21:01:22" git commit --allow-empty -m "feat: add feature 0" +GIT_COMMITTER_DATE="2025-06-24 21:01:23" git commit --allow-empty -m "feat: add feature 1" +git tag v0.1.0 diff --git a/.github/fixtures/test-skip-tags/expected.md b/.github/fixtures/test-skip-tags/expected.md new file mode 100644 index 0000000000..a8a9dfd42c --- /dev/null +++ b/.github/fixtures/test-skip-tags/expected.md @@ -0,0 +1,7 @@ +## [0.1.0] - 2025-06-24 + +### 🚀 Features + +- Add feature 0 +- Add feature 1 + diff --git a/.github/fixtures/test-split-commits/cliff.toml b/.github/fixtures/test-split-commits/cliff.toml index ec20df871c..32b683b753 100644 --- a/.github/fixtures/test-split-commits/cliff.toml +++ b/.github/fixtures/test-split-commits/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,13 +17,7 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] -# process each line of a commit as an individual commit +# Split commits on newlines, treating each line as an individual commit. split_commits = true diff --git a/.github/fixtures/test-split-commits/expected.md b/.github/fixtures/test-split-commits/expected.md index 8ccc503b06..94b5b9b393 100644 --- a/.github/fixtures/test-split-commits/expected.md +++ b/.github/fixtures/test-split-commits/expected.md @@ -1,31 +1,30 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.1.0] - 2022-04-06 -### Chore - -- Bump deps - -### Feat +### 🚀 Features - Add feature 1 - Add feature 2 -### Fix +### 🐛 Bug Fixes - Fix feature 1 - Fix feature 2 -### Style +### 💼 Other + +- Initial commit + +### 🎨 Styling - Apply formatting -### Test +### 🧪 Testing - Add initial tests - Add more tests - Update assert statements - +### ⚙️ Miscellaneous Tasks + +- Bump deps + diff --git a/.github/fixtures/test-submodules-include-path-config/cliff.toml b/.github/fixtures/test-submodules-include-path-config/cliff.toml new file mode 100644 index 0000000000..f872014f99 --- /dev/null +++ b/.github/fixtures/test-submodules-include-path-config/cliff.toml @@ -0,0 +1,39 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\ +{% for submodule_path, commits in submodule_commits %} + ### {{ submodule_path | upper_first }} + {% for group, commits in commits | group_by(attribute="group") %} + #### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} + {% endfor %} +{% endfor %} +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] +recurse_submodules = true +include_paths = ["submodule_two"] diff --git a/.github/fixtures/test-submodules-include-path-config/commit.sh b/.github/fixtures/test-submodules-include-path-config/commit.sh new file mode 100755 index 0000000000..05c2031f16 --- /dev/null +++ b/.github/fixtures/test-submodules-include-path-config/commit.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -e + +current_dir="$(pwd)" +submodule_one_dir="$(mktemp -d)" +submodule_two_dir="$(mktemp -d)" + +cd $submodule_one_dir && git init >&2 +GIT_COMMITTER_DATE="2022-04-05 01:00:8" git commit --allow-empty -m "feat: submodule_one initial commit" + +cd $submodule_two_dir && git init >&2 +GIT_COMMITTER_DATE="2022-04-05 01:00:12" git commit --allow-empty -m "feat: submodule_two feature B" + +cd $current_dir +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" + +git -c protocol.file.allow=always submodule add $submodule_one_dir submodule_one +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit -a -m "feat: add submodule_one" + +cd submodule_one +GIT_COMMITTER_DATE="2022-04-05 01:00:10" git commit --allow-empty -m "feat: submodule_one feature A" +GIT_COMMITTER_DATE="2022-04-05 01:00:11" git commit --allow-empty -m "fix: submodule_one fix A" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit -a -m "feat: submodule_one update 1" +git tag v0.1.0 + +git -c protocol.file.allow=always submodule add $submodule_two_dir submodule_two +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit -a -m "feat: submodule_two with initial commits" + +cd submodule_two +GIT_COMMITTER_DATE="2022-04-05 01:00:13" git commit --allow-empty -m "fix: submodule_two fix B" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit -a -m "feat: submodule_two update 1" +git tag v0.2.0 + +cd submodule_two +GIT_COMMITTER_DATE="2022-04-05 01:00:14" git commit --allow-empty -m "fix: submodule_two fix C" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit -a -m "feat: submodule_two update 2" diff --git a/.github/fixtures/test-submodules-include-path-config/expected.md b/.github/fixtures/test-submodules-include-path-config/expected.md new file mode 100644 index 0000000000..eded7787a7 --- /dev/null +++ b/.github/fixtures/test-submodules-include-path-config/expected.md @@ -0,0 +1,29 @@ +## [unreleased] + +### Features + +- Submodule_two update 2 + +### Submodule_two + +#### Bug Fixes + +- Submodule_two fix C + +## [0.2.0] - 2022-04-06 + +### Features + +- Submodule_two with initial commits +- Submodule_two update 1 + +### Submodule_two + +#### Bug Fixes + +- Submodule_two fix B + +#### Features + +- Submodule_two feature B + diff --git a/.github/fixtures/test-submodules-include-path/cliff.toml b/.github/fixtures/test-submodules-include-path/cliff.toml new file mode 100644 index 0000000000..345ebc510f --- /dev/null +++ b/.github/fixtures/test-submodules-include-path/cliff.toml @@ -0,0 +1,38 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\ +{% for submodule_path, commits in submodule_commits %} + ### {{ submodule_path | upper_first }} + {% for group, commits in commits | group_by(attribute="group") %} + #### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} + {% endfor %} +{% endfor %} +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] +recurse_submodules = true diff --git a/.github/fixtures/test-submodules-include-path/commit.sh b/.github/fixtures/test-submodules-include-path/commit.sh new file mode 100755 index 0000000000..05c2031f16 --- /dev/null +++ b/.github/fixtures/test-submodules-include-path/commit.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -e + +current_dir="$(pwd)" +submodule_one_dir="$(mktemp -d)" +submodule_two_dir="$(mktemp -d)" + +cd $submodule_one_dir && git init >&2 +GIT_COMMITTER_DATE="2022-04-05 01:00:8" git commit --allow-empty -m "feat: submodule_one initial commit" + +cd $submodule_two_dir && git init >&2 +GIT_COMMITTER_DATE="2022-04-05 01:00:12" git commit --allow-empty -m "feat: submodule_two feature B" + +cd $current_dir +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" + +git -c protocol.file.allow=always submodule add $submodule_one_dir submodule_one +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit -a -m "feat: add submodule_one" + +cd submodule_one +GIT_COMMITTER_DATE="2022-04-05 01:00:10" git commit --allow-empty -m "feat: submodule_one feature A" +GIT_COMMITTER_DATE="2022-04-05 01:00:11" git commit --allow-empty -m "fix: submodule_one fix A" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit -a -m "feat: submodule_one update 1" +git tag v0.1.0 + +git -c protocol.file.allow=always submodule add $submodule_two_dir submodule_two +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit -a -m "feat: submodule_two with initial commits" + +cd submodule_two +GIT_COMMITTER_DATE="2022-04-05 01:00:13" git commit --allow-empty -m "fix: submodule_two fix B" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit -a -m "feat: submodule_two update 1" +git tag v0.2.0 + +cd submodule_two +GIT_COMMITTER_DATE="2022-04-05 01:00:14" git commit --allow-empty -m "fix: submodule_two fix C" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit -a -m "feat: submodule_two update 2" diff --git a/.github/fixtures/test-submodules-include-path/expected.md b/.github/fixtures/test-submodules-include-path/expected.md new file mode 100644 index 0000000000..eded7787a7 --- /dev/null +++ b/.github/fixtures/test-submodules-include-path/expected.md @@ -0,0 +1,29 @@ +## [unreleased] + +### Features + +- Submodule_two update 2 + +### Submodule_two + +#### Bug Fixes + +- Submodule_two fix C + +## [0.2.0] - 2022-04-06 + +### Features + +- Submodule_two with initial commits +- Submodule_two update 1 + +### Submodule_two + +#### Bug Fixes + +- Submodule_two fix B + +#### Features + +- Submodule_two feature B + diff --git a/.github/fixtures/test-submodules-range/cliff.toml b/.github/fixtures/test-submodules-range/cliff.toml new file mode 100644 index 0000000000..345ebc510f --- /dev/null +++ b/.github/fixtures/test-submodules-range/cliff.toml @@ -0,0 +1,38 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\ +{% for submodule_path, commits in submodule_commits %} + ### {{ submodule_path | upper_first }} + {% for group, commits in commits | group_by(attribute="group") %} + #### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} + {% endfor %} +{% endfor %} +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] +recurse_submodules = true diff --git a/.github/fixtures/test-submodules-range/commit.sh b/.github/fixtures/test-submodules-range/commit.sh new file mode 100755 index 0000000000..05c2031f16 --- /dev/null +++ b/.github/fixtures/test-submodules-range/commit.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -e + +current_dir="$(pwd)" +submodule_one_dir="$(mktemp -d)" +submodule_two_dir="$(mktemp -d)" + +cd $submodule_one_dir && git init >&2 +GIT_COMMITTER_DATE="2022-04-05 01:00:8" git commit --allow-empty -m "feat: submodule_one initial commit" + +cd $submodule_two_dir && git init >&2 +GIT_COMMITTER_DATE="2022-04-05 01:00:12" git commit --allow-empty -m "feat: submodule_two feature B" + +cd $current_dir +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" + +git -c protocol.file.allow=always submodule add $submodule_one_dir submodule_one +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit -a -m "feat: add submodule_one" + +cd submodule_one +GIT_COMMITTER_DATE="2022-04-05 01:00:10" git commit --allow-empty -m "feat: submodule_one feature A" +GIT_COMMITTER_DATE="2022-04-05 01:00:11" git commit --allow-empty -m "fix: submodule_one fix A" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit -a -m "feat: submodule_one update 1" +git tag v0.1.0 + +git -c protocol.file.allow=always submodule add $submodule_two_dir submodule_two +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit -a -m "feat: submodule_two with initial commits" + +cd submodule_two +GIT_COMMITTER_DATE="2022-04-05 01:00:13" git commit --allow-empty -m "fix: submodule_two fix B" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit -a -m "feat: submodule_two update 1" +git tag v0.2.0 + +cd submodule_two +GIT_COMMITTER_DATE="2022-04-05 01:00:14" git commit --allow-empty -m "fix: submodule_two fix C" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit -a -m "feat: submodule_two update 2" diff --git a/.github/fixtures/test-submodules-range/expected.md b/.github/fixtures/test-submodules-range/expected.md new file mode 100644 index 0000000000..eded7787a7 --- /dev/null +++ b/.github/fixtures/test-submodules-range/expected.md @@ -0,0 +1,29 @@ +## [unreleased] + +### Features + +- Submodule_two update 2 + +### Submodule_two + +#### Bug Fixes + +- Submodule_two fix C + +## [0.2.0] - 2022-04-06 + +### Features + +- Submodule_two with initial commits +- Submodule_two update 1 + +### Submodule_two + +#### Bug Fixes + +- Submodule_two fix B + +#### Features + +- Submodule_two feature B + diff --git a/.github/fixtures/test-submodules/cliff.toml b/.github/fixtures/test-submodules/cliff.toml new file mode 100644 index 0000000000..3a2624970d --- /dev/null +++ b/.github/fixtures/test-submodules/cliff.toml @@ -0,0 +1,38 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\ +{% for submodule_path, commits in submodule_commits %} + ### {{ submodule_path | upper_first }} + {% for group, commits in commits | group_by(attribute="group") %} + #### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} + {% endfor %} +{% endfor %}\n +""" + +[git] +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's `scope` and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] +recurse_submodules = true diff --git a/.github/fixtures/test-submodules/commit.sh b/.github/fixtures/test-submodules/commit.sh new file mode 100755 index 0000000000..05c2031f16 --- /dev/null +++ b/.github/fixtures/test-submodules/commit.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -e + +current_dir="$(pwd)" +submodule_one_dir="$(mktemp -d)" +submodule_two_dir="$(mktemp -d)" + +cd $submodule_one_dir && git init >&2 +GIT_COMMITTER_DATE="2022-04-05 01:00:8" git commit --allow-empty -m "feat: submodule_one initial commit" + +cd $submodule_two_dir && git init >&2 +GIT_COMMITTER_DATE="2022-04-05 01:00:12" git commit --allow-empty -m "feat: submodule_two feature B" + +cd $current_dir +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" + +git -c protocol.file.allow=always submodule add $submodule_one_dir submodule_one +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit -a -m "feat: add submodule_one" + +cd submodule_one +GIT_COMMITTER_DATE="2022-04-05 01:00:10" git commit --allow-empty -m "feat: submodule_one feature A" +GIT_COMMITTER_DATE="2022-04-05 01:00:11" git commit --allow-empty -m "fix: submodule_one fix A" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit -a -m "feat: submodule_one update 1" +git tag v0.1.0 + +git -c protocol.file.allow=always submodule add $submodule_two_dir submodule_two +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit -a -m "feat: submodule_two with initial commits" + +cd submodule_two +GIT_COMMITTER_DATE="2022-04-05 01:00:13" git commit --allow-empty -m "fix: submodule_two fix B" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit -a -m "feat: submodule_two update 1" +git tag v0.2.0 + +cd submodule_two +GIT_COMMITTER_DATE="2022-04-05 01:00:14" git commit --allow-empty -m "fix: submodule_two fix C" +cd .. + +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit -a -m "feat: submodule_two update 2" diff --git a/.github/fixtures/test-submodules/expected.md b/.github/fixtures/test-submodules/expected.md new file mode 100644 index 0000000000..0665477153 --- /dev/null +++ b/.github/fixtures/test-submodules/expected.md @@ -0,0 +1,50 @@ +## [unreleased] + +### Features + +- Submodule_two update 2 + +### Submodule_two + +#### Bug Fixes + +- Submodule_two fix C + + +## [0.2.0] - 2022-04-06 + +### Features + +- Submodule_two with initial commits +- Submodule_two update 1 + +### Submodule_two + +#### Bug Fixes + +- Submodule_two fix B + +#### Features + +- Submodule_two feature B + + +## [0.1.0] - 2022-04-06 + +### Features + +- Add submodule_one +- Submodule_one update 1 + +### Submodule_one + +#### Bug Fixes + +- Submodule_one fix A + +#### Features + +- Submodule_one feature A +- Submodule_one initial commit + + diff --git a/.github/fixtures/test-tag-message/cliff.toml b/.github/fixtures/test-tag-message/cliff.toml new file mode 100644 index 0000000000..8594e079c0 --- /dev/null +++ b/.github/fixtures/test-tag-message/cliff.toml @@ -0,0 +1,26 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} + {% if message %} + {{ message }} + {% endif %}\ +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] diff --git a/.github/fixtures/test-tag-message/commit.sh b/.github/fixtures/test-tag-message/commit.sh new file mode 100755 index 0000000000..f2ec2b9ca0 --- /dev/null +++ b/.github/fixtures/test-tag-message/commit.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1" +git tag v0.1.0 -m "Some text" +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2" +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2" +git tag v0.2.0 +GIT_COMMITTER_DATE="2022-04-06 01:25:13" git commit --allow-empty -m "test: add tests" diff --git a/.github/fixtures/test-tag-message/expected.md b/.github/fixtures/test-tag-message/expected.md new file mode 100644 index 0000000000..90a1ef2983 --- /dev/null +++ b/.github/fixtures/test-tag-message/expected.md @@ -0,0 +1,28 @@ +## [unreleased] + +### Test + +- Add tests + +## [0.2.0] - 2022-04-06 + +### Bug Fixes + +- Fix feature 2 + +### Features + +- Add feature 2 + +## [0.1.0] - 2022-04-06 + +Some text + +### Bug Fixes + +- Fix feature 1 + +### Features + +- Add feature 1 + diff --git a/.github/fixtures/test-topo-order-arg/cliff.toml b/.github/fixtures/test-topo-order-arg/cliff.toml index 5504810e90..98a2a5ce75 100644 --- a/.github/fixtures/test-topo-order-arg/cliff.toml +++ b/.github/fixtures/test-topo-order-arg/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,9 +17,3 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true diff --git a/.github/fixtures/test-topo-order-arg/expected.md b/.github/fixtures/test-topo-order-arg/expected.md index a041e603d2..52de593c12 100644 --- a/.github/fixtures/test-topo-order-arg/expected.md +++ b/.github/fixtures/test-topo-order-arg/expected.md @@ -1,11 +1,6 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.2.0] - 2021-01-23 -### Feat +### 🚀 Features - Add feature 2 - diff --git a/.github/fixtures/test-topo-order-commits/cliff.toml b/.github/fixtures/test-topo-order-commits/cliff.toml new file mode 100644 index 0000000000..b8139b1430 --- /dev/null +++ b/.github/fixtures/test-topo-order-commits/cliff.toml @@ -0,0 +1,7 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + + +[git] + +topo_order_commits = false \ No newline at end of file diff --git a/.github/fixtures/test-topo-order-commits/commit.sh b/.github/fixtures/test-topo-order-commits/commit.sh new file mode 100755 index 0000000000..f4b6c67b43 --- /dev/null +++ b/.github/fixtures/test-topo-order-commits/commit.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 03:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 03:25:09" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 03:25:10" git commit --allow-empty -m "fix: fix feature 1" +git tag v0.1.0 +GIT_COMMITTER_DATE="2022-04-06 03:25:11" git commit --allow-empty -m "feat(gui): add feature 2" +GIT_COMMITTER_DATE="2022-04-06 03:25:12" git commit --allow-empty -m "fix(gui): fix feature 2" +git tag v0.2.0 +GIT_COMMITTER_DATE="2022-04-06 03:25:25" git commit --allow-empty -m "test: add tests" +GIT_COMMITTER_DATE="2022-04-06 03:25:25" git checkout v0.1.0 +GIT_COMMITTER_DATE="2022-04-06 03:25:13" git commit --allow-empty -m "fix: fix again feature 1" +git tag v0.1.1 +git checkout master +git merge v0.1.1 --no-edit diff --git a/.github/fixtures/test-topo-order-commits/expected.md b/.github/fixtures/test-topo-order-commits/expected.md new file mode 100644 index 0000000000..537931e8ae --- /dev/null +++ b/.github/fixtures/test-topo-order-commits/expected.md @@ -0,0 +1,28 @@ +## [unreleased] + +### 🧪 Testing + +- Add tests +## [0.1.1] - 2022-04-06 + +### 🐛 Bug Fixes + +- Fix again feature 1 +## [0.2.0] - 2022-04-06 + +### 🚀 Features + +- *(gui)* Add feature 2 + +### 🐛 Bug Fixes + +- *(gui)* Fix feature 2 +## [0.1.0] - 2022-04-06 + +### 🚀 Features + +- Add feature 1 + +### 🐛 Bug Fixes + +- Fix feature 1 diff --git a/.github/fixtures/test-topo-order/cliff.toml b/.github/fixtures/test-topo-order/cliff.toml index f4bbb0a47b..dc345f5a97 100644 --- a/.github/fixtures/test-topo-order/cliff.toml +++ b/.github/fixtures/test-topo-order/cliff.toml @@ -1,11 +1,9 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -19,12 +17,7 @@ body = """ {% endfor %} {% endfor %}\n """ -# template for the changelog footer -footer = """ - -""" -# remove the leading and trailing whitespace from the templates -trim = true [git] +# Order releases topologically instead of chronologically. topo_order = true diff --git a/.github/fixtures/test-topo-order/expected.md b/.github/fixtures/test-topo-order/expected.md index a041e603d2..52de593c12 100644 --- a/.github/fixtures/test-topo-order/expected.md +++ b/.github/fixtures/test-topo-order/expected.md @@ -1,11 +1,6 @@ -# Changelog - -All notable changes to this project will be documented in this file. - ## [0.2.0] - 2021-01-23 -### Feat +### 🚀 Features - Add feature 2 - diff --git a/.github/fixtures/test-unchanged-tag-date/cliff.toml b/.github/fixtures/test-unchanged-tag-date/cliff.toml new file mode 100644 index 0000000000..eaf1d74045 --- /dev/null +++ b/.github/fixtures/test-unchanged-tag-date/cliff.toml @@ -0,0 +1,23 @@ +[changelog] +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +[git] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "Features", default_scope = "app" }, + { message = "^fix", group = "Bug Fixes", scope = "cli" }, +] diff --git a/.github/fixtures/test-unchanged-tag-date/commit.sh b/.github/fixtures/test-unchanged-tag-date/commit.sh new file mode 100755 index 0000000000..9a42410d96 --- /dev/null +++ b/.github/fixtures/test-unchanged-tag-date/commit.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -e + +GIT_COMMITTER_DATE="2022-04-06 01:25:08" git commit --allow-empty -m "Initial commit" +GIT_COMMITTER_DATE="2022-04-06 01:25:09" git commit --allow-empty -m "feat: add feature 1" +GIT_COMMITTER_DATE="2022-04-06 01:25:10" git commit --allow-empty -m "fix: fix feature 1" +git tag v0.1.0 +GIT_COMMITTER_DATE="2022-04-06 01:25:11" git commit --allow-empty -m "feat(gui): add feature 2" +GIT_COMMITTER_DATE="2022-04-06 01:25:12" git commit --allow-empty -m "fix(gui): fix feature 2" +git tag v0.2.0 diff --git a/.github/fixtures/test-unchanged-tag-date/expected.md b/.github/fixtures/test-unchanged-tag-date/expected.md new file mode 100644 index 0000000000..e01a494b6c --- /dev/null +++ b/.github/fixtures/test-unchanged-tag-date/expected.md @@ -0,0 +1,20 @@ +## [0.2.0] - 2022-04-06 + +### Bug Fixes + +- Fix feature 2 + +### Features + +- Add feature 2 + +## [0.1.0] - 2022-04-06 + +### Bug Fixes + +- Fix feature 1 + +### Features + +- Add feature 1 + diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 00d5752106..00e699010a 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -13,17 +13,15 @@ jobs: release_body: ${{ steps.git-cliff.outputs.content }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 - name: Generate a changelog - uses: orhun/git-cliff-action@main + uses: orhun/git-cliff-action@104a6cf3c9aa0fdfe4eab129f9c1900e1eb8f7fd # main id: git-cliff with: config: cliff.toml args: -vv --latest --no-exec --github-repo ${{ github.repository }} - env: - OUTPUT: CHANGES.md publish-binaries: name: Publish binaries @@ -83,15 +81,15 @@ jobs: } - { NAME: win32-x64-mingw, - OS: windows-2022, + OS: windows-2025, TOOLCHAIN: stable, TARGET: x86_64-pc-windows-gnu, NPM_PUBLISH: false, - PYPI_PUBLISH: true, + PYPI_PUBLISH: false, } - { NAME: win32-x64-msvc, - OS: windows-2022, + OS: windows-2025, TOOLCHAIN: stable, TARGET: x86_64-pc-windows-msvc, NPM_PUBLISH: true, @@ -99,7 +97,7 @@ jobs: } - { NAME: win32-x86-msvc, - OS: windows-2022, + OS: windows-2025, TOOLCHAIN: stable, TARGET: i686-pc-windows-msvc, NPM_PUBLISH: false, @@ -107,7 +105,7 @@ jobs: } - { NAME: win32-arm64-msvc, - OS: windows-2022, + OS: windows-2025, TOOLCHAIN: stable, TARGET: aarch64-pc-windows-msvc, NPM_PUBLISH: true, @@ -115,7 +113,7 @@ jobs: } - { NAME: darwin-x64, - OS: macos-12, + OS: macos-15, TOOLCHAIN: stable, TARGET: x86_64-apple-darwin, NPM_PUBLISH: true, @@ -123,7 +121,7 @@ jobs: } - { NAME: darwin-arm64, - OS: macos-12, + OS: macos-15, TOOLCHAIN: stable, TARGET: aarch64-apple-darwin, NPM_PUBLISH: true, @@ -131,7 +129,7 @@ jobs: } steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set the release version shell: bash run: echo "RELEASE_VERSION=${GITHUB_REF:11}" >> $GITHUB_ENV @@ -144,21 +142,21 @@ jobs: --allow-unauthenticated musl-tools fi - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7 with: toolchain: ${{ matrix.build.TOOLCHAIN }} target: ${{ matrix.build.TARGET }} override: true - name: Build (linux/macos) - if: matrix.build.OS != 'windows-2022' - uses: actions-rs/cargo@v1 + if: matrix.build.OS != 'windows-2025' + uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3 with: use-cross: true command: build args: --release --locked --target ${{ matrix.build.TARGET }} - name: Build (windows) - if: matrix.build.OS == 'windows-2022' - uses: actions-rs/cargo@v1 + if: matrix.build.OS == 'windows-2025' + uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3 with: command: build args: --release --locked --target ${{ matrix.build.TARGET }} # --no-default-features @@ -170,7 +168,7 @@ jobs: OUT_DIR=release/completions/ cargo run --release --bin git-cliff-completions OUT_DIR=release/man/ cargo run --release --bin git-cliff-mangen for bin in 'git-cliff' 'git-cliff-completions' 'git-cliff-mangen'; do - if [ "${{ matrix.build.OS }}" = "windows-2022" ]; then + if [ "${{ matrix.build.OS }}" = "windows-2025" ]; then bin="${bin}.exe" fi cp "target/${{ matrix.build.TARGET }}/release/${bin}" release/ @@ -179,7 +177,7 @@ jobs: - name: Create release artifacts shell: bash run: | - if [ "${{ matrix.build.OS }}" = "windows-2022" ]; then + if [ "${{ matrix.build.OS }}" = "windows-2025" ]; then 7z a -tzip "git-cliff-${{ env.RELEASE_VERSION }}-${{ matrix.build.TARGET }}.zip" \ git-cliff-${{ env.RELEASE_VERSION }}/ else @@ -189,7 +187,7 @@ jobs: > git-cliff-${{ env.RELEASE_VERSION }}-${{ matrix.build.TARGET }}.tar.gz.sha512 fi - name: Sign the release - if: matrix.build.OS == 'ubuntu-22.04' || matrix.build.OS == 'macos-12' + if: matrix.build.OS == 'ubuntu-22.04' || matrix.build.OS == 'macos-15' run: | echo "${{ secrets.GPG_RELEASE_KEY }}" | base64 --decode > private.key echo "${{ secrets.GPG_PASSPHRASE }}" | gpg --pinentry-mode=loopback \ @@ -199,7 +197,7 @@ jobs: git-cliff-${{ env.RELEASE_VERSION }}-${{ matrix.build.TARGET }}.tar.gz - name: Publish to GitHub if: ${{ !contains(github.ref, '-') }} - uses: svenstaro/upload-release-action@v2 + uses: svenstaro/upload-release-action@81c65b7cd4de9b2570615ce3aad67a41de5b1a13 # v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: git-cliff-${{ env.RELEASE_VERSION }}-${{ matrix.build.TARGET }}* @@ -210,7 +208,7 @@ jobs: body: "${{ needs.generate-changelog.outputs.release_body }}" - name: Publish to GitHub (pre-release) if: ${{ contains(github.ref, '-') }} - uses: svenstaro/upload-release-action@v2 + uses: svenstaro/upload-release-action@81c65b7cd4de9b2570615ce3aad67a41de5b1a13 # v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: git-cliff-${{ env.RELEASE_VERSION }}-${{ matrix.build.TARGET }}* @@ -221,7 +219,7 @@ jobs: prerelease: true - name: Install node if: matrix.build.NPM_PUBLISH == true - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 18 registry-url: "https://registry.npmjs.org" @@ -236,14 +234,14 @@ jobs: node_arch=$(echo "${{ matrix.build.NAME }}" | cut -d '-' -f2) export node_arch export version="${{ env.RELEASE_VERSION }}" - if [ "${{ matrix.build.OS }}" = "windows-2022" ]; then + if [ "${{ matrix.build.OS }}" = "windows-2025" ]; then export node_pkg="${bin}-windows-${node_arch}" else export node_pkg="${bin}-${node_os}-${node_arch}" fi mkdir -p "${node_pkg}/bin" envsubst < package.json.tmpl > "${node_pkg}/package.json" - if [ "${{ matrix.build.OS }}" = "windows-2022" ]; then + if [ "${{ matrix.build.OS }}" = "windows-2025" ]; then bin="${bin}.exe" fi cp "../target/${{ matrix.build.TARGET }}/release/${bin}" "${node_pkg}/bin" @@ -254,7 +252,7 @@ jobs: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Build Python wheels (linux) if: matrix.build.PYPI_PUBLISH == true && startsWith(matrix.build.NAME, 'linux') - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 with: working-directory: pypi target: ${{ matrix.build.TARGET }} @@ -266,7 +264,7 @@ jobs: if: | matrix.build.PYPI_PUBLISH == true && (startsWith(matrix.build.OS, 'macos') || startsWith(matrix.build.OS, 'windows')) - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 with: working-directory: pypi target: ${{ matrix.build.TARGET }} @@ -274,7 +272,7 @@ jobs: sccache: "true" - name: Build Python wheels (musl) if: matrix.build.PYPI_PUBLISH == true && endsWith(matrix.build.OS, 'musl') - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 with: working-directory: pypi target: ${{ matrix.build.TARGET }} @@ -282,7 +280,7 @@ jobs: sccache: "true" manylinux: musllinux_1_2 - name: Upload Python wheels - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: "wheels-${{ matrix.build.TARGET }}" working-directory: pypi @@ -294,9 +292,9 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 18 registry-url: "https://registry.npmjs.org" @@ -324,13 +322,13 @@ jobs: runs-on: ubuntu-22.04 needs: publish-binaries steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: path: pypi/wheels pattern: wheels-* merge-multiple: true - name: Publish to PyPI - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 env: MATURIN_PYPI_TOKEN: ${{ vars.USE_TESTPYPI == 'true' && secrets.TESTPYPI_API_TOKEN || secrets.PYPI_API_TOKEN }} MATURIN_REPOSITORY: ${{ vars.USE_TESTPYPI == 'true' && 'testpypi' || 'pypi' }} @@ -344,12 +342,12 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set the release version shell: bash run: echo "RELEASE_VERSION=${GITHUB_REF:11}" >> $GITHUB_ENV - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@4305c38b25d97ef35a8ad1f985ccf2d2242004f2 # stable with: targets: x86_64-unknown-linux-gnu - name: Install cargo-deb @@ -374,7 +372,7 @@ jobs: git-cliff-${{ env.RELEASE_VERSION }}.deb - name: Upload the release if: ${{ !contains(github.ref, '-') }} - uses: svenstaro/upload-release-action@v2 + uses: svenstaro/upload-release-action@81c65b7cd4de9b2570615ce3aad67a41de5b1a13 # v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: git-cliff-${{ env.RELEASE_VERSION }}.deb @@ -383,7 +381,7 @@ jobs: body: "${{ needs.generate-changelog.outputs.release_body }}" - name: Upload the pre-release if: ${{ contains(github.ref, '-') }} - uses: svenstaro/upload-release-action@v2 + uses: svenstaro/upload-release-action@81c65b7cd4de9b2570615ce3aad67a41de5b1a13 # v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: git-cliff-${{ env.RELEASE_VERSION }}.deb @@ -397,12 +395,12 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set the release version shell: bash run: echo "RELEASE_VERSION=${GITHUB_REF:11}" >> $GITHUB_ENV - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@4305c38b25d97ef35a8ad1f985ccf2d2242004f2 # stable with: targets: x86_64-unknown-linux-gnu - name: Install cargo-generate-rpm @@ -425,7 +423,7 @@ jobs: git-cliff-${{ env.RELEASE_VERSION }}.x86_64.rpm - name: Upload the release if: ${{ !contains(github.ref, '-') }} - uses: svenstaro/upload-release-action@v2 + uses: svenstaro/upload-release-action@81c65b7cd4de9b2570615ce3aad67a41de5b1a13 # v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: git-cliff-${{ env.RELEASE_VERSION }}.x86_64.rpm @@ -434,7 +432,7 @@ jobs: body: "${{ needs.generate-changelog.outputs.release_body }}" - name: Upload the pre-release if: ${{ contains(github.ref, '-') }} - uses: svenstaro/upload-release-action@v2 + uses: svenstaro/upload-release-action@81c65b7cd4de9b2570615ce3aad67a41de5b1a13 # v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: git-cliff-${{ env.RELEASE_VERSION }}.x86_64.rpm @@ -447,11 +445,11 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set the release version run: echo "RELEASE_VERSION=${GITHUB_REF:11}" >> $GITHUB_ENV - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@4305c38b25d97ef35a8ad1f985ccf2d2242004f2 # stable with: targets: x86_64-unknown-linux-gnu - name: Prepare for the crates.io release @@ -484,7 +482,7 @@ jobs: contents: read steps: - name: Bump formula - uses: mislav/bump-homebrew-formula-action@v3 + uses: mislav/bump-homebrew-formula-action@8e2baa47daaa8db10fcdeb04105dfa6850eb0d68 # v3.4 with: formula-name: git-cliff formula-path: Formula/g/git-cliff.rb diff --git a/.github/workflows/check-semver.yml b/.github/workflows/check-semver.yml index acaf111299..c894d4b587 100644 --- a/.github/workflows/check-semver.yml +++ b/.github/workflows/check-semver.yml @@ -15,11 +15,11 @@ jobs: error_message: ${{ steps.check_semver.outputs.error_message }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run cargo-semver-checks id: check_semver - uses: orhun/cargo-semver-checks-action@feat/add_action_output + uses: orhun/cargo-semver-checks-action@cc19b888f2062f8cc964c1d52f7f29d910becb31 # feat/add_action_output comment-on-pr: name: Comment on pull request @@ -31,7 +31,7 @@ jobs: steps: - name: Comment if: ${{ needs.check-semver.outputs.error_message != null }} - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@d2ad0de260ae8b0235ce059e63f2949ba9e05943 # v2.9.3 with: header: pr-semver-check-error message: | @@ -47,7 +47,7 @@ jobs: - name: Delete comment if: ${{ needs.check-semver.outputs.error_message == null }} - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@d2ad0de260ae8b0235ce059e63f2949ba9e05943 # v2.9.3 with: header: pr-semver-check-error delete: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4d3dfd2351..17af39f9f2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,16 +19,16 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Install toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@4305c38b25d97ef35a8ad1f985ccf2d2242004f2 # stable - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Check - uses: actions-rs/cargo@v1 + uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3 with: command: check args: --locked --verbose - name: Check without default features - uses: actions-rs/cargo@v1 + uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3 with: command: check args: --locked --no-default-features --verbose @@ -38,29 +38,29 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Check typos - uses: crate-ci/typos@master + uses: crate-ci/typos@d7e6241ebf2f59df88a9e53567d2fdc5141c2fd1 # master test: name: Test suite runs-on: ubuntu-22.04 steps: - name: Install toolchain - uses: dtolnay/rust-toolchain@nightly + uses: dtolnay/rust-toolchain@b95584d8105b9ab200e15821fa671848cf2b7017 # nightly - name: Checkout if: github.event_name != 'pull_request' - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 - name: Checkout if: github.event_name == 'pull_request' - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 - name: Setup cargo-tarpaulin - uses: taiki-e/install-action@cargo-tarpaulin + uses: taiki-e/install-action@db542c1ee140717096741d8188a70ff7cb9efb87 # cargo-tarpaulin - name: Run tests run: | cargo test --no-default-features \ @@ -70,7 +70,7 @@ jobs: cargo tarpaulin --out xml --verbose --all-features \ -- --skip "repo::test::git_upstream_remote" - name: Upload reports to codecov - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 with: name: code-coverage-report file: cobertura.xml @@ -84,41 +84,60 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Install toolchain - uses: dtolnay/rust-toolchain@nightly + uses: dtolnay/rust-toolchain@b95584d8105b9ab200e15821fa671848cf2b7017 # nightly with: components: clippy - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Check the lints - uses: actions-rs/cargo@v1 + uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3 with: command: clippy args: --tests --verbose -- -D warnings + - name: Check the pedantic lints + uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3 + with: + command: clippy + args: --all-targets --verbose -- -W clippy::pedantic rustfmt: name: Formatting runs-on: ubuntu-22.04 steps: - name: Install toolchain - uses: dtolnay/rust-toolchain@nightly + uses: dtolnay/rust-toolchain@b95584d8105b9ab200e15821fa671848cf2b7017 # nightly + with: + toolchain: nightly + components: rustfmt + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Check the formatting + run: cargo +nightly fmt --all -- --check --verbose + + doctest: + name: Doctests + runs-on: ubuntu-22.04 + steps: + - name: Install toolchain + uses: dtolnay/rust-toolchain@b95584d8105b9ab200e15821fa671848cf2b7017 # nightly with: components: rustfmt - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Check the formatting - uses: actions-rs/cargo@v1 + uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3 with: - command: fmt - args: --all -- --check --verbose + command: test + args: --doc lychee: name: Links runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Check the links - uses: lycheeverse/lychee-action@v1 + uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332 # v2.4.1 with: args: -v --max-concurrency 1 *.md website/docs/* website/blog/* fail: true @@ -129,9 +148,9 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install cargo-binstall - uses: taiki-e/install-action@cargo-binstall + uses: taiki-e/install-action@f45419ef14ff13c4459e1c4310c1ff046eff6b30 # cargo-binstall - name: Install cargo-msrv run: cargo binstall -y cargo-msrv - name: Run cargo-msrv @@ -147,9 +166,9 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 18 registry-url: "https://registry.npmjs.org" @@ -183,3 +202,42 @@ jobs: exit 1 fi done + + profiler: + name: Run profiler + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 + - name: Install toolchain + uses: dtolnay/rust-toolchain@4305c38b25d97ef35a8ad1f985ccf2d2242004f2 # stable + - name: Run profiler + run: cargo run --profile bench --features profiler -- --no-exec + - name: Upload report + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: git-cliff.${{ github.run_id }}-profiler-report + path: git-cliff.**.flamegraph.svg + + nix-flake: + name: Build Nix flake + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Install Nix + uses: nixbuild/nix-quick-install-action@63ca48f939ee3b8d835f4126562537df0fee5b91 # v32 + + - name: Restore and cache Nix store + uses: nix-community/cache-nix-action@135667ec418502fa5a3598af6fb9eb733888ce6a # v6.1.3 + with: + primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix') }} + restore-prefixes-first-match: nix-${{ runner.os }}- + gc-max-store-size-linux: 1073741824 + purge: false + + - name: Check Nix flake + run: nix flake check --all-systems -Lv --show-trace diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000000..c2efbbf9ec --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,73 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: ["main"] + pull_request: + # The branches below must be a subset of the branches above + branches: ["main"] + schedule: + - cron: "0 0 * * 1" + +permissions: + contents: read + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: ["javascript", "typescript"] + # CodeQL supports [ $supported-codeql-languages ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 0000000000..b85021ab00 --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,22 @@ +# Dependency Review Action +# +# This Action will scan dependency manifest files that change as part of a Pull Request, +# surfacing known-vulnerable versions of the packages declared or updated in the PR. +# Once installed, if the workflow run is marked as required, +# PRs introducing known-vulnerable packages will be blocked from merging. +# +# Source repository: https://github.com/actions/dependency-review-action +name: 'Dependency Review' +on: [pull_request] + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: 'Checkout Repository' + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: 'Dependency Review' + uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9 # v4.7.1 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index fbbd628b76..e6b7f9ea4d 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -18,11 +18,11 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0 with: images: | orhunp/git-cliff @@ -36,16 +36,16 @@ jobs: type=semver,pattern={{version}} - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 with: platforms: arm64 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 - name: Cache Docker layers - uses: actions/cache@v4 + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 with: path: /tmp/.buildx-cache key: ${{ runner.os }}-buildx-${{ github.sha }} @@ -54,14 +54,14 @@ jobs: - name: Login to Docker Hub if: github.event_name != 'pull_request' - uses: docker/login-action@v3 + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Login to GHCR if: github.event_name != 'pull_request' - uses: docker/login-action@v3 + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -69,7 +69,7 @@ jobs: - name: Build and push id: docker_build - uses: docker/build-push-action@v5 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 with: context: ./ file: ./Dockerfile @@ -84,7 +84,7 @@ jobs: cache-to: type=local,dest=/tmp/.buildx-cache - name: Scan the image - uses: anchore/sbom-action@v0 + uses: anchore/sbom-action@cee1b8e05ae5b2593a75e197229729eabaa9f8ec # v0.20.2 with: image: ghcr.io/${{ github.repository_owner }}/git-cliff/git-cliff diff --git a/.github/workflows/test-fixtures.yml b/.github/workflows/test-fixtures.yml index 2e35cf7010..4875df716a 100644 --- a/.github/workflows/test-fixtures.yml +++ b/.github/workflows/test-fixtures.yml @@ -18,7 +18,19 @@ jobs: include: - fixtures-name: new-fixture-template - fixtures-name: test-github-integration + - fixtures-name: test-github-integration-custom-range + command: v1.0.0..v1.0.1 + - fixtures-name: test-gitlab-integration + - fixtures-name: test-gitlab-integration-custom-range + command: 9f66ac0f76..89de5e8e50 + - fixtures-name: test-gitea-integration + - fixtures-name: test-gitea-integration-custom-range + command: 5ed596d935..c074c439b5 + - fixtures-name: test-bitbucket-integration + - fixtures-name: test-bitbucket-integration-custom-range + command: v1.0.0..v1.0.1 - fixtures-name: test-ignore-tags + - fixtures-name: test-invert-ignore-tags - fixtures-name: test-topo-order command: --latest - fixtures-name: test-date-order @@ -29,12 +41,21 @@ jobs: command: --latest - fixtures-name: test-commit-footers - fixtures-name: test-commit-preprocessors + - fixtures-name: test-conventional-commit - fixtures-name: test-custom-scope - fixtures-name: test-limit-commits - fixtures-name: test-skip-breaking-changes - fixtures-name: test-split-commits - fixtures-name: test-bump-version command: --bump + - fixtures-name: test-bump-version-major + command: --bump major + - fixtures-name: test-bump-version-minor + command: --bump minor + - fixtures-name: test-bump-version-patch + command: --bump patch + - fixtures-name: test-bump-version-custom-minor + command: --bump - fixtures-name: test-bumped-version command: --bumped-version - fixtures-name: test-footer-template @@ -68,12 +89,58 @@ jobs: - fixtures-name: test-custom-tag-pattern command: --tag-pattern "alpha.*" - fixtures-name: test-configure-from-cargo-toml + - fixtures-name: test-bump-initial-tag + command: --bump + - fixtures-name: test-bump-initial-tag-default + command: --bump + - fixtures-name: test-bump-initial-tag-cli-arg + command: --bump --tag=2.1.1 + - fixtures-name: test-cli-arg-ignore-tags + command: --ignore-tags ".*beta" + - fixtures-name: test-tag-message + - fixtures-name: test-bump-unreleased-with-tag-message-arg + command: --bump --unreleased --with-tag-message "Some text" + - fixtures-name: test-from-context + command: --from-context context.json + - fixtures-name: test-from-context-does-not-discard-fields + command: --from-context context.json + - fixtures-name: test-always-render-unreleased + command: --unreleased + - fixtures-name: test-always-render + command: --unreleased --tag v0.2.0 + - fixtures-name: test-unchanged-tag-date + command: --tag v0.2.0 + - fixtures-name: test-custom-remote-api-url + command: v1.4.0..v1.4.1 + - fixtures-name: test-monorepo-include-path + command: v2.6.1..v2.7.0 --include-path .github/fixtures/ + - fixtures-name: test-require-conventional-negative + - fixtures-name: test-require-conventional-skipped + - fixtures-name: test-submodules + - fixtures-name: test-submodules-range + command: v0.1.0..HEAD + - fixtures-name: test-submodules-include-path + command: --include-path submodule_two + - fixtures-name: test-submodules-include-path-config + - fixtures-name: test-remote-config + command: --config-url "https://github.com/orhun/git-cliff/blob/main/.github/fixtures/new-fixture-template/cliff.toml?raw=true" + - fixtures-name: test-topo-order-commits + - fixtures-name: test-commit-range + - fixtures-name: test-commit-range-with-sort-commits + - fixtures-name: test-commit-range-with-given-range + command: a140cef^..a9d4050 --ignore-tags "." + - fixtures-name: test-override-scope + - fixtures-name: test-regex-json-array + - fixtures-name: test-release-statistics + previous-release-timestamp: "2022-04-06 01:25:12" + steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run a fixtures test uses: ./.github/actions/run-fixtures-test with: fixtures-dir: .github/fixtures/${{ matrix.fixtures-name }} command: ${{ matrix.command }} + previous-release-timestamp: ${{ matrix.previous-release-timestamp }} diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml index bead6ccf6d..e49a9ef629 100644 --- a/.github/workflows/website.yml +++ b/.github/workflows/website.yml @@ -30,11 +30,11 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: - node-version: 18 + node-version: 20 cache: yarn cache-dependency-path: ./website/package-lock.json - name: Install dependencies @@ -53,11 +53,11 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: - node-version: 18 + node-version: 20 cache: yarn cache-dependency-path: ./website/package-lock.json - name: Install dependencies @@ -67,11 +67,11 @@ jobs: working-directory: ./website run: yarn build - name: Setup Pages - uses: actions/configure-pages@v5 + uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0 - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1 with: path: website/build - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 diff --git a/.gitignore b/.gitignore index 8a219191a1..9413d8de49 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,12 @@ # Backup files generated by rustfmt **/*.rs.bk + +*.flamegraph.svg + +# direnv +/.direnv/ + +# Potential Nix stuff +/result +/result-* diff --git a/.lycheeignore b/.lycheeignore index 42a11b6394..43b08ba68f 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -6,3 +6,4 @@ https://github.com/cocogitto/cocogitto pypi.org https://console.substack.com git-cliff/commit/ +patreon diff --git a/.well-known/funding-manifest-urls b/.well-known/funding-manifest-urls new file mode 100644 index 0000000000..5b1ad48e68 --- /dev/null +++ b/.well-known/funding-manifest-urls @@ -0,0 +1 @@ +https://orhun.dev/funding.json diff --git a/CHANGELOG.md b/CHANGELOG.md index c6b1535120..22472ef9ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,496 @@ [![animation](https://raw.githubusercontent.com/orhun/git-cliff/main/website/static/img/git-cliff-anim.gif)](https://git-cliff.org) +## [2.10.0](https://github.com/orhun/git-cliff/compare/v2.9.1..v2.10.0) - 2025-07-27 + +### ⛰️ Features + +- *(config)* Support using include and exclude paths in the config ([#1173](https://github.com/orhun/git-cliff/issues/1173)) - ([7c2f922](https://github.com/orhun/git-cliff/commit/7c2f9225f363d5727dcb557b9c708f0023598777)) +- *(parser)* Support regex matching on JSON arrays with scalar elements ([#1163](https://github.com/orhun/git-cliff/issues/1163)) - ([dc458ea](https://github.com/orhun/git-cliff/commit/dc458eab65b711841ba996209404534a254b1775)) +- *(template)* Support adding commit statistics to the changelog ([#1151](https://github.com/orhun/git-cliff/issues/1151)) - ([05a50d7](https://github.com/orhun/git-cliff/commit/05a50d7d9aef7f80dede9a29eac079c4837d08f9)) + +### 🐛 Bug Fixes + +- *(config)* [**breaking**] Use empty header and footer as default ([#1161](https://github.com/orhun/git-cliff/issues/1161)) ([#1172](https://github.com/orhun/git-cliff/issues/1172)) - ([3e9311e](https://github.com/orhun/git-cliff/commit/3e9311ea8ad23da7c09f0771686bd36b24e92265)) +- *(config)* Check if commit.footers is defined in detailed example ([#1170](https://github.com/orhun/git-cliff/issues/1170)) - ([078545f](https://github.com/orhun/git-cliff/commit/078545f55facbd0a82717b723e98589155bedd7e)) +- *(fixtures)* Update expected.md after config change ([#1176](https://github.com/orhun/git-cliff/issues/1176)) - ([76d3e81](https://github.com/orhun/git-cliff/commit/76d3e819b126837d7d8541c18c083cdd9f80ec62)) +- *(generation)* Ensure skip_tags condition is evaluated first ([#1190](https://github.com/orhun/git-cliff/issues/1190)) - ([318be66](https://github.com/orhun/git-cliff/commit/318be6637609c289cf58270222f1fcd29bf893ec)) +- *(repo)* Use the correct order while diffing paths ([#1188](https://github.com/orhun/git-cliff/issues/1188)) - ([ff6c310](https://github.com/orhun/git-cliff/commit/ff6c3105012b5827145ba4bf2bb660cce0b9c7bf)) + +### 🚜 Refactor + +- *(ci)* Apply security best practices ([#1180](https://github.com/orhun/git-cliff/issues/1180)) - ([a32deca](https://github.com/orhun/git-cliff/commit/a32deca80823cf99fd968647217f72fa58c8ccc2)) +- *(config)* Implement FromStr instead of Config::parse_from_str() ([#1185](https://github.com/orhun/git-cliff/issues/1185)) - ([692345e](https://github.com/orhun/git-cliff/commit/692345e4454127e31c44fe46aaccc065ac0854cc)) +- *(test)* Standardize unit tests for commit module ([#1147](https://github.com/orhun/git-cliff/issues/1147)) - ([0446d6a](https://github.com/orhun/git-cliff/commit/0446d6a95fbba03ca17c14b2cc2da48aa06abe6f)) + +### 📚 Documentation + +- *(context)* Add example usage for statistics ([#1162](https://github.com/orhun/git-cliff/issues/1162)) - ([4f7379a](https://github.com/orhun/git-cliff/commit/4f7379a73160d23dcdcca24b63758958e5ca974f)) +- *(quickstart)* Remove repetitive words ([#1200](https://github.com/orhun/git-cliff/issues/1200)) - ([434f9ee](https://github.com/orhun/git-cliff/commit/434f9ee50709ccb07d0b72fe717c6e2309de3320)) +- *(readme)* Fix twitter badge ([#1164](https://github.com/orhun/git-cliff/issues/1164)) - ([68bd85e](https://github.com/orhun/git-cliff/commit/68bd85ed8cd0277bdde19a252091e29ccd9fd8d7)) +- *(readme)* Polish badges ([#1159](https://github.com/orhun/git-cliff/issues/1159)) - ([941cc2b](https://github.com/orhun/git-cliff/commit/941cc2b76084d4e4ab177cbe548bdc5e687f9ae1)) +- *(remote)* Fix inconsistency in remote integration documentation ([#1165](https://github.com/orhun/git-cliff/issues/1165)) - ([deb29dc](https://github.com/orhun/git-cliff/commit/deb29dc3fc04b0aefb140bfed0fbbd795a8a2452)) +- *(website)* Add highlights for 2.10.0 ([#1225](https://github.com/orhun/git-cliff/issues/1225)) - ([a3fe8c9](https://github.com/orhun/git-cliff/commit/a3fe8c95fec8dad9f048626f4b2b1aec9b895cf4)) +- *(website)* Add installation instructions for gentoo-linux ([#1203](https://github.com/orhun/git-cliff/issues/1203)) - ([07fe6bf](https://github.com/orhun/git-cliff/commit/07fe6bfb7624688c99879e761e124ae092afb737)) + +### 🎨 Styling + +- *(formatting)* Use spaces instead of tabs ([#1184](https://github.com/orhun/git-cliff/issues/1184)) - ([0027300](https://github.com/orhun/git-cliff/commit/00273009e7553229bccc02e9f4a00d6f8acb9cd5)) + +### 🧪 Testing + +- *(fixture)* Add test fixture for overriding the conventional scope ([#1166](https://github.com/orhun/git-cliff/issues/1166)) - ([cb84a08](https://github.com/orhun/git-cliff/commit/cb84a08e60ca4c0f6108c95b4f2a62d47069014b)) + +### ⚙️ Miscellaneous Tasks + +- *(build)* Bump MSRV to 1.85.1 - ([d8279d4](https://github.com/orhun/git-cliff/commit/d8279d4d047ebf9e7c00948bbba266ccc75d262a)) +- *(cd)* Use macos-15 runner - ([c156fc5](https://github.com/orhun/git-cliff/commit/c156fc5edb405737b62a802ed9b1e91f9789ef9b)) +- *(cd)* Re-enable sccache for maturin - ([871c3c9](https://github.com/orhun/git-cliff/commit/871c3c949d9f0cb23600a0f4d16e360d20d32ad7)) +- *(crate)* Remove Rust nightly requirement - ([4f3e5af](https://github.com/orhun/git-cliff/commit/4f3e5af46bb51e412dff88001b3d135d8575bbe8)) +- *(fixture)* Update test-regex-json-array fixture ([#1178](https://github.com/orhun/git-cliff/issues/1178)) - ([95f4056](https://github.com/orhun/git-cliff/commit/95f40563a3a9607143e0acc03e81bdeef479bf09)) +- *(format)* Format module imports for readability ([#1183](https://github.com/orhun/git-cliff/issues/1183)) - ([6db7d49](https://github.com/orhun/git-cliff/commit/6db7d49488a248a2fab010480cb955621d4bcf5a)) +- *(git)* Add .git-blame-ignore-revs - ([5b64131](https://github.com/orhun/git-cliff/commit/5b641319336485bbf1294c5da2e9f95378799864)) +- *(npm)* Bump git-cliff to 2.9.1 ([#1156](https://github.com/orhun/git-cliff/issues/1156)) - ([e13b158](https://github.com/orhun/git-cliff/commit/e13b158744bddb17154963f777cb58b4ba424205)) +- *(website)* Update the node version - ([566c2a1](https://github.com/orhun/git-cliff/commit/566c2a11ebda002eae566b06d19263bdfa03af30)) + +## New Contributors ❤️ + +* @Nick2bad4u made their first contribution in [#1180](https://github.com/orhun/git-cliff/pull/1180) +* @aspann made their first contribution in [#1203](https://github.com/orhun/git-cliff/pull/1203) +* @muzimuzhi made their first contribution in [#1200](https://github.com/orhun/git-cliff/pull/1200) +* @j-g00da made their first contribution in [#1188](https://github.com/orhun/git-cliff/pull/1188) +* @Kriskras99 made their first contribution in [#1173](https://github.com/orhun/git-cliff/pull/1173) +* @wetneb made their first contribution in [#1165](https://github.com/orhun/git-cliff/pull/1165) +* @gmeligio made their first contribution in [#1170](https://github.com/orhun/git-cliff/pull/1170) +* @LitoMore made their first contribution in [#1164](https://github.com/orhun/git-cliff/pull/1164) + +## [2.9.1](https://github.com/orhun/git-cliff/compare/v2.9.0..v2.9.1) - 2025-06-03 + +### 🐛 Bug Fixes + +- *(cd)* Upgrade bump-homebrew-formula-action to fix import error - ([2da982f](https://github.com/orhun/git-cliff/commit/2da982f3e7c27ea86eb87625d7371a9bea6587db)) +- *(cd)* Disable sccache for maturin - ([f0a2dc6](https://github.com/orhun/git-cliff/commit/f0a2dc6b08f97f3d96e1a33d60a8a56c97c2339b)) + + +## [2.9.0](https://github.com/orhun/git-cliff/compare/v2.8.0..v2.9.0) - 2025-06-02 + +### ⛰️ Features + +- *(changelog)* Support recursing into submodules ([#1082](https://github.com/orhun/git-cliff/issues/1082)) - ([4a3c0c0](https://github.com/orhun/git-cliff/commit/4a3c0c0312491a8767645ed4d41b2016049dbe4b)) +- *(config)* Support configuring with a remote URL ([#1083](https://github.com/orhun/git-cliff/issues/1083)) - ([eb9b6bd](https://github.com/orhun/git-cliff/commit/eb9b6bdff712f63bac74b76e3dfbdc8ef1b3ccc8)) +- *(config)* Add `require_conventional` option ([#1061](https://github.com/orhun/git-cliff/issues/1061)) - ([bf50336](https://github.com/orhun/git-cliff/commit/bf50336f5997c28fc95c03eb14b9e70d5d3edddf)) +- *(context)* Add release commit range ([#1138](https://github.com/orhun/git-cliff/issues/1138)) - ([3dab0d1](https://github.com/orhun/git-cliff/commit/3dab0d1a5dec3a54c390c1ebdee7ef5131afd162)) +- *(git)* Support disabling sorting commits topologically ([#804](https://github.com/orhun/git-cliff/issues/804)) ([#1121](https://github.com/orhun/git-cliff/issues/1121)) - ([c3e25c3](https://github.com/orhun/git-cliff/commit/c3e25c31ee66b86b0e631e023bb4b687f606c599)) +- *(remote)* Fetch commits from non-default branches using remotes ([#1086](https://github.com/orhun/git-cliff/issues/1086)) - ([aec41be](https://github.com/orhun/git-cliff/commit/aec41befc701e786c01ec4ba5399c67df1981779)) + +### 🐛 Bug Fixes + +- *(bump)* Check the next version against tag_pattern regex ([#1070](https://github.com/orhun/git-cliff/issues/1070)) - ([c4f0d28](https://github.com/orhun/git-cliff/commit/c4f0d28c39f34bc886c00c51cdeff851beda93de)) +- *(bump)* Accept lowercase values for bump_type config ([#1101](https://github.com/orhun/git-cliff/issues/1101)) - ([77632b2](https://github.com/orhun/git-cliff/commit/77632b276001a879ed4e3328a38a1cedfef67ca3)) +- *(deps)* Make glob dependency mandatory ([#1035](https://github.com/orhun/git-cliff/issues/1035)) - ([0f653bf](https://github.com/orhun/git-cliff/commit/0f653bf13a52543c5ef492c2d4e81ad085b19321)) +- *(fixtures)* Evaluate the rc of git-cliff correctly ([#1104](https://github.com/orhun/git-cliff/issues/1104)) - ([fa54a6a](https://github.com/orhun/git-cliff/commit/fa54a6adbcb8704ee828450f110516ccbb4067de)) +- *(fixtures)* Use the correct syntax while checking fixture results ([#1099](https://github.com/orhun/git-cliff/issues/1099)) - ([51af66e](https://github.com/orhun/git-cliff/commit/51af66e30668c3ec8e1336d7a26a7a5d35fcdb76)) +- *(git)* Handle worktrees while retrieving the path of repository ([#1054](https://github.com/orhun/git-cliff/issues/1054)) - ([fab02b0](https://github.com/orhun/git-cliff/commit/fab02b09833eb18be6ca540a436b254d13d7c678)) +- *(remote)* Fix detection of GitLab merge request sha if commits were squashed ([#1043](https://github.com/orhun/git-cliff/issues/1043)) - ([5f3a3d0](https://github.com/orhun/git-cliff/commit/5f3a3d0b4dbae5ec3239c79148258ba4fb47f376)) +- *(submodules)* Fix submodules handling when using custom range ([#1136](https://github.com/orhun/git-cliff/issues/1136)) - ([451a694](https://github.com/orhun/git-cliff/commit/451a694ad4d9db1f0545ef92bd0c6643b3d26600)) +- *(template)* Correctly serialize JSON for the commit fields ([#1145](https://github.com/orhun/git-cliff/issues/1145)) - ([e981e1d](https://github.com/orhun/git-cliff/commit/e981e1d1b27a65fc2d2fd51b025c27692a6c8910)) + +### 🚜 Refactor + +- *(config)* Initialize config structs with default values ([#1090](https://github.com/orhun/git-cliff/issues/1090)) - ([9e4bd07](https://github.com/orhun/git-cliff/commit/9e4bd077b5a18922021afd8ffd671b7d7958ee5c)) +- *(lint)* Apply clippy suggestions - ([4d3b2d5](https://github.com/orhun/git-cliff/commit/4d3b2d5abefeb3bccf8b8d9faf16d4efd572f3c4)) +- *(lint)* Use IOError::other ([#1074](https://github.com/orhun/git-cliff/issues/1074)) - ([30e8193](https://github.com/orhun/git-cliff/commit/30e81930860105f081205ba5c90d1ea5e4b81d48)) + +### 📚 Documentation + +- *(config)* Fix typo on commit.links ([#1132](https://github.com/orhun/git-cliff/issues/1132)) - ([cbeca6d](https://github.com/orhun/git-cliff/commit/cbeca6da93b25a0f2fce38de6e87571268d8d17e)) +- *(config)* Update comments for all configuration options ([#1057](https://github.com/orhun/git-cliff/issues/1057)) - ([63129ce](https://github.com/orhun/git-cliff/commit/63129ce0c481c00c06bc9ee6271da76e99a6e933)) +- *(quickstart)* Clarify git-cliff command ([#1051](https://github.com/orhun/git-cliff/issues/1051)) - ([cd26bb2](https://github.com/orhun/git-cliff/commit/cd26bb2de35ebd6ba293ee969c3796ac32a08e21)) +- *(readme)* Add blog posts from the community ([#1102](https://github.com/orhun/git-cliff/issues/1102)) - ([f302e43](https://github.com/orhun/git-cliff/commit/f302e433d52bed284e97bd75e92589773b52f44f)) +- *(release)* Fix Docker Hub URL - ([9babe06](https://github.com/orhun/git-cliff/commit/9babe0649c365f6c499ec6db62450625d8a21987)) +- *(security)* Extend security policy ([#1142](https://github.com/orhun/git-cliff/issues/1142)) - ([4c3c946](https://github.com/orhun/git-cliff/commit/4c3c94692d88ee3d9d2931cabeeec67946aba381)) +- *(website)* Add highlights for 2.9.0 ([#1153](https://github.com/orhun/git-cliff/issues/1153)) - ([d7f9cf5](https://github.com/orhun/git-cliff/commit/d7f9cf5a02980289efdbf1999011cb69034dd4c7)) +- *(website)* Remove references of tj-actions ([#1097](https://github.com/orhun/git-cliff/issues/1097)) - ([729aa47](https://github.com/orhun/git-cliff/commit/729aa47797bfc073850eb24745e692244f4a6381)) + +### ⚙️ Miscellaneous Tasks + +- *(dependabot)* Make dependency updates less noisy - ([cdce20f](https://github.com/orhun/git-cliff/commit/cdce20f39104b797c17a85aa5988c608f3437e11)) +- *(dependabot)* Check dependency updates weekly - ([b8be055](https://github.com/orhun/git-cliff/commit/b8be05542f0f8362522794c155bf0e0445bcee22)) +- *(docs)* Fix some typos ([#1149](https://github.com/orhun/git-cliff/issues/1149)) - ([7148b2d](https://github.com/orhun/git-cliff/commit/7148b2dbff518eb71c276f3c256db49970730863)) +- *(project)* Migrate to Rust 2024 edition ([#1128](https://github.com/orhun/git-cliff/issues/1128)) - ([4445f06](https://github.com/orhun/git-cliff/commit/4445f063518bd8514ac19381e3ee6c61828c72a9)) + +## New Contributors ❤️ + +* @vardbabayan made their first contribution in [#1149](https://github.com/orhun/git-cliff/pull/1149) +* @ognis1205 made their first contribution in [#1145](https://github.com/orhun/git-cliff/pull/1145) +* @janderssonse made their first contribution in [#1142](https://github.com/orhun/git-cliff/pull/1142) +* @jdrst made their first contribution in [#1138](https://github.com/orhun/git-cliff/pull/1138) +* @lehmanju made their first contribution in [#1136](https://github.com/orhun/git-cliff/pull/1136) +* @Jean-Beru made their first contribution in [#1132](https://github.com/orhun/git-cliff/pull/1132) +* @william-stacken made their first contribution in [#1086](https://github.com/orhun/git-cliff/pull/1086) +* @SebClapie made their first contribution in [#1121](https://github.com/orhun/git-cliff/pull/1121) +* @okydk made their first contribution in [#1051](https://github.com/orhun/git-cliff/pull/1051) + +## [2.8.0](https://github.com/orhun/git-cliff/compare/v2.7.0..v2.8.0) - 2025-01-24 + +### ⛰️ Features + +- *(cli)* Support initializing config with a custom filename ([#992](https://github.com/orhun/git-cliff/issues/992)) - ([76bf9cf](https://github.com/orhun/git-cliff/commit/76bf9cf7aa26b58f2ae68edd007c9885b02af616)) +- *(config)* Discover the configuration file when run in a sub directory - ([a23eeb4](https://github.com/orhun/git-cliff/commit/a23eeb480961cd2b252acb7e1e6dc38807458e57)) +- *(git)* Improve the set commit range error ([#990](https://github.com/orhun/git-cliff/issues/990)) - ([f29e815](https://github.com/orhun/git-cliff/commit/f29e8150a8166d7364ed71b24675136d2e9bd382)) +- *(monorepo)* Automatically set include-path for current directory - ([ceda1f7](https://github.com/orhun/git-cliff/commit/ceda1f753adc3459b88417ae363410d2586a33af)) +- *(remote)* Support enabling native TLS ([#1021](https://github.com/orhun/git-cliff/issues/1021)) - ([fe7c464](https://github.com/orhun/git-cliff/commit/fe7c464c3bdbfd4e49f596615d6736ea441a4d16)) +- *(repo)* Allow running from sub directories ([#975](https://github.com/orhun/git-cliff/issues/975)) - ([98453b3](https://github.com/orhun/git-cliff/commit/98453b3eee754e1ffe08b685d84c039b17ac8e5e)) + +### 🐛 Bug Fixes + +- *(config)* Allow environment overwrites when using builtin config ([#961](https://github.com/orhun/git-cliff/issues/961)) - ([7ba3b55](https://github.com/orhun/git-cliff/commit/7ba3b55448bdbf7a4a475df2081b6d7c2e2ceb34)) +- *(docker)* Use the correct Debian runner - ([36ad993](https://github.com/orhun/git-cliff/commit/36ad993d5956270c0df8c12d201068c1b4d7c580)) +- *(fixtures)* Update the arguments for custom GitLab API fixture test - ([e522f8d](https://github.com/orhun/git-cliff/commit/e522f8d9f1efddc43a15120e52a2f1b426468b56)) +- *(monorepo)* Do not set include-path if workdir is set ([#1022](https://github.com/orhun/git-cliff/issues/1022)) - ([20483be](https://github.com/orhun/git-cliff/commit/20483be93fbcd33eae3b7b54f625e53796281aff)) +- *(remote)* Fix detection of GitLab merge request sha ([#968](https://github.com/orhun/git-cliff/issues/968)) - ([1297655](https://github.com/orhun/git-cliff/commit/12976550d35bad8d535518010046bd136875736b)) + +### 🚜 Refactor + +- *(lib)* Add changelog modifier callback to run function ([#922](https://github.com/orhun/git-cliff/issues/922)) - ([2321882](https://github.com/orhun/git-cliff/commit/2321882b12cc6aae03fbd4f7ea3e131fc8763631)) +- *(lint)* Use a shared lint config for the workspace - ([bfc1d4f](https://github.com/orhun/git-cliff/commit/bfc1d4fb8f8bd8faa350ec217f4d09d57c20b12d)) +- *(lint)* Apply clippy suggestions - ([299a1c7](https://github.com/orhun/git-cliff/commit/299a1c74b28ac41015bc436de6d37b5ef5d59b04)) + +### 📚 Documentation + +- *(docker)* Fix typo in comment ([#959](https://github.com/orhun/git-cliff/issues/959)) - ([dbda091](https://github.com/orhun/git-cliff/commit/dbda091aa15806523c2be371ec8a31fbba4ccdc7)) +- *(highlights)* Add link to the Nix flake - ([c449229](https://github.com/orhun/git-cliff/commit/c449229513da7444ea02fe275f410e4b2048c9ff)) +- *(jujutsu)* Update links to the upstream documentation - ([ed6b646](https://github.com/orhun/git-cliff/commit/ed6b64628f4bfd21b32021b3decf842ae14c9f51)) +- *(lib)* Allow doc lint - ([62a6d3e](https://github.com/orhun/git-cliff/commit/62a6d3e20cf72c8e2dcc7938894c5c65278e6c4e)) +- *(license)* Update copyright years - ([8178c9b](https://github.com/orhun/git-cliff/commit/8178c9b2ca41fb0b974d3387e07b3067256bdb0b)) +- *(tips)* Extend the merge commit filter example ([#963](https://github.com/orhun/git-cliff/issues/963)) - ([09c0f90](https://github.com/orhun/git-cliff/commit/09c0f905d8b20b585b0bc8183f14250d1a381ca0)) +- *(website)* Add highlights for 2.8.0 ([#1023](https://github.com/orhun/git-cliff/issues/1023)) - ([32dc15e](https://github.com/orhun/git-cliff/commit/32dc15efe5ea8be8f1691fbc16d9e5aaa1c5ebdc)) + +### 🧪 Testing + +- *(fixture)* Add fixture for include-path - ([e85888f](https://github.com/orhun/git-cliff/commit/e85888f5d8dbd4db0674613c4c354416a9be84d1)) + +### ⚙️ Miscellaneous Tasks + +- *(build)* Bump MSRV to 1.83.0 - ([37598c2](https://github.com/orhun/git-cliff/commit/37598c2d417a1646ec90590ab2a1f6d9da66296c)) +- *(docker)* Bump the Rust version in Docker image - ([729f433](https://github.com/orhun/git-cliff/commit/729f4336d169e9fc5cdefdb201208638eee17995)) +- *(funding)* Add wellKnown directory - ([8704518](https://github.com/orhun/git-cliff/commit/8704518fb71b88fa8985c660e67f77d9a33431c8)) +- *(lint)* Allow false positive lint - ([1b779a6](https://github.com/orhun/git-cliff/commit/1b779a698f845cb449da0640aeac45d53c6c43b9)) +- *(nix)* Update flakes - ([22fbe9d](https://github.com/orhun/git-cliff/commit/22fbe9dafbbeaa4bd68082787ea8231dbe12c9ae)) + +## New Contributors ❤️ + +* @xsadia made their first contribution in [#992](https://github.com/orhun/git-cliff/pull/992) +* @chenrui333 made their first contribution in [#1002](https://github.com/orhun/git-cliff/pull/1002) +* @hackenbergstefan made their first contribution in [#968](https://github.com/orhun/git-cliff/pull/968) +* @paul-uz made their first contribution in [#963](https://github.com/orhun/git-cliff/pull/963) +* @jmartens made their first contribution in [#959](https://github.com/orhun/git-cliff/pull/959) + +## [2.7.0](https://github.com/orhun/git-cliff/compare/v2.6.1..v2.7.0) - 2024-11-20 + +### ⛰️ Features + +- *(args)* Add color to the help text ([#897](https://github.com/orhun/git-cliff/issues/897)) - ([f423484](https://github.com/orhun/git-cliff/commit/f4234844bf66da3de8d5d6e1d6fd7a414d2e059a)) +- *(ci)* Add Nix CI ([#939](https://github.com/orhun/git-cliff/issues/939)) - ([d0848ff](https://github.com/orhun/git-cliff/commit/d0848ff04099a287157fbd22935f870e0636139d)) +- *(config)* Allow overriding the remote API URL via config ([#896](https://github.com/orhun/git-cliff/issues/896)) - ([6d86e2c](https://github.com/orhun/git-cliff/commit/6d86e2c9426f7f68207c2ea389629e67eca54277)) +- *(docker)* Build arm64 images again ([#879](https://github.com/orhun/git-cliff/issues/879)) ([#919](https://github.com/orhun/git-cliff/issues/919)) - ([84771f6](https://github.com/orhun/git-cliff/commit/84771f63d04bafec8023a7e9fd4694da6e4d9a25)) +- *(jujutsu)* Add jujustu support ([#930](https://github.com/orhun/git-cliff/issues/930)) - ([ab95626](https://github.com/orhun/git-cliff/commit/ab956263945798ec07214a5234ba6fafa8171ff7)) +- *(nix)* Add a basic Nix environment ([#918](https://github.com/orhun/git-cliff/issues/918)) - ([6b17736](https://github.com/orhun/git-cliff/commit/6b1773685f09a5e091b10f709b3a4f63b63c47b9)) +- *(website)* Add user testimonials ([#895](https://github.com/orhun/git-cliff/issues/895)) - ([ef2374c](https://github.com/orhun/git-cliff/commit/ef2374cab17e896b38b12bfe7d6b011f45e9f840)) + +### 🐛 Bug Fixes + +- *(bitbucket)* Match PR and release metadata correctly ([#907](https://github.com/orhun/git-cliff/issues/907)) - ([e936ed5](https://github.com/orhun/git-cliff/commit/e936ed571533ea6c41a1dd2b1a29d085c8dbada5)) +- *(changelog)* Fix missing commit fields in context ([#837](https://github.com/orhun/git-cliff/issues/837)) ([#920](https://github.com/orhun/git-cliff/issues/920)) - ([f8641ee](https://github.com/orhun/git-cliff/commit/f8641ee8f75da74637ab1f0d3d7c11bfcda8acf9)) +- *(changelog)* Include the root commit when `--latest` is used with one tag ([#901](https://github.com/orhun/git-cliff/issues/901)) - ([508a97e](https://github.com/orhun/git-cliff/commit/508a97edb088f77d01f232676d1e3c7f129071b2)) +- *(remote)* Preserve first time contributors ([#925](https://github.com/orhun/git-cliff/issues/925)) - ([99b78b5](https://github.com/orhun/git-cliff/commit/99b78b52f2d81484fa4e5ea7a66de6e9bea2b3df)) + +### 📚 Documentation + +- *(git)* Improve docs for commit_preprocessors and commit_parsers ([#928](https://github.com/orhun/git-cliff/issues/928)) - ([c1f1215](https://github.com/orhun/git-cliff/commit/c1f12154e7efa75f19ce632dc3052dae390c9211)) +- *(readme)* Add blog post about git-cliff - ([82b10ac](https://github.com/orhun/git-cliff/commit/82b10ac22c657113f8f7f215bdc1bee68ebe1e55)) +- *(website)* Add highlights for 2.7.0 ([#955](https://github.com/orhun/git-cliff/issues/955)) - ([b6b5449](https://github.com/orhun/git-cliff/commit/b6b544949d7763056fb87686f533ed814395f253)) +- *(website)* Add more testimonials - ([bfe9beb](https://github.com/orhun/git-cliff/commit/bfe9beb093df42badf762945cf04548fbe75949a)) +- *(website)* Update sourcehut ([#894](https://github.com/orhun/git-cliff/issues/894)) - ([bcc32ca](https://github.com/orhun/git-cliff/commit/bcc32ca5d1cc157902e04018655c5445237d1407)) + +### ⚡ Performance + +- *(test)* Don't create regex inside a loop ([#937](https://github.com/orhun/git-cliff/issues/937)) - ([0fabf22](https://github.com/orhun/git-cliff/commit/0fabf22c526e1d4b8cb7c718dd0a5d0af99950f8)) + +### 🧪 Testing + +- *(git)* Find upstream remote when using ssh ([#926](https://github.com/orhun/git-cliff/issues/926)) - ([2e65a72](https://github.com/orhun/git-cliff/commit/2e65a72bb044bad94f2568c491e4907f92331a56)) +- *(repo)* Expand unit tests of the repo module ([#909](https://github.com/orhun/git-cliff/issues/909)) - ([da1cb61](https://github.com/orhun/git-cliff/commit/da1cb61c9147631c9a2ba6598e3105132b41c2c3)) + +### ⚙️ Miscellaneous Tasks + +- *(config)* Add the 'other' parser to the default config - ([12cb1df](https://github.com/orhun/git-cliff/commit/12cb1df561cde39a9a0d0f719156a000f3f4d61b)) +- *(docker)* Upgrade Rust and libc version in Dockerfile - ([8bd0607](https://github.com/orhun/git-cliff/commit/8bd0607e231e219f9b60eb4c7f0d8353ef4462e0)) +- *(docker)* Bump the Rust version in Docker image - ([c28121c](https://github.com/orhun/git-cliff/commit/c28121c1aa427c3169df218a9803d838172f7c24)) +- *(integration)* Remove experimental feature disclaimer - ([237c327](https://github.com/orhun/git-cliff/commit/237c327839aa12672abe4255a62ce3c85737bd2c)) +- *(log)* Add trace log about which command is being run - ([a9b2690](https://github.com/orhun/git-cliff/commit/a9b26901e38aa3d3b1042d3bc10d2fe7c6c06565)) +- *(nix)* Update flakes - ([7654e67](https://github.com/orhun/git-cliff/commit/7654e67d971b795e238220dfabe894b2a1b23992)) +- *(website)* Add new testimonials - ([0c207d6](https://github.com/orhun/git-cliff/commit/0c207d606e5a65b4dca3287f2aa2b3c6d624f83d)) + +### ◀️ Revert + +- *(docker)* Bump the Rust version in Docker image - ([fc142e4](https://github.com/orhun/git-cliff/commit/fc142e4b9d4b5b54bc8a0fca6e336345951c9c7b)) + +## New Contributors ❤️ + +* @pauliyobo made their first contribution in [#896](https://github.com/orhun/git-cliff/pull/896) +* @blackheaven made their first contribution in [#939](https://github.com/orhun/git-cliff/pull/939) +* @Muhammad-Owais-Warsi made their first contribution in [#928](https://github.com/orhun/git-cliff/pull/928) +* @kemitix made their first contribution in [#930](https://github.com/orhun/git-cliff/pull/930) +* @mcwarman made their first contribution in [#925](https://github.com/orhun/git-cliff/pull/925) +* @LtdSauce made their first contribution in [#919](https://github.com/orhun/git-cliff/pull/919) +* @dqkqd made their first contribution in [#920](https://github.com/orhun/git-cliff/pull/920) +* @gsquire made their first contribution in [#909](https://github.com/orhun/git-cliff/pull/909) +* @rarescosma made their first contribution in [#901](https://github.com/orhun/git-cliff/pull/901) +* @vsn4ik made their first contribution in [#894](https://github.com/orhun/git-cliff/pull/894) + +## [2.6.1](https://github.com/orhun/git-cliff/compare/v2.6.0..v2.6.1) - 2024-09-27 + +### 🐛 Bug Fixes + +- *(npm)* Add missing `--use-branch-tags` flag to TS options ([#874](https://github.com/orhun/git-cliff/issues/874)) - ([e21fb1d](https://github.com/orhun/git-cliff/commit/e21fb1d3895d893fd6a371ecd48aa4632cf4231d)) +- *(remote)* Avoid setting multiple remotes ([#885](https://github.com/orhun/git-cliff/issues/885)) - ([a344c68](https://github.com/orhun/git-cliff/commit/a344c68238cf3bb87d4f7eb9be46e97cc964eed9)) + +### 📚 Documentation + +- *(website)* Add conversion to pdf to tips-and-tricks ([#889](https://github.com/orhun/git-cliff/issues/889)) - ([58dc108](https://github.com/orhun/git-cliff/commit/58dc1087ed86794c2f678707f2fbb8199167b0c3)) +- *(website)* Add get_env filter example for GitLab CI - ([dfe4459](https://github.com/orhun/git-cliff/commit/dfe4459c5cadd465dec4ea860580ecf82b2b8860)) + +### ⚙️ Miscellaneous Tasks + +- *(ci)* Update pedantic lint command ([#890](https://github.com/orhun/git-cliff/issues/890)) - ([8d10edb](https://github.com/orhun/git-cliff/commit/8d10edb7450aaf189fbce5f78a72274739f73ba9)) +- *(docker)* Disable building arm64 docker images temporarily ([#879](https://github.com/orhun/git-cliff/issues/879)) - ([cde2a8e](https://github.com/orhun/git-cliff/commit/cde2a8e3222f5e8f8bdd9ae841fd0e5c42f68846)) +- *(fixtures)* Build binaries using dev profile ([#886](https://github.com/orhun/git-cliff/issues/886)) - ([a394f88](https://github.com/orhun/git-cliff/commit/a394f88f1d1742dfa3d30887bcb387361de306bc)) + +## New Contributors ❤️ + +* @ckrenslehner made their first contribution in [#889](https://github.com/orhun/git-cliff/pull/889) + +## [2.6.0](https://github.com/orhun/git-cliff/compare/v2.5.0..v2.6.0) - 2024-09-22 + +### ⛰️ Features + +- *(changelog)* Support generating changelog for different branches ([#808](https://github.com/orhun/git-cliff/issues/808)) - ([2a581a8](https://github.com/orhun/git-cliff/commit/2a581a82bbdee057eff8051b261edc9a8c7f4491)) +- *(config)* Add changelog.render_always option ([#859](https://github.com/orhun/git-cliff/issues/859)) - ([ad039d5](https://github.com/orhun/git-cliff/commit/ad039d56b66563cc0299035650582a0518e94679)) +- *(config)* Allow configuring output file from config ([#829](https://github.com/orhun/git-cliff/issues/829)) - ([c2db791](https://github.com/orhun/git-cliff/commit/c2db791a6e2891b5eb46f40d43a490fc6923d038)) +- *(core)* Add `remote` to commit and deprecate fields ([#822](https://github.com/orhun/git-cliff/issues/822)) - ([87e2c1d](https://github.com/orhun/git-cliff/commit/87e2c1d0dd251c81796f607699d2c85ee12584ac)) +- *(npm)* Add missing options and document all options with tsdoc comments - ([2eae2f1](https://github.com/orhun/git-cliff/commit/2eae2f1f1f258b6c270e544d12fae1b150fb2610)) +- *(npm)* Add possibility for `skipCommit` to take an array of values - ([a6e3b78](https://github.com/orhun/git-cliff/commit/a6e3b78948a730aae18f156b2fb787b7ff26bb64)) + +### 🐛 Bug Fixes + +- *(args)* Support using use_branch_tags from both config and args ([#848](https://github.com/orhun/git-cliff/issues/848)) - ([35b7fd8](https://github.com/orhun/git-cliff/commit/35b7fd8007e781b65ef6c3112a349bfd8c8fda15)) +- *(bump)* Suppress template warning when `--bumped-version` is used ([#855](https://github.com/orhun/git-cliff/issues/855)) - ([8bebbf9](https://github.com/orhun/git-cliff/commit/8bebbf9f575e6e3f1bc50332e5703fde9dd1b55f)) +- *(changelog)* Do not change the tag date if tag already exists ([#861](https://github.com/orhun/git-cliff/issues/861)) - ([fbb643b](https://github.com/orhun/git-cliff/commit/fbb643b2e1096ac74a6ea9e9881ed4fd8161d3be)) +- *(changelog)* Correctly set the tag message for the latest release ([#854](https://github.com/orhun/git-cliff/issues/854)) - ([e41e8dd](https://github.com/orhun/git-cliff/commit/e41e8dd4a2e5ed12149078492cf6fd6eedebd0fa)) +- *(changelog)* Don't change the context when provided via `--from-context` ([#820](https://github.com/orhun/git-cliff/issues/820)) - ([ff72406](https://github.com/orhun/git-cliff/commit/ff7240633fcb46e6190dfed22150cbf8d3012df5)) +- *(commit)* Trim the trailing newline for git2 commits ([#872](https://github.com/orhun/git-cliff/issues/872)) - ([1cdbbf6](https://github.com/orhun/git-cliff/commit/1cdbbf604c27c8a597f72985b1d15359244e5186)) +- *(core)* Avoid the unnecessary loop when no remote feature is activated - ([1d8a2fe](https://github.com/orhun/git-cliff/commit/1d8a2fe84917d7bc7c0cb26afc559198ad806184)) +- *(template)* Resolve parsing issues with `raw`/`endraw` in Jinja ([#824](https://github.com/orhun/git-cliff/issues/824)) - ([63bf5b7](https://github.com/orhun/git-cliff/commit/63bf5b7438e2660d410ca825c63b1982fd4d43f5)) + +### 🚜 Refactor + +- *(template)* [**breaking**] Add name parameter to the constructor - ([e577113](https://github.com/orhun/git-cliff/commit/e577113bd69147936e391976c8b06cba76764eec)) + +### 📚 Documentation + +- *(args)* Fix copy-paste mistake where gitea mentioned gitlab - ([c41eacb](https://github.com/orhun/git-cliff/commit/c41eacb0b8181a26d95744e26965272cc105f629)) +- *(contributing)* Mention fetching the tags for running tests successfully ([#850](https://github.com/orhun/git-cliff/issues/850)) - ([a82dac3](https://github.com/orhun/git-cliff/commit/a82dac3cb15490f5b4e543d2f404e54a5126395c)) +- *(website)* Add highlights for 2.6.0 ([#873](https://github.com/orhun/git-cliff/issues/873)) - ([050fb55](https://github.com/orhun/git-cliff/commit/050fb55e86fd2f33fccd5760ddd4913602d5a552)) +- *(website)* Clarify comment about tag argument - ([e56cd8d](https://github.com/orhun/git-cliff/commit/e56cd8de17f08461dcff4ff88518872577fb73fb)) + +### ⚙️ Miscellaneous Tasks + +- *(ci)* Check pedantic lints ([#853](https://github.com/orhun/git-cliff/issues/853)) - ([c77420c](https://github.com/orhun/git-cliff/commit/c77420cf5a35e2658125030b6d9aee97a1e1bd57)) +- *(examples)* Improve example templates ([#835](https://github.com/orhun/git-cliff/issues/835)) - ([08e761c](https://github.com/orhun/git-cliff/commit/08e761c20fb98730249aef2047da02a7dfca86ad)) +- *(lib)* Fix typos in code comments - ([81854d2](https://github.com/orhun/git-cliff/commit/81854d2166fc265168effde50fa892265b83efdf)) +- *(npm)* Bump dev dependencies - ([61b86f1](https://github.com/orhun/git-cliff/commit/61b86f162bee28fffb3b3b06f19261d568fbf60b)) + +## New Contributors ❤️ + +* @nejcgalof made their first contribution in [#853](https://github.com/orhun/git-cliff/pull/853) +* @pplmx made their first contribution in [#824](https://github.com/orhun/git-cliff/pull/824) + +## [2.5.0](https://github.com/orhun/git-cliff/compare/v2.4.0..v2.5.0) - 2024-08-24 + +### ⛰️ Features + +- *(args)* Allow GitLab groups with `--gitlab-repo` ([#807](https://github.com/orhun/git-cliff/issues/807)) - ([6fbfdb5](https://github.com/orhun/git-cliff/commit/6fbfdb5963ad7d39a389001b660df5bf7f38dd37)) +- *(bump)* Support bumping to a specific semver type ([#744](https://github.com/orhun/git-cliff/issues/744)) - ([9dbf47b](https://github.com/orhun/git-cliff/commit/9dbf47bac596be7bacc335e8afa3cdc383dc8ebb)) +- *(changelog)* Support count_tags option ([#599](https://github.com/orhun/git-cliff/issues/599)) - ([b8045e9](https://github.com/orhun/git-cliff/commit/b8045e97ed2b50eee68cb29d5fd28e350c6ca745)) +- *(changelog)* Skip ssh and x509 signatures in tag messages ([#748](https://github.com/orhun/git-cliff/issues/748)) - ([ecbabbf](https://github.com/orhun/git-cliff/commit/ecbabbfb39b986e8445d2feb3189bab4307fd854)) +- *(cli)* Generate changelog from JSON context ([#784](https://github.com/orhun/git-cliff/issues/784)) - ([3b6156d](https://github.com/orhun/git-cliff/commit/3b6156ddd66a256a89e12da98b5cbc611a394c72)) +- *(parser)* Allow whole commit context to be used in commit parsers ([#758](https://github.com/orhun/git-cliff/issues/758)) - ([ccf2ab7](https://github.com/orhun/git-cliff/commit/ccf2ab769aef9fc6d9bbaebc02c41fe4105da24c)) +- *(profiler)* Support performance profiling via pprof ([#768](https://github.com/orhun/git-cliff/issues/768)) - ([35dc1e4](https://github.com/orhun/git-cliff/commit/35dc1e46fd57c32dc475ac545a86013a5c3258c8)) +- *(remote)* Activate integration if remote is set manually ([#782](https://github.com/orhun/git-cliff/issues/782)) - ([4b33e7e](https://github.com/orhun/git-cliff/commit/4b33e7e9869bde035d70ae9525c917340ff90bc3)) + +### 🐛 Bug Fixes + +- *(changelog)* Allow using `--bumped-version` without conventional commits ([#806](https://github.com/orhun/git-cliff/issues/806)) - ([e74080c](https://github.com/orhun/git-cliff/commit/e74080cec4283a45f0f81b1b656af466ae4bd693)) +- *(config)* Allow using environment variables without config file present ([#783](https://github.com/orhun/git-cliff/issues/783)) - ([2471745](https://github.com/orhun/git-cliff/commit/2471745e110955be49310afe11e24719ab79b658)) +- *(fixture)* Fix fetching repository for gitlab integration test - ([72847c6](https://github.com/orhun/git-cliff/commit/72847c6c7e71bf8f5b452f4943f0ddfc99cf6cb5)) +- *(gitlab)* URL-encode the owner in remote requests for GitLab ([#742](https://github.com/orhun/git-cliff/issues/742)) - ([e3e7c07](https://github.com/orhun/git-cliff/commit/e3e7c0794082e418a78f99e7d9c09161f4d14d5f)) +- *(template)* Include for-loop arguments in template variables ([#812](https://github.com/orhun/git-cliff/issues/812)) - ([9a6430b](https://github.com/orhun/git-cliff/commit/9a6430bc5142d356d16df2ce96869f7a0af05493)) + +### 🚜 Refactor + +- *(config)* Make example templates more user-friendly - ([6f8ea19](https://github.com/orhun/git-cliff/commit/6f8ea19baafea2718a00a046b74f0cbbfacc8d46)) +- *(gitlab)* Clean up url encoding for GitLab - ([c791418](https://github.com/orhun/git-cliff/commit/c791418c7e86def636ed2e0aac8d7cc30ef88791)) +- *(lib)* Clean up some code ([#709](https://github.com/orhun/git-cliff/issues/709)) - ([4b0c0eb](https://github.com/orhun/git-cliff/commit/4b0c0eb09abf1264b5cc92bf40f75c8e05e17da6)) + +### 📚 Documentation + +- *(config)* Fix typo in comment of default config file ([#776](https://github.com/orhun/git-cliff/issues/776)) - ([e2fb043](https://github.com/orhun/git-cliff/commit/e2fb0430786c1f746a7eb2a1b299f8491df2c584)) +- *(readme)* Remove underscored spaces between badges ([#809](https://github.com/orhun/git-cliff/issues/809)) - ([1956c83](https://github.com/orhun/git-cliff/commit/1956c8321e4ef2c5ceb46631e5370fbb66a999b2)) +- *(readme)* Add git-changelog to similar projects section ([#774](https://github.com/orhun/git-cliff/issues/774)) - ([c208a97](https://github.com/orhun/git-cliff/commit/c208a9791e3899668d48947f59757613f4e5fba1)) +- *(readme)* Add KaiCode Open Source Festival link - ([58b729c](https://github.com/orhun/git-cliff/commit/58b729c71f7255589fa6645163d355309a04dd7a)) +- *(website)* Add highlights for 2.5.0 ([#815](https://github.com/orhun/git-cliff/issues/815)) - ([49df8cb](https://github.com/orhun/git-cliff/commit/49df8cb0d6880e5a1ef806d17b066070c7492f3a)) +- *(website)* Clarify authentication with GitHub token ([#787](https://github.com/orhun/git-cliff/issues/787)) - ([85bfa95](https://github.com/orhun/git-cliff/commit/85bfa952e48108dbdcfa49105d072b3170d08a0f)) +- *(website)* Correct inverted consequences of configuration value ([#760](https://github.com/orhun/git-cliff/issues/760)) - ([dc144dd](https://github.com/orhun/git-cliff/commit/dc144dd9d0451ec5240efa36d83c187720a17323)) +- *(website)* Add header to 2.4.0 blog post - ([227a307](https://github.com/orhun/git-cliff/commit/227a307d8563e942f4d1e97b53e21953148395f6)) + +### ⚡ Performance + +- *(changelog)* Cache commit retain checks (258 times faster generation) ([#772](https://github.com/orhun/git-cliff/issues/772)) - ([8430c5c](https://github.com/orhun/git-cliff/commit/8430c5c539a8de34f465e33fe43aed560cd581ca)) + +### ⚙️ Miscellaneous Tasks + +- *(cd)* Remove unnecessary git-cliff-action output file ([#738](https://github.com/orhun/git-cliff/issues/738)) - ([9f39bcb](https://github.com/orhun/git-cliff/commit/9f39bcb8bf87ede149c11be0eb913583ded191c5)) +- *(config)* Include new contributors in repository changelog - ([5474978](https://github.com/orhun/git-cliff/commit/5474978f8aa72112595e342864138b9b14fb6366)) +- *(config)* Check for null commit_id in detailed template ([#786](https://github.com/orhun/git-cliff/issues/786)) - ([388b007](https://github.com/orhun/git-cliff/commit/388b007b0f7a6beb66e045a6007f17c1642953e1)) +- *(config)* Fix comment for changelog header template - ([35b886e](https://github.com/orhun/git-cliff/commit/35b886e50dd13e85436b36d9b1280a88eafdccf8)) +- *(config)* Update keepachangelog.toml comment ([#779](https://github.com/orhun/git-cliff/issues/779)) - ([f9e500e](https://github.com/orhun/git-cliff/commit/f9e500e27c543807e28132aa6c34244cd3c4238b)) +- *(website)* Remove v2 announcement - ([a71649b](https://github.com/orhun/git-cliff/commit/a71649b6cd5a72c2a6b20c08dc1b8dfa37c19a6b)) +- *(website)* Add discord button to navbar - ([565b9c8](https://github.com/orhun/git-cliff/commit/565b9c8df0e1a3eb3b5a4415cadfcae065743a40)) + +## New Contributors ❤️ + +* @weichweich made their first contribution in [#807](https://github.com/orhun/git-cliff/pull/807) +* @janbuchar made their first contribution in [#784](https://github.com/orhun/git-cliff/pull/784) +* @rich-ayr made their first contribution in [#809](https://github.com/orhun/git-cliff/pull/809) +* @tisonkun made their first contribution in [#599](https://github.com/orhun/git-cliff/pull/599) +* @DerTiedemann made their first contribution in [#758](https://github.com/orhun/git-cliff/pull/758) +* @DaniPopes made their first contribution in [#709](https://github.com/orhun/git-cliff/pull/709) +* @artrz made their first contribution in [#779](https://github.com/orhun/git-cliff/pull/779) +* @braineo made their first contribution in [#744](https://github.com/orhun/git-cliff/pull/744) +* @myl7 made their first contribution in [#776](https://github.com/orhun/git-cliff/pull/776) +* @pawamoy made their first contribution in [#774](https://github.com/orhun/git-cliff/pull/774) +* @tonybutt made their first contribution in [#742](https://github.com/orhun/git-cliff/pull/742) +* @PigeonF made their first contribution in [#748](https://github.com/orhun/git-cliff/pull/748) + +## [2.4.0](https://github.com/orhun/git-cliff/compare/v2.3.0..v2.4.0) - 2024-06-26 + +### ⛰️ Features + +- *(args)* Add `--ignore-tags` argument ([#696](https://github.com/orhun/git-cliff/issues/696)) - ([94891c2](https://github.com/orhun/git-cliff/commit/94891c2c27b1f46cb840fbea1e167c161609cbcd)) +- *(bump)* Support bumping based on configurable custom pattern ([#725](https://github.com/orhun/git-cliff/issues/725)) - ([8e03356](https://github.com/orhun/git-cliff/commit/8e03356706c8aa89eac80953bc2a01ed3f93bb52)) +- *(bump)* Support setting the `initial_tag` ([#701](https://github.com/orhun/git-cliff/issues/701)) - ([7341500](https://github.com/orhun/git-cliff/commit/734150020e1e2763eaac7aa10acf80f82169b60e)) +- *(changelog)* Add tag message to release context ([#713](https://github.com/orhun/git-cliff/issues/713)) - ([3eb828e](https://github.com/orhun/git-cliff/commit/3eb828e69ad3a5b94833f67dfe287e7d8b31a274)) +- *(changelog)* Make `changelog.header` a template ([#698](https://github.com/orhun/git-cliff/issues/698)) - ([9fc12bb](https://github.com/orhun/git-cliff/commit/9fc12bb90cac732d8621446e4d4de775e7f0ba9a)) +- *(changelog)* Support parsing commits by footer ([#569](https://github.com/orhun/git-cliff/issues/569)) - ([50c240c](https://github.com/orhun/git-cliff/commit/50c240c25b632c670b23e0bac943ff94eeb3dfb7)) +- *(changelog)* Make remote data available in context ([#703](https://github.com/orhun/git-cliff/issues/703)) - ([d14774a](https://github.com/orhun/git-cliff/commit/d14774ae4afb086819d9669dfc050fac1c237de8)) +- *(codeberg)* Add Gitea support ([#680](https://github.com/orhun/git-cliff/issues/680)) - ([403d3dc](https://github.com/orhun/git-cliff/commit/403d3dcd32246fba5c1e1c50bc1f95410e3ee5e4)) +- *(context)* Add repository path to template context ([#721](https://github.com/orhun/git-cliff/issues/721)) - ([e7807e1](https://github.com/orhun/git-cliff/commit/e7807e13c4b38aaa4a735ff05b69fdd6b57a7a85)) + +### 🐛 Bug Fixes + +- *(fixture)* Support running fixtures on mingw64 ([#708](https://github.com/orhun/git-cliff/issues/708)) - ([dabe716](https://github.com/orhun/git-cliff/commit/dabe716c201fedf3021d89c5a8564794bda07f2a)) +- *(website)* Update dependencies to fix search issue - ([8a9f9f4](https://github.com/orhun/git-cliff/commit/8a9f9f48da42ec95f47a169370c6c5cdf2a0b327)) + +### 🚜 Refactor + +- *(bump)* Add documentation and simplify implementation - ([bea4916](https://github.com/orhun/git-cliff/commit/bea49161e9bd9bc999889aca22ed4c0f18f53ca1)) + +### 📚 Documentation + +- *(website)* Add highlights for 2.4.0 ([#729](https://github.com/orhun/git-cliff/issues/729)) - ([5558cc5](https://github.com/orhun/git-cliff/commit/5558cc51b17cbc9c09bf9a2938ed227f1d1bda11)) +- *(website)* Add more context about `ignore_tags` matching commits ([#710](https://github.com/orhun/git-cliff/issues/710)) - ([854b411](https://github.com/orhun/git-cliff/commit/854b411e474b21c870afb0636512b471bf737c4c)) +- *(website)* Fix link to github-keepachangelog template ([#694](https://github.com/orhun/git-cliff/issues/694)) - ([eac2195](https://github.com/orhun/git-cliff/commit/eac2195963e1688cd865969a01cc944d6a4af7b4)) +- *(website)* Add information about `--bump` with `tag prefixes` ([#695](https://github.com/orhun/git-cliff/issues/695)) - ([4cd18c2](https://github.com/orhun/git-cliff/commit/4cd18c2bcdb2ce21234776364598d42261df004d)) + +### 🎨 Styling + +- *(lint)* Fix formatting - ([5b58a37](https://github.com/orhun/git-cliff/commit/5b58a3771d056a95b9ec93ff4a7d0d5bf49b8473)) +- *(lint)* Fix formatting ([#702](https://github.com/orhun/git-cliff/issues/702)) - ([b7e323f](https://github.com/orhun/git-cliff/commit/b7e323f8ec948f7ab9d2f821e0da77e4d936475d)) + +### 🧪 Testing + +- *(template)* Add tests ([#674](https://github.com/orhun/git-cliff/issues/674)) - ([a51422d](https://github.com/orhun/git-cliff/commit/a51422dda9431a3f24b4b061ab055ac97fa018de)) + +## New Contributors ❤️ + +* @bukowa made their first contribution in [#710](https://github.com/orhun/git-cliff/pull/710) +* @MeitarR made their first contribution in [#713](https://github.com/orhun/git-cliff/pull/713) +* @Cyclonit made their first contribution in [#698](https://github.com/orhun/git-cliff/pull/698) +* @jan-ferdinand made their first contribution in [#569](https://github.com/orhun/git-cliff/pull/569) +* @Theta-Dev made their first contribution in [#680](https://github.com/orhun/git-cliff/pull/680) +* @tcarmet made their first contribution in [#694](https://github.com/orhun/git-cliff/pull/694) + +## [2.3.0](https://github.com/orhun/git-cliff/compare/v2.2.2..v2.3.0) - 2024-06-03 + +### ⛰️ Features + +- *(bitbucket)* Add Bitbucket support ([#663](https://github.com/orhun/git-cliff/issues/663)) - ([8ffc054](https://github.com/orhun/git-cliff/commit/8ffc0548fe0fd8930627412fecb9bc08a7879504)) +- *(gitlab)* [**breaking**] Add GitLab support ([#654](https://github.com/orhun/git-cliff/issues/654)) - ([b490f2a](https://github.com/orhun/git-cliff/commit/b490f2a24e3ebeb6ee54382ce9aa642ecff17b01)) +- *(output)* Support using stdout via dash (`-o -`) ([#644](https://github.com/orhun/git-cliff/issues/644)) - ([df81f63](https://github.com/orhun/git-cliff/commit/df81f636f53e63d305d06944ff014a21612cb666)) + +### 🐛 Bug Fixes + +- *(args)* Allow -o and -p together if they point to different files ([#653](https://github.com/orhun/git-cliff/issues/653)) - ([076f859](https://github.com/orhun/git-cliff/commit/076f85915386c4769c838ca9a359d216249d2a97)) + +### 📚 Documentation + +- *(nix)* Add installation instructions for Nix ([#669](https://github.com/orhun/git-cliff/issues/669)) - ([63c8ad4](https://github.com/orhun/git-cliff/commit/63c8ad43e9ecaa825ef1f0a67164265497f3a1dd)) +- *(website)* Add highlights for 2.3.0 ([#670](https://github.com/orhun/git-cliff/issues/670)) - ([1338703](https://github.com/orhun/git-cliff/commit/1338703a2aedb4116dcae849ada4941432f57e74)) +- *(website)* Clean up Nix docs - ([2c2a300](https://github.com/orhun/git-cliff/commit/2c2a300616fa151b91858a2a7d88bdc9b9dae497)) +- *(website)* Add more git range examples ([#655](https://github.com/orhun/git-cliff/issues/655)) - ([d451252](https://github.com/orhun/git-cliff/commit/d4512521fbcfb971c94aa7794d78bced1ddec7a1)) + +### ⚙️ Miscellaneous Tasks + +- *(cd)* Use macos-14 runner - ([22c94ed](https://github.com/orhun/git-cliff/commit/22c94ed8355d71a5fe99d8c1e9c8a3824338debf)) +- *(example)* Allow using github template without github variables ([#672](https://github.com/orhun/git-cliff/issues/672)) - ([6a9feba](https://github.com/orhun/git-cliff/commit/6a9feba98f36de1980bab313f6b0a861f5009d71)) +- *(links)* Ignore patreon links - ([bfe2774](https://github.com/orhun/git-cliff/commit/bfe27744701296185d2f1d37dba7cfb48bd70519)) + +## New Contributors ❤️ + +* @R11baka made their first contribution in [#672](https://github.com/orhun/git-cliff/pull/672) +* @0x61nas made their first contribution in [#669](https://github.com/orhun/git-cliff/pull/669) +* @dark0dave made their first contribution in [#663](https://github.com/orhun/git-cliff/pull/663) +* @antonengelhardt made their first contribution in [#653](https://github.com/orhun/git-cliff/pull/653) + +## [2.2.2](https://github.com/orhun/git-cliff/compare/v2.2.1..v2.2.2) - 2024-05-11 + +### ⛰️ Features + +- *(changelog)* Allow adding custom context ([#613](https://github.com/orhun/git-cliff/issues/613)) - ([522bd53](https://github.com/orhun/git-cliff/commit/522bd536a4ad63dfbfbaebcac8a92202b32b202f)) + +### 🐛 Bug Fixes + +- *(changelog)* Ignore empty lines when using `split_commits` ([#608](https://github.com/orhun/git-cliff/issues/608)) - ([b8fb852](https://github.com/orhun/git-cliff/commit/b8fb85220e86138ad8b129ebf1e0599ce8aa5938)) +- *(parser)* Allow matching empty commit body ([#605](https://github.com/orhun/git-cliff/issues/605)) - ([1d1b3b8](https://github.com/orhun/git-cliff/commit/1d1b3b80e163baf34113456f24e3fbbc203e355d)) + +### 📚 Documentation + +- *(readme)* Add social media badges - ([d53b905](https://github.com/orhun/git-cliff/commit/d53b9051840b46f41ccaeca6de3c37c1379a6e5a)) +- *(website)* Add note about supported platforms for NPM - ([4e4d7cd](https://github.com/orhun/git-cliff/commit/4e4d7cdbfced3618bdfaf392dbe0a3f4bbbba799)) +- *(website)* Add SourceHut builds example ([#617](https://github.com/orhun/git-cliff/issues/617)) - ([f636cfc](https://github.com/orhun/git-cliff/commit/f636cfc5ce0fdbe07d9010c1690876abcc017d29)) + +### ⚙️ Miscellaneous Tasks + +- *(npm)* Add minimum supported Node versions ([#621](https://github.com/orhun/git-cliff/issues/621)) - ([95bdf2d](https://github.com/orhun/git-cliff/commit/95bdf2db3724715f76a7b649367541ace5ca9d1f)) +- *(pypi)* Disable PyPi builds for x86_64-pc-windows-gnu - ([f675b0b](https://github.com/orhun/git-cliff/commit/f675b0b5bdbe57437e39dbe4c0b78e7c4f373936)) +- *(tests)* Don't check last commit ([#619](https://github.com/orhun/git-cliff/issues/619)) - ([68b9839](https://github.com/orhun/git-cliff/commit/68b98393e72d4a38a2e9166477784a9e1a55c9cf)) + +## New Contributors ❤️ + +* @lanesawyer made their first contribution in [#621](https://github.com/orhun/git-cliff/pull/621) +* @timharek made their first contribution in [#617](https://github.com/orhun/git-cliff/pull/617) +* @AntoineGS made their first contribution in [#608](https://github.com/orhun/git-cliff/pull/608) + ## [2.2.1](https://github.com/orhun/git-cliff/compare/v2.2.0..v2.2.1) - 2024-04-10 ### 🐛 Bug Fixes @@ -16,6 +507,11 @@ - *(ci)* Remove audit check - ([6ba6809](https://github.com/orhun/git-cliff/commit/6ba6809ea1ff9b34f192b387e77da06cf0570606)) +## New Contributors ❤️ + +* @clementnuss made their first contribution in [#597](https://github.com/orhun/git-cliff/pull/597) +* @tomasbjerre made their first contribution in [#589](https://github.com/orhun/git-cliff/pull/589) + ## [2.2.0](https://github.com/orhun/git-cliff/compare/v2.1.2..v2.2.0) - 2024-03-30 ### ⛰️ Features @@ -54,6 +550,13 @@ - *(website)* Allow deploying website manually - ([0b64bc0](https://github.com/orhun/git-cliff/commit/0b64bc032523f6565e47352cccd0d92f8bf9eae9)) - *(website)* Only deploy website when there is a new release - ([8651832](https://github.com/orhun/git-cliff/commit/8651832926afa83dac4b9cbb5d298bbea5e7af6d)) +## New Contributors ❤️ + +* @aminya made their first contribution in [#567](https://github.com/orhun/git-cliff/pull/567) +* @jsurkont made their first contribution in [#530](https://github.com/orhun/git-cliff/pull/530) +* @dupuy made their first contribution in [#535](https://github.com/orhun/git-cliff/pull/535) +* @daniel-carr-3000 made their first contribution in [#532](https://github.com/orhun/git-cliff/pull/532) + ## [2.1.2](https://github.com/orhun/git-cliff/compare/v2.0.4..v2.1.2) - 2024-03-03 ### ⛰️ Features @@ -92,6 +595,10 @@ - *(ci)* Check semver violations via CI - ([a25a114](https://github.com/orhun/git-cliff/commit/a25a1148d92ee07402c9069eaad74574e392339c)) - *(fixtures)* Enable verbose logging for output - ([2927231](https://github.com/orhun/git-cliff/commit/292723109f328f96b84a629d61fd38b02ceef4e8)) +## New Contributors ❤️ + +* @lloydjatkinson made their first contribution in [#520](https://github.com/orhun/git-cliff/pull/520) + ## [2.0.4](https://github.com/orhun/git-cliff/compare/v2.0.2..v2.0.4) - 2024-02-22 ### ⛰️ Features @@ -113,18 +620,21 @@ - *(website)* Bump the version of git-cliff-action - ([f255ad3](https://github.com/orhun/git-cliff/commit/f255ad38b2640b3f42a40eda3b76cddb6c06d2ff)) - *(website)* Add announcement bar for the new release - ([1d32a14](https://github.com/orhun/git-cliff/commit/1d32a14175355ef83dbaa0dd80f17a9c2493e7de)) + ## [2.0.2](https://github.com/orhun/git-cliff/compare/v2.0.1..v2.0.2) - 2024-02-19 ### 📚 Documentation - *(release)* Add note about GitHub variables - ([54e21de](https://github.com/orhun/git-cliff/commit/54e21de5eebe61f23328e92c6fb8f8de7fd900fd)) + ## [2.0.1](https://github.com/orhun/git-cliff/compare/v2.0.0..v2.0.1) - 2024-02-19 ### ⚙️ Miscellaneous Tasks - *(cd)* Disable PyPI builds for linux-x86-glibc - ([30d8e41](https://github.com/orhun/git-cliff/commit/30d8e41b06e2b277e700731fe193906e49e2509a)) + ## [2.0.0](https://github.com/orhun/git-cliff/compare/v1.4.0..v2.0.0) - 2024-02-19 ### ⛰️ Features @@ -227,6 +737,14 @@ - *(config)* Use postprocessors for checking the typos - ([5212cc9](https://github.com/orhun/git-cliff/commit/5212cc9446bc1389274516ed3d7eb7b334b1b606)) +## New Contributors ❤️ + +* @welpo made their first contribution in [#486](https://github.com/orhun/git-cliff/pull/486) +* @bobrik made their first contribution in [#415](https://github.com/orhun/git-cliff/pull/415) +* @vbx made their first contribution in [#403](https://github.com/orhun/git-cliff/pull/403) +* @nappa85 made their first contribution in [#362](https://github.com/orhun/git-cliff/pull/362) +* @sh-cho made their first contribution in [#357](https://github.com/orhun/git-cliff/pull/357) + ## [1.4.0](https://github.com/orhun/git-cliff/compare/v1.3.1..v1.4.0) - 2023-10-29 ### ⛰️ Features @@ -260,6 +778,13 @@ - *(release)* Update cargo-deb usage - ([213f383](https://github.com/orhun/git-cliff/commit/213f383b54c9a40a351f341c28bbdf03b73f701d)) - *(website)* Update the tracking link - ([eb9f8e9](https://github.com/orhun/git-cliff/commit/eb9f8e970d2adcb6c6f512b20ca8a9f77d09ff54)) +## New Contributors ❤️ + +* @woshilapin made their first contribution in [#318](https://github.com/orhun/git-cliff/pull/318) +* @debghs made their first contribution in [#329](https://github.com/orhun/git-cliff/pull/329) +* @dpecos made their first contribution in [#312](https://github.com/orhun/git-cliff/pull/312) +* @eki3z made their first contribution in [#307](https://github.com/orhun/git-cliff/pull/307) + ## [1.3.1](https://github.com/orhun/git-cliff/compare/v1.3.0..v1.3.1) - 2023-09-30 ### ⛰️ Features @@ -290,6 +815,11 @@ - *(args)* Update clap and clap extras to v4 ([#137](https://github.com/orhun/git-cliff/issues/137)) ([#292](https://github.com/orhun/git-cliff/issues/292)) - ([fb4c733](https://github.com/orhun/git-cliff/commit/fb4c733a70a4dbc25060481ee5f3c644bb0bb83b)) +## New Contributors ❤️ + +* @joshka made their first contribution in [#293](https://github.com/orhun/git-cliff/pull/293) +* @dnaka91 made their first contribution in [#272](https://github.com/orhun/git-cliff/pull/272) + ## [1.3.0](https://github.com/orhun/git-cliff/compare/v1.2.0..v1.3.0) - 2023-08-31 ### ⛰️ Features @@ -347,6 +877,14 @@ - *(pypi)* Publish `git-cliff` on PyPI ([#158](https://github.com/orhun/git-cliff/issues/158)) - ([2b7a1ef](https://github.com/orhun/git-cliff/commit/2b7a1efaafca017c4a21f1af25c6047347119e8d)) - Check without default features - ([e323621](https://github.com/orhun/git-cliff/commit/e323621094141acaab360d6fa42990c7cdd4bac4)) +## New Contributors ❤️ + +* @alexfertel made their first contribution in [#253](https://github.com/orhun/git-cliff/pull/253) +* @tvcsantos made their first contribution +* @beeb made their first contribution in [#167](https://github.com/orhun/git-cliff/pull/167) +* @PSeitz made their first contribution in [#155](https://github.com/orhun/git-cliff/pull/155) +* @alerque made their first contribution in [#142](https://github.com/orhun/git-cliff/pull/142) + ## [1.2.0](https://github.com/orhun/git-cliff/compare/v1.1.2..v1.2.0) - 2023-04-28 ### ⛰️ Features @@ -432,6 +970,17 @@ - *(website)* Move website to website folder - ([5644d10](https://github.com/orhun/git-cliff/commit/5644d1036508ffb420e12503adb671708e087cd9)) - *(website)* Move website to docs for GitHub pages deployment - ([b6e52e1](https://github.com/orhun/git-cliff/commit/b6e52e128e7a105682adf885850d14deefdff3ec)) +## New Contributors ❤️ + +* @bors[bot] made their first contribution in [#161](https://github.com/orhun/git-cliff/pull/161) +* @dependabot[bot] made their first contribution +* @mackness made their first contribution in [#157](https://github.com/orhun/git-cliff/pull/157) +* @jackton1 made their first contribution in [#152](https://github.com/orhun/git-cliff/pull/152) +* @radusuciu made their first contribution in [#147](https://github.com/orhun/git-cliff/pull/147) +* @lbowenwest made their first contribution in [#137](https://github.com/orhun/git-cliff/pull/137) +* @jankatins made their first contribution in [#141](https://github.com/orhun/git-cliff/pull/141) +* @saidsay-so made their first contribution in [#140](https://github.com/orhun/git-cliff/pull/140) + ## [1.1.2](https://github.com/orhun/git-cliff/compare/v1.1.1..v1.1.2) - 2023-01-20 ### 🐛 Bug Fixes @@ -453,6 +1002,7 @@ - *(git)* Use timestamp for deriving the tag order ([#139](https://github.com/orhun/git-cliff/issues/139)) - ([accfb0f](https://github.com/orhun/git-cliff/commit/accfb0fcdd06c66d3e9d98f8848cbb9ab0944d09)) + ## [1.1.1](https://github.com/orhun/git-cliff/compare/v1.1.0..v1.1.1) - 2023-01-09 ### 🐛 Bug Fixes @@ -472,6 +1022,7 @@ - *(npm)* Add more keywords to the base NPM package - ([abe68a2](https://github.com/orhun/git-cliff/commit/abe68a28847ec9d444337fb1adec522fca7aac1b)) - *(npm)* Package `git-cliff` for npm ([#133](https://github.com/orhun/git-cliff/issues/133)) - ([b7dd592](https://github.com/orhun/git-cliff/commit/b7dd592653a722a764609a3eacff5e1eee58c07e)) + ## [1.1.0](https://github.com/orhun/git-cliff/compare/v1.0.0..v1.1.0) - 2023-01-08 ### ⛰️ Features @@ -496,6 +1047,7 @@ - *(github)* Add Jekyll theme configuration for GitHub pages - ([81e5720](https://github.com/orhun/git-cliff/commit/81e5720376346a2b0d3ef5a3ef4408507044f6e0)) - *(release)* Improve the release script with additional messages - ([09ab59f](https://github.com/orhun/git-cliff/commit/09ab59f12e8d295e607966f295b39d3ad2457fd0)) + ## [1.0.0](https://github.com/orhun/git-cliff/compare/v0.10.0..v1.0.0) - 2022-12-25 ### ⛰️ Features @@ -525,6 +1077,7 @@ - *(config)* Comment out custom commit preprocessor ([#112](https://github.com/orhun/git-cliff/issues/112)) - ([8f77caf](https://github.com/orhun/git-cliff/commit/8f77caf86a1e5dd23eda1b9e9b5a7a6606642b8a)) - *(fixtures)* Run all test fixtures - ([53c1c50](https://github.com/orhun/git-cliff/commit/53c1c50a1e1a66c684bb1319c0bf48648ed01eab)) + ## [0.10.0](https://github.com/orhun/git-cliff/compare/v0.9.2..v0.10.0) - 2022-11-20 ### ⛰️ Features @@ -553,6 +1106,12 @@ - *(docker)* Update versions in Dockerfile - ([02e2b8e](https://github.com/orhun/git-cliff/commit/02e2b8e58e0e4a518fe5318be2bec6d1360ad34e)) +## New Contributors ❤️ + +* @FlrnFrmm made their first contribution in [#116](https://github.com/orhun/git-cliff/pull/116) +* @sbmueller made their first contribution in [#114](https://github.com/orhun/git-cliff/pull/114) +* @herbygillot made their first contribution in [#111](https://github.com/orhun/git-cliff/pull/111) + ## [0.9.2](https://github.com/orhun/git-cliff/compare/v0.9.1..v0.9.2) - 2022-09-24 ### 🐛 Bug Fixes @@ -564,6 +1123,7 @@ - *(audit)* Remove cargo-audit config - ([078bdc3](https://github.com/orhun/git-cliff/commit/078bdc3f7a482e752bb983fad057a37f15528698)) - *(ci)* Switch to cargo-tarpaulin for measuring code coverage ([#110](https://github.com/orhun/git-cliff/issues/110)) - ([17f3a09](https://github.com/orhun/git-cliff/commit/17f3a0994d85022650170ff3a9fef942aa414303)) + ## [0.9.1](https://github.com/orhun/git-cliff/compare/v0.9.0..v0.9.1) - 2022-09-20 ### 🐛 Bug Fixes @@ -574,6 +1134,7 @@ - *(readme)* Update styling for with-commit example - ([8247301](https://github.com/orhun/git-cliff/commit/82473017ca627a8d736099a928f03cfb56c895dc)) + ## [0.9.0](https://github.com/orhun/git-cliff/compare/v0.8.1..v0.9.0) - 2022-08-16 ### ⛰️ Features @@ -601,6 +1162,10 @@ - *(funding)* Add GitHub Sponsors option for funding - ([f3fada7](https://github.com/orhun/git-cliff/commit/f3fada723d680dab4f0cd435dc0430425a7fe995)) - *(project)* Update MSRV to 1.60.0 - ([b55e678](https://github.com/orhun/git-cliff/commit/b55e678a4ea669e195d0adae0694a340ab724c31)) +## New Contributors ❤️ + +* @AaronFriel made their first contribution in [#101](https://github.com/orhun/git-cliff/pull/101) + ## [0.8.1](https://github.com/orhun/git-cliff/compare/v0.8.0..v0.8.1) - 2022-07-12 ### 🐛 Bug Fixes @@ -611,6 +1176,7 @@ - *(cd)* Update windows runners to windows-2022 - ([8621a59](https://github.com/orhun/git-cliff/commit/8621a59d47b9e13dd449e6c781e847086e501153)) + ## [0.8.0](https://github.com/orhun/git-cliff/compare/v0.7.0..v0.8.0) - 2022-07-12 ### ⛰️ Features @@ -633,6 +1199,12 @@ - *(docker)* Disable building arm64 docker images temporarily - ([175f7d7](https://github.com/orhun/git-cliff/commit/175f7d70559c642721c0c82215224cfba2cb0221)) - *(project)* Set MSRV to 1.58.1 ([#87](https://github.com/orhun/git-cliff/issues/87)) - ([bfcd0d9](https://github.com/orhun/git-cliff/commit/bfcd0d97ba2fc2271e754f6c9ecb834edf7f1190)) +## New Contributors ❤️ + +* @hawkw made their first contribution in [#97](https://github.com/orhun/git-cliff/pull/97) +* @7596ff made their first contribution in [#99](https://github.com/orhun/git-cliff/pull/99) +* @ofsahof made their first contribution in [#94](https://github.com/orhun/git-cliff/pull/94) + ## [0.7.0](https://github.com/orhun/git-cliff/compare/v0.6.1..v0.7.0) - 2022-04-24 ### ⛰️ Features @@ -678,6 +1250,13 @@ - *(docker)* Build Docker images for arm64 - ([8475e1f](https://github.com/orhun/git-cliff/commit/8475e1fd63b89bb56c2cf68de62dbb4d9e66b4bb)) - *(docker)* Upgrade versions in Dockerfile - ([3aa9a1a](https://github.com/orhun/git-cliff/commit/3aa9a1a059f876b66ce03bc1a4a7735a2c27e146)) +## New Contributors ❤️ + +* @favna made their first contribution in [#83](https://github.com/orhun/git-cliff/pull/83) +* @kaushalmodi made their first contribution in [#80](https://github.com/orhun/git-cliff/pull/80) +* @uyha made their first contribution in [#76](https://github.com/orhun/git-cliff/pull/76) +* @mgrachev made their first contribution in [#73](https://github.com/orhun/git-cliff/pull/73) + ## [0.6.1](https://github.com/orhun/git-cliff/compare/v0.6.0..v0.6.1) - 2022-03-13 ### 🐛 Bug Fixes @@ -692,6 +1271,10 @@ - *(core)* Document timestamp format of `Release` struct ([#67](https://github.com/orhun/git-cliff/issues/67)) - ([d68eb12](https://github.com/orhun/git-cliff/commit/d68eb120c0a0a98bc1e7264a3aede17b5f5c54be)) - *(readme)* Add another option of GitHub Actions ([#64](https://github.com/orhun/git-cliff/issues/64)) - ([db7edf5](https://github.com/orhun/git-cliff/commit/db7edf5707f2bfdf49c749026969fd1833530ed7)) +## New Contributors ❤️ + +* @marcoieni made their first contribution in [#67](https://github.com/orhun/git-cliff/pull/67) + ## [0.6.0](https://github.com/orhun/git-cliff/compare/v0.5.0..v0.6.0) - 2022-02-12 ### ⛰️ Features @@ -737,6 +1320,11 @@ - *(ci)* Run cargo-audit for checking vulnerabilities - ([cfe41fe](https://github.com/orhun/git-cliff/commit/cfe41fe56eddb38c109e178e02d3567d10ad78ff)) - *(docker)* Bump the Rust version in Dockerfile - ([d4cbb85](https://github.com/orhun/git-cliff/commit/d4cbb857388f8d5686715fcba62f8adaeb92230a)) +## New Contributors ❤️ + +* @tranzystorekk made their first contribution in [#57](https://github.com/orhun/git-cliff/pull/57) +* @bachp made their first contribution in [#42](https://github.com/orhun/git-cliff/pull/42) + ## [0.5.0](https://github.com/orhun/git-cliff/compare/v0.4.2..v0.5.0) - 2021-12-15 ### ⛰️ Features @@ -780,12 +1368,17 @@ - *(fixtures)* Run test fixtures on ubuntu-latest - ([dea65f2](https://github.com/orhun/git-cliff/commit/dea65f235e2091001d8de41794bf3c98a7223917)) - *(fixtures)* Improve the workflow for test fixtures - ([92a54d6](https://github.com/orhun/git-cliff/commit/92a54d67b825b53b6993a769ea9d5cf37ea2e43e)) +## New Contributors ❤️ + +* @kenji-miyake made their first contribution in [#40](https://github.com/orhun/git-cliff/pull/40) + ## [0.4.2](https://github.com/orhun/git-cliff/compare/v0.4.1..v0.4.2) - 2021-10-22 ### 🐛 Bug Fixes - *(cd)* Install the Rust toolchain explicitly for crates.io releases - ([2cee3bf](https://github.com/orhun/git-cliff/commit/2cee3bf9ecc00e21b871e88a34a949fbca6b646b)) + ## [0.4.1](https://github.com/orhun/git-cliff/compare/v0.4.0..v0.4.1) - 2021-10-22 ### 🐛 Bug Fixes @@ -808,6 +1401,11 @@ - *(project)* Migrate to Rust 2021 edition - ([0000000](https://github.com/orhun/git-cliff/commit/0000000ef0e2d0710f4c1294408da2639f6f3217)) - *(project)* Remove unnecessary Cargo.lock entry from .gitignore - ([481713c](https://github.com/orhun/git-cliff/commit/481713cbb74fc2bce4a46ab6f8d4649b03d96fc2)) +## New Contributors ❤️ + +* @pataar made their first contribution in [#26](https://github.com/orhun/git-cliff/pull/26) +* @alteregoart made their first contribution in [#24](https://github.com/orhun/git-cliff/pull/24) + ## [0.4.0](https://github.com/orhun/git-cliff/compare/v0.3.0..v0.4.0) - 2021-10-01 ### ⛰️ Features @@ -844,6 +1442,10 @@ - *(workflow)* Update the runner to ubuntu-20.04 - ([5069594](https://github.com/orhun/git-cliff/commit/5069594f1800e409665609224995b25dcb9df438)) - *(workflow)* Set a version for the checkout action - ([b323e60](https://github.com/orhun/git-cliff/commit/b323e60996595976fbe8261b5f8c4a9f67d2a8f8)) +## New Contributors ❤️ + +* @FoxxMD made their first contribution in [#16](https://github.com/orhun/git-cliff/pull/16) + ## [0.3.0](https://github.com/orhun/git-cliff/compare/v0.2.6..v0.3.0) - 2021-09-10 ### ⛰️ Features @@ -862,6 +1464,10 @@ - *(readme)* Add badge for joining the Matrix chat - ([b5edfc2](https://github.com/orhun/git-cliff/commit/b5edfc279d0290fecaacab469ecccdadf63eb3ab)) - *(readme)* Update installation instructions for Arch Linux - ([8fb18b7](https://github.com/orhun/git-cliff/commit/8fb18b784808222fdf3c4328ac9c871b93524fee)) +## New Contributors ❤️ + +* @Groxx made their first contribution in [#7](https://github.com/orhun/git-cliff/pull/7) + ## [0.2.6](https://github.com/orhun/git-cliff/compare/v0.2.5..v0.2.6) - 2021-09-04 ### 🐛 Bug Fixes @@ -876,6 +1482,7 @@ - *(docker)* Bump cargo-chef version in Dockerfile - ([612192b](https://github.com/orhun/git-cliff/commit/612192b3aa638be9ccd38ecda27bdee6b6ff6655)) + ## [0.2.5](https://github.com/orhun/git-cliff/compare/v0.2.4..v0.2.5) - 2021-08-20 ### ⛰️ Features @@ -891,30 +1498,35 @@ - *(release)* Show the committed changes before creating a tag - ([59ffe53](https://github.com/orhun/git-cliff/commit/59ffe53a7cb4791e4877a74f2e14d15139d2aca9)) + ## [0.2.4](https://github.com/orhun/git-cliff/compare/v0.2.3..v0.2.4) - 2021-08-20 ### 🐛 Bug Fixes - *(cd)* Change the config file location for crates.io release - ([a9b286c](https://github.com/orhun/git-cliff/commit/a9b286cf023148da0800c2a0408d87571c239847)) + ## [0.2.3](https://github.com/orhun/git-cliff/compare/v0.2.2..v0.2.3) - 2021-08-18 ### 🐛 Bug Fixes - *(cd)* Fetch the dependencies before copying the file to embed - ([9e29c95](https://github.com/orhun/git-cliff/commit/9e29c95319abd1747fbf6fd1e205d414617b0447)) + ## [0.2.2](https://github.com/orhun/git-cliff/compare/v0.2.1..v0.2.2) - 2021-08-18 ### 🐛 Bug Fixes - *(cd)* Copy the config file into registry to resolve it for embed - ([48ea157](https://github.com/orhun/git-cliff/commit/48ea1578b5ecc17f5cc9a4249fb7b38610028fc6)) + ## [0.2.1](https://github.com/orhun/git-cliff/compare/v0.2.0..v0.2.1) - 2021-08-18 ### 🐛 Bug Fixes - *(cd)* Copy the configuration file to embed into package - ([68dda36](https://github.com/orhun/git-cliff/commit/68dda364278870df84891495a3ff546ddbcae6a1)) + ## [0.2.0](https://github.com/orhun/git-cliff/compare/v0.1.2..v0.2.0) - 2021-08-18 ### ⛰️ Features @@ -944,6 +1556,7 @@ - *(config)* Move `cliff.toml` to config/ - ([acda195](https://github.com/orhun/git-cliff/commit/acda1954dc192a3b706c21a48821f75e5a8e0d22)) + ## [0.1.2](https://github.com/orhun/git-cliff/compare/v0.1.1..v0.1.2) - 2021-08-14 ### 🐛 Bug Fixes @@ -954,6 +1567,7 @@ - *(completions)* Update the example completion command - ([f1fd88a](https://github.com/orhun/git-cliff/commit/f1fd88af8f7fdfb021109ed9a24bd3d43045d534)) + ## [0.1.1](https://github.com/orhun/git-cliff/compare/v0.1.0..v0.1.1) - 2021-08-14 ### 🐛 Bug Fixes @@ -973,6 +1587,7 @@ - *(project)* Rename the shell completions binary - ([718f535](https://github.com/orhun/git-cliff/commit/718f53573b9f48a60ad1930cd9555063414f8b96)) + ## [0.1.0] - 2021-08-12 ### ⛰️ Features @@ -1079,4 +1694,5 @@ - Chore(config): update template to include commit ids - ([f95fca9](https://github.com/orhun/git-cliff/commit/f95fca966bacb520e958fe783e239f98dfe026bc)) + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dc749ac6c5..a2024c9d55 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,6 +15,14 @@ Note that we have a [Code of Conduct](./CODE_OF_CONDUCT.md), please follow it in ```sh git clone https://github.com/{username}/git-cliff && cd git-cliff +# OR +git clone git@github.com:{username}/git-cliff && cd git-cliff +``` + +To ensure the successful execution of the tests, it is essential to fetch the tags as follows: + +```sh +git fetch --tags https://github.com/orhun/git-cliff ``` 3. Make sure that you have [Rust](https://www.rust-lang.org/) `1.64.0` or later installed and build the project. @@ -31,7 +39,13 @@ cargo build cargo test ``` -6. Make sure [rustfmt](https://github.com/rust-lang/rustfmt) and [clippy](https://github.com/rust-lang/rust-clippy) don't complain about your changes. +6. If needed, update the snapshot tests (i.e. tests using `expect_test`): + +```sh +env UPDATE_EXPECT=1 cargo test +``` + +7. Make sure [rustfmt](https://github.com/rust-lang/rustfmt) and [clippy](https://github.com/rust-lang/rust-clippy) don't complain about your changes. We use the `nightly` channel for `rustfmt` so please set the appropriate settings for your editor/IDE for that. diff --git a/Cargo.lock b/Cargo.lock index 089b80a569..10a5519325 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,21 +1,21 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "adler32" @@ -23,6 +23,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "getrandom 0.3.3", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -33,10 +46,19 @@ dependencies = [ ] [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "aligned-vec" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" +dependencies = [ + "equator", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android_system_properties" @@ -49,88 +71,121 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell_polyfill", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" + +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "async-compression" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "977eb15ea9efd848bb8a4a1a2500347ed7f0bf794edf0dc3ddcf439f43d36b23" +dependencies = [ + "compression-codecs", + "compression-core", + "futures-core", + "pin-project-lite", + "tokio", +] [[package]] name = "async-trait" -version = "0.1.79" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.106", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" -version = "1.2.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -139,6 +194,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bincode" version = "1.3.3" @@ -148,6 +209,26 @@ dependencies = [ "serde", ] +[[package]] +name = "bincode" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" +dependencies = [ + "bincode_derive", + "serde", + "unty", +] + +[[package]] +name = "bincode_derive" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09" +dependencies = [ + "virtue", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -156,9 +237,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "block-buffer" @@ -171,9 +252,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.9.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" dependencies = [ "memchr", "serde", @@ -181,28 +262,34 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "bytemuck" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[package]] name = "bytes" -version = "1.6.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cacache" -version = "12.0.0" +version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142316461ed3a3dfcba10417317472da5bfd0461e4d276bf7c07b330766d9490" +checksum = "a61ff12b19d89c752c213316b87fdb4a587f073d219b893cc56974b8c9f39bf7" dependencies = [ "digest", "either", "futures", "hex", "libc", - "memmap2", + "memmap2 0.5.10", "miette", "reflink-copy", "serde", @@ -212,7 +299,7 @@ dependencies = [ "sha2", "ssri", "tempfile", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "walkdir", @@ -220,37 +307,47 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.92" +version = "1.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2678b2e3449475e95b0aa6f9b506a28e61b3dc8996592b983695e8ebb58a8b41" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" dependencies = [ + "find-msvc-tools", "jobserver", "libc", + "shlex", ] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.37" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", + "js-sys", "num-traits", - "windows-targets 0.52.4", + "serde", + "wasm-bindgen", + "windows-link 0.2.0", ] [[package]] name = "chrono-tz" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59ae0466b83e838b81a54256c39d5d7c20b9d7daa10510a242d9b75abd5936e" +checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" dependencies = [ "chrono", "chrono-tz-build", @@ -259,9 +356,9 @@ dependencies = [ [[package]] name = "chrono-tz-build" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433e39f13c9a060046954e0592a8d0a4bcb1040125cbf91cb8ee58964cfb350f" +checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" dependencies = [ "parse-zoneinfo", "phf", @@ -270,9 +367,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" dependencies = [ "clap_builder", "clap_derive", @@ -280,9 +377,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" dependencies = [ "anstream", "anstyle", @@ -293,36 +390,36 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.2" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79504325bf38b10165b02e89b4347300f855f273c4cb30c4a3209e6583275e" +checksum = "4d9501bd3f5f09f7bbee01da9a511073ed30a80cd7a509f1214bb74eadea71ad" dependencies = [ "clap", ] [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.106", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "clap_mangen" -version = "0.2.20" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1dd95b5ebb5c1c54581dd6346f3ed6a79a3eef95dd372fc2ac13d535535300e" +checksum = "27b4c3c54b30f0d9adcb47f25f61fcce35c4dd8916638c6b82fbd5f4fb4179e2" dependencies = [ "clap", "roff", @@ -330,52 +427,87 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "compression-codecs" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "485abf41ac0c8047c07c87c72c8fb3eb5197f6e9d7ded615dfd1a00ae00a0f64" +dependencies = [ + "compression-core", + "zstd", + "zstd-safe", +] + +[[package]] +name = "compression-core" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" [[package]] name = "config" -version = "0.14.0" +version = "0.15.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7328b20597b53c2454f0b1919720c25c7339051c02b72b7e05409e00b14132be" +checksum = "0faa974509d38b33ff89282db9c3295707ccf031727c0de9772038ec526852ba" dependencies = [ - "lazy_static", - "nom", "pathdiff", "serde", "toml", - "yaml-rust", + "winnow", + "yaml-rust2", ] [[package]] name = "console" -version = "0.15.8" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" dependencies = [ "encode_unicode", - "lazy_static", "libc", - "unicode-width", - "windows-sys 0.52.0", + "once_cell", + "unicode-width 0.2.1", + "windows-sys 0.61.0", ] [[package]] -name = "conventional_commit_parser" -version = "0.9.4" +name = "cookie" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58660f9e1d5eeeeec9c33d1473ea8bba000c673a2189edaeedb4523ec7d6f7cb" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" dependencies = [ - "pest", - "pest_derive", + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fc4bff745c9b4c7fb1e97b25d13153da2bc7796260141df62378998d070207f" +dependencies = [ + "cookie", + "document-features", + "idna", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "time", + "url", ] [[package]] name = "core-foundation" -version = "0.9.4" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -383,33 +515,51 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + +[[package]] +name = "cpp_demangle" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "96e58d342ad113c2b878f16d5d034c03be492ae460cdbc02b7f0f2284d310c7d" +dependencies = [ + "cfg-if", +] [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -426,9 +576,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-common" @@ -440,20 +590,35 @@ dependencies = [ "typenum", ] +[[package]] +name = "dary_heap" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d2cd9c18b9f454ed67da600630b021a8a80bf33f8c95896ab33aaf1c26b728" + +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "uuid", +] + [[package]] name = "deranged" -version = "0.3.11" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", ] [[package]] name = "deunicode" -version = "1.4.3" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e854126756c496b8c81dec88f9a706b15b875c5849d4097a3854476b9fdf94" +checksum = "abd57806937c9cc163efc8ea3910e00a62e2aeb0b8119f1793a978088f8f6b04" [[package]] name = "diff" @@ -471,68 +636,76 @@ dependencies = [ "crypto-common", ] -[[package]] -name = "directories" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" -dependencies = [ - "dirs-sys", -] - [[package]] name = "dirs" -version = "5.0.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.48.0", + "windows-sys 0.61.0", ] [[package]] -name = "doc-comment" -version = "0.3.3" +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "dissimilar" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +checksum = "8975ffdaa0ef3661bfe02dbdcc06c9f829dfafe6a3c474de366a8d5e44276921" [[package]] name = "document-features" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" dependencies = [ "litrs", ] +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + [[package]] name = "either" -version = "1.10.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -550,33 +723,92 @@ dependencies = [ "termcolor", ] +[[package]] +name = "equator" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" +dependencies = [ + "equator-macro", +] + +[[package]] +name = "equator-macro" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.0", +] + +[[package]] +name = "etcetera" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c7b13d0780cb82722fd59f6f57f925e143427e4a75313a6c77243bf5326ae6" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.59.0", +] + +[[package]] +name = "expect-test" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63af43ff4431e848fb47472a920f14fa71c24de13255a5692e93d4e90302acb0" +dependencies = [ + "dissimilar", + "once_cell", ] [[package]] name = "fastrand" -version = "2.0.2" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "find-msvc-tools" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" + +[[package]] +name = "findshlibs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40b9e59cd0f7e0806cca4be089683ecb6434e602038df21fe6bf6711b2f07f64" +dependencies = [ + "cc", + "lazy_static", + "libc", + "winapi", +] [[package]] name = "flate2" -version = "1.0.28" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "miniz_oxide", @@ -588,20 +820,26 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -614,9 +852,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -624,15 +862,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -641,38 +879,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.106", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -698,24 +936,40 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi", + "r-efi", + "wasi 0.14.5+wasi-0.2.4", + "wasm-bindgen", ] [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "git-cliff" -version = "2.2.1" +version = "2.10.0" dependencies = [ "clap", "clap_complete", @@ -727,20 +981,30 @@ dependencies = [ "indicatif", "lazy_static", "log", + "pathdiff", + "pprof", "pretty_assertions", + "rand 0.9.2", "regex", + "reqwest", "secrecy", "shellexpand", "update-informer", + "url", ] [[package]] name = "git-cliff-core" -version = "2.2.1" +version = "2.10.0" dependencies = [ + "bincode 2.0.1", + "cacache", + "chrono", "config", "dirs", "document-features", + "dyn-clone", + "expect-test", "futures", "git-conventional", "git2", @@ -761,20 +1025,22 @@ dependencies = [ "serde", "serde_json", "serde_regex", + "temp-dir", "tera", - "thiserror", + "thiserror 2.0.16", + "time", "tokio", "toml", "url", + "urlencoding", ] [[package]] name = "git-conventional" -version = "0.12.6" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8035f7561b84cc80e8ec1c2c18dd14113c8b6e07206db72212403e9a25d2e72d" +checksum = "f6a949b7fcc81df22526032dcddb006e78c8575e47b0e7ba57d9960570a57bc4" dependencies = [ - "doc-comment", "serde", "unicase", "winnow", @@ -782,11 +1048,11 @@ dependencies = [ [[package]] name = "git2" -version = "0.18.3" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70" +checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.4", "libc", "libgit2-sys", "log", @@ -795,15 +1061,15 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" dependencies = [ "aho-corasick", "bstr", @@ -814,39 +1080,42 @@ dependencies = [ [[package]] name = "globwalk" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" +checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.4", "ignore", "walkdir", ] [[package]] -name = "h2" -version = "0.3.26" +name = "hashbrown" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", + "ahash", + "allocator-api2", ] [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] + +[[package]] +name = "hashlink" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.5", +] [[package]] name = "heck" @@ -856,9 +1125,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -866,11 +1135,20 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "http" -version = "0.2.12" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -879,23 +1157,35 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", "pin-project-lite", ] [[package]] name = "http-cache" -version = "0.18.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b5ab65432bbdfe8490dfde21d0366353a8d39f2bc24aca0146889f931b0b4b5" +checksum = "33b65cd1687caf2c7fff496741a2f264c26f54e6d6cec03dac8f276fa4e5430e" dependencies = [ "async-trait", - "bincode", + "bincode 1.3.3", "cacache", "http", "http-cache-semantics", @@ -906,9 +1196,9 @@ dependencies = [ [[package]] name = "http-cache-reqwest" -version = "0.13.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8285341ce7e709c56a0f259ff1c789c70edfbaa88acd69d27e4d63980b92dc" +checksum = "735586904a5ce0c13877c57cb4eb8195eb7c11ec1ffd64d4db053fb8559ca62e" dependencies = [ "anyhow", "async-trait", @@ -918,15 +1208,14 @@ dependencies = [ "reqwest", "reqwest-middleware", "serde", - "task-local-extensions", "url", ] [[package]] name = "http-cache-semantics" -version = "1.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aec9f678bca3f4a15194b980f20ed9bfe0dd38e8d298c65c559a93dfbd6380a" +checksum = "92baf25cf0b8c9246baecf3a444546360a97b569168fdf92563ee6a47829920c" dependencies = [ "http", "http-serde", @@ -936,9 +1225,9 @@ dependencies = [ [[package]] name = "http-serde" -version = "1.1.3" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f560b665ad9f1572cfcaf034f7fb84338a7ce945216d64a90fd81f046a3caee" +checksum = "0f056c8559e3757392c8d091e796416e4649d8e49e88b8d76df6c002f05027fd" dependencies = [ "http", "serde", @@ -946,9 +1235,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -967,60 +1256,86 @@ dependencies = [ [[package]] name = "humantime" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hyper" -version = "0.14.28" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", "futures-core", - "futures-util", - "h2", "http", "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", - "socket2", + "pin-utils", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "futures-util", "http", "hyper", - "rustls 0.21.10", + "hyper-util", + "rustls", + "rustls-native-certs", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows-core 0.52.0", + "windows-core", ] [[package]] @@ -1032,21 +1347,118 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] name = "ignore" -version = "0.4.22" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" dependencies = [ "crossbeam-deque", "globset", @@ -1060,116 +1472,157 @@ dependencies = [ [[package]] name = "include-flate" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e11569346406931d20276cc460215ee2826e7cad43aa986999cb244dd7adb0" +checksum = "e01b7cb6ca682a621e7cda1c358c9724b53a7b4409be9be1dd443b7f3a26f998" dependencies = [ - "include-flate-codegen-exports", - "lazy_static", + "include-flate-codegen", + "include-flate-compress", "libflate", + "zstd", ] [[package]] name = "include-flate-codegen" -version = "0.1.4" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a7d6e1419fa3129eb0802b4c99603c0d425c79fb5d76191d5a20d0ab0d664e8" +checksum = "4f49bf5274aebe468d6e6eba14a977eaf1efa481dc173f361020de70c1c48050" dependencies = [ + "include-flate-compress", "libflate", - "proc-macro-hack", + "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.106", + "zstd", ] [[package]] -name = "include-flate-codegen-exports" -version = "0.1.4" +name = "include-flate-compress" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75657043ffe3d8280f1cb8aef0f505532b392ed7758e0baeac22edadcee31a03" +checksum = "eae6a40e716bcd5931f5dbb79cd921512a4f647e2e9413fded3171fca3824dbc" dependencies = [ - "include-flate-codegen", - "proc-macro-hack", + "libflate", + "zstd", ] [[package]] name = "indexmap" -version = "2.2.6" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.5", ] [[package]] name = "indicatif" -version = "0.17.8" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" dependencies = [ "console", - "instant", - "number_prefix", "portable-atomic", - "unicode-width", + "unicode-width 0.2.1", + "unit-prefix", + "web-time", ] [[package]] -name = "instant" -version = "0.1.12" +name = "inferno" +version = "0.11.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "232929e1d75fe899576a3d5c7416ad0d88dbfbb3c3d6aa00873a7408a50ddb88" dependencies = [ + "ahash", + "indexmap", + "is-terminal", + "itoa", + "log", + "num-format", + "once_cell", + "quick-xml", + "rgb", + "str_stack", +] + +[[package]] +name = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags 2.9.4", "cfg-if", + "libc", ] [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.28" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ + "getrandom 0.3.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "lazy-regex" -version = "3.1.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d12be4595afdf58bd19e4a9f4e24187da2a66700786ff660a418e9059937a4c" +checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126" dependencies = [ "lazy-regex-proc_macros", "once_cell", @@ -1178,53 +1631,57 @@ dependencies = [ [[package]] name = "lazy-regex-proc_macros" -version = "3.1.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bcd58e6c97a7fcbaffcdc95728b393b8d98933bfadad49ed4097845b57ef0b" +checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1" dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.58", + "syn 2.0.106", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libflate" -version = "1.4.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ff4ae71b685bbad2f2f391fe74f6b7659a34871c08b210fdc039e43bee07d18" +checksum = "45d9dfdc14ea4ef0900c1cddbc8dcd553fbaacd8a4a282cf4018ae9dd04fb21e" dependencies = [ "adler32", + "core2", "crc32fast", + "dary_heap", "libflate_lz77", ] [[package]] name = "libflate_lz77" -version = "1.2.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a52d3a8bfc85f250440e4424db7d857e241a3aebbbe301f3eb606ab15c39acbf" +checksum = "e6e0d73b369f386f1c44abd9c570d5318f55ccde816ff4b562fa452e5182863d" dependencies = [ + "core2", + "hashbrown 0.14.5", "rle-decode-fast", ] [[package]] name = "libgit2-sys" -version = "0.16.2+1.7.2" +version = "0.18.2+1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" +checksum = "1c42fe03df2bd3c53a3a9c7317ad91d80c81cd1fb0caec8d7cc4cd2bfa10c222" dependencies = [ "cc", "libc", @@ -1234,25 +1691,25 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.4", "libc", ] [[package]] name = "libz-sys" -version = "1.1.16" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" dependencies = [ "cc", "libc", @@ -1261,34 +1718,50 @@ dependencies = [ ] [[package]] -name = "linked-hash-map" -version = "0.5.6" +name = "linux-raw-sys" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] -name = "linux-raw-sys" -version = "0.4.13" +name = "litemap" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" -version = "0.4.1" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + +[[package]] +name = "lock_api" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +dependencies = [ + "autocfg", + "scopeguard", +] [[package]] name = "log" -version = "0.4.21" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lru-slab" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" @@ -1299,6 +1772,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memmap2" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +dependencies = [ + "libc", +] + [[package]] name = "miette" version = "5.10.0" @@ -1307,8 +1789,8 @@ checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" dependencies = [ "miette-derive", "once_cell", - "thiserror", - "unicode-width", + "thiserror 1.0.69", + "unicode-width 0.1.14", ] [[package]] @@ -1319,69 +1801,49 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" -dependencies = [ - "mime", - "unicase", + "syn 2.0.106", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi", - "windows-sys 0.48.0", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] name = "next_version" -version = "0.2.15" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0b8566ec538405d0feb0a7bb8262daa997f4cee2a9f9a9b7ab81f1262110d59" +checksum = "2af0742157c04cea78f8643de0d0785a29d53c4dd08d985bc542cdd4d2ec9830" dependencies = [ - "conventional_commit_parser", + "git-conventional", + "regex", "semver", ] [[package]] -name = "nom" -version = "7.1.3" +name = "nix" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ - "memchr", - "minimal-lexical", + "bitflags 1.3.2", + "cfg-if", + "libc", ] [[package]] @@ -1391,44 +1853,50 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] -name = "num-traits" -version = "0.2.18" +name = "num-format" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "autocfg", + "arrayvec", + "itoa", ] [[package]] -name = "num_cpus" -version = "1.16.0" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "hermit-abi", - "libc", + "autocfg", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "openssl-probe" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "option-ext" @@ -1438,41 +1906,41 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "parse-zoneinfo" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" dependencies = [ "regex", ] [[package]] name = "pathdiff" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.7.9" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "311fb059dee1a7b802f036316d790138c613a4e8b180c822e3925a662e9f0c95" +checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8" dependencies = [ "memchr", - "thiserror", + "thiserror 2.0.16", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.9" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73541b156d32197eecda1a4014d7f868fd2bcb3c550d5386087cfba442bf69c" +checksum = "bc58706f770acb1dbd0973e6530a3cff4746fb721207feb3a8a6064cd0b6c663" dependencies = [ "pest", "pest_generator", @@ -1480,42 +1948,41 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.9" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c35eeed0a3fab112f75165fdc026b3913f4183133f19b49be773ac9ea966e8bd" +checksum = "6d4f36811dfe07f7b8573462465d5cb8965fffc2e71ae377a33aecf14c2c9a2f" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.106", ] [[package]] name = "pest_meta" -version = "2.7.9" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2adbf29bb9776f28caece835398781ab24435585fe0d4dc1374a61db5accedca" +checksum = "42919b05089acbd0a5dcd5405fb304d17d1053847b81163d09c4ad18ce8e8420" dependencies = [ - "once_cell", "pest", "sha2", ] [[package]] name = "phf" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ "phf_shared", ] [[package]] name = "phf_codegen" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ "phf_generator", "phf_shared", @@ -1523,28 +1990,28 @@ dependencies = [ [[package]] name = "phf_generator" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared", - "rand", + "rand 0.8.5", ] [[package]] name = "phf_shared" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ "siphasher", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1554,119 +2021,271 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] -name = "powerfmt" -version = "0.2.0" +name = "potential_utf" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] [[package]] -name = "ppv-lite86" -version = "0.2.17" +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] -name = "pretty_assertions" -version = "1.4.0" +name = "pprof" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +checksum = "38a01da47675efa7673b032bf8efd8214f1917d89685e07e395ab125ea42b187" dependencies = [ - "diff", - "yansi", + "aligned-vec", + "backtrace", + "cfg-if", + "findshlibs", + "inferno", + "libc", + "log", + "nix", + "once_cell", + "smallvec", + "spin", + "symbolic-demangle", + "tempfile", + "thiserror 2.0.16", ] [[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" +name = "ppv-lite86" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] [[package]] -name = "proc-macro2" -version = "1.0.79" +name = "pretty_assertions" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" dependencies = [ - "unicode-ident", + "diff", + "yansi", ] [[package]] -name = "quote" -version = "1.0.36" +name = "proc-macro-error" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ + "proc-macro-error-attr", "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", ] [[package]] -name = "rand" -version = "0.8.5" +name = "proc-macro-error-attr" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "libc", - "rand_chacha", - "rand_core", + "proc-macro2", + "quote", + "version_check", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "proc-macro2" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ - "ppv-lite86", - "rand_core", + "unicode-ident", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "quick-xml" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd" dependencies = [ - "getrandom", + "memchr", ] [[package]] -name = "redox_users" -version = "0.4.5" +name = "quinn" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ - "getrandom", - "libredox", - "thiserror", + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.16", + "tokio", + "tracing", + "web-time", ] [[package]] -name = "reflink-copy" -version = "0.1.15" +name = "quinn-proto" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52b1349400e2ffd64a9fb5ed9008e33c0b8ef86bd5bae8f73080839c7082f1d5" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ - "cfg-if", + "bytes", + "getrandom 0.3.3", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.16", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.16", +] + +[[package]] +name = "reflink-copy" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23bbed272e39c47a095a5242218a67412a220006842558b03fe2935e8f3d7b92" +dependencies = [ + "cfg-if", + "libc", "rustix", "windows", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", @@ -1676,9 +2295,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", @@ -1687,78 +2306,87 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ - "base64", + "async-compression", + "base64 0.22.1", "bytes", - "encoding_rs", + "futures-channel", "futures-core", "futures-util", - "h2", "http", "http-body", + "http-body-util", "hyper", "hyper-rustls", - "ipnet", + "hyper-util", "js-sys", "log", - "mime", - "mime_guess", - "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.10", - "rustls-pemfile", + "quinn", + "rustls", + "rustls-native-certs", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", - "system-configuration", "tokio", "tokio-rustls", + "tokio-util", + "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.25.4", - "winreg", + "webpki-roots", ] [[package]] name = "reqwest-middleware" -version = "0.2.5" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" +checksum = "57f17d28a6e6acfe1733fe24bcd30774d13bffa4b8a22535b4c8c98423088d4e" dependencies = [ "anyhow", "async-trait", "http", "reqwest", "serde", - "task-local-extensions", - "thiserror", + "thiserror 1.0.69", + "tower-service", +] + +[[package]] +name = "rgb" +version = "0.8.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" +dependencies = [ + "bytemuck", ] [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.16", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] @@ -1771,15 +2399,15 @@ checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" [[package]] name = "roff" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" +checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3" [[package]] name = "rust-embed" -version = "8.3.0" +version = "8.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb78f46d0066053d16d4ca7b898e9343bc3530f71c61d5ad84cd404ada068745" +checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" dependencies = [ "include-flate", "rust-embed-impl", @@ -1789,22 +2417,22 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.3.0" +version = "8.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91ac2a3c6c0520a3fb3dd89321177c3c692937c4eb21893378219da10c44fc8" +checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.58", + "syn 2.0.106", "walkdir", ] [[package]] name = "rust-embed-utils" -version = "8.3.0" +version = "8.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f69089032567ffff4eada41c573fc43ff466c7db7c5688b2e7969584345581" +checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" dependencies = [ "sha2", "walkdir", @@ -1812,90 +2440,97 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustix" -version = "0.38.32" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.0", ] [[package]] name = "rustls" -version = "0.21.10" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ "log", + "once_cell", "ring", - "rustls-webpki 0.101.7", - "sct", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", ] [[package]] -name = "rustls" -version = "0.22.3" +name = "rustls-native-certs" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99008d7ad0bbbea527ec27bddbc0e432c5b87d8175178cee68d2eec9c4a1813c" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ - "log", - "ring", + "openssl-probe", "rustls-pki-types", - "rustls-webpki 0.102.2", - "subtle", - "zeroize", + "schannel", + "security-framework", ] [[package]] name = "rustls-pemfile" -version = "1.0.4" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", + "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd36cc4259e3e4514335c4a138c6b43171a8d61d8f5c9348f9fc7529416f247" - -[[package]] -name = "rustls-webpki" -version = "0.101.7" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "ring", - "untrusted", + "web-time", + "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.102.2" +version = "0.103.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +checksum = "b5a37813727b78798e53c2bec3f5e8fe12a6d6f8389bf9ca7802add4c9905ad8" dependencies = [ "ring", "rustls-pki-types", "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "same-file" @@ -1907,15 +2542,20 @@ dependencies = [ ] [[package]] -name = "sct" -version = "0.7.1" +name = "schannel" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "ring", - "untrusted", + "windows-sys 0.61.0", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "secrecy" version = "0.8.0" @@ -1926,41 +2566,75 @@ dependencies = [ "zeroize", ] +[[package]] +name = "security-framework" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640" +dependencies = [ + "bitflags 2.9.4", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" -version = "1.0.22" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.221" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "341877e04a22458705eb4e131a1508483c877dca2792b3781d4e5d8a6019ec43" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.221" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "0c459bc0a14c840cb403fc14b148620de1e0778c96ecd6e0c8c3cacb6d8d00fe" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.221" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "d6185cf75117e20e62b1ff867b9518577271e58abe0037c40bb4794969355ab0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.115" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +checksum = "56177480b00303e689183f110b4e727bb4211d692c62d4fcd16d02be93077d40" dependencies = [ "itoa", + "memchr", "ryu", - "serde", + "serde_core", ] [[package]] @@ -1975,9 +2649,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.5" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" dependencies = [ "serde", ] @@ -2018,9 +2692,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -2029,53 +2703,65 @@ dependencies = [ [[package]] name = "shellexpand" -version = "3.1.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" +checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb" dependencies = [ "dirs", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "siphasher" -version = "0.3.11" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slug" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4" +checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724" dependencies = [ "deunicode", "wasm-bindgen", ] +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + [[package]] name = "socket2" -version = "0.5.6" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "spin" -version = "0.9.8" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" +dependencies = [ + "lock_api", +] [[package]] name = "ssri" @@ -2083,17 +2769,29 @@ version = "9.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da7a2b3c2bc9693bcb40870c4e9b5bf0d79f9cb46273321bf855ec513e919082" dependencies = [ - "base64", + "base64 0.21.7", "digest", "hex", "miette", "serde", "sha-1", "sha2", - "thiserror", + "thiserror 1.0.69", "xxhash-rust", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "str_stack" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" + [[package]] name = "strsim" version = "0.11.1" @@ -2102,9 +2800,32 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "symbolic-common" +version = "12.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9da12f8fecbbeaa1ee62c1d50dc656407e007c3ee7b2a41afce4b5089eaef15e" +dependencies = [ + "debugid", + "memmap2 0.9.8", + "stable_deref_trait", + "uuid", +] + +[[package]] +name = "symbolic-demangle" +version = "12.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "6fd35afe0ef9d35d3dcd41c67ddf882fc832a387221338153b7cd685a105495c" +dependencies = [ + "cpp_demangle", + "rustc-demangle", + "symbolic-common", +] [[package]] name = "syn" @@ -2113,15 +2834,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", - "quote", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.58" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -2130,57 +2850,48 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "system-configuration" -version = "0.5.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", + "futures-core", ] [[package]] -name = "system-configuration-sys" -version = "0.5.0" +name = "synstructure" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ - "core-foundation-sys", - "libc", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "task-local-extensions" -version = "0.1.4" +name = "temp-dir" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" -dependencies = [ - "pin-utils", -] +checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" dependencies = [ - "cfg-if", "fastrand", + "getrandom 0.3.3", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.0", ] [[package]] name = "tera" -version = "1.19.1" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "970dff17c11e884a4a09bc76e3a17ef71e01bb13447a11e85226e254fe6d10b8" +checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee" dependencies = [ "chrono", "chrono-tz", @@ -2190,7 +2901,7 @@ dependencies = [ "percent-encoding", "pest", "pest_derive", - "rand", + "rand 0.8.5", "regex", "serde", "serde_json", @@ -2209,42 +2920,61 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.3.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ "rustix", - "windows-sys 0.48.0", + "windows-sys 0.60.2", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "1.0.58" +version = "2.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +dependencies = [ + "thiserror-impl 2.0.16", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.106", ] [[package]] name = "time" -version = "0.3.35" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef89ece63debf11bc32d1ed8d078ac870cbeb44da02afb02a9ff135ae7ca0582" +checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde", @@ -2254,25 +2984,35 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", ] +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -2285,47 +3025,48 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", - "num_cpus", "pin-project-lite", + "slab", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.106", ] [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.21.10", + "rustls", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -2334,63 +3075,106 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "toml" -version = "0.8.12" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" dependencies = [ + "indexmap", "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_parser", + "toml_writer", + "winnow", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" dependencies = [ "serde", ] [[package]] -name = "toml_edit" -version = "0.22.9" +name = "toml_parser" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" +checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", "winnow", ] +[[package]] +name = "toml_writer" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.4", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-core", @@ -2398,9 +3182,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", ] @@ -2413,15 +3197,15 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "unic-char-property" @@ -2475,39 +3259,33 @@ dependencies = [ [[package]] name = "unicase" -version = "2.7.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] -name = "unicode-bidi" -version = "0.3.15" +name = "unicode-ident" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] -name = "unicode-ident" -version = "1.0.12" +name = "unicode-width" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] -name = "unicode-normalization" -version = "0.1.23" +name = "unicode-width" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] -name = "unicode-width" -version = "0.1.11" +name = "unit-prefix" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" [[package]] name = "untrusted" @@ -2515,13 +3293,19 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +[[package]] +name = "unty" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" + [[package]] name = "update-informer" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f8811797a24ff123db3c6e1087aa42551d03d772b3724be421ad063da1f5f3f" +checksum = "67b27dcf766dc6ad64c2085201626e1a7955dc1983532bfc8406d552903ace2a" dependencies = [ - "directories", + "etcetera", "reqwest", "semver", "serde", @@ -2531,28 +3315,42 @@ dependencies = [ [[package]] name = "ureq" -version = "2.9.6" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f214ce18d8b2cbe84ed3aa6486ed3f5b285cf8d8fbdbce9f3f767a724adc35" +checksum = "99ba1025f18a4a3fc3e9b48c868e9beb4f24f4b4b1a325bada26bd4119f46537" dependencies = [ - "base64", + "base64 0.22.1", + "cookie_store", "flate2", "log", - "once_cell", - "rustls 0.22.3", + "percent-encoding", + "rustls", + "rustls-pemfile", "rustls-pki-types", - "rustls-webpki 0.102.2", "serde", "serde_json", - "url", - "webpki-roots 0.26.1", + "ureq-proto", + "utf-8", + "webpki-roots", +] + +[[package]] +name = "ureq-proto" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b4531c118335662134346048ddb0e54cc86bd7e81866757873055f0e38f5d2" +dependencies = [ + "base64 0.22.1", + "http", + "httparse", + "log", ] [[package]] name = "url" -version = "2.5.0" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -2560,11 +3358,39 @@ dependencies = [ "serde", ] +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] name = "vcpkg" @@ -2574,9 +3400,15 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "virtue" +version = "0.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" [[package]] name = "walkdir" @@ -2599,52 +3431,73 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.5+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.0+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" +dependencies = [ + "wit-bindgen", +] [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2652,44 +3505,51 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] -name = "webpki-roots" -version = "0.25.4" +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] name = "webpki-roots" -version = "0.26.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ "rustls-pki-types", ] @@ -2712,11 +3572,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "winapi", + "windows-sys 0.61.0", ] [[package]] @@ -2727,49 +3587,110 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.54.0" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +checksum = "9579d0e6970fd5250aa29aba5994052385ff55cf7b28a059e484bb79ea842e42" dependencies = [ - "windows-core 0.54.0", - "windows-targets 0.52.4", + "windows-collections", + "windows-core", + "windows-future", + "windows-link 0.2.0", + "windows-numerics", ] [[package]] -name = "windows-core" -version = "0.52.0" +name = "windows-collections" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "a90dd7a7b86859ec4cdf864658b311545ef19dbcf17a672b52ab7cefe80c336f" dependencies = [ - "windows-targets 0.52.4", + "windows-core", ] [[package]] name = "windows-core" -version = "0.54.0" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.0", "windows-result", - "windows-targets 0.52.4", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2194dee901458cb79e1148a4e9aac2b164cc95fa431891e7b296ff0b2f1d8a6" +dependencies = [ + "windows-core", + "windows-link 0.2.0", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + +[[package]] +name = "windows-numerics" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ce3498fe0aba81e62e477408383196b4b0363db5e0c27646f932676283b43d8" +dependencies = [ + "windows-core", + "windows-link 0.2.0", ] [[package]] name = "windows-result" -version = "0.1.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd19df78e5168dfb0aedc343d1d1b8d422ab2db6756d2dc3fef75035402a3f64" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" dependencies = [ - "windows-targets 0.52.4", + "windows-link 0.2.0", ] [[package]] -name = "windows-sys" -version = "0.48.0" +name = "windows-strings" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" dependencies = [ - "windows-targets 0.48.5", + "windows-link 0.2.0", ] [[package]] @@ -2778,165 +3699,346 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.4", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.3", +] + +[[package]] +name = "windows-sys" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +dependencies = [ + "windows-link 0.2.0", ] [[package]] name = "windows-targets" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows-targets" -version = "0.52.4" +version = "0.53.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +dependencies = [ + "windows-link 0.1.3", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + +[[package]] +name = "windows-threading" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +checksum = "ab47f085ad6932defa48855254c758cdd0e2f2d48e62a34118a268d8f345e118" dependencies = [ - "windows_aarch64_gnullvm 0.52.4", - "windows_aarch64_msvc 0.52.4", - "windows_i686_gnu 0.52.4", - "windows_i686_msvc 0.52.4", - "windows_x86_64_gnu 0.52.4", - "windows_x86_64_gnullvm 0.52.4", - "windows_x86_64_msvc 0.52.4", + "windows-link 0.2.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.4" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" [[package]] name = "windows_aarch64_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.52.4" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" [[package]] name = "windows_i686_gnu" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.52.4" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" [[package]] name = "windows_i686_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.52.4" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" [[package]] name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.52.4" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.4" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.52.4" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.6.5" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] [[package]] -name = "winreg" -version = "0.50.0" +name = "wit-bindgen" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "xxhash-rust" -version = "0.8.10" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927da81e25be1e1a2901d59b81b37dd2efd1fc9c9345a55007f09bf5a2d3ee03" +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] -name = "yaml-rust" -version = "0.4.5" +name = "yaml-rust2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +checksum = "4ce2a4ff45552406d02501cea6c18d8a7e50228e7736a872951fe2fe75c91be7" dependencies = [ - "linked-hash-map", + "arraydeque", + "encoding_rs", + "hashlink", ] [[package]] name = "yansi" -version = "0.5.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml index d48ac12bcf..63cc066add 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,12 +3,20 @@ resolver = "2" members = ["git-cliff-core", "git-cliff"] [workspace.dependencies] -regex = "1.10.4" -glob = "0.3.1" +regex = "1.11.1" +glob = "0.3.2" log = "0.4.21" secrecy = { version = "0.8.0", features = ["serde"] } -lazy_static = "1.4.0" -dirs = "5.0.1" +lazy_static = "1.5.0" +dirs = "6.0.0" +url = "2.5.3" +reqwest = { version = "0.12.22", default-features = false, features = [ + "blocking", + "rustls-tls", + "rustls-tls-native-roots", + "json", + "zstd", +] } [profile.dev] opt-level = 0 @@ -29,4 +37,26 @@ strip = true [profile.bench] opt-level = 3 -debug = false +debug = true # used by the profiler +strip = false # keep symbols for the profiler + +[workspace.lints.clippy] +literal_string_with_formatting_args = "allow" +tabs_in_doc_comments = "allow" +needless_raw_string_hashes = "allow" +unreadable_literal = "allow" +redundant_else = "allow" +items_after_statements = "allow" +missing_errors_doc = "allow" +module_name_repetitions = "allow" +uninlined_format_args = "allow" +manual_string_new = "allow" +must_use_candidate = "allow" +too_many_lines = "allow" +wildcard_imports = "allow" +missing_panics_doc = "allow" +inefficient_to_string = "allow" +redundant_closure_for_method_calls = "allow" +map_unwrap_or = "allow" +struct_excessive_bools = "allow" +unnecessary_wraps = "allow" diff --git a/Dockerfile b/Dockerfile index d6365d1738..e235672a7b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1.4.3-labs -FROM lukemathwalker/cargo-chef:0.1.63-rust-1.76-slim-buster AS chef +FROM lukemathwalker/cargo-chef:0.1.72-rust-1.88.0-slim-bookworm@sha256:f9259e33061f4ecadd6478877fa263a0cb961370ff84b9956caddfea2d911bb7 AS chef WORKDIR app FROM chef AS planner @@ -11,10 +11,10 @@ COPY --from=planner /app/recipe.json recipe.json ENV CARGO_NET_GIT_FETCH_WITH_CLI=true RUN cargo chef cook --release --recipe-path recipe.json COPY . . -RUN cargo build --release --locked --no-default-features --features github +RUN cargo build --release --locked --no-default-features --features github --features gitlab --features bitbucket RUN rm -f target/release/deps/git_cliff* -FROM debian:buster-slim as runner +FROM debian:bookworm-slim@sha256:6ac2c08566499cc2415926653cf2ed7c3aedac445675a013cc09469c9e118fdd as runner # Everything inside this container will be explicitly mounted by the end user, # so we can sidestep some Git security restrictions. This app recommends @@ -25,7 +25,7 @@ RUN echo '[safe]\n\tdirectory = *' > /etc/gitconfig COPY --from=builder /app/target/release/git-cliff /usr/local/bin WORKDIR app -# Even if the repository as marked as safe, GitHub Actions and some other +# Even if the repository is marked as safe, GitHub Actions and some other # environments insist on running the entrypoint as root inside the container # even when being run by a non privileged user on their own files. Here we # check the ownership of the workdir (which may or may not be /app) and change diff --git a/LICENSE-MIT b/LICENSE-MIT index 7fae078370..64855cde3d 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,7 +1,7 @@ The MIT License (MIT) -Copyright (c) 2021-2024 Orhun Parmaksız -Copyright (c) 2021-2024 git-cliff contributors +Copyright (c) 2021-2025 Orhun Parmaksız +Copyright (c) 2021-2025 git-cliff contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index fa6761a1cd..09f2928635 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,23 @@

- +
- - + - - + - - +
- - + - - + - - + - - +
- - - - - -

@@ -44,17 +31,24 @@ ## Documentation -Learn how to use **git-cliff** from the [documentation](https://git-cliff.org/docs). +Learn how to use **git-cliff** from the [official documentation](https://git-cliff.org/docs). - [Installation](https://git-cliff.org/docs/installation/) - [Usage](https://git-cliff.org/docs/usage/examples) - [Configuration](https://git-cliff.org/docs/configuration) - [Templating](https://git-cliff.org/docs/category/templating) +You can also check out the blog posts written by the community: + +- [An introduction to git-cliff for release management](https://substack.evancarroll.com/p/git-cliff-for-automated-release-management): Learn how to automate your software releases +- [Git-cliff and monorepos](https://substack.evancarroll.com/p/git-cliff-and-monorepos): An introduction to the monorepo capabilities of git-cliff +- [git-cliff: The Smart Way to Handle Changelogs](https://medium.com/@toniomasotti/git-cliff-96449950db48) + ## In The Media - [Turning Git commits into changelog with git-cliff](https://www.youtube.com/watch?v=RWh8qbiLRts) - RustLab 2023 (Talk) - [An Interview with Orhun of git-cliff](https://console.substack.com/p/console-141) - Console #141 (Newsletter) +- [KaiCode Open Source Festival 2024](https://www.kaicode.org/2024.html) (Second place winner) ## Editor Support @@ -71,6 +65,7 @@ Learn how to use **git-cliff** from the [documentation](https://git-cliff.org/do to semantically bump a NodeJS package and generate a git-cliff powered changelog. - [release-plz](https://github.com/MarcoIeni/release-plz) - Release Rust packages from CI. - [git-changelog-command-line](https://github.com/tomasbjerre/git-changelog-command-line) - Generate changelog and determine next version with conventional commits. +- [git-changelog](https://github.com/pawamoy/git-changelog): Automatic Changelog generator using Jinja2 templates. ## Contributors @@ -82,10 +77,24 @@ Thanks goes to these wonderful people ✨ Made with [contrib.rocks](https://contrib.rocks). +## Socials + + + +
+ + + + + + + + + ## License Licensed under either of [Apache License Version 2.0](./LICENSE-APACHE) or [The MIT License](./LICENSE-MIT) at your option. ## Copyright -Copyright © 2021-2024, [git-cliff contributors](mailto:git-cliff@protonmail.com) +Copyright © 2021-2025, [git-cliff contributors](mailto:git-cliff@protonmail.com) diff --git a/RELEASE.md b/RELEASE.md index 676ac8ece1..d72495fbe2 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,6 +1,6 @@ # Creating a Release -[GitHub](https://github.com/orhun/git-cliff/releases), [crates.io](https://crates.io/crates/git-cliff/) and [Docker Hub](https://hub.docker.com/repository/docker/orhunp/git-cliff) releases are automated via [GitHub actions](./.github/workflows/cd.yml) and triggered by pushing a tag. +[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. 1. Run the [release script](./release.sh): `./release.sh v[X.Y.Z]` 2. Push the changes: `git push` diff --git a/SECURITY.md b/SECURITY.md index 33f170f819..9d1dc5518b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,4 +1,6 @@ -# Security Policy +# Security + +If you wish to report a security vulnerability privately, we appreciate your diligence. Please follow the guidelines below to submit your report. ## Supported Versions @@ -11,6 +13,30 @@ The following versions are supported with security updates: | 1.0.x | :x: | | < 0.1.0 | :x: | -## Reporting a Vulnerability +## Reporting + +To report a security vulnerability, please provide the following information: + +1. **PUBLIC** + + - Indicate whether this vulnerability has already been publicly discussed or disclosed. + - If so, provide relevant links. + +2. **DESCRIPTION** + - Provide a detailed description of the security vulnerability. + - Include as much information as possible to help us understand and address the issue. + +Send this information, along with any additional relevant details, to . + +## Confidentiality + +We kindly ask you to keep the report confidential until a public announcement is made. + +## Notes + +- Vulnerabilities will be handled on a best-effort basis. +- You may request an advance copy of the patched release, but we cannot guarantee early access before the public release. +- You will be notified via email simultaneously with the public announcement. +- We will respond within a few weeks to confirm whether your report has been accepted or rejected. -Please use the [GitHub Security Advisories](https://github.com/orhun/git-cliff/security/advisories/new) feature to report vulnerabilities. +Thank you for helping to improve the security of **git-cliff**! ⛰️ diff --git a/cliff.toml b/cliff.toml index 8c677a67fd..984b1445e4 100644 --- a/cliff.toml +++ b/cliff.toml @@ -1,17 +1,18 @@ # git-cliff ~ configuration file # https://git-cliff.org/docs/configuration -# -# Lines starting with "#" are comments. -# Configuration options are organized into tables and keys. -# See documentation for more information on available options. + +[remote.github] +owner = "orhun" +repo = "git-cliff" [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ [![animation](https://raw.githubusercontent.com/orhun/git-cliff/main/website/static/img/git-cliff-anim.gif)](https://git-cliff.org)\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {%- macro remote_url() -%} https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }} @@ -41,41 +42,59 @@ body = """ | filter(attribute="scope") | sort(attribute="scope") %} {{ self::print_commit(commit=commit) }} - {%- endfor -%} - {% raw %}\n{% endraw %}\ - {%- for commit in commits %} + {%- endfor %} + {% for commit in commits %} {%- if not commit.scope -%} {{ self::print_commit(commit=commit) }} {% endif -%} {% endfor -%} -{% endfor %}\n +{% endfor -%} +{%- if github -%} +{% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} + ## New Contributors ❤️ +{% endif %}\ +{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ + {%- endif %} +{%- endfor -%} +{%- endif %} + + """ -# template for the changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ """ -# remove the leading and trailing whitespace from the templates +# Remove leading and trailing whitespaces from the changelog's body. trim = true -# postprocessors +# An array of regex based postprocessors to modify the changelog. postprocessors = [ + # Replace the placeholder `` with a URL. { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL ] [git] -# parse the commits based on https://www.conventionalcommits.org +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org conventional_commits = true -# filter out the commits that are not conventional +# Exclude commits that do not match the conventional commits specification. filter_unconventional = true -# process each line of a commit as an individual commit +# Split commits on newlines, treating each line as an individual commit. split_commits = false -# regex for preprocessing the commit messages +# An array of regex based parsers to modify commit messages prior to further processing. commit_preprocessors = [ + # Replace issue numbers with link templates to be updated in `changelog.postprocessors`. { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))" }, - # Check spelling of the commit with https://github.com/crate-ci/typos - # If the spelling is incorrect, it will be automatically fixed. + # Check spelling of the commit message using https://github.com/crate-ci/typos. + # If the spelling is incorrect, it will be fixed automatically. { pattern = '.*', replace_command = 'typos --write-changes -' }, ] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "⛰️ Features" }, { message = "^fix", group = "🐛 Bug Fixes" }, @@ -89,21 +108,25 @@ commit_parsers = [ { message = "^chore\\(deps.*\\)", skip = true }, { message = "^chore\\(pr\\)", skip = true }, { message = "^chore\\(pull\\)", skip = true }, + { message = "^chore\\(npm\\).*yarn\\.lock", skip = true }, { message = "^chore|^ci", group = "⚙️ Miscellaneous Tasks" }, { body = ".*security", group = "🛡️ Security" }, { message = "^revert", group = "◀️ Revert" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser +# Prevent commits that are breaking from being excluded by commit parsers. protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = false -# regex for matching git tags +# Regex to select git tags that represent releases. tag_pattern = "v[0-9].*" -# regex for skipping tags +# Regex to select git tags that do not represent proper releases. +# Takes precedence over `tag_pattern`. +# Changes belonging to these releases will be included in the next release. skip_tags = "beta|alpha" -# regex for ignoring tags +# Regex to exclude git tags after applying the tag_pattern. ignore_tags = "rc|v2.1.0|v2.1.1" -# sort the tags topologically +# Order releases topologically instead of chronologically. topo_order = false -# sort the commits inside sections by oldest/newest order +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest sort_commits = "newest" diff --git a/config/cliff.toml b/config/cliff.toml index b0f88b2362..b278c497e5 100644 --- a/config/cliff.toml +++ b/config/cliff.toml @@ -1,18 +1,10 @@ -# git-cliff ~ default configuration file +# git-cliff ~ configuration file # https://git-cliff.org/docs/configuration -# -# Lines starting with "#" are comments. -# Configuration options are organized into tables and keys. -# See documentation for more information on available options. + [changelog] -# changelog header -header = """ -# Changelog\n -All notable changes to this project will be documented in this file.\n -""" -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -26,64 +18,75 @@ body = """ {% if commit.breaking %}[**breaking**] {% endif %}\ {{ commit.message | upper_first }}\ {% endfor %} -{% endfor %}\n -""" -# template for the changelog footer -footer = """ - +{% endfor %} """ -# remove the leading and trailing s +# Remove leading and trailing whitespaces from the changelog's body. trim = true -# postprocessors +# Render body even when there are no releases to process. +render_always = true +# An array of regex based postprocessors to modify the changelog. postprocessors = [ - # { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL + # Replace the placeholder with a URL. + #{ pattern = '', replace = "https://github.com/orhun/git-cliff" }, ] +# render body even when there are no releases to process +# render_always = true +# output file path +# output = "test.md" [git] -# parse the commits based on https://www.conventionalcommits.org +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org conventional_commits = true -# filter out the commits that are not conventional +# Exclude commits that do not match the conventional commits specification. filter_unconventional = true -# process each line of a commit as an individual commit +# Require all commits to be conventional. +# Takes precedence over filter_unconventional. +require_conventional = false +# Split commits on newlines, treating each line as an individual commit. split_commits = false -# regex for preprocessing the commit messages +# An array of regex based parsers to modify commit messages prior to further processing. commit_preprocessors = [ - # Replace issue numbers - #{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))"}, - # Check spelling of the commit with https://github.com/crate-ci/typos - # If the spelling is incorrect, it will be automatically fixed. - #{ pattern = '.*', replace_command = 'typos --write-changes -' }, + # Replace issue numbers with link templates to be updated in `changelog.postprocessors`. + #{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))"}, + # Check spelling of the commit message using https://github.com/crate-ci/typos. + # If the spelling is incorrect, it will be fixed automatically. + #{ pattern = '.*', replace_command = 'typos --write-changes -' }, ] -# regex for parsing and grouping commits +# Prevent commits that are breaking from being excluded by commit parsers. +protect_breaking_commits = false +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ - { message = "^feat", group = "🚀 Features" }, - { message = "^fix", group = "🐛 Bug Fixes" }, - { message = "^doc", group = "📚 Documentation" }, - { message = "^perf", group = "⚡ Performance" }, - { message = "^refactor", group = "🚜 Refactor" }, - { message = "^style", group = "🎨 Styling" }, - { message = "^test", group = "🧪 Testing" }, - { message = "^chore\\(release\\): prepare for", skip = true }, - { message = "^chore\\(deps.*\\)", skip = true }, - { message = "^chore\\(pr\\)", skip = true }, - { message = "^chore\\(pull\\)", skip = true }, - { message = "^chore|^ci", group = "⚙️ Miscellaneous Tasks" }, - { body = ".*security", group = "🛡️ Security" }, - { message = "^revert", group = "◀️ Revert" }, + { message = "^feat", group = "🚀 Features" }, + { message = "^fix", group = "🐛 Bug Fixes" }, + { message = "^doc", group = "📚 Documentation" }, + { message = "^perf", group = "⚡ Performance" }, + { message = "^refactor", group = "🚜 Refactor" }, + { message = "^style", group = "🎨 Styling" }, + { message = "^test", group = "🧪 Testing" }, + { message = "^chore\\(release\\): prepare for", skip = true }, + { message = "^chore\\(deps.*\\)", skip = true }, + { message = "^chore\\(pr\\)", skip = true }, + { message = "^chore\\(pull\\)", skip = true }, + { message = "^chore|^ci", group = "⚙️ Miscellaneous Tasks" }, + { body = ".*security", group = "🛡️ Security" }, + { message = "^revert", group = "◀️ Revert" }, + { message = ".*", group = "💼 Other" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = false -# regex for matching git tags -# tag_pattern = "v[0-9].*" -# regex for skipping tags -# skip_tags = "" -# regex for ignoring tags -# ignore_tags = "" -# sort the tags topologically +# An array of link parsers for extracting external references, and turning them into URLs, using regex. +link_parsers = [] +# Include only the tags that belong to the current branch. +use_branch_tags = false +# Order releases topologically instead of chronologically. topo_order = false -# sort the commits inside sections by oldest/newest order +# Order releases topologically instead of chronologically. +topo_order_commits = true +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest sort_commits = "oldest" -# limit the number of commits included in the changelog. -# limit_commits = 42 +# Process submodules commits +recurse_submodules = false diff --git a/examples/cocogitto.toml b/examples/cocogitto.toml index d6f47d6f36..1ec120cdcf 100644 --- a/examples/cocogitto.toml +++ b/examples/cocogitto.toml @@ -2,13 +2,14 @@ # https://git-cliff.org/docs/configuration [changelog] -# changelog header +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ --- {% if version %}\ @@ -38,29 +39,35 @@ body = """ {% endfor -%} {% endfor %}\n """ -# template for the changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ """ -# remove the leading and trailing whitespace from the templates +# Remove leading and trailing whitespaces from the changelog's body. trim = true # postprocessors postprocessors = [ + # Replace the placeholder `` with a URL. { pattern = '\$REPO', replace = "https://github.com/cocogitto/cocogitto" }, # replace repository URL ] [git] -# parse the commits based on https://www.conventionalcommits.org +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org conventional_commits = true -# filter out the commits that are not conventional +# Exclude commits that do not match the conventional commits specification. filter_unconventional = true -# process each line of a commit as an individual commit +# Split commits on newlines, treating each line as an individual commit. split_commits = false -# regex for preprocessing the commit messages +# An array of regex based parsers to modify commit messages prior to further processing. commit_preprocessors = [ - # { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](https://github.com/orhun/git-cliff/issues/${2}))"}, # replace issue numbers + # Replace issue numbers with link templates to be updated in `changelog.postprocessors`. + #{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](https://github.com/orhun/git-cliff/issues/${2}))"}, ] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "Features" }, { message = "^fix", group = "Bug Fixes" }, @@ -74,19 +81,10 @@ commit_parsers = [ { message = "^chore", group = "Miscellaneous Chores" }, { body = ".*security", group = "Security" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = false -# regex for matching git tags -tag_pattern = "v[0-9].*" -# regex for skipping tags -skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically +# Order releases topologically instead of chronologically. topo_order = false -# sort the commits inside sections by oldest/newest order +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest sort_commits = "oldest" -# limit the number of commits included in the changelog. -# limit_commits = 42 diff --git a/examples/detailed.toml b/examples/detailed.toml index 7648691440..e0bb2a8b8b 100644 --- a/examples/detailed.toml +++ b/examples/detailed.toml @@ -2,21 +2,22 @@ # https://git-cliff.org/docs/configuration [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file.\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ - ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} + ## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }} {% else %}\ - ## [unreleased] + ## Unreleased {% endif %}\ {% if previous %}\ - {% if previous.commit_id %} + {% if previous.commit_id and commit_id %} [{{ previous.commit_id | truncate(length=7, end="") }}]({{ previous.commit_id }})...\ [{{ commit_id | truncate(length=7, end="") }}]({{ commit_id }}) {% endif %}\ @@ -24,28 +25,32 @@ body = """ {% for group, commits in commits | group_by(attribute="group") %} ### {{ group | upper_first }} {% for commit in commits %} - - {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}]({{ commit.id }}))\ - {% for footer in commit.footers -%} - , {{ footer.token }}{{ footer.separator }}{{ footer.value }}\ - {% endfor %}\ + - {{ commit.message | split(pat="\n") | first | upper_first | trim }} ([{{ commit.id | truncate(length=7, end="") }}]({{ commit.id }}))\ + {% if commit.footers %}\ + {% for footer in commit.footers -%} + , {{ footer.token }}{{ footer.separator }}{{ footer.value }}\ + {% endfor %}\ + {% endif %}\ {% endfor %} {% endfor %}\n """ -# template for the changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ """ -# remove the leading and trailing whitespace from the templates +# Remove leading and trailing whitespaces from the changelog's body. trim = true [git] -# parse the commits based on https://www.conventionalcommits.org +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = false +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "Features" }, { message = "^fix", group = "Bug Fixes" }, @@ -61,17 +66,10 @@ commit_parsers = [ { message = "^chore|^ci", group = "Miscellaneous Tasks" }, { body = ".*security", group = "Security" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = false -# regex for matching git tags -tag_pattern = "v[0-9].*" -# regex for skipping tags -skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically +# Order releases topologically instead of chronologically. topo_order = false -# sort the commits inside sections by oldest/newest order +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest sort_commits = "oldest" diff --git a/examples/github-keepachangelog.toml b/examples/github-keepachangelog.toml index c50807f57b..fd53199ff2 100644 --- a/examples/github-keepachangelog.toml +++ b/examples/github-keepachangelog.toml @@ -2,7 +2,8 @@ # https://git-cliff.org/docs/configuration [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. @@ -10,8 +11,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {%- macro remote_url() -%} https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }} @@ -23,15 +24,13 @@ body = """ ## [Unreleased] {% endif -%} -### Details\ - {% for group, commits in commits | group_by(attribute="group") %} - #### {{ group | upper_first }} + ### {{ group | upper_first }} {%- for commit in commits %} - - {{ commit.message | upper_first | trim }}\ - {% if commit.github.username %} by @{{ commit.github.username }}{%- endif -%} - {% if commit.github.pr_number %} in \ - [#{{ commit.github.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.github.pr_number }}) \ + - {{ commit.message | split(pat="\n") | first | upper_first | trim }}\ + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in \ + [#{{ commit.remote.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.remote.pr_number }}) \ {%- endif -%} {% endfor %} {% endfor %} @@ -47,7 +46,8 @@ body = """ {%- endif %} {%- endfor %}\n """ -# template for the changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ {%- macro remote_url() -%} https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }} @@ -65,43 +65,40 @@ footer = """ {% endfor %} """ -# remove the leading and trailing whitespace from the templates +# Remove leading and trailing whitespaces from the changelog's body. trim = true [git] -# parse the commits based on https://www.conventionalcommits.org +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for preprocessing the commit messages +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = false +# An array of regex based parsers to modify commit messages prior to further processing. commit_preprocessors = [ - # remove issue numbers from commits - { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, + # Remove issue numbers. + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, ] -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ - { message = "^.*: add", group = "Added" }, - { message = "^.*: support", group = "Added" }, - { message = "^.*: remove", group = "Removed" }, - { message = "^.*: delete", group = "Removed" }, - { message = "^test", group = "Fixed" }, - { message = "^fix", group = "Fixed" }, - { message = "^.*: fix", group = "Fixed" }, - { message = "^.*", group = "Changed" }, + { message = "^[a|A]dd", group = "Added" }, + { message = "^[s|S]upport", group = "Added" }, + { message = "^[r|R]emove", group = "Removed" }, + { message = "^.*: add", group = "Added" }, + { message = "^.*: support", group = "Added" }, + { message = "^.*: remove", group = "Removed" }, + { message = "^.*: delete", group = "Removed" }, + { message = "^test", group = "Fixed" }, + { message = "^fix", group = "Fixed" }, + { message = "^.*: fix", group = "Fixed" }, + { message = "^.*", group = "Changed" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers -filter_commits = true -# regex for matching git tags -tag_pattern = "v[0-9].*" -# regex for skipping tags -skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically +# Exclude commits that are not matched by any commit parser. +filter_commits = false +# Order releases topologically instead of chronologically. topo_order = false -# sort the commits inside sections by oldest/newest order -sort_commits = "oldest" +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest +sort_commits = "newest" diff --git a/examples/github.toml b/examples/github.toml index e71507fd7a..1e44f3fe84 100644 --- a/examples/github.toml +++ b/examples/github.toml @@ -7,25 +7,26 @@ # token = "" [changelog] -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ ## What's Changed {%- if version %} in {{ version }}{%- endif -%} {% for commit in commits %} - {% if commit.github.pr_title -%} - {%- set commit_message = commit.github.pr_title -%} + {% if commit.remote.pr_title -%} + {%- set commit_message = commit.remote.pr_title -%} {%- else -%} {%- set commit_message = commit.message -%} {%- endif -%} * {{ commit_message | split(pat="\n") | first | trim }}\ - {% if commit.github.username %} by @{{ commit.github.username }}{%- endif -%} - {% if commit.github.pr_number %} in \ - [#{{ commit.github.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.github.pr_number }}) \ + {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%} + {% if commit.remote.pr_number %} in \ + [#{{ commit.remote.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.remote.pr_number }}) \ {%- endif %} {%- endfor -%} +{%- if github -%} {% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} {% raw %}\n{% endraw -%} ## New Contributors @@ -36,6 +37,7 @@ body = """ [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ {%- endif %} {%- endfor -%} +{%- endif -%} {% if version %} {% if previous.version %} @@ -49,38 +51,31 @@ body = """ https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }} {%- endmacro -%} """ -# remove the leading and trailing whitespace from the template +# Remove leading and trailing whitespaces from the changelog's body. trim = true -# changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ """ -# postprocessors +# An array of regex based postprocessors to modify the changelog. +# Replace the placeholder `` with a URL. postprocessors = [] [git] -# parse the commits based on https://www.conventionalcommits.org +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org conventional_commits = false -# filter out the commits that are not conventional +# Exclude commits that do not match the conventional commits specification. filter_unconventional = true -# process each line of a commit as an individual commit +# Split commits on newlines, treating each line as an individual commit. split_commits = false -# regex for preprocessing the commit messages -commit_preprocessors = [ - # remove issue numbers from commits - { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, -] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }] +# Exclude commits that are not matched by any commit parser. filter_commits = false -# regex for matching git tags -tag_pattern = "v[0-9].*" -# regex for skipping tags -skip_tags = "beta|alpha" -# regex for ignoring tags -ignore_tags = "rc" -# sort the tags topologically +# Order releases topologically instead of chronologically. topo_order = false -# sort the commits inside sections by oldest/newest order +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest sort_commits = "newest" diff --git a/examples/keepachangelog.toml b/examples/keepachangelog.toml index fdcbea2f99..5c99afa091 100644 --- a/examples/keepachangelog.toml +++ b/examples/keepachangelog.toml @@ -2,7 +2,8 @@ # https://git-cliff.org/docs/configuration [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file. @@ -10,8 +11,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version -%} ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} @@ -21,11 +22,12 @@ body = """ {% for group, commits in commits | group_by(attribute="group") %} ### {{ group | upper_first }} {% for commit in commits %} - - {{ commit.message | upper_first }}\ + - {{ commit.message | split(pat="\n") | first | upper_first | trim }}\ {% endfor %} {% endfor %}\n """ -# template for the changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ {% for release in releases -%} {% if release.version -%} @@ -33,6 +35,10 @@ footer = """ [{{ release.version | trim_start_matches(pat="v") }}]: \ https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}\ /compare/{{ release.previous.version }}..{{ release.version }} + {% else -%} + [{{ release.version | trim_start_matches(pat="v") }}]: \ + https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}\ + /tree/{{ release.version }} {% endif -%} {% else -%} [unreleased]: https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}\ @@ -41,38 +47,35 @@ footer = """ {% endfor %} """ -# remove the leading and trailing whitespace from the templates +# Remove leading and trailing whitespaces from the changelog's body. trim = true [git] -# parse the commits based on https://www.conventionalcommits.org +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org conventional_commits = true -# filter out the commits that are not conventional -filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = false +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ - { message = "^.*: add", group = "Added" }, - { message = "^.*: support", group = "Added" }, - { message = "^.*: remove", group = "Removed" }, - { message = "^.*: delete", group = "Removed" }, - { message = "^test", group = "Fixed" }, - { message = "^fix", group = "Fixed" }, - { message = "^.*: fix", group = "Fixed" }, - { message = "^.*", group = "Changed" }, + { message = "^[a|A]dd", group = "Added" }, + { message = "^[s|S]upport", group = "Added" }, + { message = "^[r|R]emove", group = "Removed" }, + { message = "^.*: add", group = "Added" }, + { message = "^.*: support", group = "Added" }, + { message = "^.*: remove", group = "Removed" }, + { message = "^.*: delete", group = "Removed" }, + { message = "^test", group = "Fixed" }, + { message = "^fix", group = "Fixed" }, + { message = "^.*: fix", group = "Fixed" }, + { message = "^.*", group = "Changed" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers -filter_commits = true -# regex for matching git tags -tag_pattern = "v[0-9].*" -# regex for skipping tags -skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically +# Prevent commits that are breaking from being excluded by commit parsers. +filter_commits = false +# Order releases topologically instead of chronologically. topo_order = false -# sort the commits inside sections by oldest/newest order +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest sort_commits = "oldest" diff --git a/examples/minimal.toml b/examples/minimal.toml index 05c62b9f01..195ed0e127 100644 --- a/examples/minimal.toml +++ b/examples/minimal.toml @@ -2,13 +2,13 @@ # https://git-cliff.org/docs/configuration [changelog] -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ - ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}\ + ## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }}\ {% else %}\ - ## [unreleased]\ + ## Unreleased\ {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} ### {{ group | upper_first }} diff --git a/examples/scoped.toml b/examples/scoped.toml index 46c06e37d7..107c63cae2 100644 --- a/examples/scoped.toml +++ b/examples/scoped.toml @@ -2,18 +2,19 @@ # https://git-cliff.org/docs/configuration [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file.\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ - ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} + ## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }} {% else %}\ - ## [unreleased] + ## Unreleased {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} ### {{ group | upper_first }} @@ -25,21 +26,25 @@ body = """ {% endfor %}\ {% endfor %}\n """ -# template for the changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ """ -# remove the leading and trailing whitespace from the templates +# Remove leading and trailing whitespaces from the changelog's body. trim = true [git] -# parse the commits based on https://www.conventionalcommits.org +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org conventional_commits = true -# filter out the commits that are not conventional +# Exclude commits that do not match the conventional commits specification. filter_unconventional = true -# process each line of a commit as an individual commit +# Split commits on newlines, treating each line as an individual commit. split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "Features" }, { message = "^fix", group = "Bug Fixes" }, @@ -52,17 +57,10 @@ commit_parsers = [ { message = "^chore", group = "Miscellaneous Tasks" }, { body = ".*security", group = "Security" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = false -# regex for matching git tags -tag_pattern = "v[0-9].*" -# regex for skipping tags -skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically +# Order releases topologically instead of chronologically. topo_order = false -# sort the commits inside sections by oldest/newest order +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest sort_commits = "oldest" diff --git a/examples/scopesorted.toml b/examples/scopesorted.toml index ce13531c08..8d37d4ba6e 100644 --- a/examples/scopesorted.toml +++ b/examples/scopesorted.toml @@ -2,18 +2,19 @@ # https://git-cliff.org/docs/configuration [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file.\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ - ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} + ## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }} {% else %}\ - ## [unreleased] + ## Unreleased {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} ### {{ group | upper_first }} @@ -38,22 +39,23 @@ body = """ {% raw %}\n{% endraw %}\ {% endfor %}\n """ -# template for the changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ """ -# remove the leading and trailing whitespace from the templates +# Remove leading and trailing whitespaces from the changelog's body. trim = true - [git] -# parse the commits based on https://www.conventionalcommits.org +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org conventional_commits = true -# filter out the commits that are not conventional +# Exclude commits that do not match the conventional commits specification. filter_unconventional = true -# process each line of a commit as an individual commit -split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "Features" }, { message = "^fix", group = "Bug Fixes" }, @@ -66,17 +68,10 @@ commit_parsers = [ { message = "^chore", group = "Miscellaneous Tasks" }, { body = ".*security", group = "Security" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = false -# regex for matching git tags -tag_pattern = "v[0-9].*" -# regex for skipping tags -skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically +# Order releases topologically instead of chronologically. topo_order = false -# sort the commits inside sections by oldest/newest order +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest sort_commits = "oldest" diff --git a/examples/statistics.toml b/examples/statistics.toml new file mode 100644 index 0000000000..3ed2b80964 --- /dev/null +++ b/examples/statistics.toml @@ -0,0 +1,75 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction +header = """ +# Changelog\n +All notable changes to this project will be documented in this file.\n +""" +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## Unreleased +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {{ commit.message | split(pat="\n") | first | upper_first | trim_end }}\ + {% endfor %} +{% endfor %} +### Commit Statistics\n +- {{ statistics.commit_count }} commit(s) contributed to the release. +- {{ statistics.commits_timespan | default(value=0) }} day(s) passed between the first and last commit. +- {{ statistics.conventional_commit_count }} commit(s) parsed as conventional. +- {{ statistics.links | length }} linked issue(s) detected in commits. +{%- if statistics.links | length > 0 %} + {%- for link in statistics.links %} + {{ " " }}- [{{ link.text }}]({{ link.href }}) (referenced {{ link.count }} time(s)) + {%- endfor %} +{%- endif %} +{%- if statistics.days_passed_since_last_release %} + - {{ statistics.days_passed_since_last_release }} day(s) passed between releases. +{%- endif %}\n\n +""" +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction +footer = """ + +""" +# Remove leading and trailing whitespaces from the changelog's body. +trim = true + +[git] +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = true +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = false +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "Features" }, + { message = "^fix", group = "Bug Fixes" }, + { message = "^doc", group = "Documentation" }, + { message = "^perf", group = "Performance" }, + { message = "^refactor", group = "Refactor" }, + { message = "^style", group = "Styling" }, + { message = "^test", group = "Testing" }, + { message = "^chore\\(release\\): prepare for", skip = true }, + { message = "^chore", group = "Miscellaneous Tasks" }, + { body = ".*security", group = "Security" }, + { body = ".*", group = "Other (unconventional)" }, +] +# Exclude commits that are not matched by any commit parser. +filter_commits = false +# Order releases topologically instead of chronologically. +topo_order = false +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest +sort_commits = "oldest" diff --git a/examples/unconventional.toml b/examples/unconventional.toml index 0a255cf488..6953f7f2bc 100644 --- a/examples/unconventional.toml +++ b/examples/unconventional.toml @@ -2,42 +2,47 @@ # https://git-cliff.org/docs/configuration [changelog] -# changelog header +# A Tera template to be rendered as the changelog's header. +# See https://keats.github.io/tera/docs/#introduction header = """ # Changelog\n All notable changes to this project will be documented in this file.\n """ -# template for the changelog body -# https://keats.github.io/tera/docs/#introduction +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction body = """ {% if version %}\ - ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} + ## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }} {% else %}\ - ## [unreleased] + ## Unreleased {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} ### {{ group | upper_first }} {% for commit in commits %} - - {{ commit.message | upper_first | trim_end }} {% if commit.conventional %}✔️{% else %}❌{% endif %}\ + - {{ commit.message | split(pat="\n") | first | trim_end }}\ {% endfor %} {% endfor %}\n """ -# template for the changelog footer +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction footer = """ """ -# remove the leading and trailing whitespace from the templates +# Remove leading and trailing whitespaces from the changelog's body. trim = true [git] -# parse the commits based on https://www.conventionalcommits.org -conventional_commits = true -# filter out the commits that are not conventional +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = false +# Exclude commits that do not match the conventional commits specification. filter_unconventional = false -# process each line of a commit as an individual commit +# Split commits on newlines, treating each line as an individual commit. split_commits = false -# regex for parsing and grouping commits +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. commit_parsers = [ { message = "^feat", group = "Features" }, { message = "^fix", group = "Bug Fixes" }, @@ -51,17 +56,10 @@ commit_parsers = [ { body = ".*security", group = "Security" }, { body = ".*", group = "Other (unconventional)" }, ] -# protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false -# filter out the commits that are not matched by commit parsers +# Exclude commits that are not matched by any commit parser. filter_commits = false -# regex for matching git tags -tag_pattern = "v[0-9].*" -# regex for skipping tags -skip_tags = "v0.1.0-beta.1" -# regex for ignoring tags -ignore_tags = "" -# sort the tags topologically +# Order releases topologically instead of chronologically. topo_order = false -# sort the commits inside sections by oldest/newest order +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest sort_commits = "oldest" diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000000..9208fc2e0f --- /dev/null +++ b/flake.lock @@ -0,0 +1,96 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1744932701, + "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1745116541, + "narHash": "sha256-5xzA6dTfqCfTTDCo3ipPZzrg3wp01xmcr73y4cTNMP8=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "e2142ef330a61c02f274ac9a9cb6f8487a5d0080", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000000..f30afd7ade --- /dev/null +++ b/flake.nix @@ -0,0 +1,62 @@ +{ + description = "git-cliff"; + + inputs = { + nixpkgs.url = + "github:nixos/nixpkgs/nixos-unstable"; # We want to use packages from the binary cache + flake-utils.url = "github:numtide/flake-utils"; + rust-overlay.url = "github:oxalica/rust-overlay"; + }; + + outputs = inputs@{ self, nixpkgs, flake-utils, ... }: + flake-utils.lib.eachSystem [ "x86_64-linux" ] (system: + let + pkgs = import nixpkgs { + inherit system; + overlays = [ inputs.rust-overlay.overlays.rust-overlay ]; + }; + base-git-cliff = { buildType }: pkgs.rustPlatform.buildRustPackage { + name = "git-cliff"; + src = ./.; + cargoLock = { + lockFile = ./Cargo.lock; + }; + checkType = "debug"; + inherit buildType; + checkFlags = [ + "--skip=command" + "--skip=repo" + ]; + meta = with pkgs.lib; { + description = "A highly customizable Changelog Generator that follows Conventional Commit specifications"; + homepage = "https://git-cliff.org/"; + license = [ licenses.mit licenses.asl20 ]; + }; + }; + in rec { + packages = rec { + git-cliff = base-git-cliff { buildType = "release"; }; + git-cliff-debug = base-git-cliff { buildType = "debug"; }; + default = git-cliff; + }; + + devShell = pkgs.mkShell { + CARGO_INSTALL_ROOT = "${toString ./.}/.cargo"; + + buildInputs = with pkgs; [ + pkg-config + openssl + cargo-binutils + cargo-watch + lld + (rust-bin.fromRustupToolchain { + channel = "stable"; + components = + [ "rust-analyzer" "rust-src" "rustfmt" "rustc" "cargo" "clippy" ]; + }) + ]; + }; + + checks.check = packages.git-cliff-debug; + }); +} diff --git a/git-cliff-core/Cargo.toml b/git-cliff-core/Cargo.toml index 7d87d461bc..c2479e211f 100644 --- a/git-cliff-core/Cargo.toml +++ b/git-cliff-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "git-cliff-core" -version = "2.2.1" # managed by release.sh +version = "2.10.0" # managed by release.sh description = "Core library of git-cliff" authors = ["git-cliff contributors "] license = "MIT OR Apache-2.0" @@ -8,78 +8,100 @@ readme = "../README.md" homepage = "https://github.com/orhun/git-cliff" repository = "https://github.com/orhun/git-cliff" keywords = ["changelog", "generator", "conventional", "commit"] -edition = "2021" -rust-version = "1.73.0" +edition = "2024" +rust-version = "1.85.1" [features] default = ["repo"] ## Enable parsing commits from a git repository. ## You can turn this off if you already have the commits to put in the ## changelog and you don't need `git-cliff` to parse them. -repo = ["dep:git2", "dep:glob", "dep:indexmap"] -## Enable integration with GitHub. -## You can turn this off if you don't use GitHub and don't want -## to make network requests to the GitHub API. -github = [ +repo = ["dep:git2", "dep:indexmap"] +# Enable integration with remote repositories. +remote = [ "dep:reqwest", "dep:http-cache-reqwest", "dep:reqwest-middleware", "dep:tokio", "dep:futures", ] +## Enable integration with GitHub. +## You can turn this off if you don't use GitHub and don't want +## to make network requests to the GitHub API. +github = ["remote"] +## Enable integration with GitLab. +## You can turn this off if you don't use GitLab and don't want +## to make network requests to the GitLab API. +gitlab = ["remote"] +## Enable integration with Bitbucket. +## You can turn this off if you don't use Bitbucket and don't want +## to make network requests to the Bitbucket API. +bitbucket = ["remote"] +## Enable integration with Gitea. +## You can turn this off if you don't use Gitea and don't want +## to make network requests to the Gitea API. +gitea = ["remote"] [dependencies] -glob = { workspace = true, optional = true } +glob.workspace = true regex.workspace = true log.workspace = true secrecy.workspace = true dirs.workspace = true lazy_static.workspace = true -thiserror = "1.0.58" -serde = { version = "1.0.197", features = ["derive"] } -serde_json = "1.0.115" +thiserror = "2.0.12" +serde = { version = "1.0.219", features = ["derive"] } +serde_json = "1.0.141" +bincode = "2.0.1" serde_regex = "1.1.0" -tera = "1.19.1" -indexmap = { version = "2.2.6", optional = true } -toml = "0.8.12" -lazy-regex = "3.1.0" -next_version = "0.2.15" -semver = "1.0.22" -document-features = { version = "0.2.8", optional = true } -reqwest = { version = "0.11.27", default-features = false, features = [ - "rustls-tls", - "json", -], optional = true } -http-cache-reqwest = { version = "0.13.0", optional = true } -reqwest-middleware = { version = "0.2.5", optional = true } -tokio = { version = "1.37.0", features = [ +tera = "1.20.0" +indexmap = { version = "2.10.0", optional = true } +toml = "0.9.2" +lazy-regex = "3.4.1" +next_version = "0.2.24" +semver = "1.0.26" +document-features = { version = "0.2.11", optional = true } +reqwest = { workspace = true, optional = true } +http-cache-reqwest = { version = "0.15.0", optional = true } +reqwest-middleware = { version = "0.4.0", optional = true } +tokio = { version = "1.47.0", features = [ "rt-multi-thread", "macros", ], optional = true } -futures = { version = "0.3.30", optional = true } -url = "2.5.0" +futures = { version = "0.3.31", optional = true } +url.workspace = true +dyn-clone = "1.0.17" +urlencoding = "2.1.3" +cacache = { version = "=13.0.0", features = ["mmap"], default-features = false } +time = "0.3.37" +chrono = { version = "0.4.41", features = ["serde"] } [dependencies.git2] -version = "0.18.3" +version = "0.20.2" default-features = false optional = true [dependencies.config] -version = "0.14.0" +version = "0.15.13" default-features = false features = ["toml", "yaml"] [dependencies.git-conventional] -version = "0.12.6" +version = "0.12.7" features = ["serde"] [dependencies.rust-embed] -version = "8.3.0" +version = "8.7.2" features = ["debug-embed", "compression"] [dev-dependencies] -pretty_assertions = "1.4.0" +pretty_assertions = "1.4.1" +expect-test = "1.5.1" +temp-dir = "0.1.16" [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] + +[lints] +workspace = true diff --git a/git-cliff-core/src/changelog.rs b/git-cliff-core/src/changelog.rs index 4014c95b47..7d37445963 100644 --- a/git-cliff-core/src/changelog.rs +++ b/git-cliff-core/src/changelog.rs @@ -1,635 +1,1217 @@ +use std::collections::HashMap; +use std::io::{Read, Write}; +use std::time::{SystemTime, UNIX_EPOCH}; + use crate::commit::Commit; -use crate::config::{ - Config, - GitConfig, -}; -use crate::error::Result; +use crate::config::{Config, GitConfig}; +use crate::error::{Error, Result}; +use crate::release::{Release, Releases}; +#[cfg(feature = "bitbucket")] +use crate::remote::bitbucket::BitbucketClient; +#[cfg(feature = "gitea")] +use crate::remote::gitea::GiteaClient; #[cfg(feature = "github")] -use crate::github::{ - GitHubClient, - GitHubCommit, - GitHubPullRequest, - FINISHED_FETCHING_MSG, - START_FETCHING_MSG, -}; -use crate::release::{ - Release, - Releases, -}; +use crate::remote::github::GitHubClient; +#[cfg(feature = "gitlab")] +use crate::remote::gitlab::GitLabClient; use crate::template::Template; -use std::collections::HashMap; -use std::io::Write; -use std::time::{ - SystemTime, - UNIX_EPOCH, -}; /// Changelog generator. #[derive(Debug)] pub struct Changelog<'a> { - /// Releases that the changelog will contain. - pub releases: Vec>, - body_template: Template, - footer_template: Option