From 9638d279d39a5b83f049fb476b6c128225db1922 Mon Sep 17 00:00:00 2001 From: wangyue789 Date: Sun, 24 May 2026 22:24:36 +0800 Subject: [PATCH] feat(issue): add assigners shortcut --- README.md | 3 +++ README.zh-CN.md | 3 +++ shortcuts/issue/issue.go | 21 ++++++++++++++++ shortcuts/issue/issue_test.go | 23 +++++++++++++++++ skills/gitlink-issue/SKILL.md | 4 +++ .../references/gitlink-issue-assigners.md | 25 +++++++++++++++++++ 6 files changed, 79 insertions(+) create mode 100644 skills/gitlink-issue/references/gitlink-issue-assigners.md diff --git a/README.md b/README.md index b4c55e1..c04b63d 100644 --- a/README.md +++ b/README.md @@ -198,6 +198,9 @@ gitlink-cli issue +batch-close --owner Gitlink --repo forgeplus --from issues.cs # Add a comment gitlink-cli issue +comment --owner Gitlink --repo forgeplus -i 123 -b "Fixed" + +# List issue assigners +gitlink-cli issue +assigners --owner Gitlink --repo forgeplus ``` ### Pull Requests diff --git a/README.zh-CN.md b/README.zh-CN.md index f426948..b8c0ae2 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -209,6 +209,9 @@ gitlink-cli issue +batch-close --owner Gitlink --repo forgeplus --from issues.cs # 添加评论 gitlink-cli issue +comment --owner Gitlink --repo forgeplus -i 123 -b "已修复" + +# 列出 Issue 负责人 +gitlink-cli issue +assigners --owner Gitlink --repo forgeplus ``` ### Pull Request diff --git a/shortcuts/issue/issue.go b/shortcuts/issue/issue.go index 902fda8..e6c65f0 100644 --- a/shortcuts/issue/issue.go +++ b/shortcuts/issue/issue.go @@ -223,6 +223,27 @@ func Shortcuts() []*common.Shortcut { return ctx.Output(env) }, }, + { + Name: "assigners", + Description: "List issue assigners", + Flags: []common.Flag{ + {Name: "keyword", Short: "k", Usage: "Search keyword"}, + }, + Run: func(ctx *common.RuntimeContext) error { + if err := ctx.ResolveOwnerRepo(); err != nil { + return err + } + q := url.Values{} + if keyword := ctx.Arg("keyword"); keyword != "" { + q.Set("keyword", keyword) + } + env, err := ctx.CallAPIWithQuery("GET", v1RepoPath(ctx)+"/issue_assigners", q) + if err != nil { + return err + } + return ctx.Output(env) + }, + }, } } diff --git a/shortcuts/issue/issue_test.go b/shortcuts/issue/issue_test.go index 088f82c..b412409 100644 --- a/shortcuts/issue/issue_test.go +++ b/shortcuts/issue/issue_test.go @@ -131,6 +131,29 @@ func TestBatchClosePreservesCurrentDescription(t *testing.T) { assertEqual(t, updatePayload["status_id"], float64(5)) } +func TestIssueAssignersShortcutWithKeyword(t *testing.T) { + server := newIssueTestServer(t, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" || r.URL.Path != "/v1/owner/repo/issue_assigners.json" { + t.Fatalf("unexpected request: %s %s", r.Method, r.URL.Path) + } + assertEqual(t, r.URL.Query().Get("keyword"), "alice") + writeJSON(t, w, map[string]interface{}{ + "total_count": 1, + "assigners": []map[string]interface{}{ + {"id": 7, "name": "Alice", "login": "alice"}, + }, + }) + }) + defer server.Close() + + err := runIssueShortcut(t, server, "assigners", map[string]string{ + "keyword": "alice", + }) + if err != nil { + t.Fatalf("assigners shortcut failed: %v", err) + } +} + func runIssueShortcut(t *testing.T, server *httptest.Server, name string, args map[string]string) error { t.Helper() shortcut := findIssueShortcut(t, name) diff --git a/skills/gitlink-issue/SKILL.md b/skills/gitlink-issue/SKILL.md index 1938da6..9d910d8 100644 --- a/skills/gitlink-issue/SKILL.md +++ b/skills/gitlink-issue/SKILL.md @@ -27,6 +27,7 @@ metadata: | `issue +close` | 关闭 Issue | 是 | | `issue +batch-close` | 批量关闭 Issue,支持 `--dry-run` 预览 | 是(dry-run 不写入) | | `issue +comment` | 添加评论 | 是 | +| `issue +assigners` | 查询 Issue 负责人列表 | 否(公开项目) | ## 使用示例 @@ -54,6 +55,9 @@ gitlink-cli issue +batch-close --owner myuser --repo myrepo --from issues.csv # 添加评论 gitlink-cli issue +comment --number 4 --body "已修复,请验证" + +# 查询 Issue 负责人 +gitlink-cli issue +assigners --owner Gitlink --repo forgeplus --keyword alice ``` ## Raw API 补充 diff --git a/skills/gitlink-issue/references/gitlink-issue-assigners.md b/skills/gitlink-issue/references/gitlink-issue-assigners.md new file mode 100644 index 0000000..23f1a4e --- /dev/null +++ b/skills/gitlink-issue/references/gitlink-issue-assigners.md @@ -0,0 +1,25 @@ +# Issue Assigners + +Use `issue +assigners` to list users that can be assigned to Issues in a repository. +This helps users find the assignee ID before creating or updating an Issue. + +## Usage + +```bash +gitlink-cli issue +assigners --owner Gitlink --repo forgeplus +gitlink-cli issue +assigners --owner Gitlink --repo forgeplus --keyword alice +``` + +## Options + +| Option | Description | +|--------|-------------| +| `--owner` | Repository owner | +| `--repo` | Repository name | +| `--keyword`, `-k` | Optional search keyword | + +## API + +```http +GET /api/v1/{owner}/{repo}/issue_assigners.json +```