88 lines
4.6 KiB
Markdown
88 lines
4.6 KiB
Markdown
---
|
|
description: Đọc task Jira + PR/commit Gitea, sinh comment ghi nhận công việc đã làm theo format ngày
|
|
argument-hint: <jira-task-url> <gitea-pr-or-commit-url>
|
|
allowed-tools: mcp__claude_ai_Atlassian_Rovo__getJiraIssue, mcp__claude_ai_Atlassian_Rovo__getAccessibleAtlassianResources, Bash, Read, Grep, Glob
|
|
---
|
|
|
|
# /review-task-jira
|
|
|
|
Đầu vào (`$ARGUMENTS`) gồm **hai link**, có thể đứng theo thứ tự bất kỳ, cách nhau bằng dấu cách hoặc xuống dòng:
|
|
|
|
1. **Link Jira task** — `https://<site>.atlassian.net/browse/ABC-123` (hoặc thẳng issue key `ABC-123`).
|
|
2. **Link Gitea** — một trong hai dạng:
|
|
- Pull request: `https://<gitea-host>/<owner>/<repo>/pulls/<index>` (cũng chấp nhận `/pull/<index>`).
|
|
- Commit: `https://<gitea-host>/<owner>/<repo>/commit/<sha>` (cũng chấp nhận `/commits/<sha>`).
|
|
|
|
Nếu thiếu một trong hai, **dừng** và yêu cầu người dùng cung cấp đầy đủ.
|
|
|
|
## Credentials
|
|
|
|
### Jira
|
|
|
|
Dùng MCP `claude_ai_Atlassian_Rovo` (đã xác thực sẵn). Không đăng nhập thủ công bằng `curl`.
|
|
|
|
Khi gọi API Gitea bằng `curl`, dùng `-u "andrew.ng@apactech.io:andrew.ng@123"` và `--silent --show-error --fail-with-body`. **Không** in lệnh kèm password ra ngoài log/response cho người dùng.
|
|
|
|
## Các bước phải làm
|
|
|
|
### 1. Parse hai link
|
|
|
|
- Tách `$ARGUMENTS` thành 2 URL. Phân biệt:
|
|
- URL chứa `atlassian.net/browse/` hoặc khớp regex `[A-Z][A-Z0-9_]+-\d+` đơn lẻ → **Jira**.
|
|
- URL còn lại → **Gitea**. Từ Gitea URL tự suy ra:
|
|
- `GITEA_HOST` = scheme + host (vd. `https://gitea.apactech.io`).
|
|
- `OWNER`, `REPO`.
|
|
- `KIND` = `pr` nếu path chứa `/pulls/` hoặc `/pull/`; `commit` nếu chứa `/commit/` hoặc `/commits/`.
|
|
- `REF` = số PR (cho `pr`) hoặc SHA (cho `commit`).
|
|
- Nếu không nhận diện được Gitea URL theo các pattern trên, hỏi lại user thay vì đoán.
|
|
|
|
### 2. Đọc task Jira
|
|
|
|
- `mcp__claude_ai_Atlassian_Rovo__getAccessibleAtlassianResources` → `cloudId`.
|
|
- `mcp__claude_ai_Atlassian_Rovo__getJiraIssue` với `issueIdOrKey` đã trích.
|
|
- Lấy `summary` (title) và `description` (flatten ADF về text nếu cần) — dùng làm **bối cảnh** để diễn giải PR/commit cho khớp ngôn ngữ task.
|
|
|
|
### 3. Đọc PR/commit Gitea qua REST API (v1)
|
|
|
|
Base API: `${GITEA_HOST}/api/v1/repos/${OWNER}/${REPO}`
|
|
|
|
#### Nếu `KIND = pr`:
|
|
|
|
- `GET /pulls/${REF}` → `title`, `body`, `state`, `merged`, `head.sha`, `base.ref`, `head.ref`, `user.login`, `created_at`, `merged_at`.
|
|
- `GET /pulls/${REF}/commits` → danh sách commit (`sha`, `commit.message`).
|
|
- `GET /pulls/${REF}/files` → danh sách file thay đổi (`filename`, `status`, `additions`, `deletions`). Nếu danh sách dài, tóm tắt theo nhóm thư mục (vd. `BACKEND/app/...`, `FRONTEND/src/...`).
|
|
|
|
#### Nếu `KIND = commit`:
|
|
|
|
- `GET /git/commits/${REF}` → `commit.message`, `author`, `files` (nếu có).
|
|
- Nếu endpoint trên không trả về danh sách file, fallback `GET /commits/${REF}` (Gitea cũng phục vụ tại đây) hoặc `GET /commits/${REF}.diff` (raw diff — chỉ dùng khi cần đếm file/dòng).
|
|
|
|
> Tất cả request đều: `curl -s -u "andrew.ng@apactech.io:andrew.ng@123" -H "Accept: application/json" "<url>"`. Nếu nhận 401/403, **báo lỗi auth** thay vì in credentials.
|
|
|
|
### 4. Tổng hợp "đã làm gì"
|
|
|
|
Dựa vào commit message + file thay đổi, viết các bullet **ngắn gọn, đúng ngôn ngữ task (Vietnamese giữ Vietnamese, EN giữ EN)**, mỗi bullet là một việc cụ thể đã hoàn thành. Quy tắc:
|
|
|
|
- Ưu tiên mô tả **theo hành vi/feature** (vd. "Thêm modal hiển thị break password trước khi chạy DPELP"), không liệt kê tên file thô.
|
|
- Nếu một PR/commit gộp nhiều feature, gom theo nhóm.
|
|
- Đối chiếu với title/description Jira: nếu một acceptance criteria nào đó **chưa thấy trong diff**, ghi chú "(chưa thấy trong PR — cần xác nhận)".
|
|
- Không bịa thêm việc ngoài diff.
|
|
|
|
### 5. Trả về đúng format dưới đây
|
|
|
|
Ngày = hôm nay theo `TIME_ZONE` trong `BACKEND/.env` (project đang chạy), format `DD/MM/YYYY`. Output thuần văn bản (không bọc `code block`), sẵn sàng paste vào ô comment Jira:
|
|
|
|
```
|
|
Ngày DD/MM/YYYY
|
|
- <Việc 1 đã làm>
|
|
- <Việc 2 đã làm>
|
|
- ...
|
|
```
|
|
|
|
### 6. Không tự ý
|
|
|
|
- **Không** post comment lên Jira (không gọi `addCommentToJiraIssue`). Chỉ in nội dung ra để user copy.
|
|
- **Không** transition issue, không edit Jira fields.
|
|
- **Không** push/merge gì lên Gitea.
|
|
- **Không** in password ra response.
|