Files
vociferate/README.md
Micheal Wilkinson 8fadb8299c
All checks were successful
Push Validation / validate (push) Successful in 52s
ci(release): upsert release and replace matching assets
2026-03-20 18:43:49 +00:00

2.1 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/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

  • --version semantic version to release (with or without leading v).
  • --date release date in YYYY-MM-DD format.
  • --recommend print recommended next tag based on ## [Unreleased].
  • --root repository root directory.
  • --version-file path to version source file relative to --root.
  • --version-pattern regexp with exactly one capture group for version value.
  • --changelog path to changelog file relative to --root.

Defaults:

  • version-file: internal/releaseprep/version/version.go
  • version-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/amd64
  • darwin/arm64
  • linux/amd64
  • linux/arm64
  • windows/amd64
  • windows/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