listing_ebay/.claude/commands/review-task-jira.md

4.6 KiB

description argument-hint allowed-tools
Đọc task Jira + PR/commit Gitea, sinh comment ghi nhận công việc đã làm theo format ngày <jira-task-url> <gitea-pr-or-commit-url> 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 taskhttps://<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"--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

  • 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__getAccessibleAtlassianResourcescloudId.
  • 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.