CI Integration
The simplest setup uses the reusable job template shipped alongside releaser:
# .gitlab-ci.yml
include:
- project: releaser/releaser
file: .releaser.gitlab-ci.yml
release:
extends: .releaser
variables:
GITLAB_TOKEN: $RELEASE_TOKEN # project/group variable with api + write_repository scope
Or write it inline:
release:
stage: release
image: registry.example.com/releaser:latest
rules:
- if: $CI_COMMIT_BRANCH =~ /^release\/.+$/
variables:
GITLAB_TOKEN: $RELEASE_TOKEN
script:
- releaser
artifacts:
reports:
dotenv: release.env # exposes NEXT_VERSION to downstream jobs
The release.env dotenv artifact exports NEXT_VERSION=<tag> automatically. Downstream jobs can use it:
deploy:
stage: deploy
needs:
- job: release
artifacts: true
script:
- echo "Deploying version $NEXT_VERSION"
Disable the dotenv artifact (e.g. for local runs):
releaser --release-env-file ""
Write it to a custom path:
releaser --release-env-file deploy/version.env
name: release
on:
push:
branches:
- 'release/**'
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # full history needed for tag discovery
- name: Run releaser
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -sSL https://git.k3nny.fr/k3nny/releaser/releases/latest/download/releaser-linux-amd64 \
-o /usr/local/bin/releaser
chmod +x /usr/local/bin/releaser
releaser
Notefetch-depth: 0is required. A shallow clone (--depth 1) hides the previous tag, causingreleaserto treat every commit as the first release.
In CI environments where git checkout leaves the repository in detached HEAD state, pass the branch name explicitly:
script:
- releaser --branch "$CI_COMMIT_BRANCH"
When pushing over SSH (git@host:... or ssh://... remotes), releaser attempts go-git SSH agent auth automatically — no extra configuration needed as long as the CI runner has an SSH agent socket available.
For HTTPS remotes without a token, releaser delegates to the system git binary so credential helpers and netrc work as expected.
