Release Process
Overview
Releases are fully automated via GitHub Actions. Pushing a version tag triggers the release workflow, which cross-compiles binaries for all supported platforms, packages them into tarballs, and publishes a GitHub Release.
Triggering a Release
git tag v0.2.0
git push origin v0.2.0
The workflow triggers on any tag matching v*.
What Gets Built
The release workflow builds for 8 platform targets:
| OS | Architecture | Notes |
|---|---|---|
| linux | amd64 | |
| linux | arm64 | |
| linux | arm (v7) | |
| linux | 386 | |
| darwin | amd64 | |
| darwin | arm64 | Apple Silicon |
| windows | amd64 | .exe extension |
| windows | arm64 | .exe extension |
All builds use CGO_ENABLED=0 for fully static binaries.
Tarball naming follows the pattern:
recur-v0.2.0-linux-amd64.tar.gz
recur-v0.2.0-darwin-arm64.tar.gz
recur-v0.2.0-windows-amd64.tar.gz
recur-v0.2.0-linux-armv7.tar.gz
A source archive (recur-v0.2.0-source.tar.gz) is also created from git archive.
Archive Contents
Each platform tarball contains:
recur-v0.2.0-linux-amd64/
recur # CLI binary
recurd # daemon binary
The core release archive no longer bundles plugins. The first-party plugins
are released independently from their own repositories under the
directedbits org, each publishing its own
platform archives (<plugin>-<tag>-<os>-<arch>.tar.gz).
Version Injection
The release workflow injects the version tag into the binaries via Go linker flags:
-X github.com/directedbits/recur/src/app/cli.Version=v0.2.0
This sets the cli.Version variable used by recur version.
Plugins
Plugins are no longer part of the core release. Each first-party plugin is
built and released from its own repository under the
directedbits org. Note that the
devicemonitor plugin (D-Bus on Linux, WMI on Windows) has no macOS
implementation and is therefore only released for linux and windows
targets.
Smoke Tests
The workflow runs basic smoke tests on the linux-amd64 build only:
recur version # verify binary runs and prints version
recur config get # verify config subsystem works
Binary sizes for all platforms are reported in the GitHub Actions job summary.
Release Checklist
- Ensure all tests pass:
task test:all - Tag the release:
git tag v0.X.0 - Push the tag:
git push origin v0.X.0 - Wait for the Release workflow to complete.
- Verify the GitHub Releases page shows:
- All 8 platform tarballs plus the source archive
- Auto-generated release notes
- Correct version in binary names