Skip to content

Simple Semantic Release

Reusable workflow that runs semantic-release to automate versioning and changelog generation. It uses a GitHub App token to push tags and commits, ensuring CI workflows are triggered on release.

By default it includes the @semantic-release/changelog and @semantic-release/git plugins.

Inputs

Name Type Default Description
node-version string 24 Node.js version for semantic-release
extra-plugins string @semantic-release/changelog @semantic-release/git Newline-separated list of extra semantic-release plugins

Secrets

Name Required Description
GITHUB_APP_ID Yes GitHub App ID used to generate tokens for pushing tags and commits
GITHUB_APP_PRIVATE_KEY Yes GitHub App private key

Caller Permissions

The calling workflow must set:

permissions:
  contents: write

Concurrency

It is recommended to set concurrency in the calling workflow to prevent parallel releases:

concurrency:
  group: release-${{ github.ref }}
  cancel-in-progress: false

Usage

name: Release

on:
  push:
    branches: [main]

permissions:
  contents: write

concurrency:
  group: release-${{ github.ref }}
  cancel-in-progress: false

jobs:
  release:
    uses: AutomationDojo/reusable-cicd/.github/workflows/semantic-release_simple-release.yml@main
    secrets:
      GITHUB_APP_ID: ${{ secrets.GITHUB_APP_ID }}
      GITHUB_APP_PRIVATE_KEY: ${{ secrets.GITHUB_APP_PRIVATE_KEY }}

With custom plugins

name: Release

on:
  push:
    branches: [main]

permissions:
  contents: write

jobs:
  release:
    uses: AutomationDojo/reusable-cicd/.github/workflows/semantic-release_simple-release.yml@main
    secrets:
      GITHUB_APP_ID: ${{ secrets.GITHUB_APP_ID }}
      GITHUB_APP_PRIVATE_KEY: ${{ secrets.GITHUB_APP_PRIVATE_KEY }}
    with:
      extra-plugins: |
        @semantic-release/changelog
        @semantic-release/git
        @semantic-release/exec