Github action for managing the release version and tags based on the release type. In GitHub action inspires from the release-please-action Github action.
-
If you haven't already done so, create a
.github/workflows
folder in your repository (this is where your actions will live). -
Now create a
.github/workflows/release-tagging.yml
file with these contents:
name: Tag and Release
on:
pull_request:
types: [ closed ]
branches:
- master
jobs:
release:
if: github.event.pull_request.merged && (startsWith(github.event.pull_request.head.ref, 'flight/') || startsWith(github.event.pull_request.head.ref, 'hotfix/'))
runs-on: ubuntu-latest
name: Tag and Release
steps:
- name: Release
uses: respond-io/release-management-action@v1.2.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
release-prefix: 'v'
For functioning this this action it requires, Github access token with following permissions.
- Read access to codespaces, commit statuses, and metadata
- Read and Write access to code and pull requests
Note: Please always create a fine grained token in Github level with only specific repository.
Figure 1 : GitHub Token Permission
Figure 2 : GitHub Token Type
- Automatically managed Github tagging and releasing based on the pull request's branch prefix.
As an example, if it have been merged branch which starts from
flight/
it increase the minor version number. ex -v1.0.1
tov1.2.0
. If the PR branch starts withhotfix/
prefix, it increase the patch release number. ex -v1.0.1
tov1.0.2
Figure 3 : Semantic Versioning
- Update CHANGELOG.md file based on release feature and fixes. This categorization will handle based on the commit name prefixes.
- Automatically update
package.json
file'sversion
property
Note: As an example this will update, -- Root level
package.json
file -- ECS service's root levelpackage.json
-- Lambda's root level or function level or layer levelpackage.json
files
( In Lambda
package.json
file only update if the action identify when the function level or layer level changes )
The most important prefixes you should have in mind are:
fix:
which represents bug fixes, and correlates to a SemVer patch. These Commits automatically identifies as Bug Fixes.feat:
which represents a new feature, and correlates to a SemVer minor. These commits identifies as Features.chore:
or any other prefix based commits are identified as Other Commits.
Respond.io Git Workflows Notion post's rules and suggestions also supports to above commit name strategies.
As general, this Github action also use ncc to package the code in to single js file. So in the development please globally install ncc first.
npm i -g @vercel/ncc --save
After your development, please execute following command for building the package file, then push the code to GitHub.
npm run build