Your friendly Semanticore Release bot helps maintaining the changelog for a project and automates the related tagging process.
Semanticore runs along every pipeline in the main branch, and will analyze the commit messages.
It maintains an open Merge Request for the project with all the required Changelog adjustments.
It detects the current version and suggests the next version based on the changes made.
Once a release commit is detected, it will automatically create the related Git tag on the next pipeline run.
- Commit messages should follow the Conventional Commits so semanticore can decide whether a minor or patch level release is required.
- Releases are indicated with a commit with a commit messages which should match:
Release vX.Y.Z
Currently Semanticore supports the following commit types:
| Type | Prefixes | Meaning |
|---|---|---|
| π Feature | feat |
New Feature, creates a minor commit |
| π¨ Security Fix | sec |
Security relevant change/fix |
| πΎ Bugfix | fix, bug |
Bugfix |
| π‘ Test | test |
(Unit-)Tests |
| π Refactor | refactor, rework |
Refactorings or reworking |
| π€ Devops/CI | ops, ci, cd, build |
Operations, Build, CI/CD, Pipelines |
| π Documentation | doc |
Documentation |
| β‘οΈ Performance | perf |
Performance improvements |
| π§Ή Chore | chore, update |
Chores, (Dependency-)Updates |
| π Other | everything else | Everything not matched by another prefix |
To enable support for major releases (breaking APIs), use the -major flag.
The SEMANTICORE_TOKEN is required - that's a Gitlab or Github Token which has basic contributor rights and allows to perform the related Git and API operations.
To enable GPG signing of commits, you have two options:
- Use
SEMANTICORE_SIGN_KEYenvironment variable containing the actual GPG private key - Use
SEMANTICORE_SIGN_KEY_FILEenvironment variable or the command line option-sign-key-filespecifying the path to a file containing the GPG private key
If neither is provided, commits will not be signed.
Semanticore respects Git Environment variables
GIT_AUTHOR_NAMEGIT_AUTHOR_EMAILGIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL
The values can also be overridden by adding the appropriate flags. Run with -help to get the details.
If none of these is set, Semanticore will use Semanticore Bot as name and [email protected] as E-Mail for Author and Committer.
To configure the name of the changelog file, you can use the CHANGELOG_FILE_NAME. environment variable. If this variable is not set,
the default value Changelog.md will be used.
To test Semanticore locally you can run it without an API token to create an example Changelog:
go run github.com/aoepeople/semanticore@v0 <optional path to repository>
.github/workflows/semanticore.yml
name: Semanticore
on:
push:
branches:
- main
jobs:
semanticore:
runs-on: ubuntu-latest
name: Semanticore
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '1.*'
- name: Semanticore
run: go run github.com/aoepeople/semanticore@v0
env:
SEMANTICORE_TOKEN: ${{secrets.GITHUB_TOKEN}}
GOTOOLCHAIN: autoCreate a secret SEMANTICORE_TOKEN containing an API token with api and write_repository scope.
.gitlab-ci.yml
stages:
- semanticore
semanticore:
image: golang:1
stage: semanticore
variables:
GOTOOLCHAIN: auto
script:
- go run github.com/aoepeople/semanticore@v0
only:
- mainMake sure you set the repositories clone depth too a large enough value, the default of 50 might be too low.