Files
pi-kit/skills/jira-workflow/SKILL.md
T
dev 7fc16777a6 feat(jira-workflow): add GitLab create-mr.sh helper
- 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
2026-07-16 11:34:55 +03:00

71 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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` и права. Не логируй сам токен.