@ekho/gitlab-mcp 1.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/PLAN.md +517 -0
- package/README.md +429 -0
- package/dist/config.d.ts +35 -0
- package/dist/config.js +59 -0
- package/dist/config.js.map +1 -0
- package/dist/groups/access_tokens/tools.d.ts +3 -0
- package/dist/groups/access_tokens/tools.js +198 -0
- package/dist/groups/access_tokens/tools.js.map +1 -0
- package/dist/groups/admin/tools.d.ts +3 -0
- package/dist/groups/admin/tools.js +136 -0
- package/dist/groups/admin/tools.js.map +1 -0
- package/dist/groups/ai_catalog/queries.d.ts +3 -0
- package/dist/groups/ai_catalog/queries.js +75 -0
- package/dist/groups/ai_catalog/queries.js.map +1 -0
- package/dist/groups/ai_catalog/tools.d.ts +3 -0
- package/dist/groups/ai_catalog/tools.js +40 -0
- package/dist/groups/ai_catalog/tools.js.map +1 -0
- package/dist/groups/analytics/queries.d.ts +1 -0
- package/dist/groups/analytics/queries.js +28 -0
- package/dist/groups/analytics/queries.js.map +1 -0
- package/dist/groups/analytics/tools.d.ts +3 -0
- package/dist/groups/analytics/tools.js +110 -0
- package/dist/groups/analytics/tools.js.map +1 -0
- package/dist/groups/audit_events/tools.d.ts +3 -0
- package/dist/groups/audit_events/tools.js +112 -0
- package/dist/groups/audit_events/tools.js.map +1 -0
- package/dist/groups/boards/tools.d.ts +3 -0
- package/dist/groups/boards/tools.js +46 -0
- package/dist/groups/boards/tools.js.map +1 -0
- package/dist/groups/branches/tools.d.ts +3 -0
- package/dist/groups/branches/tools.js +122 -0
- package/dist/groups/branches/tools.js.map +1 -0
- package/dist/groups/ci_catalog/queries.d.ts +2 -0
- package/dist/groups/ci_catalog/queries.js +63 -0
- package/dist/groups/ci_catalog/queries.js.map +1 -0
- package/dist/groups/ci_catalog/tools.d.ts +3 -0
- package/dist/groups/ci_catalog/tools.js +45 -0
- package/dist/groups/ci_catalog/tools.js.map +1 -0
- package/dist/groups/ci_lint/tools.d.ts +3 -0
- package/dist/groups/ci_lint/tools.js +36 -0
- package/dist/groups/ci_lint/tools.js.map +1 -0
- package/dist/groups/ci_variables/tools.d.ts +3 -0
- package/dist/groups/ci_variables/tools.js +201 -0
- package/dist/groups/ci_variables/tools.js.map +1 -0
- package/dist/groups/code_search/tools.d.ts +3 -0
- package/dist/groups/code_search/tools.js +70 -0
- package/dist/groups/code_search/tools.js.map +1 -0
- package/dist/groups/commits/tools.d.ts +3 -0
- package/dist/groups/commits/tools.js +192 -0
- package/dist/groups/commits/tools.js.map +1 -0
- package/dist/groups/compliance/queries.d.ts +1 -0
- package/dist/groups/compliance/queries.js +22 -0
- package/dist/groups/compliance/queries.js.map +1 -0
- package/dist/groups/compliance/tools.d.ts +3 -0
- package/dist/groups/compliance/tools.js +104 -0
- package/dist/groups/compliance/tools.js.map +1 -0
- package/dist/groups/container_registry/tools.d.ts +3 -0
- package/dist/groups/container_registry/tools.js +113 -0
- package/dist/groups/container_registry/tools.js.map +1 -0
- package/dist/groups/custom_roles/queries.d.ts +5 -0
- package/dist/groups/custom_roles/queries.js +69 -0
- package/dist/groups/custom_roles/queries.js.map +1 -0
- package/dist/groups/custom_roles/tools.d.ts +3 -0
- package/dist/groups/custom_roles/tools.js +84 -0
- package/dist/groups/custom_roles/tools.js.map +1 -0
- package/dist/groups/deployments/tools.d.ts +3 -0
- package/dist/groups/deployments/tools.js +98 -0
- package/dist/groups/deployments/tools.js.map +1 -0
- package/dist/groups/discussions/tools.d.ts +3 -0
- package/dist/groups/discussions/tools.js +144 -0
- package/dist/groups/discussions/tools.js.map +1 -0
- package/dist/groups/duo_chat/queries.d.ts +4 -0
- package/dist/groups/duo_chat/queries.js +76 -0
- package/dist/groups/duo_chat/queries.js.map +1 -0
- package/dist/groups/duo_chat/tools.d.ts +3 -0
- package/dist/groups/duo_chat/tools.js +95 -0
- package/dist/groups/duo_chat/tools.js.map +1 -0
- package/dist/groups/environments/tools.d.ts +3 -0
- package/dist/groups/environments/tools.js +105 -0
- package/dist/groups/environments/tools.js.map +1 -0
- package/dist/groups/events/tools.d.ts +3 -0
- package/dist/groups/events/tools.js +64 -0
- package/dist/groups/events/tools.js.map +1 -0
- package/dist/groups/feature_flags/tools.d.ts +3 -0
- package/dist/groups/feature_flags/tools.js +137 -0
- package/dist/groups/feature_flags/tools.js.map +1 -0
- package/dist/groups/groups/tools.d.ts +3 -0
- package/dist/groups/groups/tools.js +145 -0
- package/dist/groups/groups/tools.js.map +1 -0
- package/dist/groups/integrations/tools.d.ts +3 -0
- package/dist/groups/integrations/tools.js +143 -0
- package/dist/groups/integrations/tools.js.map +1 -0
- package/dist/groups/jobs/tools.d.ts +3 -0
- package/dist/groups/jobs/tools.js +209 -0
- package/dist/groups/jobs/tools.js.map +1 -0
- package/dist/groups/keys/tools.d.ts +3 -0
- package/dist/groups/keys/tools.js +140 -0
- package/dist/groups/keys/tools.js.map +1 -0
- package/dist/groups/labels/tools.d.ts +3 -0
- package/dist/groups/labels/tools.js +110 -0
- package/dist/groups/labels/tools.js.map +1 -0
- package/dist/groups/members/tools.d.ts +3 -0
- package/dist/groups/members/tools.js +136 -0
- package/dist/groups/members/tools.js.map +1 -0
- package/dist/groups/merge_requests/tools.d.ts +3 -0
- package/dist/groups/merge_requests/tools.js +288 -0
- package/dist/groups/merge_requests/tools.js.map +1 -0
- package/dist/groups/milestones/tools.d.ts +3 -0
- package/dist/groups/milestones/tools.js +143 -0
- package/dist/groups/milestones/tools.js.map +1 -0
- package/dist/groups/packages/tools.d.ts +3 -0
- package/dist/groups/packages/tools.js +157 -0
- package/dist/groups/packages/tools.js.map +1 -0
- package/dist/groups/pipeline_schedules/tools.d.ts +3 -0
- package/dist/groups/pipeline_schedules/tools.js +127 -0
- package/dist/groups/pipeline_schedules/tools.js.map +1 -0
- package/dist/groups/pipeline_triggers/tools.d.ts +3 -0
- package/dist/groups/pipeline_triggers/tools.js +74 -0
- package/dist/groups/pipeline_triggers/tools.js.map +1 -0
- package/dist/groups/pipelines/tools.d.ts +3 -0
- package/dist/groups/pipelines/tools.js +140 -0
- package/dist/groups/pipelines/tools.js.map +1 -0
- package/dist/groups/projects/tools.d.ts +3 -0
- package/dist/groups/projects/tools.js +189 -0
- package/dist/groups/projects/tools.js.map +1 -0
- package/dist/groups/protected_environments/tools.d.ts +3 -0
- package/dist/groups/protected_environments/tools.js +77 -0
- package/dist/groups/protected_environments/tools.js.map +1 -0
- package/dist/groups/releases/tools.d.ts +3 -0
- package/dist/groups/releases/tools.js +153 -0
- package/dist/groups/releases/tools.js.map +1 -0
- package/dist/groups/repository_files/tools.d.ts +3 -0
- package/dist/groups/repository_files/tools.js +163 -0
- package/dist/groups/repository_files/tools.js.map +1 -0
- package/dist/groups/runners/tools.d.ts +3 -0
- package/dist/groups/runners/tools.js +108 -0
- package/dist/groups/runners/tools.js.map +1 -0
- package/dist/groups/search/tools.d.ts +3 -0
- package/dist/groups/search/tools.js +58 -0
- package/dist/groups/search/tools.js.map +1 -0
- package/dist/groups/secrets/queries.d.ts +10 -0
- package/dist/groups/secrets/queries.js +121 -0
- package/dist/groups/secrets/queries.js.map +1 -0
- package/dist/groups/secrets/tools.d.ts +8 -0
- package/dist/groups/secrets/tools.js +167 -0
- package/dist/groups/secrets/tools.js.map +1 -0
- package/dist/groups/security_policies/queries.d.ts +3 -0
- package/dist/groups/security_policies/queries.js +75 -0
- package/dist/groups/security_policies/queries.js.map +1 -0
- package/dist/groups/security_policies/tools.d.ts +3 -0
- package/dist/groups/security_policies/tools.js +40 -0
- package/dist/groups/security_policies/tools.js.map +1 -0
- package/dist/groups/security_reports/queries.d.ts +1 -0
- package/dist/groups/security_reports/queries.js +75 -0
- package/dist/groups/security_reports/queries.js.map +1 -0
- package/dist/groups/security_reports/tools.d.ts +3 -0
- package/dist/groups/security_reports/tools.js +51 -0
- package/dist/groups/security_reports/tools.js.map +1 -0
- package/dist/groups/snippets/tools.d.ts +3 -0
- package/dist/groups/snippets/tools.js +148 -0
- package/dist/groups/snippets/tools.js.map +1 -0
- package/dist/groups/statistics/queries.d.ts +2 -0
- package/dist/groups/statistics/queries.js +32 -0
- package/dist/groups/statistics/queries.js.map +1 -0
- package/dist/groups/statistics/tools.d.ts +3 -0
- package/dist/groups/statistics/tools.js +35 -0
- package/dist/groups/statistics/tools.js.map +1 -0
- package/dist/groups/tags/tools.d.ts +3 -0
- package/dist/groups/tags/tools.js +97 -0
- package/dist/groups/tags/tools.js.map +1 -0
- package/dist/groups/todos/tools.d.ts +3 -0
- package/dist/groups/todos/tools.js +93 -0
- package/dist/groups/todos/tools.js.map +1 -0
- package/dist/groups/users/tools.d.ts +3 -0
- package/dist/groups/users/tools.js +121 -0
- package/dist/groups/users/tools.js.map +1 -0
- package/dist/groups/vulnerabilities/queries.d.ts +3 -0
- package/dist/groups/vulnerabilities/queries.js +104 -0
- package/dist/groups/vulnerabilities/queries.js.map +1 -0
- package/dist/groups/vulnerabilities/tools.d.ts +3 -0
- package/dist/groups/vulnerabilities/tools.js +131 -0
- package/dist/groups/vulnerabilities/tools.js.map +1 -0
- package/dist/groups/webhooks/tools.d.ts +3 -0
- package/dist/groups/webhooks/tools.js +213 -0
- package/dist/groups/webhooks/tools.js.map +1 -0
- package/dist/groups/wiki/tools.d.ts +3 -0
- package/dist/groups/wiki/tools.js +142 -0
- package/dist/groups/wiki/tools.js.map +1 -0
- package/dist/groups/work_items/queries.d.ts +16 -0
- package/dist/groups/work_items/queries.js +181 -0
- package/dist/groups/work_items/queries.js.map +1 -0
- package/dist/groups/work_items/tools.d.ts +3 -0
- package/dist/groups/work_items/tools.js +250 -0
- package/dist/groups/work_items/tools.js.map +1 -0
- package/dist/http/errors.d.ts +21 -0
- package/dist/http/errors.js +62 -0
- package/dist/http/errors.js.map +1 -0
- package/dist/http/graphql.d.ts +29 -0
- package/dist/http/graphql.js +93 -0
- package/dist/http/graphql.js.map +1 -0
- package/dist/http/rest.d.ts +96 -0
- package/dist/http/rest.js +369 -0
- package/dist/http/rest.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/shared/args.d.ts +51 -0
- package/dist/shared/args.js +46 -0
- package/dist/shared/args.js.map +1 -0
- package/dist/shared/handlers.d.ts +6 -0
- package/dist/shared/handlers.js +14 -0
- package/dist/shared/handlers.js.map +1 -0
- package/dist/shared/ids.d.ts +18 -0
- package/dist/shared/ids.js +43 -0
- package/dist/shared/ids.js.map +1 -0
- package/dist/tools/meta.d.ts +3 -0
- package/dist/tools/meta.js +22 -0
- package/dist/tools/meta.js.map +1 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.js +117 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +18 -0
- package/dist/tools/types.js +20 -0
- package/dist/tools/types.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { GroupIdArg, PaginationArgs, ProjectIdArg } from '../../shared/args.js';
|
|
4
|
+
import { safe } from '../../shared/handlers.js';
|
|
5
|
+
import { resolveGroupId, resolveProjectId } from '../../shared/ids.js';
|
|
6
|
+
const PackageType = z.enum([
|
|
7
|
+
'conan',
|
|
8
|
+
'maven',
|
|
9
|
+
'npm',
|
|
10
|
+
'pypi',
|
|
11
|
+
'composer',
|
|
12
|
+
'nuget',
|
|
13
|
+
'helm',
|
|
14
|
+
'terraform_module',
|
|
15
|
+
'golang',
|
|
16
|
+
'generic',
|
|
17
|
+
'debian',
|
|
18
|
+
'rpm',
|
|
19
|
+
'rubygems',
|
|
20
|
+
'ml_model',
|
|
21
|
+
]);
|
|
22
|
+
const PackageStatus = z.enum(['default', 'hidden', 'processing', 'error', 'pending_destruction']);
|
|
23
|
+
export function registerPackageTools(server, ctx) {
|
|
24
|
+
server.tool('package_list_project', 'List packages in a project.', {
|
|
25
|
+
...ProjectIdArg,
|
|
26
|
+
order_by: z.enum(['created_at', 'name', 'version', 'type']).optional(),
|
|
27
|
+
sort: z.enum(['asc', 'desc']).optional(),
|
|
28
|
+
package_type: PackageType.optional(),
|
|
29
|
+
package_name: z.string().optional(),
|
|
30
|
+
package_version: z.string().optional(),
|
|
31
|
+
include_versionless: z.boolean().optional(),
|
|
32
|
+
status: PackageStatus.optional(),
|
|
33
|
+
...PaginationArgs,
|
|
34
|
+
}, async (args) => safe(async () => {
|
|
35
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
36
|
+
const { project_id: _p, ...rest } = args;
|
|
37
|
+
const res = await ctx.rest.request({
|
|
38
|
+
path: `/projects/${projectId}/packages`,
|
|
39
|
+
query: rest,
|
|
40
|
+
});
|
|
41
|
+
return res.data;
|
|
42
|
+
}));
|
|
43
|
+
server.tool('package_list_group', 'List packages within a group (and optionally its subgroups).', {
|
|
44
|
+
...GroupIdArg,
|
|
45
|
+
exclude_subgroups: z.boolean().optional(),
|
|
46
|
+
order_by: z.enum(['created_at', 'name', 'version', 'type', 'project_path']).optional(),
|
|
47
|
+
sort: z.enum(['asc', 'desc']).optional(),
|
|
48
|
+
package_type: PackageType.optional(),
|
|
49
|
+
package_name: z.string().optional(),
|
|
50
|
+
include_versionless: z.boolean().optional(),
|
|
51
|
+
status: PackageStatus.optional(),
|
|
52
|
+
...PaginationArgs,
|
|
53
|
+
}, async (args) => safe(async () => {
|
|
54
|
+
const groupId = resolveGroupId(ctx.config, args.group_id);
|
|
55
|
+
const { group_id: _g, ...rest } = args;
|
|
56
|
+
const res = await ctx.rest.request({
|
|
57
|
+
path: `/groups/${groupId}/packages`,
|
|
58
|
+
query: rest,
|
|
59
|
+
});
|
|
60
|
+
return res.data;
|
|
61
|
+
}));
|
|
62
|
+
server.tool('package_get', 'Get a single package by id.', { ...ProjectIdArg, package_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
63
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
64
|
+
const res = await ctx.rest.request({
|
|
65
|
+
path: `/projects/${projectId}/packages/${args.package_id}`,
|
|
66
|
+
});
|
|
67
|
+
return res.data;
|
|
68
|
+
}));
|
|
69
|
+
server.tool('package_files', 'List files within a package.', { ...ProjectIdArg, package_id: z.number().int().positive(), ...PaginationArgs }, async (args) => safe(async () => {
|
|
70
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
71
|
+
const { project_id: _p, package_id, ...rest } = args;
|
|
72
|
+
const res = await ctx.rest.request({
|
|
73
|
+
path: `/projects/${projectId}/packages/${package_id}/package_files`,
|
|
74
|
+
query: rest,
|
|
75
|
+
});
|
|
76
|
+
return res.data;
|
|
77
|
+
}));
|
|
78
|
+
server.tool('package_file_delete', 'Delete a single file within a package.', {
|
|
79
|
+
...ProjectIdArg,
|
|
80
|
+
package_id: z.number().int().positive(),
|
|
81
|
+
package_file_id: z.number().int().positive(),
|
|
82
|
+
}, async (args) => safe(async () => {
|
|
83
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
84
|
+
const res = await ctx.rest.request({
|
|
85
|
+
method: 'DELETE',
|
|
86
|
+
path: `/projects/${projectId}/packages/${args.package_id}/package_files/${args.package_file_id}`,
|
|
87
|
+
});
|
|
88
|
+
return res.data ?? { ok: true };
|
|
89
|
+
}));
|
|
90
|
+
server.tool('package_delete', 'Delete a whole package.', { ...ProjectIdArg, package_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
91
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
92
|
+
const res = await ctx.rest.request({
|
|
93
|
+
method: 'DELETE',
|
|
94
|
+
path: `/projects/${projectId}/packages/${args.package_id}`,
|
|
95
|
+
});
|
|
96
|
+
return res.data ?? { ok: true };
|
|
97
|
+
}));
|
|
98
|
+
// -- generic package files (binary upload/download) -----------------
|
|
99
|
+
server.tool('package_file_download_generic', 'Download a generic package file (binary). Saves to `save_to` if provided, else returns base64 (capped).', {
|
|
100
|
+
...ProjectIdArg,
|
|
101
|
+
package_name: z.string(),
|
|
102
|
+
package_version: z.string(),
|
|
103
|
+
file_name: z.string(),
|
|
104
|
+
save_to: z.string().optional(),
|
|
105
|
+
max_inline_bytes: z
|
|
106
|
+
.number()
|
|
107
|
+
.int()
|
|
108
|
+
.positive()
|
|
109
|
+
.max(50 * 1024 * 1024)
|
|
110
|
+
.optional(),
|
|
111
|
+
}, async (args) => safe(async () => {
|
|
112
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
113
|
+
const res = await ctx.rest.downloadBinary({
|
|
114
|
+
path: `/projects/${projectId}/packages/generic/${encodeURIComponent(args.package_name)}/${encodeURIComponent(args.package_version)}/${encodeURIComponent(args.file_name)}`,
|
|
115
|
+
...(args.save_to ? { saveTo: args.save_to } : {}),
|
|
116
|
+
...(args.max_inline_bytes ? { maxInlineBytes: args.max_inline_bytes } : {}),
|
|
117
|
+
});
|
|
118
|
+
return res;
|
|
119
|
+
}));
|
|
120
|
+
server.tool('package_file_upload_generic', 'Upload a file to the generic package registry. Provide content via `content_base64` OR `local_path`.', {
|
|
121
|
+
...ProjectIdArg,
|
|
122
|
+
package_name: z.string(),
|
|
123
|
+
package_version: z.string(),
|
|
124
|
+
file_name: z.string(),
|
|
125
|
+
content_base64: z.string().optional(),
|
|
126
|
+
local_path: z.string().optional().describe('Absolute path on the MCP host to read from.'),
|
|
127
|
+
content_type: z.string().optional().describe('Default application/octet-stream.'),
|
|
128
|
+
status: z.enum(['default', 'hidden']).optional(),
|
|
129
|
+
select: z.enum(['package_file']).optional(),
|
|
130
|
+
}, async (args) => safe(async () => {
|
|
131
|
+
if (!args.content_base64 && !args.local_path) {
|
|
132
|
+
throw new Error('Provide either content_base64 or local_path.');
|
|
133
|
+
}
|
|
134
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
135
|
+
let body;
|
|
136
|
+
if (args.local_path) {
|
|
137
|
+
body = await readFile(args.local_path);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
body = Buffer.from(args.content_base64 ?? '', 'base64');
|
|
141
|
+
}
|
|
142
|
+
const query = {};
|
|
143
|
+
if (args.status)
|
|
144
|
+
query['status'] = args.status;
|
|
145
|
+
if (args.select)
|
|
146
|
+
query['select'] = args.select;
|
|
147
|
+
const res = await ctx.rest.uploadBinary({
|
|
148
|
+
method: 'PUT',
|
|
149
|
+
path: `/projects/${projectId}/packages/generic/${encodeURIComponent(args.package_name)}/${encodeURIComponent(args.package_version)}/${encodeURIComponent(args.file_name)}`,
|
|
150
|
+
body,
|
|
151
|
+
contentType: args.content_type ?? 'application/octet-stream',
|
|
152
|
+
...(Object.keys(query).length > 0 ? { query } : {}),
|
|
153
|
+
});
|
|
154
|
+
return res.data;
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/packages/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { PaginationArgs, ProjectIdArg } from '../../shared/args.js';
|
|
3
|
+
import { safe } from '../../shared/handlers.js';
|
|
4
|
+
import { resolveProjectId } from '../../shared/ids.js';
|
|
5
|
+
const VariableType = z.enum(['env_var', 'file']);
|
|
6
|
+
export function registerPipelineScheduleTools(server, ctx) {
|
|
7
|
+
server.tool('schedule_list', 'List pipeline schedules in a project.', { ...ProjectIdArg, scope: z.enum(['active', 'inactive']).optional(), ...PaginationArgs }, async (args) => safe(async () => {
|
|
8
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
9
|
+
const { project_id: _p, ...rest } = args;
|
|
10
|
+
const res = await ctx.rest.request({
|
|
11
|
+
path: `/projects/${projectId}/pipeline_schedules`,
|
|
12
|
+
query: rest,
|
|
13
|
+
});
|
|
14
|
+
return res.data;
|
|
15
|
+
}));
|
|
16
|
+
server.tool('schedule_get', 'Get a single pipeline schedule with its variables.', { ...ProjectIdArg, pipeline_schedule_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
17
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
18
|
+
const res = await ctx.rest.request({
|
|
19
|
+
path: `/projects/${projectId}/pipeline_schedules/${args.pipeline_schedule_id}`,
|
|
20
|
+
});
|
|
21
|
+
return res.data;
|
|
22
|
+
}));
|
|
23
|
+
server.tool('schedule_create', 'Create a new pipeline schedule.', {
|
|
24
|
+
...ProjectIdArg,
|
|
25
|
+
description: z.string(),
|
|
26
|
+
ref: z.string(),
|
|
27
|
+
cron: z.string().describe('Cron expression (5 fields).'),
|
|
28
|
+
cron_timezone: z.string().optional().describe('IANA timezone (default UTC).'),
|
|
29
|
+
active: z.boolean().optional(),
|
|
30
|
+
}, async (args) => safe(async () => {
|
|
31
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
32
|
+
const { project_id: _p, ...body } = args;
|
|
33
|
+
const res = await ctx.rest.request({
|
|
34
|
+
method: 'POST',
|
|
35
|
+
path: `/projects/${projectId}/pipeline_schedules`,
|
|
36
|
+
body,
|
|
37
|
+
});
|
|
38
|
+
return res.data;
|
|
39
|
+
}));
|
|
40
|
+
server.tool('schedule_update', 'Update a pipeline schedule.', {
|
|
41
|
+
...ProjectIdArg,
|
|
42
|
+
pipeline_schedule_id: z.number().int().positive(),
|
|
43
|
+
description: z.string().optional(),
|
|
44
|
+
ref: z.string().optional(),
|
|
45
|
+
cron: z.string().optional(),
|
|
46
|
+
cron_timezone: z.string().optional(),
|
|
47
|
+
active: z.boolean().optional(),
|
|
48
|
+
}, async (args) => safe(async () => {
|
|
49
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
50
|
+
const { project_id: _p, pipeline_schedule_id, ...body } = args;
|
|
51
|
+
const res = await ctx.rest.request({
|
|
52
|
+
method: 'PUT',
|
|
53
|
+
path: `/projects/${projectId}/pipeline_schedules/${pipeline_schedule_id}`,
|
|
54
|
+
body,
|
|
55
|
+
});
|
|
56
|
+
return res.data;
|
|
57
|
+
}));
|
|
58
|
+
server.tool('schedule_delete', 'Delete a pipeline schedule.', { ...ProjectIdArg, pipeline_schedule_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
59
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
60
|
+
const res = await ctx.rest.request({
|
|
61
|
+
method: 'DELETE',
|
|
62
|
+
path: `/projects/${projectId}/pipeline_schedules/${args.pipeline_schedule_id}`,
|
|
63
|
+
});
|
|
64
|
+
return res.data ?? { ok: true };
|
|
65
|
+
}));
|
|
66
|
+
server.tool('schedule_play', 'Run a pipeline from a schedule immediately (out of cadence).', { ...ProjectIdArg, pipeline_schedule_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
67
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
68
|
+
const res = await ctx.rest.request({
|
|
69
|
+
method: 'POST',
|
|
70
|
+
path: `/projects/${projectId}/pipeline_schedules/${args.pipeline_schedule_id}/play`,
|
|
71
|
+
});
|
|
72
|
+
return res.data ?? { ok: true };
|
|
73
|
+
}));
|
|
74
|
+
server.tool('schedule_take_ownership', 'Take ownership of a pipeline schedule from another user.', { ...ProjectIdArg, pipeline_schedule_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
75
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
76
|
+
const res = await ctx.rest.request({
|
|
77
|
+
method: 'POST',
|
|
78
|
+
path: `/projects/${projectId}/pipeline_schedules/${args.pipeline_schedule_id}/take_ownership`,
|
|
79
|
+
});
|
|
80
|
+
return res.data;
|
|
81
|
+
}));
|
|
82
|
+
server.tool('schedule_variable_create', 'Add a variable to a pipeline schedule.', {
|
|
83
|
+
...ProjectIdArg,
|
|
84
|
+
pipeline_schedule_id: z.number().int().positive(),
|
|
85
|
+
key: z.string(),
|
|
86
|
+
value: z.string(),
|
|
87
|
+
variable_type: VariableType.optional(),
|
|
88
|
+
}, async (args) => safe(async () => {
|
|
89
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
90
|
+
const { project_id: _p, pipeline_schedule_id, ...body } = args;
|
|
91
|
+
const res = await ctx.rest.request({
|
|
92
|
+
method: 'POST',
|
|
93
|
+
path: `/projects/${projectId}/pipeline_schedules/${pipeline_schedule_id}/variables`,
|
|
94
|
+
body,
|
|
95
|
+
});
|
|
96
|
+
return res.data;
|
|
97
|
+
}));
|
|
98
|
+
server.tool('schedule_variable_update', 'Update a schedule variable by key.', {
|
|
99
|
+
...ProjectIdArg,
|
|
100
|
+
pipeline_schedule_id: z.number().int().positive(),
|
|
101
|
+
key: z.string(),
|
|
102
|
+
value: z.string().optional(),
|
|
103
|
+
variable_type: VariableType.optional(),
|
|
104
|
+
}, async (args) => safe(async () => {
|
|
105
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
106
|
+
const { project_id: _p, pipeline_schedule_id, key, ...body } = args;
|
|
107
|
+
const res = await ctx.rest.request({
|
|
108
|
+
method: 'PUT',
|
|
109
|
+
path: `/projects/${projectId}/pipeline_schedules/${pipeline_schedule_id}/variables/${encodeURIComponent(key)}`,
|
|
110
|
+
body,
|
|
111
|
+
});
|
|
112
|
+
return res.data;
|
|
113
|
+
}));
|
|
114
|
+
server.tool('schedule_variable_delete', 'Delete a schedule variable by key.', {
|
|
115
|
+
...ProjectIdArg,
|
|
116
|
+
pipeline_schedule_id: z.number().int().positive(),
|
|
117
|
+
key: z.string(),
|
|
118
|
+
}, async (args) => safe(async () => {
|
|
119
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
120
|
+
const res = await ctx.rest.request({
|
|
121
|
+
method: 'DELETE',
|
|
122
|
+
path: `/projects/${projectId}/pipeline_schedules/${args.pipeline_schedule_id}/variables/${encodeURIComponent(args.key)}`,
|
|
123
|
+
});
|
|
124
|
+
return res.data ?? { ok: true };
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/pipeline_schedules/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ProjectIdArg } from '../../shared/args.js';
|
|
3
|
+
import { safe } from '../../shared/handlers.js';
|
|
4
|
+
import { resolveProjectId } from '../../shared/ids.js';
|
|
5
|
+
export function registerPipelineTriggerTools(server, ctx) {
|
|
6
|
+
server.tool('trigger_list', 'List pipeline trigger tokens for a project.', { ...ProjectIdArg }, async (args) => safe(async () => {
|
|
7
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
8
|
+
const res = await ctx.rest.request({
|
|
9
|
+
path: `/projects/${projectId}/triggers`,
|
|
10
|
+
});
|
|
11
|
+
return res.data;
|
|
12
|
+
}));
|
|
13
|
+
server.tool('trigger_get', 'Get a single trigger by id.', { ...ProjectIdArg, trigger_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
14
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
15
|
+
const res = await ctx.rest.request({
|
|
16
|
+
path: `/projects/${projectId}/triggers/${args.trigger_id}`,
|
|
17
|
+
});
|
|
18
|
+
return res.data;
|
|
19
|
+
}));
|
|
20
|
+
server.tool('trigger_create', 'Create a new trigger token. The token value is returned only once.', { ...ProjectIdArg, description: z.string() }, async (args) => safe(async () => {
|
|
21
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
22
|
+
const res = await ctx.rest.request({
|
|
23
|
+
method: 'POST',
|
|
24
|
+
path: `/projects/${projectId}/triggers`,
|
|
25
|
+
body: { description: args.description },
|
|
26
|
+
});
|
|
27
|
+
return res.data;
|
|
28
|
+
}));
|
|
29
|
+
server.tool('trigger_update', 'Update a trigger description.', {
|
|
30
|
+
...ProjectIdArg,
|
|
31
|
+
trigger_id: z.number().int().positive(),
|
|
32
|
+
description: z.string(),
|
|
33
|
+
}, async (args) => safe(async () => {
|
|
34
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
35
|
+
const res = await ctx.rest.request({
|
|
36
|
+
method: 'PUT',
|
|
37
|
+
path: `/projects/${projectId}/triggers/${args.trigger_id}`,
|
|
38
|
+
body: { description: args.description },
|
|
39
|
+
});
|
|
40
|
+
return res.data;
|
|
41
|
+
}));
|
|
42
|
+
server.tool('trigger_delete', 'Delete (revoke) a trigger token.', { ...ProjectIdArg, trigger_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
43
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
44
|
+
const res = await ctx.rest.request({
|
|
45
|
+
method: 'DELETE',
|
|
46
|
+
path: `/projects/${projectId}/triggers/${args.trigger_id}`,
|
|
47
|
+
});
|
|
48
|
+
return res.data ?? { ok: true };
|
|
49
|
+
}));
|
|
50
|
+
server.tool('trigger_run_pipeline', 'Run a pipeline via a trigger token. Variables are sent as variables[KEY]=value.', {
|
|
51
|
+
...ProjectIdArg,
|
|
52
|
+
token: z.string().describe('Trigger token value.'),
|
|
53
|
+
ref: z.string(),
|
|
54
|
+
variables: z
|
|
55
|
+
.record(z.string())
|
|
56
|
+
.optional()
|
|
57
|
+
.describe('Map of variable name → value (KEY=string).'),
|
|
58
|
+
}, async (args) => safe(async () => {
|
|
59
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
60
|
+
const query = { token: args.token, ref: args.ref };
|
|
61
|
+
if (args.variables) {
|
|
62
|
+
for (const [k, v] of Object.entries(args.variables)) {
|
|
63
|
+
query[`variables[${k}]`] = v;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const res = await ctx.rest.request({
|
|
67
|
+
method: 'POST',
|
|
68
|
+
path: `/projects/${projectId}/trigger/pipeline`,
|
|
69
|
+
query,
|
|
70
|
+
});
|
|
71
|
+
return res.data;
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/pipeline_triggers/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { PaginationArgs, ProjectIdArg } from '../../shared/args.js';
|
|
3
|
+
import { safe } from '../../shared/handlers.js';
|
|
4
|
+
import { resolveProjectId } from '../../shared/ids.js';
|
|
5
|
+
const PipelineStatus = z.enum([
|
|
6
|
+
'created',
|
|
7
|
+
'waiting_for_resource',
|
|
8
|
+
'preparing',
|
|
9
|
+
'pending',
|
|
10
|
+
'running',
|
|
11
|
+
'success',
|
|
12
|
+
'failed',
|
|
13
|
+
'canceled',
|
|
14
|
+
'skipped',
|
|
15
|
+
'manual',
|
|
16
|
+
'scheduled',
|
|
17
|
+
]);
|
|
18
|
+
const PipelineSource = z.enum([
|
|
19
|
+
'push',
|
|
20
|
+
'web',
|
|
21
|
+
'trigger',
|
|
22
|
+
'schedule',
|
|
23
|
+
'api',
|
|
24
|
+
'external',
|
|
25
|
+
'pipeline',
|
|
26
|
+
'chat',
|
|
27
|
+
'webide',
|
|
28
|
+
'merge_request_event',
|
|
29
|
+
'external_pull_request_event',
|
|
30
|
+
'parent_pipeline',
|
|
31
|
+
'ondemand_dast_scan',
|
|
32
|
+
'ondemand_dast_validation',
|
|
33
|
+
]);
|
|
34
|
+
const PipelineVariable = z.object({
|
|
35
|
+
key: z.string(),
|
|
36
|
+
value: z.string(),
|
|
37
|
+
variable_type: z.enum(['env_var', 'file']).optional(),
|
|
38
|
+
});
|
|
39
|
+
export function registerPipelineTools(server, ctx) {
|
|
40
|
+
server.tool('pipeline_list', 'List pipelines for a project with filters.', {
|
|
41
|
+
...ProjectIdArg,
|
|
42
|
+
status: PipelineStatus.optional(),
|
|
43
|
+
ref: z.string().optional(),
|
|
44
|
+
sha: z.string().optional(),
|
|
45
|
+
source: PipelineSource.optional(),
|
|
46
|
+
username: z.string().optional(),
|
|
47
|
+
yaml_errors: z.boolean().optional(),
|
|
48
|
+
name: z.string().optional(),
|
|
49
|
+
updated_after: z.string().optional(),
|
|
50
|
+
updated_before: z.string().optional(),
|
|
51
|
+
order_by: z
|
|
52
|
+
.enum(['id', 'status', 'ref', 'updated_at', 'user_id'])
|
|
53
|
+
.optional(),
|
|
54
|
+
sort: z.enum(['asc', 'desc']).optional(),
|
|
55
|
+
scope: z.enum(['running', 'pending', 'finished', 'branches', 'tags']).optional(),
|
|
56
|
+
...PaginationArgs,
|
|
57
|
+
}, async (args) => safe(async () => {
|
|
58
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
59
|
+
const { project_id: _p, ...rest } = args;
|
|
60
|
+
const res = await ctx.rest.request({
|
|
61
|
+
path: `/projects/${projectId}/pipelines`,
|
|
62
|
+
query: rest,
|
|
63
|
+
});
|
|
64
|
+
return res.data;
|
|
65
|
+
}));
|
|
66
|
+
server.tool('pipeline_get', 'Get a single pipeline by id.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
67
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
68
|
+
const res = await ctx.rest.request({
|
|
69
|
+
path: `/projects/${projectId}/pipelines/${args.pipeline_id}`,
|
|
70
|
+
});
|
|
71
|
+
return res.data;
|
|
72
|
+
}));
|
|
73
|
+
server.tool('pipeline_latest', 'Get the latest pipeline for a ref (default project default branch).', { ...ProjectIdArg, ref: z.string().optional() }, async (args) => safe(async () => {
|
|
74
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
75
|
+
const res = await ctx.rest.request({
|
|
76
|
+
path: `/projects/${projectId}/pipelines/latest`,
|
|
77
|
+
...(args.ref !== undefined ? { query: { ref: args.ref } } : {}),
|
|
78
|
+
});
|
|
79
|
+
return res.data;
|
|
80
|
+
}));
|
|
81
|
+
server.tool('pipeline_create', 'Trigger a new pipeline on a ref with optional variables.', {
|
|
82
|
+
...ProjectIdArg,
|
|
83
|
+
ref: z.string(),
|
|
84
|
+
variables: z.array(PipelineVariable).optional(),
|
|
85
|
+
}, async (args) => safe(async () => {
|
|
86
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
87
|
+
const res = await ctx.rest.request({
|
|
88
|
+
method: 'POST',
|
|
89
|
+
path: `/projects/${projectId}/pipeline`,
|
|
90
|
+
body: { ref: args.ref, ...(args.variables ? { variables: args.variables } : {}) },
|
|
91
|
+
});
|
|
92
|
+
return res.data;
|
|
93
|
+
}));
|
|
94
|
+
server.tool('pipeline_retry', 'Retry failed/canceled builds in a pipeline.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
95
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
96
|
+
const res = await ctx.rest.request({
|
|
97
|
+
method: 'POST',
|
|
98
|
+
path: `/projects/${projectId}/pipelines/${args.pipeline_id}/retry`,
|
|
99
|
+
});
|
|
100
|
+
return res.data;
|
|
101
|
+
}));
|
|
102
|
+
server.tool('pipeline_cancel', 'Cancel a running pipeline.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
103
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
104
|
+
const res = await ctx.rest.request({
|
|
105
|
+
method: 'POST',
|
|
106
|
+
path: `/projects/${projectId}/pipelines/${args.pipeline_id}/cancel`,
|
|
107
|
+
});
|
|
108
|
+
return res.data;
|
|
109
|
+
}));
|
|
110
|
+
server.tool('pipeline_delete', 'Delete a pipeline (Maintainer+). Removes jobs and artifacts.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
111
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
112
|
+
const res = await ctx.rest.request({
|
|
113
|
+
method: 'DELETE',
|
|
114
|
+
path: `/projects/${projectId}/pipelines/${args.pipeline_id}`,
|
|
115
|
+
});
|
|
116
|
+
return res.data ?? { ok: true };
|
|
117
|
+
}));
|
|
118
|
+
server.tool('pipeline_variables', 'List variables that were used to run the pipeline.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
119
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
120
|
+
const res = await ctx.rest.request({
|
|
121
|
+
path: `/projects/${projectId}/pipelines/${args.pipeline_id}/variables`,
|
|
122
|
+
});
|
|
123
|
+
return res.data;
|
|
124
|
+
}));
|
|
125
|
+
server.tool('pipeline_test_report', 'Get the full JUnit test report for a pipeline.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
126
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
127
|
+
const res = await ctx.rest.request({
|
|
128
|
+
path: `/projects/${projectId}/pipelines/${args.pipeline_id}/test_report`,
|
|
129
|
+
});
|
|
130
|
+
return res.data;
|
|
131
|
+
}));
|
|
132
|
+
server.tool('pipeline_test_report_summary', 'Get aggregate test counts (total, success, failed, skipped) for a pipeline.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
|
|
133
|
+
const projectId = resolveProjectId(ctx.config, args.project_id);
|
|
134
|
+
const res = await ctx.rest.request({
|
|
135
|
+
path: `/projects/${projectId}/pipelines/${args.pipeline_id}/test_report_summary`,
|
|
136
|
+
});
|
|
137
|
+
return res.data;
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/pipelines/tools.ts"],"names":[],"mappings":"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"}
|