Automating Semantic Versioning with GitHub Actions

Laxman PatelLaxman Patel
3 min read

In the fast-paced world of software development, maintaining a clear and consistent versioning strategy is crucial. Semantic Versioning (SemVer) provides a standardized way to communicate changes in your software, but manually managing version numbers can be tedious and error-prone. In this article, we will explore how to automate semantic versioning using GitHub Actions, allowing you to focus more on coding and less on version management.

What is Semantic Versioning?

Semantic Versioning is a versioning scheme that uses a three-part number format: MAJOR.MINOR.PATCH. Each component has specific rules for incrementing:

  • MAJOR: Incremented for incompatible API changes.

  • MINOR: Incremented for adding functionality in a backwards-compatible manner.

  • PATCH: Incremented for backwards-compatible bug fixes.

By following these conventions, developers can quickly understand the nature of changes in new releases.

Why Automate Semantic Versioning?

Automating semantic versioning helps to:

  • Reduce Errors: Minimize human mistakes in version increments.

  • Enhance Consistency: Ensure that all team members follow the same versioning strategy.

  • Streamline CI/CD Pipelines: Integrate version management into your continuous integration and deployment processes seamlessly.

Setting Up GitHub Actions for Automated Versioning

Step 1: Create Your Workflow File

To automate semantic versioning, you need to create a GitHub Actions workflow. Here's an example of what your workflow file (.github/workflows/versioning.yml) might look like:

textname: Automate Semantic Versioning

on:
  push:
    branches:
      - main

jobs:
  semantic-versioning:
    runs-on: ubuntu-latest

    steps:
      # Checkout the repository
      - name: Checkout Code
        uses: actions/checkout@v3

      # Automate version bumping
      - name: Bump Semantic Version
        id: version
        uses: anothrNick/github-tag-action@v1.37.0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      # Use the calculated version
      - name: Display New Version
        run: echo "New version created: ${{ steps.version.outputs.version }}"

Step 2: Commit Message Conventions

For this automation to work effectively, you must follow Conventional Commits in your commit messages. Here are some examples:

  • feat: add new feature (increments MINOR)

  • fix: correct a bug (increments PATCH)

  • BREAKING CHANGE: change API endpoint (increments MAJOR)

Step 3: Trigger the Workflow

Whenever you push changes to the main branch, this workflow will trigger automatically. The action will read your commit messages, determine the appropriate version bump, and create a new tag in your repository.

Example Scenario

Let’s say you have the following commit history:

  1. feat: implement user login

  2. fix: resolve session timeout issue

  3. BREAKING CHANGE: update authentication method

After pushing these commits, the workflow will analyze them and determine that:

  • The first commit increments the MINOR version from 1.0.0 to 1.1.0.

  • The second commit increments the PATCH version from 1.1.0 to 1.1.1.

  • The third commit increments the MAJOR version from 1.1.1 to 2.0.0.

The final output will show that the new version is v2.0.0, and it will be tagged in your repository.

0
Subscribe to my newsletter

Read articles from Laxman Patel directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Laxman Patel
Laxman Patel

Cloud Native Enthusiast | DevOps Advocate Exploring the intersection of infrastructure and innovation, I'm passionate about harnessing the power of: Linux | Jenkins | Docker | Ansible | Kubernetes | AWS | Terraform | Prometheus | Grafana With a drive to automate, optimize, and secure, I'm dedicated to sharing knowledge and learning from the community. Let's connect and shape the future of tech!"