Skip to content

GitHub Action to calculate the next release version based on conventional commits

License

Notifications You must be signed in to change notification settings

ietf-tools/semver-action

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

Release License

Semver Conventional Commits - Github Action

This GitHub Action automatically determinate the next release version to use based on all the Conventional Commits since the latest tag.

Works great alongside the Changelog from Conventional Commits action!

Example workflow

name: Deploy

on:
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Get Next Version
        id: semver
        uses: ietf-tools/semver-action@v1
        with:
          token: ${{ github.token }}
          branch: main

      - name: Create Release
        uses: ncipollo/release-action@v1.12.0
        with:
          allowUpdates: true
          draft: false
          makeLatest: true
          name: ${{ steps.semver.outputs.next }}
          body: Changelog Contents
          token: ${{ github.token }}

Inputs

Field Description Required Default
token Your GitHub token. (e.g. ${{ github.token }})
branch The branch to use when fetching list of commits to compare against. (e.g. main) main
majorList Comma separated commit prefixes, used to bump Major version.
A BREAKING CHANGE note in a commit message will still cause a major bump.
minorList Comma separated commit prefixes, used to bump Minor version. feat, feature
patchList Comma separated commit prefixes, used to bump Patch version. fix, bugfix, perf, refactor, test, tests
patchAll If set to true, will ignore patchList and always count commits as a Patch. false
skipInvalidTags If set to true, will skip tags that are not valid semver until it finds a proper one (up to maxTagsFetch from latest). false
noVersionBumpBehavior Whether to exit with an error (default), a warning, silently, the current version or force bump using patch when none of the commits result in a version bump. (Possible values: error, warn, current, patch or silent) error
noNewCommitBehavior Whether to exit with an error (default), a warning, the current version or silently when there are no new commits since the latest tag. (Possible values: error, warn, current or silent) error
prefix A prefix that will be striped when parsing tags (e.g. foobar/). Any other prefix will be ignored. Useful for monorepos. The prefix will be added back to the output values.
additionalCommits A list of additional commit messages to parse in order to calculate semver.
fromTag Override the tag to use when comparing against the branch in order to fetch the list of commits.
maxTagsToFetch Maximum number of tags to fetch from latest. 10

Outputs

Field Description Example Value
current Current version number / latest tag. v1.1.9
next Next version number in format v0.0.0 v1.2.0
nextStrict Next version number without the v prefix. 1.2.0
nextMajor Next version major number in format v0 v1
nextMajorStrict Next version major number only. 1
bump Next version behavior: major, major, major or none. minor

⚠️ Important ⚠️

You must already have an existing tag in your repository. The job will exit with an error if it can't find the latest tag to compare against!