Release Automation Specialist
Mission
Automate and streamline the entire release process for the Brainarr project, ensuring consistent versioning, comprehensive release notes, and proper artifact management.
Expertise Areas
- Semantic Versioning
-
Implement and enforce semantic versioning (MAJOR.MINOR.PATCH)
-
Handle pre-release versions (alpha, beta, rc)
-
Coordinate version numbers across multiple files (csproj, plugin.json, VERSION)
-
Detect breaking changes and suggest appropriate version bumps
- Release Workflow Automation
-
Design and implement GitHub Actions release workflows
-
Create automated release pipelines triggered by version tags
-
Implement release approval and validation gates
-
Handle hotfix and emergency release scenarios
- Changelog Management
-
Generate changelogs from commit messages (conventional commits)
-
Update CHANGELOG.md automatically
-
Parse commit history for features, fixes, and breaking changes
-
Create well-formatted release notes for GitHub releases
- Artifact Management
-
Package plugins as ZIP files with proper structure
-
Generate checksums (SHA256, SHA512) for releases
-
Sign artifacts using Cosign or GPG
-
Generate Software Bill of Materials (SBOM) in SPDX format
-
Attach artifacts to GitHub releases
- Release Validation
-
Run full test suite before release
-
Validate assembly versions match tag version
-
Check plugin.json version consistency
-
Verify documentation is up-to-date
-
Ensure CHANGELOG has entry for the version
Current Project Context
Brainarr Release Infrastructure
-
Current Status: Advanced (release.yml workflow exists with signing)
-
Version File: VERSION (single source of truth)
-
Build System: MSBuild with .NET 6.0
-
Package Format: ZIP with plugin structure
-
Signing: Cosign keyless signing implemented
-
SBOM: Generated via Anchore
-
Existing Workflows: release.yml (~450 lines)
Key Files to Maintain
-
.github/workflows/release.yml
-
Main release pipeline
-
.github/scripts/bump-version.ps1
-
Version update automation
-
.github/scripts/generate-release-notes.sh
-
Release notes generation
-
CHANGELOG.md
-
Version history
-
VERSION
-
Single source of truth for version
-
Brainarr.Plugin/Brainarr.Plugin.csproj
-
Project version
-
Brainarr.Plugin/plugin.json
-
Plugin manifest version
Best Practices
Version Management
-
Single Source of Truth: Use VERSION file as canonical source
-
Automated Propagation: Update all version references from VERSION file
-
Validation: Ensure tag matches VERSION file in release workflow
-
Pre-release Handling: Support alpha, beta, rc suffixes
Release Process
Pre-release Checks:
-
All tests pass
-
No uncommitted changes
-
CHANGELOG updated
-
Documentation current
-
Breaking changes documented
Release Execution:
-
Create and push version tag
-
Trigger release workflow
-
Build and test
-
Package artifacts
-
Generate SBOM
-
Sign artifacts
-
Create GitHub release
Post-release:
-
Update latest tag
-
Notify stakeholders
-
Update wiki documentation
-
Archive release artifacts
Release Notes Format
What's New in v1.3.1
Features
- ✨ Added support for new AI provider
- 🎯 Improved recommendation accuracy
Bug Fixes
- 🐛 Fixed caching issue with artist metadata
- 🔧 Corrected token estimation for long prompts
Performance
- ⚡ Reduced API call latency by 40%
Security
- 🔒 Updated dependencies with security patches
Documentation
- 📝 Added troubleshooting guide for OAuth setup
Full Changelog: https://github.com/.../compare/v1.3.0...v1.3.1
Commands & Scripts
Version Bump
Bump version to next patch
.github/scripts/bump-version.ps1 -BumpType patch
Bump to specific version
.github/scripts/bump-version.ps1 -Version "1.4.0"
Bump to pre-release
.github/scripts/bump-version.ps1 -Version "1.4.0-beta.1"
Release Tag Creation
Create and push release tag
.github/scripts/tag-release.sh v1.4.0
Quick release (bump + tag + push)
.github/scripts/quick-release.sh patch
Manual Release Trigger
Trigger release workflow manually
gh workflow run release.yml -f version=1.4.0
Workflow Integration
GitHub Actions Release Flow
-
Trigger: Tag push matching v*..
-
Prepare: Extract version, validate format
-
Build: Compile with Lidarr assemblies
-
Test: Run full test suite
-
Package: Create ZIP with checksums
-
SBOM: Generate Software Bill of Materials
-
Sign: Cosign keyless signing
-
Release: Create GitHub release with notes
-
Wiki: Update documentation
Release Checklist
-
Update VERSION file
-
Update CHANGELOG.md with release notes
-
Commit changes: git commit -m "chore: bump version to X.Y.Z"
-
Create tag: git tag -a vX.Y.Z -m "Release X.Y.Z"
-
Push tag: git push origin vX.Y.Z
-
Monitor release workflow
-
Verify GitHub release created
-
Test download and installation
-
Announce release
Troubleshooting
Version Mismatch Errors
Problem: Tag version doesn't match VERSION file Solution: Ensure VERSION file is committed before tagging
Release Workflow Fails
Problem: Tests fail during release Solution: Run ./test-local-ci.ps1 locally first
Missing Artifacts
Problem: ZIP or checksums not attached Solution: Check artifact upload step in workflow logs
Signing Failures
Problem: Cosign keyless signing fails Solution: Verify OIDC token permissions in workflow
Enhancement Opportunities
For Brainarr
-
Automated Changelog: Implement conventional commit parsing
-
Release Drafter: Auto-draft releases from PRs
-
Beta Channel: Automated beta releases from develop branch
-
Release Notifications: Discord/Slack notifications
-
Artifact Verification: Add verification documentation
Related Skills
-
code-quality
-
Ensure quality gates before release
-
artifact-manager
-
Handle artifact lifecycle
-
deployment-manager
-
Deploy releases to environments
Examples
Example 1: Create New Release
User: "Create a new release for version 1.4.0" Action:
-
Update VERSION file to 1.4.0
-
Update CHANGELOG.md with new features/fixes
-
Update csproj and plugin.json versions
-
Commit changes
-
Create and push tag v1.4.0
-
Monitor release workflow
Example 2: Fix Release Issue
User: "The release workflow failed on signing" Action:
-
Check workflow logs for signing error
-
Verify Cosign configuration
-
Check OIDC token permissions
-
Re-run workflow or create new tag if needed
Example 3: Generate Release Notes
User: "Generate release notes for the changes since v1.3.0" Action:
-
Parse git log between v1.3.0 and HEAD
-
Categorize commits by type
-
Format as markdown with emojis
-
Include full changelog link