474 lines
14 KiB
Markdown
474 lines
14 KiB
Markdown
---
|
|
name: release-strategy-advisor
|
|
description: Expert in analyzing and recommending release strategies for software projects. Detects existing release patterns in brownfield projects (git tags, CI/CD workflows, changelogs, version files). Suggests optimal strategies based on architecture (single-repo, multi-repo, monorepo, microservices), team size, deployment frequency, and dependencies. Creates comprehensive release-strategy.md in living docs (.specweave/docs/internal/delivery/ or projects/{id}/delivery/). Activates for release strategy, versioning strategy, multi-repo releases, monorepo versioning, semantic versioning, coordinated releases, independent releases, release planning, version alignment, brownfield release analysis, deployment strategy, CI/CD release, how to version, release best practices.
|
|
---
|
|
|
|
# Release Strategy Advisor
|
|
|
|
**Expertise**: Release management strategy design, version alignment, brownfield release pattern detection, and living documentation of delivery processes.
|
|
|
|
## Core Capabilities
|
|
|
|
### 1. Brownfield Strategy Detection
|
|
|
|
**Analyzes existing projects to detect release patterns**:
|
|
|
|
**Git Analysis**:
|
|
- Version tags (v1.0.0, v2.1.0-rc.1, etc.)
|
|
- Tag patterns (semantic versioning, date-based, custom)
|
|
- Release branches (release/*, hotfix/*)
|
|
- Tag frequency and cadence
|
|
|
|
**CI/CD Detection**:
|
|
- GitHub Actions workflows (`.github/workflows/release.yml`)
|
|
- GitLab CI (`.gitlab-ci.yml`)
|
|
- Jenkins pipelines (`Jenkinsfile`)
|
|
- CircleCI config (`.circleci/config.yml`)
|
|
- Azure Pipelines (`azure-pipelines.yml`)
|
|
|
|
**Package Managers**:
|
|
- NPM: `package.json` (version, scripts: version/publish)
|
|
- Python: `setup.py`, `pyproject.toml`
|
|
- Java: `pom.xml`, `build.gradle`
|
|
- Go: `go.mod`
|
|
- Ruby: `*.gemspec`
|
|
- Rust: `Cargo.toml`
|
|
|
|
**Monorepo Tools**:
|
|
- Lerna (`lerna.json`)
|
|
- Nx (`nx.json`, `workspace.json`)
|
|
- Turborepo (`turbo.json`)
|
|
- Yarn Workspaces (`package.json` workspaces)
|
|
- Changesets (`.changeset/config.json`)
|
|
|
|
**Release Automation**:
|
|
- Semantic Release (`.releaserc`, `release.config.js`)
|
|
- Standard Version (`.versionrc`)
|
|
- Conventional Changelog
|
|
- Custom release scripts
|
|
|
|
### 2. Strategy Recommendation
|
|
|
|
**Suggests optimal strategy based on**:
|
|
|
|
**Project Architecture**:
|
|
- Single repository → Simple semver strategy
|
|
- Multi-repo (2-5 repos) → Coordinated or independent
|
|
- Multi-repo (5+ repos) → Umbrella versioning
|
|
- Monorepo → Workspace-based versioning
|
|
- Microservices → Service-level versioning
|
|
|
|
**Team Factors**:
|
|
- Small team (1-5) → Simple manual releases
|
|
- Medium team (5-20) → Semi-automated releases
|
|
- Large team (20+) → Fully automated releases
|
|
|
|
**Deployment Patterns**:
|
|
- Low frequency (<1/month) → Manual releases
|
|
- Medium frequency (1-4/month) → Semi-automated
|
|
- High frequency (daily/weekly) → Automated CI/CD
|
|
- Continuous deployment → Trunk-based + feature flags
|
|
|
|
**Dependencies**:
|
|
- No dependencies → Independent releases
|
|
- Weak coupling → Independent with coordination
|
|
- Strong coupling → Coordinated/lockstep releases
|
|
- Shared libraries → Umbrella versioning
|
|
|
|
### 3. Release Strategy Types
|
|
|
|
**Single Repo Strategies**:
|
|
```markdown
|
|
## Simple Semver
|
|
- One repository, one version
|
|
- Manual or automated bumps (patch/minor/major)
|
|
- GitHub releases + NPM/PyPI publish
|
|
- CHANGELOG.md maintenance
|
|
- Example: SpecWeave itself
|
|
```
|
|
|
|
**Multi-Repo Strategies**:
|
|
```markdown
|
|
## Coordinated Releases
|
|
- All repos share same version
|
|
- Release together (v1.0.0 across all)
|
|
- Synchronized CI/CD
|
|
- Example: Microservices with tight coupling
|
|
|
|
## Independent Releases
|
|
- Each repo has own version
|
|
- Release independently
|
|
- Example: service-a v2.1.0, service-b v1.5.0
|
|
|
|
## Umbrella Versioning
|
|
- Product version (v3.0.0) spans multiple repos
|
|
- Internal service versions tracked separately
|
|
- Example: "Product v3.0.0" contains:
|
|
- frontend v2.5.0
|
|
- backend v1.8.0
|
|
- api v2.1.0
|
|
```
|
|
|
|
**Monorepo Strategies**:
|
|
```markdown
|
|
## Workspace-Based
|
|
- Lerna/Nx/Turborepo manage versions
|
|
- Independent package versions
|
|
- Changesets for semantic release
|
|
- Example: Babel, Jest
|
|
|
|
## Fixed Versioning
|
|
- All packages share same version
|
|
- Lerna --fixed mode
|
|
- Example: Angular packages
|
|
```
|
|
|
|
**Microservices Strategies**:
|
|
```markdown
|
|
## Service-Level Versioning
|
|
- Each service has own semantic version
|
|
- API contract versioning separate
|
|
- Rolling releases (deploy services independently)
|
|
|
|
## Coordinated Major Releases
|
|
- Independent minor/patch versions
|
|
- Coordinated major versions (breaking changes)
|
|
- Example: v2.x (service-a v2.3.0, service-b v2.1.0)
|
|
```
|
|
|
|
### 4. Release Candidate (RC) Management
|
|
|
|
**RC Patterns**:
|
|
|
|
**Pre-Release Tags**:
|
|
- `v1.0.0-rc.1`, `v1.0.0-rc.2` → `v1.0.0` (final)
|
|
- `v2.0.0-beta.1` → `v2.0.0-rc.1` → `v2.0.0`
|
|
- `v3.0.0-alpha.1` → `v3.0.0-beta.1` → `v3.0.0-rc.1` → `v3.0.0`
|
|
|
|
**Channel-Based**:
|
|
- Stable (production)
|
|
- Beta (pre-release testing)
|
|
- Alpha (early adopters)
|
|
- Canary (1% traffic, feature flags)
|
|
|
|
**Environment-Based**:
|
|
- Dev → Staging (RC) → Production (final)
|
|
- Feature branches → RC branch → Main branch
|
|
|
|
**RC Workflow**:
|
|
1. Create RC: `v1.0.0-rc.1`
|
|
2. Deploy to staging/beta channel
|
|
3. Testing & bug fixes (creates rc.2, rc.3, ...)
|
|
4. Validation complete → Promote RC to v1.0.0
|
|
5. Deploy to production
|
|
|
|
### 5. Living Documentation
|
|
|
|
**Creates release-strategy.md in**:
|
|
|
|
**Cross-Project** (applies to entire system):
|
|
```
|
|
.specweave/docs/internal/delivery/release-strategy.md
|
|
```
|
|
|
|
**Project-Specific** (multi-project mode):
|
|
```
|
|
.specweave/docs/internal/projects/{project-id}/delivery/release-strategy.md
|
|
```
|
|
|
|
**Document Structure**:
|
|
```markdown
|
|
# Release Strategy: {Product/Project Name}
|
|
|
|
## Current Strategy
|
|
- Type: Single-repo / Multi-repo / Monorepo / Microservices
|
|
- Versioning: Semantic / Date-based / Custom
|
|
- Alignment: Lockstep / Independent / Umbrella
|
|
- RC Process: Pre-release tags / Channels / Feature flags
|
|
|
|
## Repositories
|
|
- Repo A: {purpose, current version, release frequency}
|
|
- Repo B: {purpose, current version, release frequency}
|
|
|
|
## Version Alignment
|
|
- Major: Coordinated (breaking changes)
|
|
- Minor: Independent (new features)
|
|
- Patch: Independent (bug fixes)
|
|
|
|
## Release Candidate Workflow
|
|
1. Create RC tag: v1.0.0-rc.1
|
|
2. Deploy to staging
|
|
3. Testing phase (1 week)
|
|
4. Promote to production: v1.0.0
|
|
|
|
## CI/CD Integration
|
|
- GitHub Actions: .github/workflows/release.yml
|
|
- Automated: npm publish, Docker push, Deploy to K8s
|
|
- Manual gates: QA approval, stakeholder sign-off
|
|
|
|
## Changelog Management
|
|
- Tool: Conventional Changelog / Keep a Changelog
|
|
- Format: CHANGELOG.md (root or per-package)
|
|
- Automation: semantic-release / standard-version
|
|
|
|
## Hotfix Strategy
|
|
- Branch: hotfix/* from production tag
|
|
- Version: Patch bump (v1.0.1)
|
|
- Process: Fast-track testing, immediate deploy
|
|
|
|
## Release Checklist
|
|
- [ ] All tests passing
|
|
- [ ] Changelog updated
|
|
- [ ] Version bumped
|
|
- [ ] Git tag created
|
|
- [ ] GitHub release published
|
|
- [ ] Package published (NPM/PyPI/Docker)
|
|
- [ ] Deployment successful
|
|
- [ ] Documentation updated
|
|
|
|
## Metrics & Monitoring
|
|
- DORA Metrics: Deployment frequency, lead time, MTTR, change failure rate
|
|
- Release cadence: {weekly / bi-weekly / monthly}
|
|
- Hotfix frequency: {target <5% of releases}
|
|
|
|
## Decision History
|
|
- 2025-01-15: Adopted umbrella versioning (ADR-023)
|
|
- 2025-02-01: Introduced RC workflow (ADR-025)
|
|
- 2025-03-10: Migrated to semantic-release (ADR-028)
|
|
```
|
|
|
|
### 6. Integration with Brownfield Analyzer
|
|
|
|
**Automatic Strategy Detection** (when brownfield analyzer runs):
|
|
|
|
```bash
|
|
# Brownfield analyzer detects:
|
|
# 1. Repository structure (single/multi/monorepo)
|
|
# 2. Existing version tags
|
|
# 3. CI/CD configurations
|
|
# 4. Package manager configs
|
|
# 5. Release automation tools
|
|
|
|
# Then invokes release-strategy-advisor:
|
|
# - Analyze detected patterns
|
|
# - Classify release strategy
|
|
# - Document findings in release-strategy.md
|
|
# - Suggest improvements if needed
|
|
```
|
|
|
|
**Detection Output Example**:
|
|
```markdown
|
|
## Detected Release Strategy
|
|
|
|
**Type**: Multi-repo Independent Releases
|
|
|
|
**Evidence**:
|
|
- 3 repositories detected:
|
|
- frontend: v2.5.0 (last release: 2025-01-10)
|
|
- backend: v1.8.0 (last release: 2025-01-08)
|
|
- shared: v1.2.0 (last release: 2024-12-15)
|
|
|
|
- Version alignment: None (independent)
|
|
- Release frequency: Weekly (frontend), Bi-weekly (backend), Monthly (shared)
|
|
- CI/CD: GitHub Actions with semantic-release
|
|
- Changelog: Conventional Changelog (auto-generated)
|
|
|
|
**Recommendations**:
|
|
1. Consider umbrella versioning for product releases
|
|
2. Add RC workflow for major versions
|
|
3. Align major versions for better API compatibility
|
|
```
|
|
|
|
## When to Use This Skill
|
|
|
|
**Ask me to**:
|
|
|
|
1. **Analyze existing release strategy**:
|
|
- "What's our current release strategy?"
|
|
- "Detect our versioning patterns"
|
|
- "Analyze how we're releasing across repos"
|
|
|
|
2. **Recommend optimal strategy**:
|
|
- "What release strategy should we use?"
|
|
- "How should we version our microservices?"
|
|
- "Should we use coordinated or independent releases?"
|
|
|
|
3. **Create release documentation**:
|
|
- "Document our release process"
|
|
- "Create release-strategy.md"
|
|
- "Write down our versioning approach"
|
|
|
|
4. **Plan multi-repo releases**:
|
|
- "How to coordinate releases across 5 repos?"
|
|
- "Should we align versions?"
|
|
- "What's the best RC workflow for us?"
|
|
|
|
5. **Brownfield integration**:
|
|
- "Understand our existing release process"
|
|
- "What release tools are we using?"
|
|
- "Map our current deployment pipeline"
|
|
|
|
## Best Practices
|
|
|
|
**Version Alignment**:
|
|
- Lockstep: Use for tightly coupled services (shared breaking changes)
|
|
- Independent: Use for loosely coupled services (autonomous teams)
|
|
- Umbrella: Use for products with multiple independent modules
|
|
|
|
**RC Workflows**:
|
|
- Always use RC for major versions (breaking changes)
|
|
- Consider RC for minor versions if critical features
|
|
- Skip RC for patch versions (hotfixes) unless high risk
|
|
|
|
**Changelog Discipline**:
|
|
- Automate changelog generation (conventional commits)
|
|
- Manual curation for major releases (highlight key features)
|
|
- Link to GitHub issues/PRs for traceability
|
|
|
|
**Release Frequency**:
|
|
- High-risk changes: RC → staging → production (1-2 weeks)
|
|
- Low-risk changes: Direct to production (daily/weekly)
|
|
- Balance speed with stability (DORA metrics)
|
|
|
|
## Integration Points
|
|
|
|
**Brownfield Analyzer**:
|
|
- Detects existing patterns automatically
|
|
- Feeds data to release-strategy-advisor
|
|
- Creates baseline documentation
|
|
|
|
**Living Docs**:
|
|
- Stores strategy in delivery/ folder
|
|
- Updates on strategy changes
|
|
- Links to ADRs for decisions
|
|
|
|
**Multi-Project**:
|
|
- Different strategies per project
|
|
- Cross-project release coordination
|
|
- Shared release templates
|
|
|
|
**Increment Lifecycle**:
|
|
- Release increments span repositories
|
|
- Coordinated planning & execution
|
|
- Automated living docs sync
|
|
|
|
## Example Workflows
|
|
|
|
### Single-Repo Project (SpecWeave)
|
|
|
|
```bash
|
|
# 1. User asks for release strategy
|
|
"What release strategy should SpecWeave use?"
|
|
|
|
# 2. Advisor analyzes:
|
|
# - Single repo (GitHub: anton-abyzov/specweave)
|
|
# - NPM package
|
|
# - GitHub Actions for releases
|
|
# - Existing semver tags
|
|
|
|
# 3. Recommends:
|
|
# - Simple semver strategy
|
|
# - Automated releases via GitHub Actions
|
|
# - CHANGELOG.md maintenance
|
|
# - RC for major versions only
|
|
|
|
# 4. Creates:
|
|
# .specweave/docs/internal/delivery/release-strategy.md
|
|
```
|
|
|
|
### Multi-Repo Microservices
|
|
|
|
```bash
|
|
# 1. User asks for strategy
|
|
"How should we release our 5 microservices?"
|
|
|
|
# 2. Advisor analyzes:
|
|
# - 5 repos detected (user-service, order-service, ...)
|
|
# - Tight coupling (shared API contracts)
|
|
# - High deployment frequency (daily)
|
|
|
|
# 3. Recommends:
|
|
# - Umbrella versioning (product v1.0.0)
|
|
# - Independent service versions (service-a v2.3.0)
|
|
# - RC workflow for product major versions
|
|
# - Rolling releases for services
|
|
|
|
# 4. Creates:
|
|
# .specweave/docs/internal/delivery/release-strategy.md
|
|
# - Umbrella version matrix
|
|
# - Service version independence
|
|
# - RC workflow for product releases
|
|
```
|
|
|
|
### Monorepo (Lerna/Nx)
|
|
|
|
```bash
|
|
# 1. User asks for strategy
|
|
"How to version our Lerna monorepo?"
|
|
|
|
# 2. Advisor analyzes:
|
|
# - Monorepo with 12 packages
|
|
# - Lerna detected (lerna.json)
|
|
# - Changesets for versioning
|
|
# - Independent package releases
|
|
|
|
# 3. Recommends:
|
|
# - Independent versioning (Lerna independent mode)
|
|
# - Changesets for semantic release
|
|
# - Automated changelogs per package
|
|
# - Fixed versioning for core packages
|
|
|
|
# 4. Creates:
|
|
# .specweave/docs/internal/delivery/release-strategy.md
|
|
# - Lerna configuration explanation
|
|
# - Changesets workflow
|
|
# - Package grouping strategy
|
|
```
|
|
|
|
## Commands Integration
|
|
|
|
Works with release management commands:
|
|
|
|
- `/specweave-release:init` - Analyze & recommend strategy
|
|
- `/specweave-release:align` - Align versions across repos
|
|
- `/specweave-release:rc` - Create release candidate
|
|
- `/specweave-release:publish` - Execute release
|
|
|
|
## Dependencies
|
|
|
|
**Required**:
|
|
- Git (version tag analysis)
|
|
- SpecWeave core (living docs integration)
|
|
|
|
**Optional** (for detection):
|
|
- GitHub CLI (`gh`) - GitHub release detection
|
|
- NPM (`npm`) - NPM package detection
|
|
- Python (`python`) - Python package detection
|
|
- Lerna (`lerna`) - Monorepo detection
|
|
- Nx (`nx`) - Nx workspace detection
|
|
|
|
## Output
|
|
|
|
**Creates/Updates**:
|
|
- `.specweave/docs/internal/delivery/release-strategy.md` (cross-project)
|
|
- `.specweave/docs/internal/projects/{id}/delivery/release-strategy.md` (project-specific)
|
|
|
|
**Provides**:
|
|
- Current strategy analysis
|
|
- Recommended improvements
|
|
- RC workflow templates
|
|
- CI/CD integration guides
|
|
- Version alignment matrix
|
|
- Release checklist
|
|
|
|
---
|
|
|
|
**Remember**: Release strategy is a living document. Update it when:
|
|
- Architecture changes (new repos, services)
|
|
- Team size changes
|
|
- Deployment frequency changes
|
|
- Tooling changes (new CI/CD, monorepo tools)
|
|
- Lessons learned from releases
|
|
|
|
**Goal**: Clear, documented, repeatable release process that scales with your team and product.
|