971a7744bfdb7ad83a693cf7c57565c120752ec5
vociferate
A reusable release preparation tool for Go repositories.
Build
Build with just:
just go-build
Or directly with Go:
go build -o dist/releaseprep ./cmd/releaseprep
Usage
Prepare release files:
go run ./cmd/releaseprep --version v1.2.3 --date 2026-03-20 --root .
Recommend next release tag from changelog content:
go run ./cmd/releaseprep --recommend --root .
Flags
--versionsemantic version to release (with or without leadingv).--daterelease date inYYYY-MM-DDformat.--recommendprint recommended next tag based on## [Unreleased].--rootrepository root directory.--version-filepath to version source file relative to--root.--version-patternregexp with exactly one capture group for version value.--changelogpath to changelog file relative to--root.
Defaults:
version-file:internal/releaseprep/version/version.goversion-pattern:const String = "([^"]+)"changelog:changelog.md
Testing
just go-test
Release Artifacts
The Prepare Release workflow creates a release and uploads prebuilt vociferate binaries for:
darwin/amd64darwin/arm64linux/amd64linux/arm64windows/amd64windows/arm64
It also uploads checksums.txt for integrity verification.
If a release already exists for the same tag, the workflow updates its release notes and replaces matching asset filenames so reruns stay in sync.
Reuse In Other Repositories
You can reuse vociferate in two ways.
Use the composite action directly:
- name: Prepare release files
uses: git.hrafn.xyz/aether/vociferate@main
with:
version: v1.2.3
version-file: internal/myapp/version/version.go
version-pattern: 'const Version = "([^"]+)"'
changelog: changelog.md
Call the reusable release workflow:
name: Release
on:
workflow_dispatch:
inputs:
version:
description: Semantic version to release.
required: true
jobs:
release:
uses: aether/vociferate/.gitea/workflows/prepare-release.yml@main
with:
version: ${{ inputs.version }}
secrets: inherit