Yesterday I showed you how to create a new release in Github manually. This was a good starting point as it introduced the different elements of a release and the options we have. Today let us automate the process of creating a release on GitHub using GitHub Actions.
Create a new release using Github Actions
- Go to Actions inside Github and click on new workflow.
- We’ll not use an existing template but instead choose to setup the workflow ourself:
- Paste the following yaml content in the editor screen. I’ll explain it afterwards…
Explanation of the Workflow
-
name:
This is the name of your workflow. You can name it something like "Release". -
on:
Specifies the event that will trigger the workflow. In this case, it’s triggered by apush
to a tag that matches the patternv*.*.*
(e.g.,v1.0.0
). -
jobs:
This defines the job that will be run by the workflow. -
runs-on:
Specifies the environment where the job will run. In this case, it uses the latest Windows environment. -
steps:
This section lists the steps the job will take. I’ll focus on the actions specific for the release-
actions/checkout@v4:
Checks out the repository's code so that the workflow can access it. -
actions/create-release@v1:
This action is used to create the release. It uses theGITHUB_TOKEN
secret to authenticate with GitHub. The release is named after the tag and includes a basic description. Thedraft
andprerelease
options can be set totrue
if you want the release to be a draft or a pre-release. -
actions/upload-release-asset@v1:
This action uploads assets (like compiled binaries, zipped files, etc.) to the release. Theupload_url
is provided by the previous step where the release was created.
-
Trigger the workflow
The workflow is set to trigger on a tag push that matches the pattern v*.*.*
. Create a new tag and push it to trigger the workflow.
I can do this through the commandline:
git tag v1.0.0
git push origin v1.0.0
Or if you prefer a GUI, you can use for example Github Desktop:
- Go to the History tab to see the latest commits:
- Right click on a commit and choose Create tag:
- Specify a tag name using the v*.*.* pattern
- Now we have one change that we should push to our remote origin:
The Github Actions workflow should pick up this change and start the release pipeline:
Once completed we have a brand new release available:
Nice!
Remark: We can further improve this by automatically generating the release notes but that is something I’ll leave for another post.