{"id":51043672,"url":"https://github.com/axeforging/releaseforge","last_synced_at":"2026-06-22T12:02:07.990Z","repository":{"id":343033868,"uuid":"1153918758","full_name":"AxeForging/releaseforge","owner":"AxeForging","description":"AI-powered release notes generator with conventional commit analysis and semver bump suggestions","archived":false,"fork":false,"pushed_at":"2026-03-08T15:53:24.000Z","size":6782,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-08T18:05:48.494Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AxeForging.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-09T20:22:40.000Z","updated_at":"2026-03-08T15:49:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AxeForging/releaseforge","commit_stats":null,"previous_names":["axeforging/releaseforge"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/AxeForging/releaseforge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Freleaseforge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Freleaseforge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Freleaseforge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Freleaseforge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AxeForging","download_url":"https://codeload.github.com/AxeForging/releaseforge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Freleaseforge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34647750,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-22T12:02:06.296Z","updated_at":"2026-06-22T12:02:07.985Z","avatar_url":"https://github.com/AxeForging.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"doc/banner.png\" alt=\"ReleaseForge\" width=\"400\"\u003e\n\u003c/div\u003e\n\n# ReleaseForge\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Go-1.24%2B-00ADD8?style=flat-square\u0026logo=go\" alt=\"Go Version\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/OS-Linux%20%7C%20macOS%20%7C%20Windows-darkblue?style=flat-square\u0026logo=windows\" alt=\"OS Support\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-MIT-green?style=flat-square\" alt=\"License\"\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n**Release smarter**: Generate AI-powered release notes, analyze conventional commits, and automate semver bumps from your git history.\n\n## TL;DR\n\n```sh\n# Install\ncurl -L https://github.com/AxeForging/releaseforge/releases/latest/download/releaseforge-linux-amd64.tar.gz | tar xz\nsudo mv releaseforge-linux-amd64 /usr/local/bin/releaseforge\n\n# Generate release notes with AI (Gemini by default)\nreleaseforge generate --git-tag v1.0.0 --analyze-from-tag\n\n# Generate without AI (git commit analysis only)\nreleaseforge generate --force-git-mode --git-tag v1.0.0 --analyze-from-tag\n\n# Analyze commits and suggest next semver version\nreleaseforge bump --tag v1.2.3\n\n# Validate conventional commit format\nreleaseforge check --tag v1.2.3 --strict\n```\n\n## Features\n\n- **AI-powered release notes** using Gemini, OpenAI, or Anthropic\n- **No-AI mode** with git commit log analysis (no API key needed)\n- **Conventional commit analysis** for automatic semver bump suggestions\n- **Commit format validation** for CI pipelines\n- **Multiple built-in templates** (semver release notes, conventional changelog, version analysis)\n- **Custom templates** via file path or raw string\n- **JSON and text output** for CI/CD integration\n- **Auto-detection** of latest tags and commit ranges\n\n---\n\n## Install\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eLinux/macOS (AMD64)\u003c/strong\u003e\u003c/summary\u003e\n\n```sh\ncurl -L https://github.com/AxeForging/releaseforge/releases/latest/download/releaseforge-linux-amd64.tar.gz | tar xz\nchmod +x releaseforge-linux-amd64\nsudo mv releaseforge-linux-amd64 /usr/local/bin/releaseforge\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eLinux/macOS (ARM64 / Apple Silicon)\u003c/strong\u003e\u003c/summary\u003e\n\n```sh\n# Linux ARM64\ncurl -L https://github.com/AxeForging/releaseforge/releases/latest/download/releaseforge-linux-arm64.tar.gz | tar xz\nchmod +x releaseforge-linux-arm64\nsudo mv releaseforge-linux-arm64 /usr/local/bin/releaseforge\n\n# macOS Apple Silicon\ncurl -L https://github.com/AxeForging/releaseforge/releases/latest/download/releaseforge-darwin-arm64.tar.gz | tar xz\nchmod +x releaseforge-darwin-arm64\nsudo mv releaseforge-darwin-arm64 /usr/local/bin/releaseforge\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWindows (PowerShell)\u003c/strong\u003e\u003c/summary\u003e\n\n```powershell\nInvoke-WebRequest -Uri https://github.com/AxeForging/releaseforge/releases/latest/download/releaseforge-windows-amd64.zip -OutFile releaseforge.zip\nExpand-Archive -Path releaseforge.zip -DestinationPath .\nMove-Item -Path releaseforge-windows-amd64.exe -Destination releaseforge.exe\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eFrom Source (Go 1.24+)\u003c/strong\u003e\u003c/summary\u003e\n\n```sh\ngo install github.com/AxeForging/releaseforge@latest\n```\n\nOr build locally:\n\n```sh\ngit clone https://github.com/AxeForging/releaseforge.git\ncd releaseforge\nmake build-local\nsudo mv releaseforge /usr/local/bin/\n```\n\n\u003c/details\u003e\n\n---\n\n## Commands\n\n### generate - Generate release notes\n\nGenerate release notes from git commits using AI or git-based analysis.\n\n```sh\n# AI-powered (requires API key)\nexport GEMINI_API_KEY=your-key-here\nreleaseforge generate --git-tag v1.0.0 --analyze-from-tag\n\n# With a specific provider and model\nreleaseforge generate --provider openai --model gpt-4o --key $OPENAI_API_KEY \\\n  --git-tag v1.0.0 --analyze-from-tag\n\n# No-AI mode (git commit analysis only)\nreleaseforge generate --force-git-mode --git-tag v1.0.0 --analyze-from-tag\n\n# Custom template\nreleaseforge generate --template ./my-template.md --git-tag v1.0.0 --analyze-from-tag\n\n# Save output to specific path\nreleaseforge generate --force-git-mode -o ./RELEASE_NOTES.md\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAll flags\u003c/strong\u003e\u003c/summary\u003e\n\n| Flag | Alias | Description | Default |\n|------|-------|-------------|---------|\n| `--provider` | `-p` | LLM provider: gemini, openai, anthropic | `gemini` |\n| `--model` | `-m` | Model name | `gemini-2.0-flash` |\n| `--key` | `-k` | API key (or use env vars) | - |\n| `--git-sha` | | Analyze a specific commit | - |\n| `--git-tag` | | Git tag to analyze | - |\n| `--analyze-from-tag` | | Analyze commits after the tag | `false` |\n| `--max-commits` | | Max commits to analyze | `100` |\n| `--template` | `-t` | Path to template file | - |\n| `--template-name` | `-tn` | Built-in template name | - |\n| `--template-raw` | `-tr` | Raw template string | - |\n| `--system-prompt` | `-sp` | Additional system prompt lines | - |\n| `--ignore-list` | `-il` | File paths to ignore | - |\n| `--tags-context-count` | | Tags for version context | `15` |\n| `--disable-tags-context` | | Skip fetching tags context | `false` |\n| `--output` | `-o` | Output file path | `/tmp/` |\n| `--use-git-fallback` | | Fallback to git if LLM fails | `false` |\n| `--force-git-mode` | | Use git analysis only (no AI) | `false` |\n| `--verbose` | `-v` | Debug logging | `false` |\n\n\u003c/details\u003e\n\n### bump - Suggest next semver version\n\nAnalyze conventional commits between a tag and branch to determine the appropriate version bump.\n\n```sh\n# Auto-detect latest tag, compare to HEAD\nreleaseforge bump\n\n# Specify base tag\nreleaseforge bump --tag v1.2.3\n\n# Compare to a specific branch\nreleaseforge bump --tag v1.2.3 --branch main\n\n# Quiet mode (outputs version only, ideal for scripts)\nreleaseforge bump --tag v1.2.3 --quiet\n\n# Save outputs for CI\nreleaseforge bump --output-version next-version.txt --output-json analysis.json\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAll flags\u003c/strong\u003e\u003c/summary\u003e\n\n| Flag | Alias | Description | Default |\n|------|-------|-------------|---------|\n| `--tag` | | Base semver tag to compare against | auto-detect |\n| `--branch` | `-b` | Target branch or ref | `HEAD` |\n| `--max-commits` | | Max commits to analyze | `200` |\n| `--output-json` | | Save analysis as JSON | - |\n| `--output-version` | | Save version string to file | - |\n| `--quiet` | `-q` | Output version only | `false` |\n| `--verbose` | `-v` | Debug logging | `false` |\n\n\u003c/details\u003e\n\n### check - Validate conventional commits\n\nCheck that commits follow the [Conventional Commits](https://www.conventionalcommits.org/) specification.\n\n```sh\n# Check commits since last tag\nreleaseforge check --tag v1.2.3\n\n# Strict mode (exit code 1 if non-conventional commits found)\nreleaseforge check --tag v1.2.3 --strict\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAll flags\u003c/strong\u003e\u003c/summary\u003e\n\n| Flag | Alias | Description | Default |\n|------|-------|-------------|---------|\n| `--tag` | | Base semver tag to compare against | auto-detect |\n| `--branch` | `-b` | Target branch or ref | `HEAD` |\n| `--max-commits` | | Max commits to analyze | `200` |\n| `--strict` | `-s` | Fail on non-conventional commits | `false` |\n| `--verbose` | `-v` | Debug logging | `false` |\n\n\u003c/details\u003e\n\n### templates - List built-in templates\n\n```sh\nreleaseforge templates\n```\n\n### version - Show version info\n\n```sh\nreleaseforge version\n```\n\n---\n\n## Conventional Commit Types\n\nThe `bump` and `check` commands understand the [Conventional Commits](https://www.conventionalcommits.org/) specification:\n\n| Type | Semver Impact | Description |\n|------|--------------|-------------|\n| `feat` | **MINOR** | A new feature |\n| `fix` | **PATCH** | A bug fix |\n| `perf` | **PATCH** | A performance improvement |\n| `revert` | **PATCH** | Reverts a previous commit |\n| `docs` | No bump | Documentation only changes |\n| `style` | No bump | Code style changes (formatting, whitespace) |\n| `refactor` | No bump | Code refactoring (no bug fix or feature) |\n| `test` | No bump | Adding or correcting tests |\n| `build` | No bump | Build system or dependency changes |\n| `ci` | No bump | CI/CD configuration changes |\n| `chore` | No bump | Maintenance tasks |\n\n**Breaking changes** always trigger a **MAJOR** bump:\n- Using `!` after the type: `feat!: redesign API` or `fix(auth)!: change token format`\n- Using `BREAKING CHANGE:` in the commit footer\n\n### Commit format\n\n```\n\u003ctype\u003e[optional scope][!]: \u003cdescription\u003e\n\n[optional body]\n\n[optional footer(s)]\n```\n\n**Examples:**\n```\nfeat(auth): add OAuth2 support\nfix: resolve null pointer in user lookup\nfeat!: redesign REST API endpoints\nchore(deps): update Go to 1.24\ndocs: add installation guide\n\nfeat(api): add batch processing\n\nBREAKING CHANGE: removed /v1 endpoints\n```\n\n---\n\n## LLM Providers\n\nReleaseForge supports three LLM providers for AI-powered release notes:\n\n| Provider | Default Model | API Key Env Var |\n|----------|--------------|-----------------|\n| **Gemini** (default) | `gemini-2.0-flash` | `GEMINI_API_KEY` |\n| **OpenAI** | `gpt-4o` | `OPENAI_API_KEY` |\n| **Anthropic** | `claude-sonnet-4-5-20250929` | `ANTHROPIC_API_KEY` |\n\n```sh\n# Gemini (default)\nexport GEMINI_API_KEY=your-key\nreleaseforge generate --git-tag v1.0.0 --analyze-from-tag\n\n# OpenAI\nexport OPENAI_API_KEY=your-key\nreleaseforge generate --provider openai --model gpt-4o --git-tag v1.0.0 --analyze-from-tag\n\n# Anthropic\nexport ANTHROPIC_API_KEY=your-key\nreleaseforge generate --provider anthropic --model claude-sonnet-4-5-20250929 --git-tag v1.0.0 --analyze-from-tag\n```\n\n---\n\n## Built-in Templates\n\n| Name | Description |\n|------|-------------|\n| `semver-release-notes` | Standard release notes with semver analysis |\n| `conventional-changelog` | Changelog grouped by commit type |\n| `version-analysis` | Focused version bump analysis |\n\n```sh\n# Use a built-in template\nreleaseforge generate --template-name conventional-changelog --git-tag v1.0.0 --analyze-from-tag\n\n# List all templates\nreleaseforge templates\n```\n\n---\n\n## CI/CD Integration\n\n### GitHub Actions - Version Bump\n\n```yaml\n- name: Get next version\n  run: |\n    NEXT=$(releaseforge bump --tag $(git describe --tags --abbrev=0) --quiet)\n    echo \"next_version=$NEXT\" \u003e\u003e $GITHUB_OUTPUT\n  id: version\n```\n\n### GitHub Actions - Conventional Commit Check\n\n```yaml\n- name: Check commit format\n  run: |\n    releaseforge check --tag $(git describe --tags --abbrev=0) --strict\n```\n\n### GitHub Actions - Release Notes\n\n```yaml\n- name: Generate release notes\n  env:\n    GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}\n  run: |\n    releaseforge generate --git-tag ${{ github.ref_name }} --analyze-from-tag -o release-notes.md\n```\n\n---\n\n## Exit Codes\n\n| Code | Meaning |\n|------|---------|\n| `0` | Success |\n| `1` | Error (invalid flags, git error, API failure, strict mode violation) |\n\n---\n\n## Development\n\n```sh\n# Build\nmake build-local\n\n# Run tests\nmake test\n\n# Cross-compile all platforms\nmake build\n\n# Tag a release\nVERSION=v1.0.0 make tag\n```\n\n---\n\n## License\n\nMIT - see [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxeforging%2Freleaseforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxeforging%2Freleaseforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxeforging%2Freleaseforge/lists"}