Problem
Current release process has critical gaps:
- No Quality Gates on Release: Release workflow builds/publishes even if tests fail
- Missing Binary Artifacts: Release workflow builds binaries but doesn't upload them (v0.3.0, v0.2.0, v0.1.0 all have 0 assets)
- Manual Process: Version bumps, tags, and changelog require manual steps
- Installation Broken: Installer script exists but can't download binaries
Current State
What Works:
- ✅ Comprehensive CI checks (format, tests, clippy, builds)
- ✅ Release workflow creates GitHub releases with changelog
- ✅ Production-ready installer script (`scripts/install.sh`)
- ✅ Complete installation documentation
What's Broken:
- ❌ Binary artifacts never uploaded to releases
- ❌ Users can't install via installer (no binaries to download)
- ❌ Release workflow has no safety net (could publish broken code)
- ❌ Manual tag creation error-prone
Risk Scenario:
v0.4.0 PR #193 had failing tests. If tag was pushed early, broken release would publish.
Proposed Solution
Design Goals:
- Quality gates MUST pass before any release
- Binaries automatically built and published
- One-button release preparation (GitHub UI)
- Automatic version determination from commits
- Installer script works for version-specific installs
Architecture:
- Manual workflow_dispatch to start release
- Automated PR creation with version + changelog
- All CI checks must pass on release PR
- Auto-tag on PR merge (only if CI passed)
- Release workflow verifies CI status before building
- Binaries uploaded to GitHub release
- Installer script downloads versioned binaries
Implementation Phases
This epic is broken into phases as sub-issues:
- Phase 0: Fix binary upload (CRITICAL - blocks others)
- Phase 1: Add CI verification to release workflow
- Phase 2: Automate tag creation on PR merge
- Phase 3: Automate release PR creation
- Phase 4: Verify installer script functionality
Success Criteria
- ✅ Release binaries attached to every GitHub release
- ✅ Installer script works: `curl -fsSL https://raw.githubusercontent.com/codekiln/langstar/main/scripts/install.sh | sh`
- ✅ Version-specific installs work: `curl ... | sh -s -- --version 0.4.0`
- ✅ Impossible to publish release without passing CI
- ✅ No manual tag creation required
- ✅ Release initiated via GitHub UI button
References
- Release workflow: `.github/workflows/release.yml`
- CI workflow: `.github/workflows/ci.yml`
- Installer script: `scripts/install.sh`
- Installation docs: `docs/installation.md`
- bump-release skill: `.claude/skills/bump-release/`
Problem
Current release process has critical gaps:
Current State
What Works:
What's Broken:
Risk Scenario:
v0.4.0 PR #193 had failing tests. If tag was pushed early, broken release would publish.
Proposed Solution
Design Goals:
Architecture:
Implementation Phases
This epic is broken into phases as sub-issues:
Success Criteria
References