Repository: orhun/git-cliff
Pull request #696 (2024-06-13 23:02:50)

feat(args): add `--ignore-tags` argument
## Description
This adds `--ignore-tags` argument to cli.

## How Has This Been Tested?
I included fixture based tests but - this fixture won't pass - because of [this line](https://github.com/orhun/git-cliff/compare/main...bukforks:git-cliff:ignore_tags-arg?expand=1#diff-fdca0d140df7079fcb7e73bf0751a34c4524d7ed3bcf09a96b8192e0323c54b0R11)
I am not sure if this is intended - I would expect this to work (not requiring a commit to recognize 1.0.0 version) - need more info.
If this is intended then simply need to uncomment this line.

## Types of Changes

<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->

- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
- [x] Documentation (no code change)
- [ ] Refactor (refactoring production code)
- [ ] Other <!--- (provide information) -->

## Checklist:

<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->

- [x] My code follows the code style of this project.
- [x] I have updated the documentation accordingly.
- [x] I have formatted the code with [rustfmt](https://github.com/rust-lang/rustfmt).
- [x] I checked the lints with [clippy](https://github.com/rust-lang/rust-clippy).
- [x] I have added tests to cover my changes.
- [ ] All new and existing tests passed.

<!--- Thank you for contributing to git-cliff! ⛰️  -->


codecov-commenter: ## [Codecov](https://app.codecov.io/gh/orhun/git-cliff/pull/696?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z) Report
Attention: Patch coverage is `0%` with `2 lines` in your changes missing coverage. Please review.
> Project coverage is 36.84%. Comparing base [(`8a9f9f4`)](https://app.codecov.io/gh/orhun/git-cliff/commit/8a9f9f48da42ec95f47a169370c6c5cdf2a0b327?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z) to head [(`e5f35de`)](https://app.codecov.io/gh/orhun/git-cliff/commit/e5f35de0a3303fc121c593b1c6ea434e14ba3e2c?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z).
> Report is 2 commits behind head on main.

| [Files](https://app.codecov.io/gh/orhun/git-cliff/pull/696?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z) | Patch % | Lines |
|---|---|---|
| [git-cliff/src/lib.rs](https://app.codecov.io/gh/orhun/git-cliff/pull/696?src=pr&el=tree&filepath=git-cliff%2Fsrc%2Flib.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z#diff-Z2l0LWNsaWZmL3NyYy9saWIucnM=) | 0.00% | [2 Missing :warning: ](https://app.codecov.io/gh/orhun/git-cliff/pull/696?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z) |

:exclamation: Your organization needs to install the [Codecov GitHub app](https://github.com/apps/codecov/installations/select_target) to enable full functionality.

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##             main     #696      +/-   ##
==========================================
- Coverage   36.89%   36.84%   -0.05%     
==========================================
  Files          18       18              
  Lines        1350     1352       +2     
==========================================
  Hits          498      498              
- Misses        852      854       +2     
```

| [Flag](https://app.codecov.io/gh/orhun/git-cliff/pull/696/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z) | Coverage Δ | |
|---|---|---|
| [unit-tests](https://app.codecov.io/gh/orhun/git-cliff/pull/696/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z) | `36.84% <0.00%> (-0.05%)` | :arrow_down: |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z#carryforward-flags-in-the-pull-request-comment) to find out more.


</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/orhun/git-cliff/pull/696?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Orhun+Parmaks%C4%B1z).


Patch:
diff --git a/.github/fixtures/new-fixture-template/cliff.toml b/.github/fixtures/new-fixture-template/cliff.toml
index 9a9d380..b26308c 100644
--- a/.github/fixtures/new-fixture-template/cliff.toml
+++ b/.github/fixtures/new-fixture-template/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/cliff.toml b/cliff.toml
index 81f90a0..09596b8 100644
--- a/cliff.toml
+++ b/cliff.toml
@@ -6,7 +6,7 @@
 # See documentation for more information on available options.
 
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 [![animation](https://raw.githubusercontent.com/orhun/git-cliff/main/website/static/img/git-cliff-anim.gif)](https://git-cliff.org)\n
 """
diff --git a/config/cliff.toml b/config/cliff.toml
index b0f88b2..ba12c0b 100644
--- a/config/cliff.toml
+++ b/config/cliff.toml
@@ -6,7 +6,7 @@
 # See documentation for more information on available options.
 
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/examples/cocogitto.toml b/examples/cocogitto.toml
index d6f47d6..6b30b74 100644
--- a/examples/cocogitto.toml
+++ b/examples/cocogitto.toml
@@ -2,7 +2,7 @@
 # https://git-cliff.org/docs/configuration
 
 [changelog]
-# changelog header
+# template for the changelog footer
 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
diff --git a/examples/detailed.toml b/examples/detailed.toml
index 7648691..70ca6a4 100644
--- a/examples/detailed.toml
+++ b/examples/detailed.toml
@@ -2,7 +2,7 @@
 # https://git-cliff.org/docs/configuration
 
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/examples/github-keepachangelog.toml b/examples/github-keepachangelog.toml
index c50807f..7c08e34 100644
--- a/examples/github-keepachangelog.toml
+++ b/examples/github-keepachangelog.toml
@@ -2,7 +2,7 @@
 # https://git-cliff.org/docs/configuration
 
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.
diff --git a/examples/keepachangelog.toml b/examples/keepachangelog.toml
index fdcbea2..abbedc1 100644
--- a/examples/keepachangelog.toml
+++ b/examples/keepachangelog.toml
@@ -2,7 +2,7 @@
 # https://git-cliff.org/docs/configuration
 
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.
diff --git a/examples/scoped.toml b/examples/scoped.toml
index 46c06e3..966a1e8 100644
--- a/examples/scoped.toml
+++ b/examples/scoped.toml
@@ -2,7 +2,7 @@
 # https://git-cliff.org/docs/configuration
 
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/examples/scopesorted.toml b/examples/scopesorted.toml
index ce13531..e7515b5 100644
--- a/examples/scopesorted.toml
+++ b/examples/scopesorted.toml
@@ -2,7 +2,7 @@
 # https://git-cliff.org/docs/configuration
 
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/examples/unconventional.toml b/examples/unconventional.toml
index 0a255cf..40f0a08 100644
--- a/examples/unconventional.toml
+++ b/examples/unconventional.toml
@@ -2,7 +2,7 @@
 # https://git-cliff.org/docs/configuration
 
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/git-cliff-core/src/changelog.rs b/git-cliff-core/src/changelog.rs
index 7707f37..870f633 100644
--- a/git-cliff-core/src/changelog.rs
+++ b/git-cliff-core/src/changelog.rs
@@ -29,6 +29,7 @@ use std::time::{
 pub struct Changelog<'a> {
 	/// Releases that the changelog will contain.
 	pub releases:       Vec<Release<'a>>,
+	header_template:    Option<Template>,
 	body_template:      Template,
 	footer_template:    Option<Template>,
 	config:             &'a Config,
@@ -41,6 +42,10 @@ impl<'a> Changelog<'a> {
 		let trim = config.changelog.trim.unwrap_or(true);
 		let mut changelog = Self {
 			releases,
+			header_template: match &config.changelog.header {
+				Some(header) => Some(Template::new(header.to_string(), trim)?),
+				None => None,
+			},
 			body_template: Template::new(
 				config
 					.changelog
@@ -502,16 +507,27 @@ impl<'a> Changelog<'a> {
 			.postprocessors
 			.clone()
 			.unwrap_or_default();
-		if let Some(header) = &self.config.changelog.header {
-			let write_result = write!(out, "{header}");
+
+		if let Some(header_template) = &self.header_template {
+			let write_result = writeln!(
+				out,
+				"{}",
+				header_template.render(
+					&Releases {
+						releases: &self.releases,
+					},
+					Some(&self.additional_context),
+					&postprocessors,
+				)?
+			);
 			if let Err(e) = write_result {
 				if e.kind() != std::io::ErrorKind::BrokenPipe {
 					return Err(e.into());
 				}
 			}
 		}
-		let mut releases = self.releases.clone();
-		for release in releases.iter_mut() {
+
+		for release in &self.releases {
 			let write_result = write!(
 				out,
 				"{}",
@@ -527,13 +543,14 @@ impl<'a> Changelog<'a> {
 				}
 			}
 		}
+
 		if let Some(footer_template) = &self.footer_template {
 			let write_result = writeln!(
 				out,
 				"{}",
 				footer_template.render(
 					&Releases {
-						releases: &releases,
+						releases: &self.releases,
 					},
 					Some(&self.additional_context),
 					&postprocessors,
@@ -545,6 +562,7 @@ impl<'a> Changelog<'a> {
 				}
 			}
 		}
+
 		Ok(())
 	}
 
@@ -632,6 +650,7 @@ mod test {
 						sha:           Some(String::from("tea")),
 						message:       None,
 						body:          None,
+						footer:        None,
 						group:         Some(String::from("I love tea")),
 						default_scope: None,
 						scope:         None,
@@ -643,6 +662,7 @@ mod test {
 						sha:           Some(String::from("coffee")),
 						message:       None,
 						body:          None,
+						footer:        None,
 						group:         None,
 						default_scope: None,
 						scope:         None,
@@ -654,6 +674,7 @@ mod test {
 						sha:           Some(String::from("coffee2")),
 						message:       None,
 						body:          None,
+						footer:        None,
 						group:         None,
 						default_scope: None,
 						scope:         None,
@@ -665,6 +686,7 @@ mod test {
 						sha:           None,
 						message:       Regex::new(r".*merge.*").ok(),
 						body:          None,
+						footer:        None,
 						group:         None,
 						default_scope: None,
 						scope:         None,
@@ -676,6 +698,7 @@ mod test {
 						sha:           None,
 						message:       Regex::new("feat*").ok(),
 						body:          None,
+						footer:        None,
 						group:         Some(String::from("New features")),
 						default_scope: Some(String::from("other")),
 						scope:         None,
@@ -687,6 +710,7 @@ mod test {
 						sha:           None,
 						message:       Regex::new("^fix*").ok(),
 						body:          None,
+						footer:        None,
 						group:         Some(String::from("Bug Fixes")),
 						default_scope: None,
 						scope:         None,
@@ -698,6 +722,7 @@ mod test {
 						sha:           None,
 						message:       Regex::new("doc:").ok(),
 						body:          None,
+						footer:        None,
 						group:         Some(String::from("Documentation")),
 						default_scope: None,
 						scope:         Some(String::from("documentation")),
@@ -709,6 +734,7 @@ mod test {
 						sha:           None,
 						message:       Regex::new("docs:").ok(),
 						body:          None,
+						footer:        None,
 						group:         Some(String::from("Documentation")),
 						default_scope: None,
 						scope:         Some(String::from("documentation")),
@@ -720,6 +746,7 @@ mod test {
 						sha:           None,
 						message:       Regex::new(r"match\((.*)\):.*").ok(),
 						body:          None,
+						footer:        None,
 						group:         Some(String::from("Matched ($1)")),
 						default_scope: None,
 						scope:         None,
@@ -727,10 +754,23 @@ mod test {
 						field:         None,
 						pattern:       None,
 					},
+					CommitParser {
+						sha:           None,
+						message:       None,
+						body:          None,
+						footer:        Regex::new("Footer:.*").ok(),
+						group:         Some(String::from("Footer")),
+						default_scope: None,
+						scope:         Some(String::from("footer")),
+						skip:          None,
+						field:         None,
+						pattern:       None,
+					},
 					CommitParser {
 						sha:           None,
 						message:       Regex::new(".*").ok(),
 						body:          None,
+						footer:        None,
 						group:         Some(String::from("Other")),
 						default_scope: Some(String::from("other")),
 						scope:         None,
@@ -832,6 +872,10 @@ mod test {
 					String::from("coffee"),
 					String::from("revert(app): skip this commit"),
 				),
+				Commit::new(
+					String::from("footer"),
+					String::from("misc: use footer\n\nFooter: footer text"),
+				),
 			],
 			commit_id: Some(String::from("0bc123")),
 			timestamp: 50000000,
@@ -927,6 +971,7 @@ mod test {
 		assert_eq!(
 			String::from(
 				r#"# Changelog
+
 			## Release [v1.1.0] - 1970-01-01
 
 
@@ -957,6 +1002,10 @@ mod test {
 			- update docs
 			- add some documentation
 
+			### Footer
+			#### footer
+			- use footer
+
 			### I love tea
 			#### app
 			- damn right
@@ -998,6 +1047,13 @@ mod test {
 		config.git.split_commits = Some(true);
 		config.git.filter_unconventional = Some(false);
 		config.git.protect_breaking_commits = Some(true);
+
+		if let Some(parsers) = config.git.commit_parsers.as_mut() {
+			for parser in parsers.iter_mut().filter(|p| p.footer.is_some()) {
+				parser.skip = Some(true)
+			}
+		}
+
 		releases[0].commits.push(Commit::new(
 			String::from("0bc123"),
 			String::from(
@@ -1032,6 +1088,7 @@ chore(deps): fix broken deps
 		assert_eq!(
 			String::from(
 				r#"# Changelog
+
 			## Unreleased
 
 			### Bug Fixes
@@ -1135,6 +1192,7 @@ chore(deps): fix broken deps
 		changelog.generate(&mut out)?;
 		expect_test::expect![[r#"
     # Changelog
+
     ## Unreleased
 
     ### Bug Fixes
@@ -1164,6 +1222,10 @@ chore(deps): fix broken deps
     - update docs
     - add some documentation
 
+    ### Footer
+    #### footer
+    - use footer
+
     ### I love tea
     #### app
     - damn right
diff --git a/git-cliff-core/src/commit.rs b/git-cliff-core/src/commit.rs
index 1a74d1e..f609284 100644
--- a/git-cliff-core/src/commit.rs
+++ b/git-cliff-core/src/commit.rs
@@ -277,6 +277,13 @@ impl Commit<'_> {
 			if let Some(body_regex) = parser.body.as_ref() {
 				regex_checks.push((body_regex, body.clone().unwrap_or_default()))
 			}
+			if let (Some(footer_regex), Some(footers)) = (
+				parser.footer.as_ref(),
+				self.conv.as_ref().map(|v| v.footers()),
+			) {
+				regex_checks
+					.extend(footers.iter().map(|f| (footer_regex, f.to_string())));
+			}
 			if let (Some(field_name), Some(pattern_regex)) =
 				(parser.field.as_ref(), parser.pattern.as_ref())
 			{
@@ -483,6 +490,7 @@ mod test {
 				sha:           None,
 				message:       Regex::new("test*").ok(),
 				body:          None,
+				footer:        None,
 				group:         Some(String::from("test_group")),
 				default_scope: Some(String::from("test_scope")),
 				scope:         None,
@@ -656,6 +664,7 @@ mod test {
 				sha:           None,
 				message:       None,
 				body:          None,
+				footer:        None,
 				group:         Some(String::from("Test group")),
 				default_scope: None,
 				scope:         None,
@@ -684,6 +693,7 @@ mod test {
 				)),
 				message:       None,
 				body:          None,
+				footer:        None,
 				group:         None,
 				default_scope: None,
 				scope:         None,
@@ -703,6 +713,7 @@ mod test {
 				)),
 				message:       None,
 				body:          None,
+				footer:        None,
 				group:         Some(String::from("Test group")),
 				default_scope: None,
 				scope:         None,
diff --git a/git-cliff-core/src/config.rs b/git-cliff-core/src/config.rs
index 0d2a855..1a142ab 100644
--- a/git-cliff-core/src/config.rs
+++ b/git-cliff-core/src/config.rs
@@ -213,6 +213,9 @@ pub struct CommitParser {
 	/// Regex for matching the commit body.
 	#[serde(with = "serde_regex", default)]
 	pub body:          Option<Regex>,
+	/// Regex for matching the commit footer.
+	#[serde(with = "serde_regex", default)]
+	pub footer:        Option<Regex>,
 	/// Group of the commit.
 	pub group:         Option<String>,
 	/// Default scope of the commit.
diff --git a/git-cliff/src/args.rs b/git-cliff/src/args.rs
index 3d52a7b..1fcd1c3 100644
--- a/git-cliff/src/args.rs
+++ b/git-cliff/src/args.rs
@@ -142,6 +142,9 @@ pub struct Opt {
 		num_args(1..)
 	)]
 	pub with_commit:     Option<Vec<String>>,
+	/// Sets the tags to ignore in the changelog.
+	#[arg(long, env = "GIT_CLIFF_IGNORE_TAGS", value_name = "PATTERN")]
+	pub ignore_tags:     Option<Regex>,
 	/// Sets commits that will be skipped in the changelog.
 	#[arg(
 		long,
diff --git a/git-cliff/src/lib.rs b/git-cliff/src/lib.rs
index 61a835f..a58c5d5 100644
--- a/git-cliff/src/lib.rs
+++ b/git-cliff/src/lib.rs
@@ -489,7 +489,9 @@ pub fn run(mut args: Opt) -> Result<()> {
 	if args.tag.is_some() {
 		config.bump.initial_tag.clone_from(&args.tag);
 	}
-
+	if args.ignore_tags.is_some() {
+		config.git.ignore_tags.clone_from(&args.ignore_tags);
+	}
 	// Process the repositories.
 	let repositories = args.repository.clone().unwrap_or(vec![env::current_dir()?]);
 	let mut releases = Vec::<Release>::new();
diff --git a/website/docs/configuration/changelog.md b/website/docs/configuration/changelog.md
index 22fae40..90387eb 100644
--- a/website/docs/configuration/changelog.md
+++ b/website/docs/configuration/changelog.md
@@ -22,23 +22,25 @@ postprocessors = [{ pattern = "foo", replace = "bar"}]
 
 <!-- {% endraw %} -->
 
+See [templating](/docs/category/templating) for more detail.
+
 ### header
 
-Header text that will be added to the beginning of the changelog.
+Header template that will be rendered and added to the beginning of the changelog.
+
+The template context contains the full list of releases in the variable `releases`. See [templating](/docs/category/templating) for more details.
 
 ### body
 
-Body template that represents a single release in the changelog.
+Body template that will be rendered for each release in the changelog. For example, if the changelog contains 3 releases, it will be rendered 3 times, once for each release.
 
-See [templating](/docs/category/templating) for more detail.
+The template context contains one release in the variable `release`. See [templating](/docs/category/templating) for more detail.
 
 ### footer
 
 Footer template that will be rendered and added to the end of the changelog.
 
-The template context is the same as [`body`](#body) and contains all the releases instead of a single release.
-
-For example, to get the list of releases, use the `{{ releases }}` variable in the template. To get information about a single release, iterate over this array and access the fields similar to [`body`](#body).
+The template context contains the full list of releases in the variable `releases`. See [templating](/docs/category/templating) for more details.
 
 See [Keep a Changelog configuration](/docs/templating/examples#keep-a-changelog) for seeing the example of adding links to the end of the changelog.
 
diff --git a/website/docs/configuration/git.md b/website/docs/configuration/git.md
index b7d7145..e4f7050 100644
--- a/website/docs/configuration/git.md
+++ b/website/docs/configuration/git.md
@@ -146,6 +146,10 @@ Examples:
   - Group the commit as "Features" if the commit message (description) starts with "feat".
 - `{ body = ".*security", group = "Security" }`
   - Group the commit as "Security" if the commit body contains "security".
+    <!-- Conventional commits parser is out of sync with spec, parsing only separator ":", not ": "; see: -->
+    <!-- https://github.com/conventional-commits/parser/issues/47 -->
+- `{ footer = "^changelog: ?ignore", skip = true }`
+  - Skip processing the commit if the commit footer contains "changelog: ignore".
 - `{ message = '^fix\((.*)\)', group = 'Fix (${1})' }`
   - Use the matched scope value from the commit message in the group name.
 - `{ message = ".*deprecated", body = ".*deprecated", group = "Deprecation" }`
@@ -193,6 +197,8 @@ A regex for skip processing the matched tags.
 
 A regex for ignore processing the matched tags.
 
+This value can be also overridden with using the `--ignore-tags` argument.
+
 While `skip_tags` drop commits from the changelog, `ignore_tags` include ignored commits into the next tag.
 
 ### topo_order
diff --git a/website/docs/usage/args.md b/website/docs/usage/args.md
index f131874..5219301 100644
--- a/website/docs/usage/args.md
+++ b/website/docs/usage/args.md
@@ -35,6 +35,7 @@ git-cliff [FLAGS] [OPTIONS] [--] [RANGE]
     --exclude-path <PATTERN>...  Sets the path to exclude related commits [env: GIT_CLIFF_EXCLUDE_PATH=]
     --tag-pattern <PATTERN>      Sets the regex for matching git tags [env: GIT_CLIFF_TAG_PATTERN=]
     --with-commit <MSG>...       Sets custom commit messages to include in the changelog [env: GIT_CLIFF_WITH_COMMIT=]
+    --ignore-tags <PATTERN>      Sets the tags to ignore in the changelog [env: GIT_CLIFF_IGNORE_TAGS=]
     --skip-commit <SHA1>...      Sets commits that will be skipped in the changelog [env: GIT_CLIFF_SKIP_COMMIT=]
 -p, --prepend <PATH>             Prepends entries to the given changelog file [env: GIT_CLIFF_PREPEND=]
 -o, --output [<PATH>]            Writes output to the given file [env: GIT_CLIFF_OUTPUT=]


Test patch:
diff --git a/.github/fixtures/test-bump-initial-tag-cli-arg/cliff.toml b/.github/fixtures/test-bump-initial-tag-cli-arg/cliff.toml
index 4eb8097..8670e6d 100644
--- a/.github/fixtures/test-bump-initial-tag-cli-arg/cliff.toml
+++ b/.github/fixtures/test-bump-initial-tag-cli-arg/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-bump-initial-tag-default/cliff.toml b/.github/fixtures/test-bump-initial-tag-default/cliff.toml
index 5da431c..091fd6b 100644
--- a/.github/fixtures/test-bump-initial-tag-default/cliff.toml
+++ b/.github/fixtures/test-bump-initial-tag-default/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-bump-initial-tag/cliff.toml b/.github/fixtures/test-bump-initial-tag/cliff.toml
index 38080e4..e584e66 100644
--- a/.github/fixtures/test-bump-initial-tag/cliff.toml
+++ b/.github/fixtures/test-bump-initial-tag/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-bump-version-keep-zerover/cliff.toml b/.github/fixtures/test-bump-version-keep-zerover/cliff.toml
index 1541430..dad5dcf 100644
--- a/.github/fixtures/test-bump-version-keep-zerover/cliff.toml
+++ b/.github/fixtures/test-bump-version-keep-zerover/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-bump-version/cliff.toml b/.github/fixtures/test-bump-version/cliff.toml
index ec2fc39..c48526d 100644
--- a/.github/fixtures/test-bump-version/cliff.toml
+++ b/.github/fixtures/test-bump-version/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-bumped-version/cliff.toml b/.github/fixtures/test-bumped-version/cliff.toml
index ec2fc39..c48526d 100644
--- a/.github/fixtures/test-bumped-version/cliff.toml
+++ b/.github/fixtures/test-bumped-version/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
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 00000000..63a1308
--- /dev/null
+++ b/.github/fixtures/test-cli-arg-ignore-tags/cliff.toml
@@ -0,0 +1,33 @@
+[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
+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
+"""
+# template for the changelog footer
+footer = """
+<!-- generated by git-cliff -->
+"""
+# remove the leading and trailing whitespace from the templates
+trim = true
+
+[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 00000000..4cc9167
--- /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 00000000..c847179
--- /dev/null
+++ b/.github/fixtures/test-cli-arg-ignore-tags/expected.md
@@ -0,0 +1,22 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+## [1.0.1] - 2021-01-23
+
+### Fix
+
+- Simple fix
+
+## [1.0.0] - 2021-01-23
+
+### Chore
+
+- Why do i need a commit here?
+
+### Feat
+
+- Add first beta feature
+- Add second beta feature
+
+<!-- generated by git-cliff -->
diff --git a/.github/fixtures/test-commit-footers/cliff.toml b/.github/fixtures/test-commit-footers/cliff.toml
index e143f3b..94920a9 100644
--- a/.github/fixtures/test-commit-footers/cliff.toml
+++ b/.github/fixtures/test-commit-footers/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-commit-preprocessors/cliff.toml b/.github/fixtures/test-commit-preprocessors/cliff.toml
index 2d86f4c..63f6af2 100644
--- a/.github/fixtures/test-commit-preprocessors/cliff.toml
+++ b/.github/fixtures/test-commit-preprocessors/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-configure-from-cargo-toml/Cargo.toml b/.github/fixtures/test-configure-from-cargo-toml/Cargo.toml
index d44e73b..2cbf7a5 100644
--- a/.github/fixtures/test-configure-from-cargo-toml/Cargo.toml
+++ b/.github/fixtures/test-configure-from-cargo-toml/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
 edition = "2021"
 
 [package.metadata.git-cliff.changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-custom-scope/cliff.toml b/.github/fixtures/test-custom-scope/cliff.toml
index fe30b90..d4dfdda 100644
--- a/.github/fixtures/test-custom-scope/cliff.toml
+++ b/.github/fixtures/test-custom-scope/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-custom-tag-pattern/cliff.toml b/.github/fixtures/test-custom-tag-pattern/cliff.toml
index fc3d5db..a3d1e0f 100644
--- a/.github/fixtures/test-custom-tag-pattern/cliff.toml
+++ b/.github/fixtures/test-custom-tag-pattern/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-date-order/cliff.toml b/.github/fixtures/test-date-order/cliff.toml
index 5504810..61d862d 100644
--- a/.github/fixtures/test-date-order/cliff.toml
+++ b/.github/fixtures/test-date-order/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-footer-filter/cliff.toml b/.github/fixtures/test-footer-filter/cliff.toml
new file mode 100644
index 00000000..392bb0a
--- /dev/null
+++ b/.github/fixtures/test-footer-filter/cliff.toml
@@ -0,0 +1,39 @@
+[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
+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
+"""
+# template for the changelog footer
+footer = """
+<!-- generated by git-cliff -->
+"""
+# remove the leading and trailing whitespace from the templates
+trim = true
+
+[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 00000000..61da077
--- /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 00000000..df28a3d
--- /dev/null
+++ b/.github/fixtures/test-footer-filter/expected.md
@@ -0,0 +1,23 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+## [unreleased]
+
+### Test
+
+- Add tests
+
+## [0.2.0] - 2022-04-06
+
+### Refactor
+
+- Change feature 1
+
+## [0.1.0] - 2022-04-06
+
+### Features
+
+- Add feature 1
+
+<!-- generated by git-cliff -->
diff --git a/.github/fixtures/test-footer-template/cliff.toml b/.github/fixtures/test-footer-template/cliff.toml
index ebfa371..8b8de92 100644
--- a/.github/fixtures/test-footer-template/cliff.toml
+++ b/.github/fixtures/test-footer-template/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-header-template/cliff.toml b/.github/fixtures/test-header-template/cliff.toml
new file mode 100644
index 00000000..91a9f81
--- /dev/null
+++ b/.github/fixtures/test-header-template/cliff.toml
@@ -0,0 +1,31 @@
+[changelog]
+# template for the changelog footer
+header = """
+# Changelog
+{% for release in releases %}\
+    {% if release.version %}\
+        {% if release.previous.version %}\
+            <!--{{ release.previous.version }}..{{ release.version }}-->
+        {% endif %}\
+    {% else %}\
+        <!--{{ release.previous.version }}..HEAD-->
+    {% 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
+"""
+# remove the leading and trailing whitespace from the templates
+trim = true
diff --git a/.github/fixtures/test-header-template/commit.sh b/.github/fixtures/test-header-template/commit.sh
new file mode 100644
index 00000000..ed35b19
--- /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 00000000..f9b52bf
--- /dev/null
+++ b/.github/fixtures/test-header-template/expected.md
@@ -0,0 +1,33 @@
+# Changelog
+<!--v3.0.0..HEAD-->
+<!--v0.2.0..v3.0.0-->
+<!--v0.1.0..v0.2.0-->
+## [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 62a6561..705f8fc 100644
--- a/.github/fixtures/test-ignore-tags/cliff.toml
+++ b/.github/fixtures/test-ignore-tags/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
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 c96c373..e6d5eaf 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,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.
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 c96c373..e6d5eaf 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,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.
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 c96c373..e6d5eaf 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,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.
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 c96c373..e6d5eaf 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,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.
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 c96c373..e6d5eaf 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,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.
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 c96c373..e6d5eaf 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,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.
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 c96c373..e6d5eaf 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,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.
diff --git a/.github/fixtures/test-keep-a-changelog-links/cliff.toml b/.github/fixtures/test-keep-a-changelog-links/cliff.toml
index 59ef355..f02b8cb 100644
--- a/.github/fixtures/test-keep-a-changelog-links/cliff.toml
+++ b/.github/fixtures/test-keep-a-changelog-links/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.
diff --git a/.github/fixtures/test-latest-with-one-tag/cliff.toml b/.github/fixtures/test-latest-with-one-tag/cliff.toml
index 5504810..61d862d 100644
--- a/.github/fixtures/test-latest-with-one-tag/cliff.toml
+++ b/.github/fixtures/test-latest-with-one-tag/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-limit-commits/cliff.toml b/.github/fixtures/test-limit-commits/cliff.toml
index f053d36..bac91dc 100644
--- a/.github/fixtures/test-limit-commits/cliff.toml
+++ b/.github/fixtures/test-limit-commits/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-no-exec/cliff.toml b/.github/fixtures/test-no-exec/cliff.toml
index 7a8024d..fd7d92d 100644
--- a/.github/fixtures/test-no-exec/cliff.toml
+++ b/.github/fixtures/test-no-exec/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-regex-replace-parser/cliff.toml b/.github/fixtures/test-regex-replace-parser/cliff.toml
index b464add..8b05dbf 100644
--- a/.github/fixtures/test-regex-replace-parser/cliff.toml
+++ b/.github/fixtures/test-regex-replace-parser/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-skip-breaking-changes/cliff.toml b/.github/fixtures/test-skip-breaking-changes/cliff.toml
index d057483..fdf5144 100644
--- a/.github/fixtures/test-skip-breaking-changes/cliff.toml
+++ b/.github/fixtures/test-skip-breaking-changes/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-skip-commits/cliff.toml b/.github/fixtures/test-skip-commits/cliff.toml
index 9a9d380..b26308c 100644
--- a/.github/fixtures/test-skip-commits/cliff.toml
+++ b/.github/fixtures/test-skip-commits/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-split-commits/cliff.toml b/.github/fixtures/test-split-commits/cliff.toml
index ec20df8..08d2919 100644
--- a/.github/fixtures/test-split-commits/cliff.toml
+++ b/.github/fixtures/test-split-commits/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-topo-order-arg/cliff.toml b/.github/fixtures/test-topo-order-arg/cliff.toml
index 5504810..61d862d 100644
--- a/.github/fixtures/test-topo-order-arg/cliff.toml
+++ b/.github/fixtures/test-topo-order-arg/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/fixtures/test-topo-order/cliff.toml b/.github/fixtures/test-topo-order/cliff.toml
index f4bbb0a..28911d2 100644
--- a/.github/fixtures/test-topo-order/cliff.toml
+++ b/.github/fixtures/test-topo-order/cliff.toml
@@ -1,5 +1,5 @@
 [changelog]
-# changelog header
+# template for the changelog footer
 header = """
 # Changelog\n
 All notable changes to this project will be documented in this file.\n
diff --git a/.github/workflows/test-fixtures.yml b/.github/workflows/test-fixtures.yml
index 59fe955..0afbefd 100644
--- a/.github/workflows/test-fixtures.yml
+++ b/.github/workflows/test-fixtures.yml
@@ -77,6 +77,9 @@ jobs:
             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"
+
     steps:
       - name: Checkout
         uses: actions/checkout@v4
diff --git a/git-cliff-core/tests/integration_test.rs b/git-cliff-core/tests/integration_test.rs
index 99d790d..95fd991 100644
--- a/git-cliff-core/tests/integration_test.rs
+++ b/git-cliff-core/tests/integration_test.rs
@@ -56,6 +56,7 @@ fn generate_changelog() -> Result<()> {
 				sha:           Some(String::from("coffee")),
 				message:       None,
 				body:          None,
+				footer:        None,
 				group:         Some(String::from("I love coffee")),
 				default_scope: None,
 				scope:         None,
@@ -67,6 +68,7 @@ fn generate_changelog() -> Result<()> {
 				sha:           None,
 				message:       Regex::new("^feat").ok(),
 				body:          None,
+				footer:        None,
 				group:         Some(String::from("shiny features")),
 				default_scope: None,
 				scope:         None,
@@ -78,6 +80,7 @@ fn generate_changelog() -> Result<()> {
 				sha:           None,
 				message:       Regex::new("^fix").ok(),
 				body:          None,
+				footer:        None,
 				group:         Some(String::from("fix bugs")),
 				default_scope: None,
 				scope:         None,
@@ -89,6 +92,7 @@ fn generate_changelog() -> Result<()> {
 				sha:           None,
 				message:       Regex::new("^test").ok(),
 				body:          None,
+				footer:        None,
 				group:         None,
 				default_scope: None,
 				scope:         Some(String::from("tests")),
@@ -100,6 +104,7 @@ fn generate_changelog() -> Result<()> {
 				sha:           None,
 				message:       None,
 				body:          None,
+				footer:        None,
 				group:         Some(String::from("docs")),
 				default_scope: None,
 				scope:         None,