Skip to content

commitizen-tools/commitizen-action

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

commitizen-action

Add commitizen incredibly fast into your project!

Features

  • Allow prerelease
  • Super easy to setup
  • Automatically bump version
  • Automatically create changelog
  • Update any file in your repo with the new version

Are you using conventional commits and semver?

Then you are ready to use this github action! The only thing you'll need is the .cz.toml file in your project.

Usage

  1. In your repository create a .cz.toml file (you can run cz init to create it)
  2. Create a .github/workflows/bumpversion.yaml with the Sample Workflow

Minimal configuration

Your .cz.toml (or pyproject.toml if you are using python) should look like this.

[tool.commitizen] version = "0.1.0"# This should be your current semver version

For more information visit commitizen's configuration page

Sample Workflow

name: Bump versionon: push: branches: - masterjobs: bump_version: if: "!startsWith(github.event.head_commit.message, 'bump:')"runs-on: ubuntu-latestname: "Bump version and create changelog with commitizen"steps: - name: Check outuses: actions/checkout@v5with: fetch-depth: 0token: "${{secrets.GITHUB_TOKEN }}" - id: czname: Create bump and changeloguses: commitizen-tools/commitizen-action@masterwith: github_token: ${{secrets.GITHUB_TOKEN }} - name: Print Versionrun: echo "Bumped to version ${{steps.cz.outputs.version }}"

Variables

NameDescriptionDefault
github_tokenToken for the repo. Can be passed in using ${{secrets.GITHUB_TOKEN }}. Required if push: true-
working_directoryChange to this directory before runningrepo root directory
dry_runRun without creating commit, output to stdoutfalse
repositoryRepository name to push. Default or empty value represents current github repositorycurrent one
branchDestination branch to push changesSame as the one executing the action by default
prereleaseSet as prerelease{alpha,beta,rc} choose type of prerelease-
extra_requirementsCustom requirements, if your project uses a custom rule or plugins, you can specify them separated by a space. E.g: 'commitizen-emoji conventional-JIRA'-
changelog_increment_filenameFilename to store the incremented generated changelog. This is different to changelog as it only contains the changes for the just generated version. Example: body.md-
git_redirect_stderrRedirect git output to stderr. Useful if you do not want git output in your changelogfalse
git_nameName used to configure git (for git operations)github-actions[bot]
git_emailEmail address used to configure git (for git operations)github-actions[bot]@users.noreply.github.com
pushDefine if the changes should be pushed to the branch.true
mergeDefine if the changes should be pushed even on the pull_request event, immediately merging the pull request.false
commitDefine if the changes should be committed to the branch.true
commitizen_versionSpecify the version to be used by commitizen. Eg: 4.10.0latest
changelogCreate changelog when bumping the versiontrue
no_raiseDon't raise the given comma-delimited exit codes (e.g., no_raise: '20,21'). Use with caution! Open an issue in commitizen if you need help thinking about your workflow.21
incrementManually specify the desired increment{MAJOR,MINOR, PATCH}-
check_consistencyCheck consistency among versions defined in commitizen configuration and version_filesfalse
gpg_signIf true, use GPG to sign commits and tags (for git operations). Requires separate setup of GPG key and passphrase in GitHub Actions (e.g. with the action crazy-max/ghaction-import-gpg)false
debugPrints debug output to GitHub Actions stdoutfalse

Outputs

NameDescription
versionThe next version (same as next_version, kept for historical purposes)
next_versionNext version
next_version_majorOnly the major version of the next version
next_version_minorOnly the minor version of the next version
previous_versionVersion before the bump
previous_version_majorOnly the major version of the previous version
previous_version_minorOnly the minor version of the previous version

The new version is also available as an environment variable under REVISION or you can access using ${{steps.cz.outputs.version }}

Using SSH with deploy keys

  1. Create a deploy key (which is the SSH public key)
  2. Add the private key as a Secret in your repository, e.g: COMMIT_KEY
  3. Set up your action
name: Bump versionon: push: branches: - mainjobs: bump-version: if: "!startsWith(github.event.head_commit.message, 'bump:')"runs-on: ubuntu-latestname: "Bump version and create changelog with commitizen"steps: - name: Check outuses: actions/checkout@v3with: fetch-depth: 0ssh-key: "${{secrets.COMMIT_KEY }}" - name: Create bump and changeloguses: commitizen-tools/commitizen-action@masterwith: push: false - name: Push using sshrun: | git push origin main --tags

Creating a Github release

name: Bump versionon: push: branches: - mainjobs: bump-version: if: "!startsWith(github.event.head_commit.message, 'bump:')"runs-on: ubuntu-latestname: "Bump version and create changelog with commitizen"steps: - name: Check outuses: actions/checkout@v3with: fetch-depth: 0token: "${{secrets.PERSONAL_ACCESS_TOKEN }}" - name: Create bump and changeloguses: commitizen-tools/commitizen-action@masterwith: github_token: ${{secrets.PERSONAL_ACCESS_TOKEN }}changelog_increment_filename: body.md - name: Releaseuses: softprops/action-gh-release@v1with: body_path: "body.md"tag_name: ${{env.REVISION }}env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN }}

Troubleshooting

Other actions are not triggered when the tag is pushed

This problem occurs because secrets.GITHUB_TOKEN do not trigger other actions by design.

To solve it, you must use a personal access token in the checkout and the commitizen steps.

Follow the instructions in commitizen's documentation.

Alternatively, you can try using the gh cli in your github action:

gh workflow run <workflow.yaml> ...

I'm not using conventional commits, I'm using my own set of rules on commits

If your rules can be parsed, then you can build your own commitizen rules, create a new commitizen python package, or you can describe it on the toml config itself.

Read more about customization

About

Commitizen github action to bump and create changelog

Resources

License

Stars

Watchers

Forks

Contributors 27