From a42800c9534ec3f577017059e09756d649fbbe09 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung Date: Wed, 14 Jan 2026 12:26:11 +0800 Subject: [PATCH] feat(cli): add cz --version back and add cz --report to separate them from cz version --- commitizen/cli.py | 24 +++++++++++++++++++ tests/test_cli.py | 19 +++++++++++++++ ...invalid_command_py_3_10___invalid_arg_.txt | 3 ++- ...nvalid_command_py_3_10_invalidCommand_.txt | 3 ++- ...invalid_command_py_3_11___invalid_arg_.txt | 3 ++- ...nvalid_command_py_3_11_invalidCommand_.txt | 3 ++- ...invalid_command_py_3_12___invalid_arg_.txt | 3 ++- ...nvalid_command_py_3_12_invalidCommand_.txt | 3 ++- ...invalid_command_py_3_13___invalid_arg_.txt | 3 ++- ...nvalid_command_py_3_13_invalidCommand_.txt | 3 ++- ...invalid_command_py_3_14___invalid_arg_.txt | 3 ++- ...nvalid_command_py_3_14_invalidCommand_.txt | 3 ++- tests/test_cli/test_no_argv_py_3_10_.txt | 5 +++- tests/test_cli/test_no_argv_py_3_11_.txt | 5 +++- tests/test_cli/test_no_argv_py_3_12_.txt | 5 +++- tests/test_cli/test_no_argv_py_3_13_.txt | 5 +++- tests/test_cli/test_no_argv_py_3_14_.txt | 5 +++- 17 files changed, 83 insertions(+), 15 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 79988fb5cb..ad5ffe4f97 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -2,6 +2,7 @@ import argparse import logging +import platform import sys from copy import deepcopy from functools import partial @@ -13,6 +14,7 @@ from decli import cli from commitizen import commands, config, out, version_schemes +from commitizen.__version__ import __version__ from commitizen.defaults import DEFAULT_SETTINGS from commitizen.exceptions import ( CommitizenException, @@ -103,6 +105,16 @@ def __call__( "required": False, "help": "Comma-separated error codes that won't raise error, e.g., cz -nr 1,2,3 bump. See codes at https://commitizen-tools.github.io/commitizen/exit_codes/", }, + { + "name": ["-v", "--version"], + "action": "store_true", + "help": "Show the version of the installed commitizen", + }, + { + "name": ["--report"], + "action": "store_true", + "help": "Show system information for reporting bugs", + }, ], "subcommands": { "title": "commands", @@ -643,6 +655,18 @@ def main() -> None: parser.print_help(sys.stderr) raise ExpectedExit() + # TODO(bearomorphism): mark `cz version --commitizen` as deprecated after `cz version` feature is stable + if "--version" in sys.argv: + out.write(__version__) + raise ExpectedExit() + + # TODO(bearomorphism): mark `cz version --report` as deprecated after `cz version` feature is stable + if "--report" in sys.argv: + out.write(f"Commitizen Version: {__version__}") + out.write(f"Python Version: {sys.version}") + out.write(f"Operating System: {platform.system()}") + raise ExpectedExit() + # This is for the command required constraint in 2.0 try: args, unknown_args = parser.parse_known_args() diff --git a/tests/test_cli.py b/tests/test_cli.py index c1f6d5beda..15e5bcb55c 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -8,6 +8,7 @@ from pytest_mock import MockFixture from commitizen import cli +from commitizen.__version__ import __version__ from commitizen.exceptions import ( ConfigFileNotFound, ExpectedExit, @@ -55,6 +56,24 @@ def test_cz_with_arg_but_without_command(util: UtilFixture): assert "Command is required" in str(excinfo.value) +def test_cz_with_version_arg(util: UtilFixture, capsys): + """Test that cz shows the version when --version is used.""" + with pytest.raises(ExpectedExit): + util.run_cli("--version") + out, _ = capsys.readouterr() + assert __version__ in out + + +def test_cz_with_report_arg(util: UtilFixture, capsys): + """Test that cz shows the report when --report is used.""" + with pytest.raises(ExpectedExit): + util.run_cli("--report") + out, _ = capsys.readouterr() + assert "Commitizen Version:" in out + assert "Python Version:" in out + assert "Operating System:" in out + + def test_name(util: UtilFixture, capsys): util.run_cli("-n", "cz_jira", "example") out, _ = capsys.readouterr() diff --git a/tests/test_cli/test_invalid_command_py_3_10___invalid_arg_.txt b/tests/test_cli/test_invalid_command_py_3_10___invalid_arg_.txt index 148b4eacdb..33ae4930ed 100644 --- a/tests/test_cli/test_invalid_command_py_3_10___invalid_arg_.txt +++ b/tests/test_cli/test_invalid_command_py_3_10___invalid_arg_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... cz: error: the following arguments are required: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} diff --git a/tests/test_cli/test_invalid_command_py_3_10_invalidCommand_.txt b/tests/test_cli/test_invalid_command_py_3_10_invalidCommand_.txt index e2d4416b81..ac64f94f97 100644 --- a/tests/test_cli/test_invalid_command_py_3_10_invalidCommand_.txt +++ b/tests/test_cli/test_invalid_command_py_3_10_invalidCommand_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... cz: error: argument {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}: invalid choice: 'invalidCommand' (choose from 'init', 'commit', 'c', 'ls', 'example', 'info', 'schema', 'bump', 'changelog', 'ch', 'check', 'version') diff --git a/tests/test_cli/test_invalid_command_py_3_11___invalid_arg_.txt b/tests/test_cli/test_invalid_command_py_3_11___invalid_arg_.txt index 148b4eacdb..33ae4930ed 100644 --- a/tests/test_cli/test_invalid_command_py_3_11___invalid_arg_.txt +++ b/tests/test_cli/test_invalid_command_py_3_11___invalid_arg_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... cz: error: the following arguments are required: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} diff --git a/tests/test_cli/test_invalid_command_py_3_11_invalidCommand_.txt b/tests/test_cli/test_invalid_command_py_3_11_invalidCommand_.txt index e2d4416b81..ac64f94f97 100644 --- a/tests/test_cli/test_invalid_command_py_3_11_invalidCommand_.txt +++ b/tests/test_cli/test_invalid_command_py_3_11_invalidCommand_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... cz: error: argument {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}: invalid choice: 'invalidCommand' (choose from 'init', 'commit', 'c', 'ls', 'example', 'info', 'schema', 'bump', 'changelog', 'ch', 'check', 'version') diff --git a/tests/test_cli/test_invalid_command_py_3_12___invalid_arg_.txt b/tests/test_cli/test_invalid_command_py_3_12___invalid_arg_.txt index 148b4eacdb..33ae4930ed 100644 --- a/tests/test_cli/test_invalid_command_py_3_12___invalid_arg_.txt +++ b/tests/test_cli/test_invalid_command_py_3_12___invalid_arg_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... cz: error: the following arguments are required: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} diff --git a/tests/test_cli/test_invalid_command_py_3_12_invalidCommand_.txt b/tests/test_cli/test_invalid_command_py_3_12_invalidCommand_.txt index c92220c4dc..e3b00a23b2 100644 --- a/tests/test_cli/test_invalid_command_py_3_12_invalidCommand_.txt +++ b/tests/test_cli/test_invalid_command_py_3_12_invalidCommand_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... cz: error: argument {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}: invalid choice: 'invalidCommand' (choose from init, commit, c, ls, example, info, schema, bump, changelog, ch, check, version) diff --git a/tests/test_cli/test_invalid_command_py_3_13___invalid_arg_.txt b/tests/test_cli/test_invalid_command_py_3_13___invalid_arg_.txt index 4f0ba2b148..04a06a96a7 100644 --- a/tests/test_cli/test_invalid_command_py_3_13___invalid_arg_.txt +++ b/tests/test_cli/test_invalid_command_py_3_13___invalid_arg_.txt @@ -1,3 +1,4 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... cz: error: the following arguments are required: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} diff --git a/tests/test_cli/test_invalid_command_py_3_13_invalidCommand_.txt b/tests/test_cli/test_invalid_command_py_3_13_invalidCommand_.txt index 749066c556..fa8e3d893f 100644 --- a/tests/test_cli/test_invalid_command_py_3_13_invalidCommand_.txt +++ b/tests/test_cli/test_invalid_command_py_3_13_invalidCommand_.txt @@ -1,3 +1,4 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... cz: error: argument {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}: invalid choice: 'invalidCommand' (choose from init, commit, c, ls, example, info, schema, bump, changelog, ch, check, version) diff --git a/tests/test_cli/test_invalid_command_py_3_14___invalid_arg_.txt b/tests/test_cli/test_invalid_command_py_3_14___invalid_arg_.txt index 4f0ba2b148..04a06a96a7 100644 --- a/tests/test_cli/test_invalid_command_py_3_14___invalid_arg_.txt +++ b/tests/test_cli/test_invalid_command_py_3_14___invalid_arg_.txt @@ -1,3 +1,4 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... cz: error: the following arguments are required: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} diff --git a/tests/test_cli/test_invalid_command_py_3_14_invalidCommand_.txt b/tests/test_cli/test_invalid_command_py_3_14_invalidCommand_.txt index 749066c556..fa8e3d893f 100644 --- a/tests/test_cli/test_invalid_command_py_3_14_invalidCommand_.txt +++ b/tests/test_cli/test_invalid_command_py_3_14_invalidCommand_.txt @@ -1,3 +1,4 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... cz: error: argument {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}: invalid choice: 'invalidCommand' (choose from init, commit, c, ls, example, info, schema, bump, changelog, ch, check, version) diff --git a/tests/test_cli/test_no_argv_py_3_10_.txt b/tests/test_cli/test_no_argv_py_3_10_.txt index 69f410e96d..aba56be445 100644 --- a/tests/test_cli/test_no_argv_py_3_10_.txt +++ b/tests/test_cli/test_no_argv_py_3_10_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... @@ -16,6 +17,8 @@ options: e.g., cz -nr 1,2,3 bump. See codes at https://commitizen- tools.github.io/commitizen/exit_codes/ + -v, --version Show the version of the installed commitizen + --report Show system information for reporting bugs commands: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} diff --git a/tests/test_cli/test_no_argv_py_3_11_.txt b/tests/test_cli/test_no_argv_py_3_11_.txt index 69f410e96d..aba56be445 100644 --- a/tests/test_cli/test_no_argv_py_3_11_.txt +++ b/tests/test_cli/test_no_argv_py_3_11_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... @@ -16,6 +17,8 @@ options: e.g., cz -nr 1,2,3 bump. See codes at https://commitizen- tools.github.io/commitizen/exit_codes/ + -v, --version Show the version of the installed commitizen + --report Show system information for reporting bugs commands: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} diff --git a/tests/test_cli/test_no_argv_py_3_12_.txt b/tests/test_cli/test_no_argv_py_3_12_.txt index 69f410e96d..aba56be445 100644 --- a/tests/test_cli/test_no_argv_py_3_12_.txt +++ b/tests/test_cli/test_no_argv_py_3_12_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... @@ -16,6 +17,8 @@ options: e.g., cz -nr 1,2,3 bump. See codes at https://commitizen- tools.github.io/commitizen/exit_codes/ + -v, --version Show the version of the installed commitizen + --report Show system information for reporting bugs commands: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} diff --git a/tests/test_cli/test_no_argv_py_3_13_.txt b/tests/test_cli/test_no_argv_py_3_13_.txt index b47528ec3e..b90fc6834b 100644 --- a/tests/test_cli/test_no_argv_py_3_13_.txt +++ b/tests/test_cli/test_no_argv_py_3_13_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... Commitizen is a powerful release management tool that helps teams maintain consistent and meaningful commit messages while automating version management. @@ -15,6 +16,8 @@ options: e.g., cz -nr 1,2,3 bump. See codes at https://commitizen- tools.github.io/commitizen/exit_codes/ + -v, --version Show the version of the installed commitizen + --report Show system information for reporting bugs commands: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} diff --git a/tests/test_cli/test_no_argv_py_3_14_.txt b/tests/test_cli/test_no_argv_py_3_14_.txt index b47528ec3e..b90fc6834b 100644 --- a/tests/test_cli/test_no_argv_py_3_14_.txt +++ b/tests/test_cli/test_no_argv_py_3_14_.txt @@ -1,4 +1,5 @@ -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v] + [--report] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... Commitizen is a powerful release management tool that helps teams maintain consistent and meaningful commit messages while automating version management. @@ -15,6 +16,8 @@ options: e.g., cz -nr 1,2,3 bump. See codes at https://commitizen- tools.github.io/commitizen/exit_codes/ + -v, --version Show the version of the installed commitizen + --report Show system information for reporting bugs commands: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}