Documents
Release Process
Release Process
Type
External
Status
Published
Created
Mar 8, 2026
Updated
Apr 3, 2026
Updated by
Dosu Bot

This document describes how to build and release DaemonEye binaries
using GoReleaser with platform-specific configurations.

Overview#

DaemonEye uses separate GoReleaser configurations for each platform to
avoid cross-compilation issues:

  • macOS: .goreleaser-macos.yaml - Native builds on macOS
  • Linux: .goreleaser-linux.yaml - Native builds on Linux
  • Windows: .goreleaser-windows.yaml - Native builds on Windows

Quick Start#

Automated Release (GitHub Actions)#

  1. Create and push a tag:
git tag v1.0.0
git push origin v1.0.0
  1. GitHub Actions will automatically:
    • Build binaries on each platform
    • Create GitHub releases
    • Upload artifacts

Manual Release#

macOS#

# On macOS system
goreleaser release --config .goreleaser-macos.yaml

Linux#

# On Linux system
goreleaser release --config .goreleaser-linux.yaml

Windows#

# On Windows system
goreleaser release --config .goreleaser-windows.yaml

Configuration Details#

Platform-Specific Builds#

Each configuration targets specific architectures:

  • macOS: aarch64-apple-darwin, x86_64-apple-darwin
  • Linux: aarch64-unknown-linux-gnu, x86_64-unknown-linux-gnu
  • Windows: aarch64-pc-windows-msvc, x86_64-pc-windows-msvc

Build Tools#

  • macOS: Uses native cargo (no cross-compilation issues)
  • Linux: Uses native cargo (no cross-compilation issues)
  • Windows: Uses native cargo (no cross-compilation issues)

Disabled Features#

All configurations disable platform-specific packaging:

  • archive: disable: true
  • brew: disable: true
  • snapcraft: disable: true
  • chocolatey: disable: true
    This ensures only GitHub releases are created.

CI/CD Integration#

GitHub Actions#

The .github/workflows/release.yml file provides:

  1. Parallel builds on all three platforms
  2. Automatic triggering on tag pushes
  3. Rust toolchain setup for each platform
  4. GoReleaser installation and execution

Other CI Systems#

For other CI systems, use the same pattern:

# Option 1: Install via package manager (recommended)
# Ubuntu/Debian:
# sudo apt update && sudo apt install goreleaser
# macOS:
# brew install goreleaser
# Windows:
# choco install goreleaser

# Option 2: Download and verify manually
# Download the latest release
curl -L -o goreleaser.tar.gz \
  https://github.com/goreleaser/goreleaser/releases/latest/download/goreleaser_Linux_x86_64.tar.gz

# Verify checksum (replace with actual checksum from release page)
echo "expected_checksum goreleaser.tar.gz" | sha256sum -c

# Extract and install
tar -xzf goreleaser.tar.gz
sudo mv goreleaser /usr/local/bin/

# Run platform-specific build
goreleaser release --config .goreleaser-<platform>.yaml

Troubleshooting#

Common Issues#

  1. Cross-compilation failures: Use native builders for each platform
  2. Missing system headers: Ensure proper toolchain setup
  3. Framework linking issues: Use native cargo instead of cargo-zigbuild

Debug Commands#

# Test build locally
goreleaser build --config .goreleaser-macos.yaml --snapshot

# Check configuration
goreleaser check --config .goreleaser-macos.yaml

# Verbose output
goreleaser release --config .goreleaser-macos.yaml --verbose

Release Artifacts#

Each platform build creates:

  • procmond: Process monitoring daemon
  • daemoneye-agent: Detection orchestrator
  • daemoneye-cli: Command-line interface
    All binaries are uploaded to GitHub releases with platform-specific naming.

Security Considerations#

  • All builds use --release flag for optimized binaries
  • Dependencies are locked with Cargo.lock
  • No cross-compilation reduces attack surface
  • Native builds ensure proper system integration