release-pilot

module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 11, 2025 License: MIT

README

ReleasePilot Logo

ReleasePilot

AI-powered release management CLI for software projects using conventional commits.

CI Go Report Card

Features

  • Automatic Version Calculation: Determines semantic version bumps from conventional commits
  • AI-Powered Release Notes: Generates professional changelogs and release notes using OpenAI
  • Plugin System: Extensible via gRPC plugins (GitHub releases, npm publish, Slack notifications)
  • Approval Workflow: Review and approve releases before publishing
  • Interactive CLI: Guided setup and approval process with beautiful terminal output
  • Dry Run Mode: Preview changes without making any modifications

Installation

Using Go
go install github.com/felixgeelhaar/release-pilot/cmd/release-pilot@latest
From Source
git clone https://github.com/felixgeelhaar/release-pilot.git
cd release-pilot
go build -o release-pilot ./cmd/release-pilot
Docker
docker pull ghcr.io/felixgeelhaar/release-pilot:latest

Quick Start

  1. Initialize ReleasePilot in your project:
release-pilot init
  1. Plan a release (analyzes commits since last tag):
release-pilot plan
  1. Generate release notes (optionally with AI):
release-pilot notes --ai
  1. Approve the release:
release-pilot approve
  1. Publish the release:
release-pilot publish

Configuration

Create a release.config.yaml in your project root:

versioning:
  strategy: conventional
  tag_prefix: v
  git_tag: true
  git_push: true

changelog:
  file: CHANGELOG.md
  format: keep-a-changelog
  repository_url: https://github.com/your-org/your-repo

ai:
  enabled: true
  provider: openai
  model: gpt-4
  tone: professional
  audience: developers

plugins:
  - name: github
    enabled: true
    config:
      draft: false
  - name: slack
    enabled: true
    config:
      webhook: ${SLACK_WEBHOOK_URL}

workflow:
  require_approval: true
  allowed_branches:
    - main

Commands

Command Description
init Initialize ReleasePilot with guided setup
plan Analyze commits and plan the next release
notes Generate changelog and release notes
approve Review and approve the release
publish Execute the release (create tag, run plugins)
Global Flags
Flag Description
--config Path to config file (default: release.config.yaml)
--dry-run Preview changes without making modifications
--verbose Enable verbose output
--json Output in JSON format

Environment Variables

Variable Description
OPENAI_API_KEY OpenAI API key for AI-powered features
GITHUB_TOKEN GitHub token for creating releases
SLACK_WEBHOOK_URL Slack webhook URL for notifications

Conventional Commits

ReleasePilot follows the Conventional Commits specification:

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]
Types and Version Bumps
Type Version Bump Description
feat Minor New features
fix Patch Bug fixes
perf Patch Performance improvements
BREAKING CHANGE Major Breaking changes
docs - Documentation only
style - Code style changes
refactor - Code refactoring
test - Test changes
chore - Maintenance tasks

Plugins

ReleasePilot supports plugins for extending functionality:

GitHub Plugin

Creates GitHub releases with release notes:

plugins:
  - name: github
    config:
      draft: false
      prerelease: false
npm Plugin

Publishes packages to npm registry:

plugins:
  - name: npm
    config:
      access: public
      registry: https://registry.npmjs.org
Slack Plugin

Sends release notifications to Slack:

plugins:
  - name: slack
    config:
      webhook: ${SLACK_WEBHOOK_URL}
      notify_on_success: true
      notify_on_error: true

Architecture

ReleasePilot is built with Domain-Driven Design principles:

├── cmd/release-pilot/     # CLI entry point
├── internal/
│   ├── application/       # Use cases
│   ├── domain/           # Business logic
│   │   ├── changes/      # Commit analysis
│   │   ├── release/      # Release aggregate
│   │   └── version/      # Semantic versioning
│   ├── infrastructure/   # External adapters
│   ├── cli/              # Command implementations
│   └── service/          # Application services
├── pkg/plugin/           # Plugin interface
└── plugins/              # Official plugins

Development

Prerequisites
  • Go 1.22+
  • Git
Build
make build
Test
make test
Lint
make lint

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes using conventional commits
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

MIT License - see LICENSE for details.

Directories

Path Synopsis
cmd
release-pilot command
Package main is the entry point for the release-pilot CLI.
Package main is the entry point for the release-pilot CLI.
internal
application/release
Package release provides application use cases for release management.
Package release provides application use cases for release management.
application/versioning
Package versioning provides application use cases for version management.
Package versioning provides application use cases for version management.
cli
Package cli provides the command-line interface for ReleasePilot.
Package cli provides the command-line interface for ReleasePilot.
config
Package config provides configuration management for ReleasePilot.
Package config provides configuration management for ReleasePilot.
container
Package container provides dependency injection for ReleasePilot services.
Package container provides dependency injection for ReleasePilot services.
domain/changes
Package changes provides domain types for analyzing commit changes.
Package changes provides domain types for analyzing commit changes.
domain/communication
Package communication provides domain types for release communication.
Package communication provides domain types for release communication.
domain/integration
Package integration provides domain types for plugin integration.
Package integration provides domain types for plugin integration.
domain/release
Package release provides domain types for release management.
Package release provides domain types for release management.
domain/sourcecontrol
Package sourcecontrol provides domain types for source control operations.
Package sourcecontrol provides domain types for source control operations.
domain/version
Package version provides domain types for semantic versioning.
Package version provides domain types for semantic versioning.
errors
Package errors provides structured error types for ReleasePilot.
Package errors provides structured error types for ReleasePilot.
fileutil
Package fileutil provides shared file utilities for ReleasePilot.
Package fileutil provides shared file utilities for ReleasePilot.
infrastructure/git
Package git provides infrastructure adapters for git operations.
Package git provides infrastructure adapters for git operations.
infrastructure/persistence
Package persistence provides infrastructure implementations for data persistence.
Package persistence provides infrastructure implementations for data persistence.
observability
Package observability provides metrics and monitoring for ReleasePilot.
Package observability provides metrics and monitoring for ReleasePilot.
plugin
Package plugin provides plugin management for ReleasePilot.
Package plugin provides plugin management for ReleasePilot.
plugin/manager
Package manager provides plugin management functionality for ReleasePilot.
Package manager provides plugin management functionality for ReleasePilot.
service/ai
Package ai provides AI-powered content generation for ReleasePilot.
Package ai provides AI-powered content generation for ReleasePilot.
service/blast
Package blast provides blast radius analysis for monorepos.
Package blast provides blast radius analysis for monorepos.
service/git
Package git provides git operations for ReleasePilot.
Package git provides git operations for ReleasePilot.
service/template
Package template provides template rendering for ReleasePilot.
Package template provides template rendering for ReleasePilot.
service/version
Package version provides version management for ReleasePilot.
Package version provides version management for ReleasePilot.
ui
Package ui provides terminal user interface components for ReleasePilot.
Package ui provides terminal user interface components for ReleasePilot.
pkg
plugin
Package plugin provides the public interface for ReleasePilot plugins.
Package plugin provides the public interface for ReleasePilot plugins.
plugins
chocolatey command
Package main implements the Chocolatey plugin for ReleasePilot.
Package main implements the Chocolatey plugin for ReleasePilot.
crates command
Package main implements the crates.io plugin for ReleasePilot.
Package main implements the crates.io plugin for ReleasePilot.
discord command
Package main implements the Discord plugin for ReleasePilot.
Package main implements the Discord plugin for ReleasePilot.
docker command
Package main implements the Docker Hub / Container registry plugin for ReleasePilot.
Package main implements the Docker Hub / Container registry plugin for ReleasePilot.
github command
Package main implements the GitHub plugin for ReleasePilot.
Package main implements the GitHub plugin for ReleasePilot.
gomod command
Package main implements the Go Modules plugin for ReleasePilot.
Package main implements the Go Modules plugin for ReleasePilot.
hex command
Package main implements the Hex plugin for ReleasePilot.
Package main implements the Hex plugin for ReleasePilot.
homebrew command
Package main implements the Homebrew formula publishing plugin for ReleasePilot.
Package main implements the Homebrew formula publishing plugin for ReleasePilot.
launchnotes command
Package main implements the LaunchNotes plugin for ReleasePilot.
Package main implements the LaunchNotes plugin for ReleasePilot.
linuxpkg command
Package main implements the Linux package repository plugin for ReleasePilot.
Package main implements the Linux package repository plugin for ReleasePilot.
maven command
Package main implements the Maven Central plugin for ReleasePilot.
Package main implements the Maven Central plugin for ReleasePilot.
npm command
Package main implements the npm plugin for ReleasePilot.
Package main implements the npm plugin for ReleasePilot.
nuget command
Package main implements the NuGet plugin for ReleasePilot.
Package main implements the NuGet plugin for ReleasePilot.
packagist command
Package main implements the Packagist plugin for ReleasePilot.
Package main implements the Packagist plugin for ReleasePilot.
pypi command
Package main implements the PyPI plugin for ReleasePilot.
Package main implements the PyPI plugin for ReleasePilot.
rubygems command
Package main implements the RubyGems plugin for ReleasePilot.
Package main implements the RubyGems plugin for ReleasePilot.
slack command
Package main implements the Slack plugin for ReleasePilot.
Package main implements the Slack plugin for ReleasePilot.
test
integration
Package integration provides integration test utilities and fixtures.
Package integration provides integration test utilities and fixtures.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL