This project uses GitHub Actions with native runners for each platform to ensure reliable builds with CGO (required by DuckDB).
Frontend Build (1 job)
↓
Build Matrix (4 parallel jobs)
- macOS ARM64 (macos-latest)
- macOS AMD64 (macos-13)
- Linux AMD64 (ubuntu-latest)
- Linux ARM64 (ubuntu-latest + cross-compile)
↓
Release (1 job)
- Combine artifacts
- Create GitHub Release
- Update Homebrew tap
Go to: https://github.com/mesaglio/otel-viewer/settings
- Change repository name from
otel-viewertootel-front
Update local remote:
git remote set-url origin https://github.com/mesaglio/otel-front.gitgh repo create homebrew-otel-front --public --description "Homebrew tap for otel-front"
cd homebrew-otel-front
# Copy template
cp ~/path/to/otel-front/homebrew-tap-template/README.md .
cp ~/path/to/otel-front/homebrew-tap-template/otel-front.rb .
git add .
git commit -m "Initial tap setup"
git push origin main- Go to: https://github.com/settings/tokens/new
- Token name:
HOMEBREW_TAP_GITHUB_TOKEN - Select scopes:
repo+workflow - Generate and copy token
gh secret set HOMEBREW_TAP_GITHUB_TOKEN
# Paste the token when promptedgh workflow run release.yml -f test_mode=true
gh run watchgit tag v1.0.0
git push origin v1.0.0The workflow will automatically:
- Build frontend once
- Build binaries for all platforms (parallel)
- Create GitHub Release with archives
- Update Homebrew tap with checksums
After release, users can install with:
brew tap mesaglio/otel-front
brew install otel-frontCheck specific platform logs in GitHub Actions:
- macOS builds: Native runners, should work out of the box
- Linux ARM64: Uses cross-compilation with gcc-aarch64-linux-gnu
- Verify
HOMEBREW_TAP_GITHUB_TOKENis set:gh secret list - Check workflow logs for "Update Homebrew Tap" step
- Ensure tap repository exists and is public
Test locally:
cd frontend
npm ci
npm run buildmake release
./bin/otel-front --versionmake release-snapshot
ls -lh dist/- CGO: All builds use CGO_ENABLED=1 (required for DuckDB)
- Native Runners: macOS and Linux AMD64 use native runners
- Linux ARM64: Uses cross-compilation (works well with DuckDB)
- Tap Updates: Custom script, not GoReleaser (more reliable)
.github/workflows/release.yml- Main release workflow.goreleaser.yml- For local testing onlyhomebrew-tap-template/- Template files for tap setup