AI release assistant CLI for git repositories.
Project description
ReleaseGuru
ReleaseGuru is an AI release assistant CLI for git repositories.
Main feature: turn commit history into a release plan that tells the team what changed, what matters, what to test, and what can be published.
Secondary helpers: version bumping, release notes, GitHub Releases, JSON output, and GitHub Actions outputs.
Features
- AI release brief from git commits
- Release summary, highlights, risks, checks, and user-facing notes
- SemVer recommendation:
major,minor, orpatch - Auto-version from latest git tag
- Manual version override
- Markdown or JSON output
- Notes-only mode for GitHub release bodies
- Dry-run mode for CI and review
- GitHub Release publish
- Draft and prerelease publish modes
- GitHub repo override with
--github-repo - Optional tag creation and push
- GitHub Actions output support with
--ci-output - Multi-provider support: Groq, Gemini, OpenAI, Anthropic, xAI
Install
After PyPI publish:
pipx install releaseguru
Or:
pip install releaseguru
During local development:
cd ReleaseGuru
python -m venv venv
pip install -e .
cp .env.example .env
Add one AI provider key to .env.
GROQ_API_KEY=
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
GEMINI_API_KEY=
XAI_API_KEY=
GITHUB_TOKEN=
GITHUB_TOKEN is only needed when publishing.
For one global key across all repos, create %USERPROFILE%\.releaseguru.env and put your provider key there. ReleaseGuru loads that file automatically.
Basic Use
Example Output
Generate release plan:
releaseguru
Use custom range:
releaseguru --from v1.2.0 --to HEAD
Save to file:
releaseguru --output RELEASE.md
Generate JSON for automation:
releaseguru --format json --output release.json
Only print release notes:
releaseguru --notes-only
Dry run publish flow:
releaseguru --publish --dry-run --github-repo owner/repo
Publish full release:
releaseguru --publish
Publish only notes body:
releaseguru --publish --notes-only
Publish draft:
releaseguru --publish --draft
Publish prerelease:
releaseguru --publish --prerelease
Publish without creating/pushing a local tag:
releaseguru --publish --skip-tag
GitHub Actions
Use this when you want manual release from Actions.
name: ReleaseGuru
on:
workflow_dispatch:
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install ReleaseGuru
run: pip install releaseguru
- name: Create release
id: releaseguru
env:
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: releaseguru --publish --notes-only --ci-output
- name: Show result
run: |
echo "Version: ${{ steps.releaseguru.outputs.version }}"
echo "Bump: ${{ steps.releaseguru.outputs.bump_type }}"
echo "URL: ${{ steps.releaseguru.outputs.release_url }}"
For review before publishing:
- name: Preview release
env:
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
run: releaseguru --dry-run --format json --output release.json
Testing
Syntax check:
python -m py_compile releaseguru/cli.py releaseguru/providers.py
Unit tests:
python -m unittest discover -s tests
CLI dry run with mocked AI response:
releaseguru --mock-response tests/fixtures/ai_response.txt --dry-run
Real AI test:
releaseguru --provider groq --dry-run
Real GitHub publish test:
releaseguru --provider groq --publish --draft
Use --draft first so you can inspect the release before making it public.
Release Ways
- Local preview:
releaseguru --dry-run - Local file:
releaseguru --output RELEASE.md - CI preview:
releaseguru --format json --ci-output - GitHub draft:
releaseguru --publish --draft - GitHub prerelease:
releaseguru --publish --prerelease - GitHub stable release:
releaseguru --publish - Notes-only release body:
releaseguru --publish --notes-only - Existing tag release:
releaseguru --publish --skip-tag --version v1.2.3 - Manual version release:
releaseguru --version v2.0.0 --publish
Provider Defaults
| Provider | Option | Default model |
|---|---|---|
| Groq | --provider groq |
llama-3.3-70b-versatile |
| Gemini | --provider gemini |
gemini-1.5-flash |
| OpenAI | --provider openai |
gpt-4o-mini |
| Anthropic | --provider anthropic |
claude-3-5-haiku-20241022 |
| xAI | --provider xai |
grok-3-mini |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file releaseguru-0.1.6.tar.gz.
File metadata
- Download URL: releaseguru-0.1.6.tar.gz
- Upload date:
- Size: 101.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
508da97214655ab32c853fb6d6bebc0df6b37830998a761915b763b0727bd03d
|
|
| MD5 |
538d2849b0688cd5a172a3ed8d7cef84
|
|
| BLAKE2b-256 |
4d634aa894a8a4fad4924615f215d76f096b57448bc362e51fff59497d2f3833
|
Provenance
The following attestation bundles were made for releaseguru-0.1.6.tar.gz:
Publisher:
publish-pypi.yml on ArhamAzeem/ReleaseGuru
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
releaseguru-0.1.6.tar.gz -
Subject digest:
508da97214655ab32c853fb6d6bebc0df6b37830998a761915b763b0727bd03d - Sigstore transparency entry: 1731117491
- Sigstore integration time:
-
Permalink:
ArhamAzeem/ReleaseGuru@5a89e56d884491edcf4ecc92d6f879508fced90b -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/ArhamAzeem
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@5a89e56d884491edcf4ecc92d6f879508fced90b -
Trigger Event:
push
-
Statement type:
File details
Details for the file releaseguru-0.1.6-py3-none-any.whl.
File metadata
- Download URL: releaseguru-0.1.6-py3-none-any.whl
- Upload date:
- Size: 9.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
097ad583655738ed1230dd1a704dbd09d4b7f9607b08099d23f801b607b1af15
|
|
| MD5 |
fa2896e2300962a7d4b3663830478b65
|
|
| BLAKE2b-256 |
3a78d3f09d0e50ab8b0b392fdaa4170d0a3952d63fdb0cf72ec24c61dea02b96
|
Provenance
The following attestation bundles were made for releaseguru-0.1.6-py3-none-any.whl:
Publisher:
publish-pypi.yml on ArhamAzeem/ReleaseGuru
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
releaseguru-0.1.6-py3-none-any.whl -
Subject digest:
097ad583655738ed1230dd1a704dbd09d4b7f9607b08099d23f801b607b1af15 - Sigstore transparency entry: 1731117508
- Sigstore integration time:
-
Permalink:
ArhamAzeem/ReleaseGuru@5a89e56d884491edcf4ecc92d6f879508fced90b -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/ArhamAzeem
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@5a89e56d884491edcf4ecc92d6f879508fced90b -
Trigger Event:
push
-
Statement type: