A collection of GitHub composite actions and reusable workflows
Reusable Semantic Release workflow using the Conventional Commits preset to automate versioning, tags with SemVer and major tag, generates GitHub releases, and updates the CHANGELOG.
Create a workflow, for example, .github/workflows/semantic-release.yaml:
---
name: Semantic Release
on:
push:
branches:
- main
jobs:
release:
name: Release
uses: bruzit/github-actions-and-workflows/.github/workflows/semantic-release.yaml@v0
permissions:
contents: write
issues: write
pull-requests: write
with:
GH_APP_ID: ${{ vars.GH_APP_ID }}
secrets:
GH_APP_PEM_FILE: ${{ secrets.GH_APP_PEM_FILE }}To create a GitHub App and a GitHub App Installation:
- GitHub
- Organization / Settings / Developer settings / GitHub Apps
- New GitHub App
- Create GitHub App
- GitHub App name: name
- Description: description
- Homepage URL: homepage URL
- Webhook
- Active: off
- Permissions
- Organization permissions
- Contents: Read and write
- Issues: Read and write
- Pull requests: Read and write
- Where can this GitHub App be installed?: choose what suits you best
- Organization permissions
- Create GitHub App
- Create GitHub App
- your app
- General
- Generate a private key
- Install App
- your organization: Install
- General
- New GitHub App
- Repository / Settings / Secrets and variables / Actions
- Secrets
- Repository secrets / New repository secret
- Name:
GH_APP_PEM_FILE - Secret: content of the PEM file
- Add secret
- Name:
- Repository secrets / New repository secret
- Variables
- Repository variables / New repository variable
- Name:
GH_APP_ID - Value: GitHub App ID
- Add variable
- Name:
- Repository variables / New repository variable
- Secrets
- Organization / Settings / Developer settings / GitHub Apps
Configure Semantic Release in the repository, for example, .releaserc.yaml:
---
branches:
- main
plugins:
- - "@semantic-release/commit-analyzer"
- preset: conventionalcommits
- - "@semantic-release/release-notes-generator"
- preset: conventionalcommits
- "@semantic-release/github"
- - "@semantic-release/changelog"
- changelogTitle: '# Changelog'
- - "@semantic-release/git"
- assets:
- CHANGELOG.md
- semantic-release-major-tagMIT License
Copyright © 2026 Martin Bružina