Modified version of GitHub Action Auto Release on Commit
A GitHub Action to automatically create a Release when a commit message matches a pattern.
Auto-Release on Commit will create a release for you when you push a commit with a message matching
a pattern. It will autogenerate description of your Release (using .github/release.yml
).
To get started, create a workflow .yml
file in your .github/workflows
directory. There is an example workflow below. For more information, take a look at the
GitHub Help Documentation for GitHub Actions
Certain inputs can use replacements that use the version information from the commit message.
The following replacements can be used in the title
and tag
.
You can define your own replacements by using a custom regex
input, see the Patterns section for more info.
version
: The full version string, including thev
prefix if it was found. e.g.1.4.2
orv0.2.3-alpha
.prefix
: The characterv
if the version had a prefix. e.g.'v'
fromv1.4.2
, or''
from2.3.9
.semver
: The version string without the prefix, regardless of its presence in the full version string. e.g.1.4.2
or0.2.3-alpha
.major
: The major version number, e.g.1
fromv1.4.2
.minor
: The minor version number, e.g.4
fromv1.4.2
.patch
: The patch number, e.g.2
fromv1.4.2
.prerelease
: The pre-release identifier, if present. Otherwise, an empty string. e.g.alpha
fromv0.2.3-alpha
.build
: The build metadata, if present. Otherwise, an empty string. e.g.build.1848
fromv1.0.3+build.1848
.
The inputs below are available for this workflow. All inputs are optional.
-
title
: The title for the Release. Default:Version $semver
-
tag
: The name for the git tag that will be created for this Release. Default:$version
-
draft
: Whether new releases should be published as a draft. Defaultfalse
-
regex
: Pattern a commit message must match for a Release to be created. Default: Any version string following SemVer, surrounded by either whitespace, special characters, or the string boundaries.More info in the Patterns section.
-
prerelease-regex
: Pattern the commit message must match to mark the Release as a pre-release. Default: Any version string that has pre-release identifier.
released
: A boolean value representing whether a release was created.id
: The ID of the Release.html_url
: The URL users can navigate to in order to view the Release.upload_url
: The URL for uploading release assets, which can be used by GitHub actions in subsequent steps, for example with the @actions/upload-release-asset Action.
If the released
output is false
, none of the other outputs will be set.
One every push
event containing a commit message matching the pattern, create a Release.
# This is a basic workflow to help you get started with the GitHub Auto-Release on Commit Action.
name: AutoRelease
on:
push:
branches: [ master ]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
release:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout@v2
- uses: CupOfTea696/[email protected]
with:
title: "Release: $version"
tag: "v$semver"
draft: false
regex: "/^Release: #{semver}$/i"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Patterns are valid RegEx strings, and can be as simple as /^release: v(.*)$/i
or as complex as a pattern matching
only valid SemVer verions. In fact, that is what this Action does by default. You can use capturing groups as
replacements in certain inputs, e.g. v$1
for the tag
input, and you can even use named capturing groups to make replacements even more convenient.
Lastly, you can include #{semver}
in your regex pattern, and Auto-Release will automatically
insert its SemVer pattern in its place.
The default pattern used for the regex
input is (?<=^|[^a-zA-Z0-9.+-])#{semver}(?=[^a-zA-Z0-9.+-]|$)
.
Below is the full SemVer pattern replacing #{semver}
.
(?<version>(?<prefix>v?)(?<semver>(?<major>0|[1-9]\d*)\.(?<minor>0|[1-9]\d*)\.(?<patch>0|[1-9]\d*)(?:-(?<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?<build>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?))
The Pre-release pattern is a simplified version of the SemVer pattern that makes the
pre-release identifier required. It doesn't care about the prefix, doesn't have named capturing groups, and does not
include build-meta. This is because it is only used after the commit message has already matched the
SemVer pattern. It is recommended you do not change the prerelease-regex
input unless your
pattern does not adhere to SemVer, or does not use the version string to mark the Release as a pre-release.
Below is the Pre-release pattern for reference.
(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:\d*[a-zA-Z-][0-9a-zA-Z-]*|[1-9]\d*|0)(?:\.(?:\d*[a-zA-Z-][0-9a-zA-Z-]*|[1-9]\d*|0))*))
This project is open-sourced software licensed under the MIT License.