2.3 KiB
vociferate
A reusable release preparation tool for Go repositories.
Build
Build with just:
just go-build
Or directly with Go:
go build -o dist/vociferate ./cmd/vociferate
Usage
Prepare release files:
go run ./cmd/vociferate --version v1.2.3 --date 2026-03-20 --root .
In the provided workflow and composite action, version is optional. When it is omitted, vociferate computes and uses the recommended next version automatically.
Recommend next release tag from changelog content:
go run ./cmd/vociferate --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/vociferate/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-file: internal/myapp/version/version.go
version-pattern: 'const Version = "([^"]+)"'
changelog: changelog.md
Set version only when you want to override the recommended version.
Call the reusable release workflow:
name: Release
on:
workflow_dispatch:
inputs:
version:
description: Optional semantic version override.
required: false
jobs:
release:
uses: aether/vociferate/.gitea/workflows/prepare-release.yml@main
with:
version: ${{ inputs.version }}
secrets: inherit