Automate your releases on GitHub.

Automate your releases on GitHub.

So, what are releases?

Packaging/bundling software and making it available for a broader audience for download and use.

Why use them?

  • To distribute the software (Binary distribution).

  • To keep track of type and amount of changes.

  • To follow Semantic versioning practices.

  • To go back in time and use the previous version.

  • It looks professional.

Why automate releases?

Creating a release manually can be a little tricky and challenging at the same time. Using a GitHub workflow with a few lines of the YAML, we can automate that task and focus more on development. Alongside, it also generates a changelog file (CHANGELOG.md) and tags.

linkfree.png

Picture - EddieHubCommunity/LinkFree repo.

Using the workflow.

Create a .github folder inside the root of the repo. Create a folder name workflows inside the .github folder. Then create a releases.yml file by adding the YAML config provided below inside the workflows folder.

  • Complete path will be .github/workflows/releases.yml

YAML Config:

name: Releases
on:
  push:
    branches:
      - main

jobs:
  changelog:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: conventional Changelog Action
        id: changelog
        uses: TriPSs/conventional-changelog-action@v3
        with:
          github-token: ${{ secrets.github_token }}

      - name: create release
        uses: actions/create-release@v1
        if: ${{ steps.changelog.outputs.skipped == 'false' }}
        env:
          GITHUB_TOKEN: ${{ secrets.github_token }}
        with:
          tag_name: ${{ steps.changelog.outputs.tag }}
          release_name: ${{ steps.changelog.outputs.tag }}
          body: ${{ steps.changelog.outputs.clean_changelog }}

Understanding the config

  • To automatically trigger a workflow on some events, we use the on: property. In this case, action will get triggered when the changes are pushed to the main branch. We can also modify the branch according to our preferences
on:
  push:
    branches:
      - main
  • We will be running the workflow on Ubuntu OS. We can also change that
jobs:
  changelog:
    runs-on: ubuntu-latest
  • Here we are using two Actions. The checkout action will be used to checkout and go inside the repo, and the conventional-changelog-action will look for conventional commits. It will also create a changelog file.

By default, GitHub provides a default token github_token. We can also use a Personal access token.

    steps:
      - uses: actions/checkout@v2
      - name: conventional Changelog Action
        id: changelog
        uses: TriPSs/conventional-changelog-action@v3
        with:
          github-token: ${{ secrets.github_token }}
  • Here, we are using the create-release action, which will create an auto release for us depending on the convention of the commit used

It will auto-set the body and the release commit naming.

      - name: create release
        uses: actions/create-release@v1
        if: ${{ steps.changelog.outputs.skipped == 'false' }}
        env:
          GITHUB_TOKEN: ${{ secrets.github_token }}
        with:
          tag_name: ${{ steps.changelog.outputs.tag }}
          release_name: ${{ steps.changelog.outputs.tag }}
          body: ${{ steps.changelog.outputs.clean_changelog }}

Working

To make the workflow create the automated releases. We need to follow some commit conventions - Conventional Commits. Depending upon the convention used, it will version the new release.

semanticversioning-vZLYjPBL.png

  • fix: Will bump the last digit - patch.

  • feat - Will bump the middle digit - minor

  • BREAKING CHANGE: - It will bump the first digit by - major

I have also written a blog on Conventional Commits. You can check out that - Getting started with Conventional Commits

We are now all set. Now, when we create a commit with the proper convention, it will do all the magic for us.

That's the end of the blog. Thank you for reading it.

Follow Pradumna on Twitter Hashnode

Did you find this article valuable?

Support Pradumna Saraf by becoming a sponsor. Any amount is appreciated!