- creates a merge request via GitLab API (curl + GITLAB_TOKEN, PRIVATE-TOKEN header) - derives host + project path from git remote origin (or GITLAB_HOST); no hardcoded URLs - refuses to open an MR from a protected source branch; MR_PUSH/MR_DRY_RUN toggles - optionally attaches the MR link to a Jira ticket via link-mr.sh - verified parsing for ssh (scp-form) and https remotes incl. nested namespaces
71 lines
4.8 KiB
Markdown
71 lines
4.8 KiB
Markdown
---
|
||
name: jira-workflow
|
||
description: Используй, когда нужно работать с корпоративным трекером задач (Jira) — прочитать тикет по ключу, добавить комментарий, приложить ссылку на MR, разобраться в статусах и переходах. Применяй при упоминании ключей задач, «тикет», «задача в трекере», «переведи в статус», а также в командах /bugfix и /feature.
|
||
---
|
||
|
||
# Работа с трекером задач (Jira)
|
||
|
||
Скилл описывает, как читать и обновлять задачи в нашем трекере через REST API.
|
||
|
||
## Откуда берутся адрес и токен
|
||
|
||
**Никогда не хардкодь и не спрашивай их отдельно — они уже есть в окружении.**
|
||
|
||
- **Базовый адрес трекера** — из переменной окружения `TRACKER_URL`. Если она не задана,
|
||
возьми адрес трекера из корпоративного контекста сессии (его инжектит расширение
|
||
`company-context`).
|
||
- **Токен доступа** — из переменной окружения `JIRA_TOKEN` (personal access token).
|
||
- Токен в команды и логи не подставляй в открытом виде — скрипты читают его из окружения сами.
|
||
|
||
Для создания merge request в GitLab дополнительно нужен `GITLAB_TOKEN` (токен с scope `api`);
|
||
хост и путь проекта скрипт определяет из `git remote origin` (или `GITLAB_HOST`) — адреса не хардкодятся.
|
||
|
||
Быстрая проверка окружения:
|
||
|
||
```bash
|
||
: "${TRACKER_URL:?установи TRACKER_URL или возьми адрес из корпоративного контекста}"
|
||
: "${JIRA_TOKEN:?установи JIRA_TOKEN (personal access token трекера)}"
|
||
```
|
||
|
||
## Готовые скрипты
|
||
|
||
Все скрипты лежат в `scripts/` и читают `TRACKER_URL` и `JIRA_TOKEN` из окружения:
|
||
|
||
- `./scripts/get-issue.sh <KEY>` — получить тикет (поля summary, status, description).
|
||
- `./scripts/add-comment.sh <KEY> "<текст>"` — добавить комментарий.
|
||
- `./scripts/link-mr.sh <KEY> "<url-MR>" ["<заголовок>"]` — приложить ссылку на MR
|
||
(добавляется комментарием со ссылкой; при доступном remote link API — см. TODO в скрипте).
|
||
- `./scripts/create-mr.sh "<title>" [target] [source] [jira-key]` — создать merge request в
|
||
GitLab (по текущей ветке), вывести его URL и, если передан `jira-key` и заданы
|
||
`TRACKER_URL`/`JIRA_TOKEN`, автоматически приложить ссылку к тикету.
|
||
|
||
Пример:
|
||
|
||
```bash
|
||
./scripts/get-issue.sh PROJ-123
|
||
./scripts/add-comment.sh PROJ-123 "Начал работу, воспроизвёл баг"
|
||
./scripts/link-mr.sh PROJ-123 "https://<git-host>/ai/foo/-/merge_requests/42" "Fix PROJ-123"
|
||
|
||
# создать MR из текущей ветки в main и сразу привязать к тикету:
|
||
GITLAB_TOKEN=... ./scripts/create-mr.sh "Fix PROJ-123: NPE" main "" PROJ-123
|
||
```
|
||
|
||
Флаги окружения `create-mr.sh`: `GITLAB_TOKEN` (обязателен), `GITLAB_HOST` (override хоста),
|
||
`MR_PUSH=0` (не пушить ветку), `MR_DRY_RUN=1` (показать запрос без вызова API).
|
||
MR из защищённой ветки (`main`/`master`/`release/*`) скрипт создавать откажется.
|
||
|
||
## Соглашения
|
||
|
||
<!-- TODO: заполнить реальными значениями компании -->
|
||
|
||
- **Формат ключей задач:** `<!-- TODO: например PROJ-123, префиксы проектов -->`
|
||
- **Статусы и переходы:** `<!-- TODO: рабочий процесс, напр. To Do → In Progress → In Review → Done -->`
|
||
- **Кто и когда меняет статус:** `<!-- TODO: договорённости команды -->`
|
||
- **Что писать в комментарии при старте/готовности:** `<!-- TODO -->`
|
||
|
||
## Полезное
|
||
|
||
- ID переходов статуса можно получить через `GET /rest/api/2/issue/<KEY>/transitions`,
|
||
выполнить переход — `POST` туда же с `{"transition":{"id":"<id>"}}`.
|
||
- Если API возвращает 401/403 — проверь `JIRA_TOKEN` и права. Не логируй сам токен.
|