| hip | 9999 | |
|---|---|---|
| title | Automated Release Process for Helm | |
| authors |
|
|
| created | 2025-09-12 | |
| type | process | |
| status | draft |
This HIP proposes automating significant portions of the Helm release process through GitHub Actions workflows while maintaining human oversight and security. The proposal introduces pull request-based automation for version updates, release candidate generation, documentation synchronization, and cross-repository coordination between helm/helm and helm/helm-www. The automation preserves the current manual review checkpoints while eliminating error-prone repetitive tasks, reducing release cycle time, and improving consistency.
The current Helm release process, documented in the Release Checklist, involves 11 manual steps requiring maintainers to:
- Manually edit multiple files across different repositories
- Coordinate updates between helm/helm and helm/helm-www repositories
- Perform repetitive version string replacements in test files
- Manually manage GitHub milestones and releases
- Switch between multiple repository contexts during a single release
This manual process introduces several problems:
- Human Error: Manual file editing leads to version mismatches and missed updates
- Time Consumption: Maintainers spend significant time on repetitive tasks
- Context Switching: Managing two repositories simultaneously increases cognitive load
- Inconsistency: Manual processes vary between different release managers
- Bottlenecks: Only maintainers familiar with the entire process can perform releases
- Delayed Documentation: Website updates often lag behind releases
The existing process works but does not scale efficiently with Helm's release cadence and growing maintainer team.
- Human Review Preserved: All automation presents changes as pull requests requiring maintainer approval
- Security First: No bypass of existing security measures (signed commits, GPG signatures)
- Draft Mode: Automated releases created in draft mode for final human review
- Incremental Adoption: Can be implemented and rolled out progressively
- Rollback Capability: Easy to revert to manual process if needed
Full Automation: Rejected because it removes necessary human judgment for release timing, quality assessment, and community communication.
External Tools: Considered tools like Release Drafter, but they lack the cross-repository coordination and Helm-specific requirements.
Monolithic Workflow: Rejected in favor of modular workflows that can be maintained and debugged independently.
Trigger: Manual workflow dispatch with inputs:
- Release type (major/minor/patch)
- Target version (e.g., v3.20.0)
- Release date
Actions:
- Create release branch from main
- Update version in
internal/version/version.go - Update all test data files with new version
- Generate release notes template using commit history
- Create/update GitHub milestone
- Create pull request with all changes
Artifacts: Pull request ready for maintainer review
Trigger: Merge of release preparation PR
Actions:
- Create signed, annotated git tag for RC
- Trigger existing CI/CD for artifact building
- Create draft GitHub release with RC tag
- Generate and attach PGP signatures (if signing key available)
- Post notification to configured channels
Artifacts: Draft GitHub release with RC artifacts
Trigger: Manual approval/publication of RC draft release
Actions:
- Create signed, annotated final release tag
- Update draft release to final
- Trigger documentation update workflow
- Close milestone
- Generate community announcement template
Trigger: Webhook from helm/helm final release publication
Actions:
- Update
config.tomlwith new version information - Update
params.nextversionwith next planned release - Update version skew documentation
- Update release calendar with next release dates
- Create pull request in helm/helm-www
Artifacts: Pull request in helm/helm-www ready for review
.github/workflows/
├── prepare-release.yml # Release preparation automation
├── release-candidate.yml # RC creation and management
├── finalize-release.yml # Final release publication
└── update-documentation.yml # Cross-repo docs updates
scripts/
├── update-version-files.sh # Version update automation
├── generate-release-notes.sh # Release notes generation
└── update-test-data.sh # Test file version updates
New configuration file .github/release-config.yml:
# Release automation configuration
version_files:
- path: "internal/version/version.go"
pattern: 'version = "v{VERSION}"'
- path: "cmd/helm/testdata/output/version.txt"
pattern: 'Version:"{VERSION}"'
# ... additional files
repositories:
docs_repo: "helm/helm-www"
signing:
gpg_key_id: "${{ secrets.GPG_KEY_ID }}"
gpg_private_key: "${{ secrets.GPG_PRIVATE_KEY }}"Required GitHub App permissions:
- Contents: Write (for creating branches, tags, releases)
- Pull Requests: Write (for creating PRs)
- Metadata: Read (for accessing repository info)
- Actions: Write (for triggering cross-repo workflows)
Required secrets:
GITHUB_APP_ID: GitHub App ID for cross-repo accessGITHUB_APP_PRIVATE_KEY: GitHub App private keyGPG_PRIVATE_KEY: PGP signing key (optional)
This proposal introduces new automation alongside the existing manual process:
- Graceful Rollback: Manual process remains fully functional if automation fails
- Opt-in Adoption: Teams can choose to use automation for specific steps
- No Breaking Changes: No modifications to existing release artifacts or tags
- Existing Tool Compatibility: All existing tooling continues to work unchanged
The automation enhances rather than replaces the current process, ensuring maintainers can fall back to manual steps if needed.
- Consistent Process: Automation reduces risk of human error in security-critical steps
- Audit Trail: All changes tracked through GitHub PR system
- Access Control: GitHub App permissions more restrictive than individual maintainer access
- Signed Commits: Automation maintains commit signing requirements
- Secret Management: GPG keys and tokens stored in GitHub Secrets
- Cross-Repo Access: GitHub App tokens limited to minimum required permissions
- Draft Mode: All releases created in draft mode, requiring manual publication
- Approval Gates: All changes require PR approval before implementation
- Update existing release checklist with automation options
- Create troubleshooting guide for automation failures
- Document rollback procedures
- Provide workflow customization examples
- Video walkthrough of automated release process
- Comparison guide: manual vs. automated steps
- Emergency procedures documentation
- FAQ for common automation issues
Initial implementation should focus on the release preparation workflow as it provides the highest value with lowest risk:
- Phase 1: Release preparation automation (version updates, PR creation)
- Phase 2: Release candidate automation
- Phase 3: Documentation update automation
- Phase 4: Full workflow integration and community notification
Each phase can be tested in isolation and rolled back if issues arise.
Rejected because release timing requires human judgment based on:
- Community feedback on release candidates
- Critical bug discovery during testing
- External factors (holidays, conferences, security issues)
While potentially useful, adds complexity and another system to maintain. GitHub's existing interfaces provide sufficient control.
Patch release cherry-picking requires human judgment for:
- Risk assessment of changes
- Conflict resolution
- Testing scope determination
- GPG Key Management: Best practices for storing and rotating signing keys in CI
- Cross-Org Coordination: Technical approach for coordinating releases with other CNCF projects
- Rollback Testing: Comprehensive testing scenarios for automation failures
- Metrics Collection: Tracking automation success rates and time savings