Help us shape the future of Go! Take the 2026 Go Developer Survey

gmr

module
v0.9.0 Latest Latest
Warning

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

Go to latest
Published: Jul 30, 2026 License: MIT

README

gmr - Git Merge Request automation

CI Release Go Version Go Report Card

CLI-утиліта на Go, яка автоматизує створення Merge Request / Pull Request: стейджить зміни, генерує commit message через AI (Gemini / Claude / OpenAI), створює гілку і відкриває GitLab MR або GitHub PR - однією командою. Платформа визначається автоматично за URL origin remote.

Installation

Pre-built binary (рекомендовано)

Завантажити архів для вашої ОС / архітектури з GitHub Releases:

VERSION=$(curl -fsSL https://api.github.com/repos/slucheninov/gmr/releases/latest | jq -r .tag_name)
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
curl -L -o gmr.tar.gz \
  "https://github.com/slucheninov/gmr/releases/download/${VERSION}/gmr-${VERSION}-${OS}-${ARCH}.tar.gz"
tar -xzf gmr.tar.gz
sudo install -m 0755 gmr /usr/local/bin/gmr
gmr --version

Контрольні суми (checksums.txt) додаються до кожного релізу:

curl -L -O "https://github.com/slucheninov/gmr/releases/download/${VERSION}/checksums.txt"
sha256sum -c checksums.txt --ignore-missing
Через go install
go install github.com/slucheninov/gmr/cmd/gmr@latest

Бінарник буде у $(go env GOBIN) (за замовчуванням ~/go/bin). Переконайся, що ця тека є в PATH.

З вихідного коду
git clone https://github.com/slucheninov/gmr.git
cd gmr
go build -o gmr ./cmd/gmr
sudo install -m 0755 gmr /usr/local/bin/gmr

Update

Pre-built binary
VERSION=$(curl -fsSL https://api.github.com/repos/slucheninov/gmr/releases/latest | jq -r .tag_name)
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
curl -L -o gmr.tar.gz \
  "https://github.com/slucheninov/gmr/releases/download/${VERSION}/gmr-${VERSION}-${OS}-${ARCH}.tar.gz"
tar -xzf gmr.tar.gz
sudo install -m 0755 gmr /usr/local/bin/gmr
gmr --version
Через go install
go install github.com/slucheninov/gmr/cmd/gmr@latest
З вихідного коду
cd gmr
git pull
go build -o gmr ./cmd/gmr
sudo install -m 0755 gmr /usr/local/bin/gmr

Requirements

  • glab - GitLab CLI (для GitLab репо)
  • gh - GitHub CLI (для GitHub репо)
  • git
  • GEMINI_API_KEY, ANTHROPIC_API_KEY, та/або OPENAI_API_KEY (хоча б один)
  • Авторизований glab (glab auth login) для GitLab API або авторизований gh (gh auth login) для GitHub API

Залежності jq і curl більше не потрібні - все робиться силами Go-бінарника.

Usage

gmr [options] [branch-name]   # full flow: commit + MR/PR
gmr -m                          # generate commit message only
gmr -s                          # after MR/PR, stay on the feature branch
gmr -h                          # help
gmr -v                          # version

Якщо branch-name не вказано, назва гілки виводиться з AI commit title (наприклад, fix-detect, feat-add). При колізії додається числовий суфікс (fix-detect2). Fallback: auto-YYYYMMDD-HHMMSS.

Якщо gmr запущено з уже створеної feature-гілки, яка має коміти відносно основної гілки, він використовує її як source branch і одразу створює MR/PR. Нова гілка та новий коміт не створюються, AI API key не потрібен, а після завершення (або помилки) gmr залишається на поточній feature-гілці. Якщо в ній є незакомічені зміни, вони спочатку комітяться у цю ж гілку.

З прапорцем -m (--message) скрипт лише генерує commit message через AI (виводиться у stdout), без створення гілки, коміту чи MR/PR. Працює з будь-якої гілки.

З прапорцем -s (--stay) після успішного створення MR/PR ти залишаєшся на feature-гілці; за замовчуванням gmr переключається на основну гілку і робить git pull.

How it works

  1. Визначає поточну гілку: з основної запускає повний flow зі створенням feature-гілки, а на існуючій feature-гілці використовує вже додані коміти.
  2. Визначає платформу (GitLab / GitHub) за URL origin remote.
  3. Якщо є незакомічені зміни, стейджить їх (git add -A).
  4. Для нових змін генерує commit message через AI: Gemini → Claude → OpenAI → ручне введення. Для вже закоміченої feature-гілки використовує повідомлення останнього коміту.
  5. З основної гілки створює нову feature-гілку й коміт; з існуючої feature-гілки використовує її напряму. Потім відкриває MR (glab) або PR (gh).
  6. Для GitLab передає в glab явні title і description: використовує body commit message, а якщо його немає - генерує короткий ## Summary із заголовка коміту.
  7. Для GitHub - вмикає auto-merge зі squash (gracefully degrade, якщо репо це забороняє).
  8. Для нового flow за замовчуванням повертається на основну гілку і виконує git pull (з -s / --stay залишається на feature-гілці). При запуску з існуючої feature-гілки завжди залишається на ній.

Configuration

Змінна Опис Default
GEMINI_API_KEY API ключ Google Gemini -
ANTHROPIC_API_KEY API ключ Anthropic Claude -
OPENAI_API_KEY API ключ OpenAI -
GEMINI_MODEL Модель Gemini gemini-flash-latest
ANTHROPIC_MODEL Модель Claude claude-sonnet-4-20250514
OPENAI_MODEL Модель OpenAI gpt-4o-mini
GEMINI_BASE_URL Base URL для Gemini API override https://generativelanguage.googleapis.com/v1beta
ANTHROPIC_BASE_URL Base URL для Claude API override https://api.anthropic.com
OPENAI_BASE_URL Base URL для OpenAI-compatible API override (наприклад LiteLLM) https://api.openai.com
GMR_PROVIDERS Порядок AI-провайдерів (comma-separated) gemini,claude,openai
GMR_MAIN_BRANCH Основна гілка auto (origin/HEAD, fallback: main/master)
GMR_MAX_DIFF Макс. рядків diff для AI 500
EDITOR Редактор для режиму e(edit) vim
NO_COLOR Вимкнути ANSI кольори у виводі -

Development

Гайд з локальної розробки, тестів, лінту і релізного процесу — у DEVELOPMENT.md. Контрибʼюторам також варто прочитати CONTRIBUTING.md.

License

MIT

Directories

Path Synopsis
cmd
gmr command
internal
ai
Package ai contains AI providers that turn a git diff into a commit message.
Package ai contains AI providers that turn a git diff into a commit message.
commit
Package commit contains helpers to derive MR/PR metadata from a commit message.
Package commit contains helpers to derive MR/PR metadata from a commit message.
git
ui

Jump to

Keyboard shortcuts

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