-
-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
MVPMinimum viable product featuresMinimum viable product featuresenhancementNew feature or requestNew feature or requestgithub_actionsPull requests that update GitHub Actions codePull requests that update GitHub Actions codepriority:highHigh priority taskHigh priority task
Milestone
Description
Context
Our current release process uses cargo-dist to build and publish releases. While cargo-dist has served us well, we've encountered some friction points that would be resolved by migrating to GoReleaser.
Current State
The cargo-dist configuration includes:
- Multi-platform builds (Linux x86_64, Linux ARM, macOS, Windows)
- GitHub Release creation with auto-generated release notes
- Homebrew formula publishing to
EvilBit-Labs/homebrew-tap - SBOM generation using cargo-cyclonedx
- Build attestations for supply chain security
- Artifact signing and checksums
Problems with Current Approach
- Workflow Complexity: The generated
.github/workflows/release.ymlis over 300 lines and difficult to customize - Actionlint Warnings: The auto-generated workflow consistently triggers actionlint warnings, cluttering our CI output
- Limited Flexibility: cargo-dist's opinionated approach makes it challenging to customize the release process
- Maintenance Burden: Need to keep cargo-dist installation scripts in sync across multiple workflow files (
security.yml,copilot-setup-steps.yml)
Why GoReleaser?
- Better Rust Support: GoReleaser now has official Rust/Cargo support with good cross-compilation capabilities
- More Mature Ecosystem: Extensive plugin system and well-documented customization options
- Cleaner Configuration: YAML-based config is easier to understand and maintain than generated workflows
- Flexible: Easier to customize release behavior, artifacts, and publishing strategies
- No Generated Workflows: Uses a single reusable action, avoiding actionlint issues
- Rich Feature Set: Built-in support for Docker, Snapcraft, AUR, and many other distribution channels
Proposed Solution
Phase 1: Setup GoReleaser Configuration
- Create
.goreleaser.ymlconfiguration file with:- Rust build configuration for all target platforms
- Archive generation matching current artifact structure
- Checksum generation
- GitHub Release publishing
Phase 2: Migrate Publishing Targets
- Homebrew: Configure GoReleaser's Homebrew tap publisher
- Target:
EvilBit-Labs/homebrew-tap - Ensure formula matches current structure
- Target:
- SBOM Generation: Integrate SBOM generation (cargo-cyclonedx or built-in)
- Attestations: Configure artifact signing and attestations
Phase 3: Update CI/CD
- Replace
.github/workflows/release.ymlwith minimal GoReleaser workflow - Remove cargo-dist installation from:
security.ymlcopilot-setup-steps.yml
- Update any documentation referencing cargo-dist
Phase 4: Testing & Validation
- Test release process with pre-release tag
- Verify all artifacts are generated correctly
- Confirm Homebrew formula updates work
- Validate checksums and signatures
- Test installation on all supported platforms
Success Criteria
- GoReleaser configuration successfully builds all current platforms
- GitHub Releases match current format and content
- Homebrew tap updates automatically
- SBOMs are generated for all artifacts
- Attestations/signatures work correctly
- Release workflow is under 100 lines
- No actionlint warnings
- Successfully complete a test release
References
- GoReleaser Rust/Cargo Documentation
- GoReleaser Homebrew Documentation
- Current cargo-dist config:
Cargo.toml(profile.dist section) - Current release workflow:
.github/workflows/release.yml
Timeline
This migration should be completed before releasing v0.1, as changing release tooling after the first major release would be more disruptive to users who may have automated installations.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
MVPMinimum viable product featuresMinimum viable product featuresenhancementNew feature or requestNew feature or requestgithub_actionsPull requests that update GitHub Actions codePull requests that update GitHub Actions codepriority:highHigh priority taskHigh priority task