GitHub Action
GitHub Create Tag Release
Creates a new GitHub release whenever a tag is pushed.
The following basic workflow will create a release whenever any tag is pushed that matches the version_regex.
name: Release
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Create GitHub release
uses: Roang-zero1/github-create-release-action@v2
with:
version_regex: ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
If only certain tags should create releases or some releases should be created as pre-release you can set regular expression to achieve this.
These regular expression are evaluated with GNU grep, so these regular expressions need to be compatible with it.
Regular expressions containing \
need them to be escaped with \\
.
version_regex
Regular expression to verify that the version is in a correct format. Defaults to.*
(accept everything).prerelease_regex
Any version matching this regular expression will be marked as pre-release. Disabled by default.
- name: Create GitHub release
uses: Roang-zero1/github-create-release-action@v2
with:
version_regex: ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+
prerelease_regex: "^v2\\.[[:digit:]]+\\.[[:digit:]]+"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
If you want to create a tag automatically and create the release in the same workflow you can set created_tag
to achieve this.
This allows you to create a fully automated release in one workflow file (workaround because one workflow/action can not trigger another workflow/action).
The example below uses K-Phoen/semver-release-action
to create the tag whenever a pull request is closed, merged, and the head_ref starts with RC.
After the tag is created it is passed to the create-release-action via the CREATED_TAG env variable using the output of the semver-release-action
.
on:
pull_request:
types: closed
jobs:
build:
runs-on: ubuntu-latest
if: github.event.pull_request.merged && startsWith(github.head_ref, 'RC')
steps:
- uses: actions/checkout@v3
- name: Tag and prepare release
id: tag_and_prepare_release
uses: K-Phoen/semver-release-action@v1.3.1
with:
release_branch: master
release_strategy: tag
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload release notes
if: steps.tag_and_prepare_release.outputs.tag
uses: Roang-zero1/github-create-release-action@v2
with:
created_tag: ${{ steps.tag_and_prepare_release.outputs.tag }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
If you have tag messages that you want to use as a release body you can pass them from the workflow with the release_text
parameter.
- uses: actions/checkout@v3
- name: "Refresh tags"
id: tag
run: git fetch --tags --force # Is currently required for v3 due to https://github.com/actions/checkout/issues/290
- uses: ericcornelissen/git-tag-annotation-action@v2
id: tag-data
- name: Create GitHub release
uses: Roang-zero1/github-create-release-action@v2
with:
version_regex: ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+
release_text: ${{ steps.tag-data.outputs.git-tag-annotation }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
This action makes it possible to extract the release description from a Markdown change log.
By default, the CHANGELOG.md
file is searched for a ##
(h2) heading matching the tag text.
If it is found the section is passed as body to the release API.
If for example we release the tag v1.0.0
with a CHANGELOG.md
as follows:
# Changelog
## v1.0.0
Initial Release
Then the text Initial Release
will be passed as body.
Markdown restrictions for release bodies still apply.
Regular expression to verify that the version is in a correct format. Defaults to .*
(accept everything).
Any version matching this regular expression will be marked as pre-release. Disabled by default.
Create the releases as draft (true|false [default: false]
). Existing will not be updated from released to draft.
Controls whether an existing release should be updated with data from the latest push (true|false [default: false]
).
Allows to pass an already created tag.
Allows to pass a release title.
File that contains the Markdown formatted change log. Defaults to CHANGELOG.md
.
Heading level at which the tag headings exist. Defaults to h2
, this parses headings at the markdown level ##
.
GITHUB_TOKEN
Provided by GitHub action, does not need to be set.