@jacobsandersen/glab-axi 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +139 -0
- package/dist/bin/glab-axi.d.ts +2 -0
- package/dist/bin/glab-axi.js +4 -0
- package/dist/bin/glab-axi.js.map +1 -0
- package/dist/src/args.d.ts +8 -0
- package/dist/src/args.js +84 -0
- package/dist/src/args.js.map +1 -0
- package/dist/src/body.d.ts +15 -0
- package/dist/src/body.js +132 -0
- package/dist/src/body.js.map +1 -0
- package/dist/src/cli.d.ts +9 -0
- package/dist/src/cli.js +124 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/api.d.ts +3 -0
- package/dist/src/commands/api.js +155 -0
- package/dist/src/commands/api.js.map +1 -0
- package/dist/src/commands/home.d.ts +3 -0
- package/dist/src/commands/home.js +57 -0
- package/dist/src/commands/home.js.map +1 -0
- package/dist/src/commands/issue.d.ts +3 -0
- package/dist/src/commands/issue.js +364 -0
- package/dist/src/commands/issue.js.map +1 -0
- package/dist/src/commands/job.d.ts +3 -0
- package/dist/src/commands/job.js +119 -0
- package/dist/src/commands/job.js.map +1 -0
- package/dist/src/commands/label.d.ts +3 -0
- package/dist/src/commands/label.js +117 -0
- package/dist/src/commands/label.js.map +1 -0
- package/dist/src/commands/mr.d.ts +3 -0
- package/dist/src/commands/mr.js +365 -0
- package/dist/src/commands/mr.js.map +1 -0
- package/dist/src/commands/pipeline.d.ts +3 -0
- package/dist/src/commands/pipeline.js +168 -0
- package/dist/src/commands/pipeline.js.map +1 -0
- package/dist/src/commands/project.d.ts +3 -0
- package/dist/src/commands/project.js +138 -0
- package/dist/src/commands/project.js.map +1 -0
- package/dist/src/commands/release.d.ts +3 -0
- package/dist/src/commands/release.js +179 -0
- package/dist/src/commands/release.js.map +1 -0
- package/dist/src/commands/search.d.ts +3 -0
- package/dist/src/commands/search.js +266 -0
- package/dist/src/commands/search.js.map +1 -0
- package/dist/src/commands/setup.d.ts +2 -0
- package/dist/src/commands/setup.js +23 -0
- package/dist/src/commands/setup.js.map +1 -0
- package/dist/src/commands/variable.d.ts +3 -0
- package/dist/src/commands/variable.js +92 -0
- package/dist/src/commands/variable.js.map +1 -0
- package/dist/src/context.d.ts +7 -0
- package/dist/src/context.js +42 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/errors.d.ts +5 -0
- package/dist/src/errors.js +81 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/fields.d.ts +10 -0
- package/dist/src/fields.js +26 -0
- package/dist/src/fields.js.map +1 -0
- package/dist/src/format.d.ts +8 -0
- package/dist/src/format.js +17 -0
- package/dist/src/format.js.map +1 -0
- package/dist/src/glab.d.ts +10 -0
- package/dist/src/glab.js +73 -0
- package/dist/src/glab.js.map +1 -0
- package/dist/src/secretValue.d.ts +1 -0
- package/dist/src/secretValue.js +33 -0
- package/dist/src/secretValue.js.map +1 -0
- package/dist/src/skill.d.ts +6 -0
- package/dist/src/skill.js +79 -0
- package/dist/src/skill.js.map +1 -0
- package/dist/src/stdin.d.ts +2 -0
- package/dist/src/stdin.js +15 -0
- package/dist/src/stdin.js.map +1 -0
- package/dist/src/suggestions.d.ts +11 -0
- package/dist/src/suggestions.js +262 -0
- package/dist/src/suggestions.js.map +1 -0
- package/dist/src/toon.d.ts +57 -0
- package/dist/src/toon.js +150 -0
- package/dist/src/toon.js.map +1 -0
- package/package.json +59 -0
- package/skills/glab-axi/SKILL.md +51 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { encode } from "@toon-format/toon";
|
|
2
|
+
import { glabExec } from "../glab.js";
|
|
3
|
+
import { AxiError } from "../errors.js";
|
|
4
|
+
import { getAllFlags } from "../args.js";
|
|
5
|
+
import { cleanBody } from "../body.js";
|
|
6
|
+
export const API_HELP = `usage: glab-axi api [<method>] <path>
|
|
7
|
+
description: Make an authenticated GitLab API request. Defaults to GET if no method specified.
|
|
8
|
+
methods[6]:
|
|
9
|
+
GET, POST, PUT, PATCH, DELETE
|
|
10
|
+
flags[2]:
|
|
11
|
+
--field <key=value> (repeatable), --header <key:value> (repeatable)
|
|
12
|
+
examples:
|
|
13
|
+
glab-axi api /projects/{owner}%2F{repo}
|
|
14
|
+
glab-axi api POST /projects/{id}/issues --field title="Bug report"
|
|
15
|
+
glab-axi api GET /projects/{id}/merge_requests`;
|
|
16
|
+
const HTTP_METHODS = new Set(["GET", "POST", "PUT", "PATCH", "DELETE"]);
|
|
17
|
+
const RAW_OUTPUT_TRUNCATION_LIMIT = 4000;
|
|
18
|
+
const LONG_STRING_CLEANUP_THRESHOLD = 200;
|
|
19
|
+
const STRING_VALUE_TRUNCATION_LIMIT = 2000;
|
|
20
|
+
export async function apiCommand(args, ctx) {
|
|
21
|
+
if (args[0] === "--help" || args.length === 0)
|
|
22
|
+
return API_HELP;
|
|
23
|
+
const positionals = [];
|
|
24
|
+
for (let i = 0; i < args.length; i++) {
|
|
25
|
+
if (args[i].startsWith("--")) {
|
|
26
|
+
i++;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
positionals.push(args[i]);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
let method;
|
|
33
|
+
let path;
|
|
34
|
+
if (positionals.length >= 2 &&
|
|
35
|
+
HTTP_METHODS.has(positionals[0].toUpperCase())) {
|
|
36
|
+
method = positionals[0].toUpperCase();
|
|
37
|
+
path = positionals[1];
|
|
38
|
+
}
|
|
39
|
+
else if (positionals.length >= 1) {
|
|
40
|
+
method = "GET";
|
|
41
|
+
path = positionals[0];
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw new AxiError("API path is required: glab-axi api [<method>] <path>", "VALIDATION_ERROR");
|
|
45
|
+
}
|
|
46
|
+
const ghArgs = ["api", path, "--method", method];
|
|
47
|
+
const fields = getAllFlags(args, "--field");
|
|
48
|
+
for (const f of fields) {
|
|
49
|
+
ghArgs.push("--field", f);
|
|
50
|
+
}
|
|
51
|
+
const headers = getAllFlags(args, "--header");
|
|
52
|
+
for (const h of headers) {
|
|
53
|
+
ghArgs.push("--header", h);
|
|
54
|
+
}
|
|
55
|
+
const raw = await glabExec(ghArgs, ctx);
|
|
56
|
+
try {
|
|
57
|
+
const data = JSON.parse(raw);
|
|
58
|
+
const cleaned = stripNoisyFields(data);
|
|
59
|
+
return encode(cleaned);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
const trimmed = raw.trim();
|
|
63
|
+
const truncated = trimmed.length > RAW_OUTPUT_TRUNCATION_LIMIT;
|
|
64
|
+
const result = {
|
|
65
|
+
api_response: {
|
|
66
|
+
body: truncated
|
|
67
|
+
? trimmed.slice(0, RAW_OUTPUT_TRUNCATION_LIMIT)
|
|
68
|
+
: trimmed,
|
|
69
|
+
truncated,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
if (truncated) {
|
|
73
|
+
result.api_response.original_length =
|
|
74
|
+
trimmed.length;
|
|
75
|
+
}
|
|
76
|
+
return encode(result);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const NOISY_KEYS = new Set([
|
|
80
|
+
"avatar_url",
|
|
81
|
+
"gravatar_id",
|
|
82
|
+
"followers_url",
|
|
83
|
+
"following_url",
|
|
84
|
+
"gists_url",
|
|
85
|
+
"starred_url",
|
|
86
|
+
"subscriptions_url",
|
|
87
|
+
"organizations_url",
|
|
88
|
+
"repos_url",
|
|
89
|
+
"events_url",
|
|
90
|
+
"received_events_url",
|
|
91
|
+
"labels_url",
|
|
92
|
+
"comments_url",
|
|
93
|
+
"timeline_url",
|
|
94
|
+
"node_id",
|
|
95
|
+
"url",
|
|
96
|
+
"repository_url",
|
|
97
|
+
"html_url",
|
|
98
|
+
"reactions",
|
|
99
|
+
"user_view_type",
|
|
100
|
+
"site_admin",
|
|
101
|
+
"score",
|
|
102
|
+
"permissions",
|
|
103
|
+
"verification",
|
|
104
|
+
"_links",
|
|
105
|
+
]);
|
|
106
|
+
function isTemplateUrlKey(key) {
|
|
107
|
+
if (!key.endsWith("_url"))
|
|
108
|
+
return false;
|
|
109
|
+
const KEEP_URL_KEYS = new Set([
|
|
110
|
+
"diff_url",
|
|
111
|
+
"patch_url",
|
|
112
|
+
"clone_url",
|
|
113
|
+
"ssh_url",
|
|
114
|
+
"git_url",
|
|
115
|
+
"svn_url",
|
|
116
|
+
"commit_url",
|
|
117
|
+
"web_url",
|
|
118
|
+
]);
|
|
119
|
+
return !KEEP_URL_KEYS.has(key);
|
|
120
|
+
}
|
|
121
|
+
function stripNoisyFields(obj, depth = 0) {
|
|
122
|
+
if (depth > 8)
|
|
123
|
+
return obj;
|
|
124
|
+
if (Array.isArray(obj)) {
|
|
125
|
+
return obj.map((item) => stripNoisyFields(item, depth + 1));
|
|
126
|
+
}
|
|
127
|
+
if (obj !== null && typeof obj === "object") {
|
|
128
|
+
const record = obj;
|
|
129
|
+
const result = {};
|
|
130
|
+
for (const [key, value] of Object.entries(record)) {
|
|
131
|
+
if (NOISY_KEYS.has(key))
|
|
132
|
+
continue;
|
|
133
|
+
if (isTemplateUrlKey(key))
|
|
134
|
+
continue;
|
|
135
|
+
if (key === "user" &&
|
|
136
|
+
value &&
|
|
137
|
+
typeof value === "object" &&
|
|
138
|
+
"username" in value) {
|
|
139
|
+
result[key] = value.username;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
result[key] = stripNoisyFields(value, depth + 1);
|
|
143
|
+
}
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
if (typeof obj === "string" && obj.length > LONG_STRING_CLEANUP_THRESHOLD) {
|
|
147
|
+
const s = cleanBody(obj);
|
|
148
|
+
if (s.length > STRING_VALUE_TRUNCATION_LIMIT) {
|
|
149
|
+
return s.slice(0, STRING_VALUE_TRUNCATION_LIMIT) + "... (truncated)";
|
|
150
|
+
}
|
|
151
|
+
return s;
|
|
152
|
+
}
|
|
153
|
+
return obj;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/commands/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;iDASyB,CAAC;AAElD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAExE,MAAM,2BAA2B,GAAG,IAAI,CAAC;AACzC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAC1C,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAc,EACd,GAAiB;IAEjB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE/D,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,MAAc,CAAC;IACnB,IAAI,IAAY,CAAC;IAEjB,IACE,WAAW,CAAC,MAAM,IAAI,CAAC;QACvB,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAC9C,CAAC;QACD,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;SAAM,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,KAAK,CAAC;QACf,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,QAAQ,CAChB,sDAAsD,EACtD,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,2BAA2B,CAAC;QAC/D,MAAM,MAAM,GAA4B;YACtC,YAAY,EAAE;gBACZ,IAAI,EAAE,SAAS;oBACb,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC;oBAC/C,CAAC,CAAC,OAAO;gBACX,SAAS;aACV;SACF,CAAC;QACF,IAAI,SAAS,EAAE,CAAC;YACb,MAAM,CAAC,YAAwC,CAAC,eAAe;gBAC9D,OAAO,CAAC,MAAM,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,YAAY;IACZ,aAAa;IACb,eAAe;IACf,eAAe;IACf,WAAW;IACX,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,WAAW;IACX,YAAY;IACZ,qBAAqB;IACrB,YAAY;IACZ,cAAc;IACd,cAAc;IACd,SAAS;IACT,KAAK;IACL,gBAAgB;IAChB,UAAU;IACV,WAAW;IACX,gBAAgB;IAChB,YAAY;IACZ,OAAO;IACP,aAAa;IACb,cAAc;IACd,QAAQ;CACT,CAAC,CAAC;AAEH,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;QAC5B,UAAU;QACV,WAAW;QACX,WAAW;QACX,SAAS;QACT,SAAS;QACT,SAAS;QACT,YAAY;QACZ,SAAS;KACV,CAAC,CAAC;IACH,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY,EAAE,KAAK,GAAG,CAAC;IAC/C,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,GAA8B,CAAC;QAC9C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClC,IAAI,gBAAgB,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,IACE,GAAG,KAAK,MAAM;gBACd,KAAK;gBACL,OAAO,KAAK,KAAK,QAAQ;gBACzB,UAAU,IAAK,KAAiC,EAChD,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,GAAI,KAAiC,CAAC,QAAQ,CAAC;gBAC1D,SAAS;YACX,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,6BAA6B,EAAE,CAAC;QAC1E,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,MAAM,GAAG,6BAA6B,EAAE,CAAC;YAC7C,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,6BAA6B,CAAC,GAAG,iBAAiB,CAAC;QACvE,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { glabJson } from "../glab.js";
|
|
2
|
+
import { field, lower, pluck, mapEnum, renderList, renderHelp, renderOutput, } from "../toon.js";
|
|
3
|
+
import { getSuggestions } from "../suggestions.js";
|
|
4
|
+
import { encode } from "@toon-format/toon";
|
|
5
|
+
export const HOME_HELP = "";
|
|
6
|
+
const issueSchema = [
|
|
7
|
+
field("iid", "number"),
|
|
8
|
+
field("title"),
|
|
9
|
+
lower("state"),
|
|
10
|
+
pluck("author", "username", "author"),
|
|
11
|
+
];
|
|
12
|
+
const mrSchema = [
|
|
13
|
+
field("iid", "number"),
|
|
14
|
+
field("title"),
|
|
15
|
+
pluck("author", "username", "author"),
|
|
16
|
+
mapEnum("merge_status", {
|
|
17
|
+
can_be_merged: "can_merge",
|
|
18
|
+
cannot_be_merged: "conflict",
|
|
19
|
+
unchecked: "unchecked",
|
|
20
|
+
}, "unknown", "merge_status"),
|
|
21
|
+
];
|
|
22
|
+
export async function homeCommand(_args, ctx) {
|
|
23
|
+
const [issues, mrs] = await Promise.all([
|
|
24
|
+
glabJson(["issue", "list", "--json", "iid,title,state,author", "--per-page", "3"], ctx).catch(() => []),
|
|
25
|
+
glabJson([
|
|
26
|
+
"mr",
|
|
27
|
+
"list",
|
|
28
|
+
"--json",
|
|
29
|
+
"iid,title,author,merge_status",
|
|
30
|
+
"--per-page",
|
|
31
|
+
"3",
|
|
32
|
+
], ctx).catch(() => []),
|
|
33
|
+
]);
|
|
34
|
+
const blocks = [];
|
|
35
|
+
if (ctx) {
|
|
36
|
+
blocks.push(encode({ project: ctx.nwo }));
|
|
37
|
+
}
|
|
38
|
+
blocks.push(issues.length
|
|
39
|
+
? renderList("issues", issues, issueSchema)
|
|
40
|
+
: "issues: 0 open");
|
|
41
|
+
blocks.push(mrs.length
|
|
42
|
+
? renderList("merge_requests", mrs, mrSchema)
|
|
43
|
+
: "merge_requests: 0 open");
|
|
44
|
+
const hints = [];
|
|
45
|
+
if (issues.length >= 3)
|
|
46
|
+
hints.push("Run `glab-axi issue list` for full issue list");
|
|
47
|
+
if (mrs.length >= 3)
|
|
48
|
+
hints.push("Run `glab-axi mr list` for full MR list");
|
|
49
|
+
const suggestions = getSuggestions({
|
|
50
|
+
domain: "home",
|
|
51
|
+
action: "home",
|
|
52
|
+
repo: ctx,
|
|
53
|
+
});
|
|
54
|
+
blocks.push(renderHelp([...hints, ...suggestions]));
|
|
55
|
+
return renderOutput(blocks);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=home.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/commands/home.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,OAAO,EACP,UAAU,EACV,UAAU,EACV,YAAY,GAEb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAE5B,MAAM,WAAW,GAAe;IAC9B,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;IACtB,KAAK,CAAC,OAAO,CAAC;IACd,KAAK,CAAC,OAAO,CAAC;IACd,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;CACtC,CAAC;AAEF,MAAM,QAAQ,GAAe;IAC3B,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;IACtB,KAAK,CAAC,OAAO,CAAC;IACd,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;IACrC,OAAO,CACL,cAAc,EACd;QACE,aAAa,EAAE,WAAW;QAC1B,gBAAgB,EAAE,UAAU;QAC5B,SAAS,EAAE,WAAW;KACvB,EACD,SAAS,EACT,cAAc,CACf;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAe,EACf,GAAiB;IAEjB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACtC,QAAQ,CACN,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,YAAY,EAAE,GAAG,CAAC,EACxE,GAAG,CACJ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAA+B,CAAC;QAC9C,QAAQ,CACN;YACE,IAAI;YACJ,MAAM;YACN,QAAQ;YACR,+BAA+B;YAC/B,YAAY;YACZ,GAAG;SACJ,EACD,GAAG,CACJ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAA+B,CAAC;KAC/C,CAAC,CAAC;IAEH,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,MAAM;QACX,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC;QAC3C,CAAC,CAAC,gBAAgB,CACrB,CAAC;IACF,MAAM,CAAC,IAAI,CACT,GAAG,CAAC,MAAM;QACR,CAAC,CAAC,UAAU,CAAC,gBAAgB,EAAE,GAAG,EAAE,QAAQ,CAAC;QAC7C,CAAC,CAAC,wBAAwB,CAC7B,CAAC;IAEF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC9D,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAEpD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { RepoContext } from "../context.js";
|
|
2
|
+
export declare const ISSUE_HELP = "usage: glab-axi issue <subcommand> [flags]\nsubcommands[9]:\n list, view <number>, create, edit <number>, close <number>, reopen <number>, note <number>, subscribe <number>, unsubscribe <number>\nflags{list}:\n --state <opened|closed|all>, --label <name>, --assignee <username>, --author <username>, --milestone <name>, --confidential, --per-page <n> (default 20), --fields <a,b,c>\nflags{view}:\n --comments, --full (show complete description without truncation)\nflags{create}:\n --title <text> (required), --description <text> or --body-file <path>, --label <name> (repeatable), --assignee <username>, --milestone <name>, --confidential\nflags{edit}:\n --title, --description <text> or --body-file <path>, --add-label, --remove-label, --add-assignee, --remove-assignee, --milestone\nflags{note}:\n --body <text> or --body-file <path> (required)\nexamples:\n glab-axi issue list --state closed --label bug\n glab-axi issue view 42 --comments\n glab-axi issue create --title \"Fix login\" --description \"Steps to reproduce...\"\n glab-axi issue note 42 --body-file comment.md\n glab-axi issue close 42";
|
|
3
|
+
export declare function issueCommand(args: string[], ctx?: RepoContext): Promise<string>;
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import { glabJson, glabExec } from "../glab.js";
|
|
2
|
+
import { AxiError } from "../errors.js";
|
|
3
|
+
import { getSuggestions } from "../suggestions.js";
|
|
4
|
+
import { hasFlag, getFlag, getAllFlags, getPositional, requireNumber, takeFlag, takeBoolFlag, } from "../args.js";
|
|
5
|
+
import { takeBody, truncateBody } from "../body.js";
|
|
6
|
+
import { parseFields } from "../fields.js";
|
|
7
|
+
import { formatCountLine } from "../format.js";
|
|
8
|
+
import { field, pluck, joinArray, relativeTime, lower, custom, renderList, renderDetail, renderHelp, renderError, renderOutput, } from "../toon.js";
|
|
9
|
+
export const ISSUE_HELP = `usage: glab-axi issue <subcommand> [flags]
|
|
10
|
+
subcommands[9]:
|
|
11
|
+
list, view <number>, create, edit <number>, close <number>, reopen <number>, note <number>, subscribe <number>, unsubscribe <number>
|
|
12
|
+
flags{list}:
|
|
13
|
+
--state <opened|closed|all>, --label <name>, --assignee <username>, --author <username>, --milestone <name>, --confidential, --per-page <n> (default 20), --fields <a,b,c>
|
|
14
|
+
flags{view}:
|
|
15
|
+
--comments, --full (show complete description without truncation)
|
|
16
|
+
flags{create}:
|
|
17
|
+
--title <text> (required), --description <text> or --body-file <path>, --label <name> (repeatable), --assignee <username>, --milestone <name>, --confidential
|
|
18
|
+
flags{edit}:
|
|
19
|
+
--title, --description <text> or --body-file <path>, --add-label, --remove-label, --add-assignee, --remove-assignee, --milestone
|
|
20
|
+
flags{note}:
|
|
21
|
+
--body <text> or --body-file <path> (required)
|
|
22
|
+
examples:
|
|
23
|
+
glab-axi issue list --state closed --label bug
|
|
24
|
+
glab-axi issue view 42 --comments
|
|
25
|
+
glab-axi issue create --title "Fix login" --description "Steps to reproduce..."
|
|
26
|
+
glab-axi issue note 42 --body-file comment.md
|
|
27
|
+
glab-axi issue close 42`;
|
|
28
|
+
const listSchema = [
|
|
29
|
+
field("iid", "number"),
|
|
30
|
+
field("title"),
|
|
31
|
+
lower("state"),
|
|
32
|
+
pluck("author", "username", "author"),
|
|
33
|
+
relativeTime("created_at", "created"),
|
|
34
|
+
];
|
|
35
|
+
const viewSchema = [
|
|
36
|
+
field("iid", "number"),
|
|
37
|
+
field("title"),
|
|
38
|
+
lower("state"),
|
|
39
|
+
pluck("author", "username", "author"),
|
|
40
|
+
relativeTime("created_at", "created"),
|
|
41
|
+
custom("description", (item) => truncateBody(item.description, 500)),
|
|
42
|
+
];
|
|
43
|
+
const viewSchemaFull = viewSchema.map((f) => "as" in f && f.as === "description"
|
|
44
|
+
? custom("description", (item) => typeof item.description === "string" ? item.description : "")
|
|
45
|
+
: f);
|
|
46
|
+
const createResultSchema = [
|
|
47
|
+
field("iid", "number"),
|
|
48
|
+
field("title"),
|
|
49
|
+
lower("state"),
|
|
50
|
+
field("web_url", "url"),
|
|
51
|
+
];
|
|
52
|
+
const editResultSchema = [
|
|
53
|
+
field("iid", "number"),
|
|
54
|
+
field("title"),
|
|
55
|
+
lower("state"),
|
|
56
|
+
joinArray("labels", "name", "labels"),
|
|
57
|
+
joinArray("assignees", "username", "assignees"),
|
|
58
|
+
];
|
|
59
|
+
const stateResultSchema = [field("iid", "number"), lower("state")];
|
|
60
|
+
const noteResultSchema = [
|
|
61
|
+
field("iid", "issue"),
|
|
62
|
+
pluck("author", "username", "author"),
|
|
63
|
+
relativeTime("created_at", "created"),
|
|
64
|
+
custom("body", (item) => truncateBody(item.body, 800)),
|
|
65
|
+
];
|
|
66
|
+
const ISSUE_LIST_EXTRA_FIELDS = {
|
|
67
|
+
description: { jsonKey: "description", def: field("description") },
|
|
68
|
+
closed_at: {
|
|
69
|
+
jsonKey: "closed_at",
|
|
70
|
+
def: relativeTime("closed_at", "closed_at"),
|
|
71
|
+
},
|
|
72
|
+
labels: { jsonKey: "labels", def: joinArray("labels", "name", "labels") },
|
|
73
|
+
milestone: {
|
|
74
|
+
jsonKey: "milestone",
|
|
75
|
+
def: pluck("milestone", "title", "milestone"),
|
|
76
|
+
},
|
|
77
|
+
updated_at: {
|
|
78
|
+
jsonKey: "updated_at",
|
|
79
|
+
def: relativeTime("updated_at", "updated_at"),
|
|
80
|
+
},
|
|
81
|
+
url: { jsonKey: "web_url", def: field("web_url", "url") },
|
|
82
|
+
};
|
|
83
|
+
async function listIssues(args, ctx) {
|
|
84
|
+
const fieldsArg = takeFlag(args, "--fields");
|
|
85
|
+
const { extraDefs, extraJsonKeys } = parseFields(fieldsArg, ISSUE_LIST_EXTRA_FIELDS);
|
|
86
|
+
const state = takeFlag(args, "--state");
|
|
87
|
+
const label = takeFlag(args, "--label");
|
|
88
|
+
const assignee = takeFlag(args, "--assignee");
|
|
89
|
+
const author = takeFlag(args, "--author");
|
|
90
|
+
const milestone = takeFlag(args, "--milestone");
|
|
91
|
+
const confidential = takeBoolFlag(args, "--confidential");
|
|
92
|
+
const perPage = takeFlag(args, "--per-page") ?? "20";
|
|
93
|
+
const baseJsonFields = "iid,title,state,author,created_at";
|
|
94
|
+
const jsonFields = extraJsonKeys.length > 0
|
|
95
|
+
? baseJsonFields + "," + extraJsonKeys.join(",")
|
|
96
|
+
: baseJsonFields;
|
|
97
|
+
const ghArgs = ["issue", "list", "--json", jsonFields, "--per-page", perPage];
|
|
98
|
+
if (state)
|
|
99
|
+
ghArgs.push("--state", state);
|
|
100
|
+
if (label)
|
|
101
|
+
ghArgs.push("--label", label);
|
|
102
|
+
if (assignee)
|
|
103
|
+
ghArgs.push("--assignee", assignee);
|
|
104
|
+
if (author)
|
|
105
|
+
ghArgs.push("--author", author);
|
|
106
|
+
if (milestone)
|
|
107
|
+
ghArgs.push("--milestone", milestone);
|
|
108
|
+
if (confidential)
|
|
109
|
+
ghArgs.push("--confidential");
|
|
110
|
+
const items = await glabJson(ghArgs, ctx);
|
|
111
|
+
const isEmpty = items.length === 0;
|
|
112
|
+
const limitNum = Number(perPage);
|
|
113
|
+
const countLine = formatCountLine({ count: items.length, limit: limitNum });
|
|
114
|
+
const extendedSchema = extraDefs.length > 0 ? [...listSchema, ...extraDefs] : listSchema;
|
|
115
|
+
const blocks = [
|
|
116
|
+
countLine,
|
|
117
|
+
renderList("issues", items, extendedSchema),
|
|
118
|
+
];
|
|
119
|
+
const help = getSuggestions({
|
|
120
|
+
domain: "issue",
|
|
121
|
+
action: "list",
|
|
122
|
+
isEmpty,
|
|
123
|
+
repo: ctx,
|
|
124
|
+
});
|
|
125
|
+
blocks.push(renderHelp(help));
|
|
126
|
+
return renderOutput(blocks);
|
|
127
|
+
}
|
|
128
|
+
async function viewIssue(args, ctx) {
|
|
129
|
+
const num = requireNumber(getPositional(args, 1), "issue");
|
|
130
|
+
const withNotes = hasFlag(args, "--comments");
|
|
131
|
+
const full = hasFlag(args, "--full");
|
|
132
|
+
const fields = "iid,title,state,author,created_at,description,labels,assignees,milestone" +
|
|
133
|
+
(withNotes ? ",notes" : "");
|
|
134
|
+
const ghArgs = ["issue", "view", String(num), "--json", fields];
|
|
135
|
+
const item = await glabJson(ghArgs, ctx);
|
|
136
|
+
const schema = full ? viewSchemaFull : viewSchema;
|
|
137
|
+
const blocks = [renderDetail("issue", item, schema)];
|
|
138
|
+
if (withNotes && Array.isArray(item.notes)) {
|
|
139
|
+
blocks.push(renderList("notes", item.notes, noteResultSchema.filter((d) => ("key" in d ? d.key !== "iid" : true))));
|
|
140
|
+
}
|
|
141
|
+
return renderOutput(blocks);
|
|
142
|
+
}
|
|
143
|
+
async function createIssue(args, ctx) {
|
|
144
|
+
const title = getFlag(args, "--title");
|
|
145
|
+
if (!title)
|
|
146
|
+
throw new AxiError("--title is required", "VALIDATION_ERROR");
|
|
147
|
+
const description = takeBody(args, {
|
|
148
|
+
inlineFlags: ["--description"],
|
|
149
|
+
fileFlags: ["--body-file"],
|
|
150
|
+
label: "description",
|
|
151
|
+
});
|
|
152
|
+
const labels = getAllFlags(args, "--label");
|
|
153
|
+
const assignee = getFlag(args, "--assignee");
|
|
154
|
+
const milestone = getFlag(args, "--milestone");
|
|
155
|
+
const confidential = takeBoolFlag(args, "--confidential");
|
|
156
|
+
const ghArgs = ["issue", "create", "--title", title];
|
|
157
|
+
if (description !== undefined)
|
|
158
|
+
ghArgs.push("--description", description);
|
|
159
|
+
for (const l of labels)
|
|
160
|
+
ghArgs.push("--label", l);
|
|
161
|
+
if (assignee)
|
|
162
|
+
ghArgs.push("--assignee", assignee);
|
|
163
|
+
if (milestone)
|
|
164
|
+
ghArgs.push("--milestone", milestone);
|
|
165
|
+
if (confidential)
|
|
166
|
+
ghArgs.push("--confidential");
|
|
167
|
+
const output = await glabExec(ghArgs, ctx);
|
|
168
|
+
const urlMatch = output.match(/https:\/\/gitlab\.com\/[^\s]+/);
|
|
169
|
+
const url = urlMatch ? urlMatch[0] : output.trim();
|
|
170
|
+
const numMatch = url.match(/\/-\/issues\/(\d+)/);
|
|
171
|
+
const num = numMatch ? parseInt(numMatch[1], 10) : 0;
|
|
172
|
+
const item = await glabJson(["issue", "view", String(num), "--json", "iid,title,state,web_url"], ctx);
|
|
173
|
+
const blocks = [renderDetail("issue", item, createResultSchema)];
|
|
174
|
+
const help = getSuggestions({
|
|
175
|
+
domain: "issue",
|
|
176
|
+
action: "create",
|
|
177
|
+
id: num,
|
|
178
|
+
repo: ctx,
|
|
179
|
+
});
|
|
180
|
+
blocks.push(renderHelp(help));
|
|
181
|
+
return renderOutput(blocks);
|
|
182
|
+
}
|
|
183
|
+
async function editIssue(args, ctx) {
|
|
184
|
+
const num = requireNumber(getPositional(args, 1), "issue");
|
|
185
|
+
const title = getFlag(args, "--title");
|
|
186
|
+
const description = takeBody(args, {
|
|
187
|
+
inlineFlags: ["--description"],
|
|
188
|
+
fileFlags: ["--body-file"],
|
|
189
|
+
label: "description",
|
|
190
|
+
});
|
|
191
|
+
const addLabel = getFlag(args, "--add-label");
|
|
192
|
+
const removeLabel = getFlag(args, "--remove-label");
|
|
193
|
+
const addAssignee = getFlag(args, "--add-assignee");
|
|
194
|
+
const removeAssignee = getFlag(args, "--remove-assignee");
|
|
195
|
+
const milestone = getFlag(args, "--milestone");
|
|
196
|
+
const ghArgs = ["issue", "edit", String(num)];
|
|
197
|
+
if (title)
|
|
198
|
+
ghArgs.push("--title", title);
|
|
199
|
+
if (description !== undefined)
|
|
200
|
+
ghArgs.push("--description", description);
|
|
201
|
+
if (addLabel)
|
|
202
|
+
ghArgs.push("--add-label", addLabel);
|
|
203
|
+
if (removeLabel)
|
|
204
|
+
ghArgs.push("--remove-label", removeLabel);
|
|
205
|
+
if (addAssignee)
|
|
206
|
+
ghArgs.push("--add-assignee", addAssignee);
|
|
207
|
+
if (removeAssignee)
|
|
208
|
+
ghArgs.push("--remove-assignee", removeAssignee);
|
|
209
|
+
if (milestone)
|
|
210
|
+
ghArgs.push("--milestone", milestone);
|
|
211
|
+
if (ghArgs.length > 3) {
|
|
212
|
+
await glabExec(ghArgs, ctx);
|
|
213
|
+
}
|
|
214
|
+
const item = await glabJson([
|
|
215
|
+
"issue",
|
|
216
|
+
"view",
|
|
217
|
+
String(num),
|
|
218
|
+
"--json",
|
|
219
|
+
"iid,title,state,labels,assignees",
|
|
220
|
+
], ctx);
|
|
221
|
+
const blocks = [renderDetail("issue", item, editResultSchema)];
|
|
222
|
+
const help = getSuggestions({
|
|
223
|
+
domain: "issue",
|
|
224
|
+
action: "edit",
|
|
225
|
+
id: num,
|
|
226
|
+
repo: ctx,
|
|
227
|
+
});
|
|
228
|
+
blocks.push(renderHelp(help));
|
|
229
|
+
return renderOutput(blocks);
|
|
230
|
+
}
|
|
231
|
+
async function closeIssue(args, ctx) {
|
|
232
|
+
const num = requireNumber(getPositional(args, 1), "issue");
|
|
233
|
+
const current = await glabJson(["issue", "view", String(num), "--json", "state"], ctx);
|
|
234
|
+
if (current.state.toLowerCase() === "closed") {
|
|
235
|
+
const item = await glabJson(["issue", "view", String(num), "--json", "iid,state"], ctx);
|
|
236
|
+
const blocks = [
|
|
237
|
+
renderDetail("issue", { ...item, _message: "Already closed" }, [
|
|
238
|
+
...stateResultSchema,
|
|
239
|
+
field("_message", "message"),
|
|
240
|
+
]),
|
|
241
|
+
];
|
|
242
|
+
const help = getSuggestions({
|
|
243
|
+
domain: "issue",
|
|
244
|
+
action: "close",
|
|
245
|
+
id: num,
|
|
246
|
+
repo: ctx,
|
|
247
|
+
});
|
|
248
|
+
blocks.push(renderHelp(help));
|
|
249
|
+
return renderOutput(blocks);
|
|
250
|
+
}
|
|
251
|
+
await glabExec(["issue", "close", String(num)], ctx);
|
|
252
|
+
const item = await glabJson(["issue", "view", String(num), "--json", "iid,state"], ctx);
|
|
253
|
+
const blocks = [renderDetail("issue", item, stateResultSchema)];
|
|
254
|
+
const help = getSuggestions({
|
|
255
|
+
domain: "issue",
|
|
256
|
+
action: "close",
|
|
257
|
+
id: num,
|
|
258
|
+
repo: ctx,
|
|
259
|
+
});
|
|
260
|
+
blocks.push(renderHelp(help));
|
|
261
|
+
return renderOutput(blocks);
|
|
262
|
+
}
|
|
263
|
+
async function reopenIssue(args, ctx) {
|
|
264
|
+
const num = requireNumber(getPositional(args, 1), "issue");
|
|
265
|
+
const current = await glabJson(["issue", "view", String(num), "--json", "state"], ctx);
|
|
266
|
+
if (current.state.toLowerCase() === "opened") {
|
|
267
|
+
const item = await glabJson(["issue", "view", String(num), "--json", "iid,state"], ctx);
|
|
268
|
+
const blocks = [
|
|
269
|
+
renderDetail("issue", { ...item, _message: "Already open" }, [
|
|
270
|
+
...stateResultSchema,
|
|
271
|
+
field("_message", "message"),
|
|
272
|
+
]),
|
|
273
|
+
];
|
|
274
|
+
const help = getSuggestions({
|
|
275
|
+
domain: "issue",
|
|
276
|
+
action: "reopen",
|
|
277
|
+
id: num,
|
|
278
|
+
repo: ctx,
|
|
279
|
+
});
|
|
280
|
+
blocks.push(renderHelp(help));
|
|
281
|
+
return renderOutput(blocks);
|
|
282
|
+
}
|
|
283
|
+
await glabExec(["issue", "reopen", String(num)], ctx);
|
|
284
|
+
const item = await glabJson(["issue", "view", String(num), "--json", "iid,state"], ctx);
|
|
285
|
+
const blocks = [renderDetail("issue", item, stateResultSchema)];
|
|
286
|
+
const help = getSuggestions({
|
|
287
|
+
domain: "issue",
|
|
288
|
+
action: "reopen",
|
|
289
|
+
id: num,
|
|
290
|
+
repo: ctx,
|
|
291
|
+
});
|
|
292
|
+
blocks.push(renderHelp(help));
|
|
293
|
+
return renderOutput(blocks);
|
|
294
|
+
}
|
|
295
|
+
async function noteOnIssue(args, ctx) {
|
|
296
|
+
const num = requireNumber(getPositional(args, 1), "issue");
|
|
297
|
+
const body = takeBody(args, { required: true });
|
|
298
|
+
await glabExec(["issue", "note", String(num), "--body", body], ctx);
|
|
299
|
+
const issue = await glabJson(["issue", "view", String(num), "--json", "notes"], ctx);
|
|
300
|
+
const lastNote = issue.notes[issue.notes.length - 1];
|
|
301
|
+
const noteItem = { ...lastNote, iid: num };
|
|
302
|
+
const blocks = [renderDetail("note", noteItem, noteResultSchema)];
|
|
303
|
+
const help = getSuggestions({
|
|
304
|
+
domain: "issue",
|
|
305
|
+
action: "note",
|
|
306
|
+
id: num,
|
|
307
|
+
repo: ctx,
|
|
308
|
+
});
|
|
309
|
+
blocks.push(renderHelp(help));
|
|
310
|
+
return renderOutput(blocks);
|
|
311
|
+
}
|
|
312
|
+
async function subscribeIssue(args, ctx) {
|
|
313
|
+
const num = requireNumber(getPositional(args, 1), "issue");
|
|
314
|
+
await glabExec(["issue", "subscribe", String(num)], ctx);
|
|
315
|
+
return renderOutput([
|
|
316
|
+
renderDetail("issue", { number: num, subscribed: true }, [
|
|
317
|
+
field("number"),
|
|
318
|
+
field("subscribed"),
|
|
319
|
+
]),
|
|
320
|
+
]);
|
|
321
|
+
}
|
|
322
|
+
async function unsubscribeIssue(args, ctx) {
|
|
323
|
+
const num = requireNumber(getPositional(args, 1), "issue");
|
|
324
|
+
await glabExec(["issue", "unsubscribe", String(num)], ctx);
|
|
325
|
+
return renderOutput([
|
|
326
|
+
renderDetail("issue", { number: num, subscribed: false }, [
|
|
327
|
+
field("number"),
|
|
328
|
+
field("subscribed"),
|
|
329
|
+
]),
|
|
330
|
+
]);
|
|
331
|
+
}
|
|
332
|
+
export async function issueCommand(args, ctx) {
|
|
333
|
+
const sub = args[0];
|
|
334
|
+
if (!sub || hasFlag(args, "--help")) {
|
|
335
|
+
const blocks = [ISSUE_HELP];
|
|
336
|
+
const help = getSuggestions({ domain: "issue", action: "help", repo: ctx });
|
|
337
|
+
if (help.length > 0)
|
|
338
|
+
blocks.push(renderHelp(help));
|
|
339
|
+
return renderOutput(blocks);
|
|
340
|
+
}
|
|
341
|
+
switch (sub) {
|
|
342
|
+
case "list":
|
|
343
|
+
return listIssues(args, ctx);
|
|
344
|
+
case "view":
|
|
345
|
+
return viewIssue(args, ctx);
|
|
346
|
+
case "create":
|
|
347
|
+
return createIssue(args, ctx);
|
|
348
|
+
case "edit":
|
|
349
|
+
return editIssue(args, ctx);
|
|
350
|
+
case "close":
|
|
351
|
+
return closeIssue(args, ctx);
|
|
352
|
+
case "reopen":
|
|
353
|
+
return reopenIssue(args, ctx);
|
|
354
|
+
case "note":
|
|
355
|
+
return noteOnIssue(args, ctx);
|
|
356
|
+
case "subscribe":
|
|
357
|
+
return subscribeIssue(args, ctx);
|
|
358
|
+
case "unsubscribe":
|
|
359
|
+
return unsubscribeIssue(args, ctx);
|
|
360
|
+
default:
|
|
361
|
+
return renderError(`Unknown issue subcommand: ${sub}`, "VALIDATION_ERROR", ["Run `glab-axi issue --help` for usage"]);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../src/commands/issue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { RepoContext } from "../context.js";
|
|
2
|
+
export declare const JOB_HELP = "usage: glab-axi job <subcommand> [flags]\nsubcommands[4]:\n list, view <id>, log <id>, retry <id>\nflags{list}:\n --pipeline <id>, --per-page <n> (default 20)\nexamples:\n glab-axi job list --pipeline 12345\n glab-axi job view 67890\n glab-axi job log 67890\n glab-axi job retry 67890";
|
|
3
|
+
export declare function jobCommand(args: string[], ctx?: RepoContext): Promise<string>;
|