DaemonEye Release Process#
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)#
-
Create and push a tag:
git tag v1.0.0 git push origin v1.0.0 -
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: truebrew: disable: truesnapcraft: disable: truechocolatey: disable: true
This ensures only GitHub releases are created.
CI/CD Integration#
GitHub Actions#
The .github/workflows/release.yml file provides:
- Parallel builds on all three platforms
- Automatic triggering on tag pushes
- Rust toolchain setup for each platform
- 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#
- Cross-compilation failures: Use native builders for each platform
- Missing system headers: Ensure proper toolchain setup
- 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
--releaseflag for optimized binaries - Dependencies are locked with
Cargo.lock - No cross-compilation reduces attack surface
- Native builds ensure proper system integration