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:

OSArchitectureNotes
linuxamd64
linuxarm64
linuxarm (v7)
linux386
darwinamd64
darwinarm64Apple Silicon
windowsamd64.exe extension
windowsarm64.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

  1. Ensure all tests pass: task test:all
  2. Tag the release: git tag v0.X.0
  3. Push the tag: git push origin v0.X.0
  4. Wait for the Release workflow to complete.
  5. Verify the GitHub Releases page shows:
    • All 8 platform tarballs plus the source archive
    • Auto-generated release notes
    • Correct version in binary names