devops-mcp-server-extension 1.0.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.
Files changed (102) hide show
  1. package/LICENSE +218 -0
  2. package/README.md +527 -0
  3. package/README.zh-cn.md +503 -0
  4. package/dist/common/errors.js +77 -0
  5. package/dist/common/modularTemplates.js +483 -0
  6. package/dist/common/pipelineTemplates.js +19 -0
  7. package/dist/common/toolsetManager.js +123 -0
  8. package/dist/common/toolsets.js +23 -0
  9. package/dist/common/types.js +60 -0
  10. package/dist/common/utils.js +381 -0
  11. package/dist/common/version.js +1 -0
  12. package/dist/index.js +225 -0
  13. package/dist/operations/appstack/appOrchestrations.js +260 -0
  14. package/dist/operations/appstack/appTags.js +168 -0
  15. package/dist/operations/appstack/appTemplates.js +72 -0
  16. package/dist/operations/appstack/applications.js +171 -0
  17. package/dist/operations/appstack/changeOrders.js +320 -0
  18. package/dist/operations/appstack/changeRequests.js +288 -0
  19. package/dist/operations/appstack/deploymentResources.js +286 -0
  20. package/dist/operations/appstack/globalVars.js +221 -0
  21. package/dist/operations/appstack/releaseWorkflows.js +695 -0
  22. package/dist/operations/appstack/variableGroups.js +245 -0
  23. package/dist/operations/codeup/branches.js +157 -0
  24. package/dist/operations/codeup/changeRequestComments.js +140 -0
  25. package/dist/operations/codeup/changeRequests.js +230 -0
  26. package/dist/operations/codeup/commits.js +121 -0
  27. package/dist/operations/codeup/compare.js +30 -0
  28. package/dist/operations/codeup/files.js +249 -0
  29. package/dist/operations/codeup/repositories.js +71 -0
  30. package/dist/operations/codeup/types.js +414 -0
  31. package/dist/operations/flow/hostGroup.js +52 -0
  32. package/dist/operations/flow/pipeline.js +609 -0
  33. package/dist/operations/flow/pipelineJob.js +126 -0
  34. package/dist/operations/flow/resourceMember.js +137 -0
  35. package/dist/operations/flow/serviceConnection.js +27 -0
  36. package/dist/operations/flow/tag.js +191 -0
  37. package/dist/operations/flow/types.js +523 -0
  38. package/dist/operations/flow/vmDeployOrder.js +171 -0
  39. package/dist/operations/organization/members.js +106 -0
  40. package/dist/operations/organization/organization.js +110 -0
  41. package/dist/operations/organization/types.js +111 -0
  42. package/dist/operations/packages/artifacts.js +71 -0
  43. package/dist/operations/packages/repositories.js +39 -0
  44. package/dist/operations/packages/types.js +56 -0
  45. package/dist/operations/projex/effort.js +122 -0
  46. package/dist/operations/projex/project.js +243 -0
  47. package/dist/operations/projex/sprint.js +103 -0
  48. package/dist/operations/projex/types.js +618 -0
  49. package/dist/operations/projex/workitem.js +826 -0
  50. package/dist/operations/testhub/testcases.js +240 -0
  51. package/dist/operations/testhub/testplans.js +128 -0
  52. package/dist/tool-handlers/appstack-app-release-workflows.js +103 -0
  53. package/dist/tool-handlers/appstack-change-orders.js +55 -0
  54. package/dist/tool-handlers/appstack-change-requests.js +49 -0
  55. package/dist/tool-handlers/appstack-deployment-resources.js +31 -0
  56. package/dist/tool-handlers/appstack-global-vars.js +37 -0
  57. package/dist/tool-handlers/appstack-orchestrations.js +49 -0
  58. package/dist/tool-handlers/appstack-release-workflows.js +37 -0
  59. package/dist/tool-handlers/appstack-tags.js +37 -0
  60. package/dist/tool-handlers/appstack-templates.js +19 -0
  61. package/dist/tool-handlers/appstack-variable-groups.js +55 -0
  62. package/dist/tool-handlers/appstack.js +37 -0
  63. package/dist/tool-handlers/base.js +25 -0
  64. package/dist/tool-handlers/code-management.js +150 -0
  65. package/dist/tool-handlers/commit.js +31 -0
  66. package/dist/tool-handlers/effort.js +103 -0
  67. package/dist/tool-handlers/index.js +119 -0
  68. package/dist/tool-handlers/organization.js +72 -0
  69. package/dist/tool-handlers/packages.js +32 -0
  70. package/dist/tool-handlers/pipeline.js +289 -0
  71. package/dist/tool-handlers/project-management.js +201 -0
  72. package/dist/tool-handlers/resourceMember.js +43 -0
  73. package/dist/tool-handlers/service-connections.js +16 -0
  74. package/dist/tool-handlers/tag.js +64 -0
  75. package/dist/tool-handlers/test-management.js +74 -0
  76. package/dist/tool-handlers/vmDeployOrder.js +50 -0
  77. package/dist/tool-registry/appstack-app-release-workflows.js +80 -0
  78. package/dist/tool-registry/appstack-change-orders.js +40 -0
  79. package/dist/tool-registry/appstack-change-requests.js +35 -0
  80. package/dist/tool-registry/appstack-deployment-resources.js +20 -0
  81. package/dist/tool-registry/appstack-global-vars.js +25 -0
  82. package/dist/tool-registry/appstack-orchestrations.js +35 -0
  83. package/dist/tool-registry/appstack-release-workflows.js +25 -0
  84. package/dist/tool-registry/appstack-tags.js +25 -0
  85. package/dist/tool-registry/appstack-templates.js +10 -0
  86. package/dist/tool-registry/appstack-variable-groups.js +40 -0
  87. package/dist/tool-registry/appstack.js +25 -0
  88. package/dist/tool-registry/base.js +19 -0
  89. package/dist/tool-registry/code-management.js +109 -0
  90. package/dist/tool-registry/commit.js +20 -0
  91. package/dist/tool-registry/effort.js +39 -0
  92. package/dist/tool-registry/index.js +7 -0
  93. package/dist/tool-registry/organization.js +65 -0
  94. package/dist/tool-registry/packages.js +21 -0
  95. package/dist/tool-registry/pipeline.js +190 -0
  96. package/dist/tool-registry/project-management.js +143 -0
  97. package/dist/tool-registry/resourceMember.js +29 -0
  98. package/dist/tool-registry/service-connections.js +10 -0
  99. package/dist/tool-registry/tag.js +44 -0
  100. package/dist/tool-registry/test-management.js +59 -0
  101. package/dist/tool-registry/vmDeployOrder.js +34 -0
  102. package/package.json +52 -0
@@ -0,0 +1,695 @@
1
+ import { z } from 'zod';
2
+ import { yunxiaoRequest, buildUrl, isRegionEdition } from '../../common/utils.js';
3
+ import { resolveOrganizationId } from '../organization/organization.js';
4
+ // Schema for Label
5
+ export const LabelSchema = z.object({
6
+ // Based on the reference in the swagger, we'll define a basic structure
7
+ // You may need to update this with the actual fields from Label
8
+ key: z.string().optional().describe("标签键"),
9
+ value: z.string().optional().describe("标签值"),
10
+ });
11
+ // Schema for VariableGroup
12
+ export const VariableGroupSchema = z.object({
13
+ // Based on the reference in the swagger, we'll define a basic structure
14
+ // You may need to update this with the actual fields from VariableGroup
15
+ name: z.string().optional().describe("变量组名称"),
16
+ variables: z.record(z.string()).optional().describe("变量映射"),
17
+ });
18
+ // Schema for FlowV1Pipeline
19
+ export const FlowV1PipelineSchema = z.object({
20
+ // Based on the reference in the swagger, we'll define a basic structure
21
+ // You may need to update this with the actual fields from FlowV1Pipeline
22
+ id: z.number().optional().describe("流水线ID"),
23
+ name: z.string().optional().describe("流水线名称"),
24
+ });
25
+ // Schema for FlowV2Pipeline
26
+ export const FlowV2PipelineSchema = z.object({
27
+ // Based on the reference in the swagger, we'll define a basic structure
28
+ // You may need to update this with the actual fields from FlowV2Pipeline
29
+ id: z.number().optional().describe("流水线ID"),
30
+ name: z.string().optional().describe("流水线名称"),
31
+ });
32
+ // Schema for ReleaseStage
33
+ export const ReleaseStageSchema = z.object({
34
+ appName: z.string().optional().describe("应用名"),
35
+ labels: z.array(LabelSchema).describe("标签列表"),
36
+ name: z.string().optional().describe("名称"),
37
+ order: z.string().optional().describe("阶段顺序"),
38
+ pipeline: z.union([FlowV1PipelineSchema, FlowV2PipelineSchema]).optional(),
39
+ releaseWorkflowSn: z.string().optional().describe("所属的流程sn"),
40
+ sn: z.string().optional().describe("唯一序列号"),
41
+ variableGroups: z.array(VariableGroupSchema).describe("变量组列表"),
42
+ });
43
+ // Schema for ReleaseWorkflow
44
+ export const ReleaseWorkflowSchema = z.object({
45
+ appName: z.string().optional().describe("应用名"),
46
+ name: z.string().optional().describe("名称"),
47
+ note: z.string().nullable().optional().describe("公告"),
48
+ order: z.string().optional().describe("排序"),
49
+ releaseStages: z.array(ReleaseStageSchema).describe("研发阶段列表"),
50
+ sn: z.string().optional().describe("唯一标识sn"),
51
+ type: z.enum(["CR", "APP_RELEASE"]).optional().describe("研发流程类型"),
52
+ });
53
+ // Schema for ListSystemAllReleaseWorkflows API
54
+ export const ListSystemAllReleaseWorkflowsRequestSchema = z.object({
55
+ organizationId: z.string().describe("组织ID"),
56
+ systemName: z.string().describe("系统名"),
57
+ });
58
+ export const ListSystemAllReleaseWorkflowsResponseSchema = z.array(ReleaseWorkflowSchema);
59
+ // Schema for CreateSystemReleaseWorkflows API
60
+ export const CreateReleaseWorkflowRequestSchema = z.object({
61
+ name: z.string(),
62
+ note: z.string().optional(),
63
+ templateSn: z.string().optional(),
64
+ });
65
+ export const CreateSystemReleaseWorkflowsRequestSchema = z.object({
66
+ organizationId: z.string().describe("组织ID"),
67
+ systemName: z.string().describe("系统名"),
68
+ workflow: CreateReleaseWorkflowRequestSchema,
69
+ });
70
+ export const CreateSystemReleaseWorkflowsResponseSchema = ReleaseWorkflowSchema;
71
+ // Schema for UpdateSystemReleaseStage API
72
+ export const UpdateReleaseStageRequestSchema = z.object({
73
+ commitMessage: z.string().optional().describe("版本commit信息"),
74
+ labelList: z.array(LabelSchema).describe("标签列表"),
75
+ name: z.string().optional().describe("名称"),
76
+ order: z.string().optional().describe("排序"),
77
+ variableGroups: z.array(VariableGroupSchema).describe("变量组列表"),
78
+ });
79
+ export const UpdateSystemReleaseStageRequestSchema = z.object({
80
+ organizationId: z.string().describe("组织ID"),
81
+ systemName: z.string().describe("系统名"),
82
+ releaseWorkflowSn: z.string().describe("发布流程SN"),
83
+ releaseStageSn: z.string().describe("发布阶段SN"),
84
+ stage: UpdateReleaseStageRequestSchema,
85
+ });
86
+ export const UpdateSystemReleaseStageResponseSchema = ReleaseStageSchema;
87
+ // Schema for ExecuteReleaseStage API
88
+ export const ExecuteReleaseStagePipelineNgRequestSchema = z.object({
89
+ appReleaseSn: z.string().optional().describe("发布sn"),
90
+ params: z.record(z.any()).optional().describe("运行流水线参数"),
91
+ });
92
+ export const ExecuteReleaseStageRequestSchema = z.object({
93
+ organizationId: z.string().describe("组织ID"),
94
+ systemName: z.string().describe("系统名"),
95
+ releaseWorkflowSn: z.string().describe("发布流程SN"),
96
+ releaseStageSn: z.string().describe("发布阶段SN"),
97
+ execution: ExecuteReleaseStagePipelineNgRequestSchema,
98
+ });
99
+ export const ExecutePipelineResultSchema = z.object({
100
+ object: z.number().describe("流水线对象"),
101
+ pipelineId: z.number().describe("流水线ID"),
102
+ pipelineRunId: z.number().describe("流水线运行ID"),
103
+ });
104
+ export const ExecuteReleaseStageResponseSchema = ExecutePipelineResultSchema;
105
+ /**
106
+ * List all release workflows for a system
107
+ *
108
+ * @param params - The request parameters
109
+ * @returns The list of release workflows
110
+ */
111
+ export async function listSystemAllReleaseWorkflows(params) {
112
+ const { organizationId, systemName } = params;
113
+ const finalOrgId = await resolveOrganizationId(organizationId);
114
+ try {
115
+ const url = isRegionEdition()
116
+ ? `/oapi/v1/appstack/systems/${systemName}/releaseWorkflows`
117
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/systems/${systemName}/releaseWorkflows`;
118
+ const response = await yunxiaoRequest(url, {
119
+ method: 'GET',
120
+ });
121
+ return ListSystemAllReleaseWorkflowsResponseSchema.parse(response);
122
+ }
123
+ catch (error) {
124
+ throw error;
125
+ }
126
+ }
127
+ /**
128
+ * Create a release workflow for a system
129
+ *
130
+ * @param params - The request parameters
131
+ * @returns The created release workflow
132
+ */
133
+ export async function createSystemReleaseWorkflows(params) {
134
+ const { organizationId, systemName, workflow } = params;
135
+ const finalOrgId = await resolveOrganizationId(organizationId);
136
+ try {
137
+ const url = isRegionEdition()
138
+ ? `/oapi/v1/appstack/systems/${systemName}/releaseWorkflows`
139
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/systems/${systemName}/releaseWorkflows`;
140
+ const response = await yunxiaoRequest(url, {
141
+ method: 'POST',
142
+ body: workflow,
143
+ });
144
+ return CreateSystemReleaseWorkflowsResponseSchema.parse(response);
145
+ }
146
+ catch (error) {
147
+ throw error;
148
+ }
149
+ }
150
+ /**
151
+ * Update a release stage
152
+ *
153
+ * @param params - The request parameters
154
+ * @returns The updated release stage
155
+ */
156
+ export async function updateSystemReleaseStage(params) {
157
+ const { organizationId, systemName, releaseWorkflowSn, releaseStageSn, stage } = params;
158
+ const finalOrgId = await resolveOrganizationId(organizationId);
159
+ try {
160
+ const url = isRegionEdition()
161
+ ? `/oapi/v1/appstack/systems/${systemName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}`
162
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/systems/${systemName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}`;
163
+ const response = await yunxiaoRequest(url, {
164
+ method: 'PUT',
165
+ body: stage,
166
+ });
167
+ return UpdateSystemReleaseStageResponseSchema.parse(response);
168
+ }
169
+ catch (error) {
170
+ throw error;
171
+ }
172
+ }
173
+ /**
174
+ * Execute a release stage
175
+ *
176
+ * @param params - The request parameters
177
+ * @returns The execution result
178
+ */
179
+ export async function executeReleaseStage(params) {
180
+ const { organizationId, systemName, releaseWorkflowSn, releaseStageSn, execution } = params;
181
+ const finalOrgId = await resolveOrganizationId(organizationId);
182
+ try {
183
+ const url = isRegionEdition()
184
+ ? `/oapi/v1/appstack/systems/${systemName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}:execute`
185
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/systems/${systemName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}:execute`;
186
+ const response = await yunxiaoRequest(url, {
187
+ method: 'POST',
188
+ body: execution,
189
+ });
190
+ return ExecuteReleaseStageResponseSchema.parse(response);
191
+ }
192
+ catch (error) {
193
+ throw error;
194
+ }
195
+ }
196
+ // ========== Application Level Release Workflow APIs ==========
197
+ // Schema for ReleaseWorkflowBriefVO
198
+ export const ReleaseWorkflowBriefVOSchema = z.object({
199
+ name: z.string().optional().describe("名称"),
200
+ sn: z.string().optional().describe("唯一标识sn"),
201
+ type: z.enum(["CR", "APP_RELEASE"]).optional().describe("研发流程类型"),
202
+ });
203
+ // Schema for ReleaseStageBriefVO
204
+ export const ReleaseStageBriefVOSchema = z.object({
205
+ name: z.string().optional().describe("名称"),
206
+ order: z.string().optional().describe("阶段顺序"),
207
+ sn: z.string().optional().describe("唯一序列号"),
208
+ });
209
+ // Schema for ListAllReleaseWorkflows API (Application level)
210
+ export const ListAllReleaseWorkflowsRequestSchema = z.object({
211
+ organizationId: z.string().describe("组织ID"),
212
+ appName: z.string().describe("应用名"),
213
+ });
214
+ export const ListAllReleaseWorkflowsResponseSchema = z.array(ReleaseWorkflowSchema);
215
+ // Schema for ListAllReleaseWorkflowBriefs API
216
+ export const ListAllReleaseWorkflowBriefsRequestSchema = z.object({
217
+ organizationId: z.string().describe("组织ID"),
218
+ appName: z.string().describe("应用名"),
219
+ });
220
+ export const ListAllReleaseWorkflowBriefsResponseSchema = z.array(ReleaseWorkflowBriefVOSchema);
221
+ // Schema for GetReleaseWorkflowStage API
222
+ export const GetReleaseWorkflowStageRequestSchema = z.object({
223
+ organizationId: z.string().describe("组织ID"),
224
+ appName: z.string().describe("应用名"),
225
+ releaseWorkflowSn: z.string().describe("研发流程唯一标识符"),
226
+ releaseStageSn: z.string().describe("研发阶段唯一标识符"),
227
+ });
228
+ export const GetReleaseWorkflowStageResponseSchema = ReleaseStageSchema;
229
+ // Schema for ListAllReleaseStageBriefs API
230
+ export const ListAllReleaseStageBriefsRequestSchema = z.object({
231
+ organizationId: z.string().describe("组织ID"),
232
+ appName: z.string().describe("应用名"),
233
+ releaseWorkflowSn: z.string().describe("研发流程唯一标识符"),
234
+ });
235
+ export const ListAllReleaseStageBriefsResponseSchema = z.array(ReleaseStageBriefVOSchema);
236
+ // Schema for UpdateReleaseStage API (Application level)
237
+ export const UpdateAppReleaseStageRequestSchema = z.object({
238
+ organizationId: z.string().describe("组织ID"),
239
+ appName: z.string().describe("应用名"),
240
+ releaseWorkflowSn: z.string().describe("发布流程唯一序列号"),
241
+ releaseStageSn: z.string().describe("发布流程阶段唯一序列号"),
242
+ stage: UpdateReleaseStageRequestSchema,
243
+ });
244
+ export const UpdateAppReleaseStageResponseSchema = ReleaseStageSchema;
245
+ // Schema for ListAppReleaseStageRuns API
246
+ export const ListAppReleaseStageRunsRequestSchema = z.object({
247
+ organizationId: z.string().describe("组织ID"),
248
+ appName: z.string().describe("应用名"),
249
+ releaseWorkflowSn: z.string().describe("发布流程唯一序列号"),
250
+ releaseStageSn: z.string().describe("发布流程阶段唯一序列号"),
251
+ pagination: z.enum(["keyset", ""]).optional().describe("分页模式参数:keyset表示键集分页,不传表示页码分页"),
252
+ perPage: z.number().min(1).max(100).default(20).optional().describe("分页尺寸参数,决定一页最多返回多少对象"),
253
+ orderBy: z.enum(["id", "gmtCreate"]).optional().describe("分页排序属性,决定根据何种属性进行记录排序;推荐在实现严格遍历时,使用 id 属性"),
254
+ sort: z.enum(["asc", "desc"]).optional().describe("分页排序升降序,asc 为升序,desc 为降序;推荐在实现严格遍历时,使用升序"),
255
+ nextToken: z.string().optional().describe("键集分页 token,获取第一页数据时无需传入,否则需要传入前一页查询结果中的 nextToken 字段"),
256
+ page: z.number().default(1).optional().describe("页码分页时使用,用于获取下一页内容"),
257
+ });
258
+ // Schema for ReleaseStageInstanceVO (simplified)
259
+ export const ReleaseStageInstanceVOSchema = z.object({
260
+ executionNumber: z.string().optional().describe("执行序号"),
261
+ state: z.string().optional().describe("状态"),
262
+ gmtCreate: z.string().optional().describe("创建时间"),
263
+ });
264
+ // Schema for PageListReleaseStageInstanceVO
265
+ export const PageListReleaseStageInstanceVOSchema = z.object({
266
+ current: z.number().optional().describe("当前页数"),
267
+ pageSize: z.number().optional().describe("每页大小"),
268
+ pages: z.number().optional().describe("总页数"),
269
+ records: z.array(ReleaseStageInstanceVOSchema).optional().describe("数据列表"),
270
+ total: z.number().optional().describe("总数"),
271
+ nextToken: z.string().nullable().optional().describe("下一页token"),
272
+ });
273
+ export const ListAppReleaseStageRunsResponseSchema = PageListReleaseStageInstanceVOSchema;
274
+ // Schema for ExecuteChangeRequestReleaseStage API
275
+ export const ExecuteChangeRequestReleaseStageRequestSchema = z.object({
276
+ organizationId: z.string().describe("组织ID"),
277
+ appName: z.string().describe("应用名"),
278
+ releaseWorkflowSn: z.string().describe("发布流程唯一序列号"),
279
+ releaseStageSn: z.string().describe("发布流程阶段唯一序列号"),
280
+ execution: ExecuteReleaseStagePipelineNgRequestSchema,
281
+ });
282
+ export const ExecuteChangeRequestReleaseStageResponseSchema = ExecutePipelineResultSchema;
283
+ // Schema for CancelExecutionReleaseStage API
284
+ export const CancelExecutionReleaseStageRequestSchema = z.object({
285
+ organizationId: z.string().describe("组织ID"),
286
+ appName: z.string().describe("应用名"),
287
+ releaseWorkflowSn: z.string().describe("发布流程唯一序列号"),
288
+ releaseStageSn: z.string().describe("发布流程阶段唯一序列号"),
289
+ executionNumber: z.string().describe("发布流程阶执行序号"),
290
+ });
291
+ export const CancelExecutionReleaseStageResponseSchema = z.boolean();
292
+ // Schema for RetryChangeRequestStagePipeline API
293
+ export const RetryChangeRequestStagePipelineRequestSchema = z.object({
294
+ organizationId: z.string().describe("组织ID"),
295
+ appName: z.string().describe("应用名"),
296
+ releaseWorkflowSn: z.string().describe("发布流程唯一序列号"),
297
+ releaseStageSn: z.string().describe("发布流程阶段唯一序列号"),
298
+ executionNumber: z.string().describe("发布流程阶执行序号"),
299
+ });
300
+ export const RetryChangeRequestStagePipelineResponseSchema = z.boolean();
301
+ // Schema for SkipChangeRequestStagePipeline API
302
+ export const SkipChangeRequestStagePipelineRequestSchema = z.object({
303
+ organizationId: z.string().describe("组织ID"),
304
+ appName: z.string().describe("应用名"),
305
+ releaseWorkflowSn: z.string().describe("发布流程唯一序列号"),
306
+ releaseStageSn: z.string().describe("发布流程阶段唯一序列号"),
307
+ executionNumber: z.string().describe("发布流程阶执行序号"),
308
+ });
309
+ export const SkipChangeRequestStagePipelineResponseSchema = z.boolean();
310
+ /**
311
+ * List all release workflows for an application
312
+ */
313
+ export async function listAllReleaseWorkflows(params) {
314
+ const { organizationId, appName } = params;
315
+ const finalOrgId = await resolveOrganizationId(organizationId);
316
+ try {
317
+ const url = isRegionEdition()
318
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows`
319
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows`;
320
+ const response = await yunxiaoRequest(url, {
321
+ method: 'GET',
322
+ });
323
+ return ListAllReleaseWorkflowsResponseSchema.parse(response);
324
+ }
325
+ catch (error) {
326
+ throw error;
327
+ }
328
+ }
329
+ /**
330
+ * List all release workflow briefs for an application
331
+ */
332
+ export async function listAllReleaseWorkflowBriefs(params) {
333
+ const { organizationId, appName } = params;
334
+ const finalOrgId = await resolveOrganizationId(organizationId);
335
+ try {
336
+ const url = isRegionEdition()
337
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflowBriefs`
338
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflowBriefs`;
339
+ const response = await yunxiaoRequest(url, {
340
+ method: 'GET',
341
+ });
342
+ return ListAllReleaseWorkflowBriefsResponseSchema.parse(response);
343
+ }
344
+ catch (error) {
345
+ throw error;
346
+ }
347
+ }
348
+ /**
349
+ * Get release workflow stage
350
+ */
351
+ export async function getReleaseWorkflowStage(params) {
352
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn } = params;
353
+ const finalOrgId = await resolveOrganizationId(organizationId);
354
+ try {
355
+ const url = isRegionEdition()
356
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflow/${releaseWorkflowSn}/releaseStage/${releaseStageSn}`
357
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflow/${releaseWorkflowSn}/releaseStage/${releaseStageSn}`;
358
+ const response = await yunxiaoRequest(url, {
359
+ method: 'GET',
360
+ });
361
+ return GetReleaseWorkflowStageResponseSchema.parse(response);
362
+ }
363
+ catch (error) {
364
+ throw error;
365
+ }
366
+ }
367
+ /**
368
+ * List all release stage briefs
369
+ */
370
+ export async function listAllReleaseStageBriefs(params) {
371
+ const { organizationId, appName, releaseWorkflowSn } = params;
372
+ const finalOrgId = await resolveOrganizationId(organizationId);
373
+ try {
374
+ const url = isRegionEdition()
375
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflow/${releaseWorkflowSn}/releaseStageBriefs`
376
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflow/${releaseWorkflowSn}/releaseStageBriefs`;
377
+ const response = await yunxiaoRequest(url, {
378
+ method: 'GET',
379
+ });
380
+ return ListAllReleaseStageBriefsResponseSchema.parse(response);
381
+ }
382
+ catch (error) {
383
+ throw error;
384
+ }
385
+ }
386
+ /**
387
+ * Update release stage (application level)
388
+ */
389
+ export async function updateAppReleaseStage(params) {
390
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, stage } = params;
391
+ const finalOrgId = await resolveOrganizationId(organizationId);
392
+ try {
393
+ const url = isRegionEdition()
394
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}`
395
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}`;
396
+ const response = await yunxiaoRequest(url, {
397
+ method: 'PUT',
398
+ body: stage,
399
+ });
400
+ return UpdateAppReleaseStageResponseSchema.parse(response);
401
+ }
402
+ catch (error) {
403
+ throw error;
404
+ }
405
+ }
406
+ /**
407
+ * List app release stage runs
408
+ */
409
+ export async function listAppReleaseStageRuns(params) {
410
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, pagination, perPage, orderBy, sort, nextToken, page } = params;
411
+ const finalOrgId = await resolveOrganizationId(organizationId);
412
+ const query = {};
413
+ if (pagination)
414
+ query.pagination = pagination;
415
+ if (perPage !== undefined)
416
+ query.perPage = perPage;
417
+ if (orderBy)
418
+ query.orderBy = orderBy;
419
+ if (sort)
420
+ query.sort = sort;
421
+ if (nextToken)
422
+ query.nextToken = nextToken;
423
+ if (page !== undefined)
424
+ query.page = page;
425
+ try {
426
+ const baseUrl = isRegionEdition()
427
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions`
428
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions`;
429
+ const url = buildUrl(baseUrl, query);
430
+ const response = await yunxiaoRequest(url, { method: 'GET' });
431
+ return ListAppReleaseStageRunsResponseSchema.parse(response);
432
+ }
433
+ catch (error) {
434
+ throw error;
435
+ }
436
+ }
437
+ /**
438
+ * Execute change request release stage
439
+ */
440
+ export async function executeChangeRequestReleaseStage(params) {
441
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, execution } = params;
442
+ const finalOrgId = await resolveOrganizationId(organizationId);
443
+ try {
444
+ const url = isRegionEdition()
445
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}:execute`
446
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}:execute`;
447
+ const response = await yunxiaoRequest(url, {
448
+ method: 'POST',
449
+ body: execution,
450
+ });
451
+ return ExecuteChangeRequestReleaseStageResponseSchema.parse(response);
452
+ }
453
+ catch (error) {
454
+ throw error;
455
+ }
456
+ }
457
+ /**
458
+ * Cancel execution release stage
459
+ */
460
+ export async function cancelExecutionReleaseStage(params) {
461
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, executionNumber } = params;
462
+ const finalOrgId = await resolveOrganizationId(organizationId);
463
+ try {
464
+ const url = isRegionEdition()
465
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:cancel`
466
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:cancel`;
467
+ const response = await yunxiaoRequest(url, {
468
+ method: 'POST',
469
+ });
470
+ return CancelExecutionReleaseStageResponseSchema.parse(response);
471
+ }
472
+ catch (error) {
473
+ throw error;
474
+ }
475
+ }
476
+ /**
477
+ * Retry change request stage pipeline
478
+ */
479
+ export async function retryChangeRequestStagePipeline(params) {
480
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, executionNumber } = params;
481
+ const finalOrgId = await resolveOrganizationId(organizationId);
482
+ try {
483
+ const url = isRegionEdition()
484
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:retry`
485
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:retry`;
486
+ const response = await yunxiaoRequest(url, {
487
+ method: 'POST',
488
+ });
489
+ return RetryChangeRequestStagePipelineResponseSchema.parse(response);
490
+ }
491
+ catch (error) {
492
+ throw error;
493
+ }
494
+ }
495
+ /**
496
+ * Skip change request stage pipeline
497
+ */
498
+ export async function skipChangeRequestStagePipeline(params) {
499
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, executionNumber } = params;
500
+ const finalOrgId = await resolveOrganizationId(organizationId);
501
+ try {
502
+ const url = isRegionEdition()
503
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:skip`
504
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:skip`;
505
+ const response = await yunxiaoRequest(url, {
506
+ method: 'POST',
507
+ });
508
+ return SkipChangeRequestStagePipelineResponseSchema.parse(response);
509
+ }
510
+ catch (error) {
511
+ throw error;
512
+ }
513
+ }
514
+ // ========== Additional Application Level Release Workflow APIs ==========
515
+ // Schema for ReleaseStageInstanceIntegratedMetadataVO (simplified)
516
+ export const ReleaseStageInstanceIntegratedMetadataVOSchema = z.object({
517
+ changeRequestSn: z.string().optional().describe("变更请求标识"),
518
+ commitId: z.string().optional().describe("提交ID"),
519
+ commitMessage: z.string().optional().describe("提交信息"),
520
+ gmtCreate: z.string().optional().describe("创建时间"),
521
+ });
522
+ // Schema for ListAppReleaseStageExecutionIntegratedMetadata API
523
+ export const ListAppReleaseStageExecutionIntegratedMetadataRequestSchema = z.object({
524
+ organizationId: z.string().describe("组织ID"),
525
+ appName: z.string().describe("应用名"),
526
+ releaseWorkflowSn: z.string().describe("发布流程唯一序列号"),
527
+ releaseStageSn: z.string().describe("发布流程阶段唯一序列号"),
528
+ executionNumber: z.string().describe("研发阶段的执行记录编号"),
529
+ });
530
+ export const ListAppReleaseStageExecutionIntegratedMetadataResponseSchema = z.array(ReleaseStageInstanceIntegratedMetadataVOSchema);
531
+ // Schema for GetPipelineRunResponse (simplified)
532
+ export const GetPipelineRunResponseSchema = z.object({
533
+ pipelineId: z.number().optional().describe("流水线ID"),
534
+ pipelineRunId: z.number().optional().describe("流水线运行ID"),
535
+ jobs: z.array(z.object({
536
+ id: z.string().optional().describe("任务ID"),
537
+ name: z.string().optional().describe("任务名称"),
538
+ state: z.string().optional().describe("任务状态"),
539
+ })).optional().describe("任务列表"),
540
+ });
541
+ // Schema for GetReleaseStagePipelineRun API
542
+ export const GetReleaseStagePipelineRunRequestSchema = z.object({
543
+ organizationId: z.string().describe("组织ID"),
544
+ appName: z.string().describe("应用名"),
545
+ releaseWorkflowSn: z.string().describe("发布流程唯一序列号"),
546
+ releaseStageSn: z.string().describe("发布流程阶段唯一序列号"),
547
+ executionNumber: z.string().describe("发布流程阶执行序号"),
548
+ });
549
+ export const GetReleaseStagePipelineRunResponseSchema = GetPipelineRunResponseSchema;
550
+ // Schema for PassPipelineValidateResponse (simplified)
551
+ export const PassPipelineValidateResponseSchema = z.object({
552
+ success: z.boolean().optional().describe("是否成功"),
553
+ message: z.string().optional().describe("消息"),
554
+ });
555
+ // Schema for PassReleaseStagePipelineValidate API
556
+ export const PassReleaseStagePipelineValidateRequestSchema = z.object({
557
+ organizationId: z.string().describe("组织ID"),
558
+ appName: z.string().describe("应用名"),
559
+ releaseWorkflowSn: z.string().describe("发布流程唯一序列号"),
560
+ releaseStageSn: z.string().describe("发布流程阶段唯一序列号"),
561
+ executionNumber: z.string().describe("发布流程阶执行序号"),
562
+ jobId: z.string().describe("任务ID"),
563
+ });
564
+ export const PassReleaseStagePipelineValidateResponseSchema = PassPipelineValidateResponseSchema;
565
+ // Schema for RefusePipelineValidateResponse (simplified)
566
+ export const RefusePipelineValidateResponseSchema = z.object({
567
+ success: z.boolean().optional().describe("是否成功"),
568
+ message: z.string().optional().describe("消息"),
569
+ });
570
+ // Schema for RefuseReleaseStagePipelineValidate API
571
+ export const RefuseReleaseStagePipelineValidateRequestSchema = z.object({
572
+ organizationId: z.string().describe("组织ID"),
573
+ appName: z.string().describe("应用名"),
574
+ releaseWorkflowSn: z.string().describe("研发流程唯一序列号"),
575
+ releaseStageSn: z.string().describe("研发流程阶段唯一序列号"),
576
+ executionNumber: z.string().describe("研发流程阶执行序号"),
577
+ jobId: z.string().describe("任务ID"),
578
+ });
579
+ export const RefuseReleaseStagePipelineValidateResponseSchema = RefusePipelineValidateResponseSchema;
580
+ // Schema for ReleaseStageExecutionPipelineJobLogResponse (simplified)
581
+ export const ReleaseStageExecutionPipelineJobLogResponseSchema = z.object({
582
+ log: z.string().optional().describe("日志内容"),
583
+ hasMore: z.boolean().optional().describe("是否有更多日志"),
584
+ });
585
+ // Schema for GetAppReleaseStageExecutionPipelineJobLog API
586
+ export const GetAppReleaseStageExecutionPipelineJobLogRequestSchema = z.object({
587
+ organizationId: z.string().describe("组织ID"),
588
+ appName: z.string().describe("应用名"),
589
+ releaseWorkflowSn: z.string().describe("发布流程唯一序列号"),
590
+ releaseStageSn: z.string().describe("发布流程阶段唯一序列号"),
591
+ executionNumber: z.string().describe("研发阶段的执行记录编号"),
592
+ jobId: z.string().describe("任务ID,可通过GetReleaseStagePipelineRun接口获取任务ID"),
593
+ });
594
+ export const GetAppReleaseStageExecutionPipelineJobLogResponseSchema = ReleaseStageExecutionPipelineJobLogResponseSchema;
595
+ /**
596
+ * List app release stage execution integrated metadata
597
+ */
598
+ export async function listAppReleaseStageExecutionIntegratedMetadata(params) {
599
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, executionNumber } = params;
600
+ const finalOrgId = await resolveOrganizationId(organizationId);
601
+ try {
602
+ const url = isRegionEdition()
603
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}/integratedMetadata`
604
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}/integratedMetadata`;
605
+ const response = await yunxiaoRequest(url, {
606
+ method: 'GET',
607
+ });
608
+ return ListAppReleaseStageExecutionIntegratedMetadataResponseSchema.parse(response);
609
+ }
610
+ catch (error) {
611
+ throw error;
612
+ }
613
+ }
614
+ /**
615
+ * Get release stage pipeline run
616
+ */
617
+ export async function getReleaseStagePipelineRun(params) {
618
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, executionNumber } = params;
619
+ const finalOrgId = await resolveOrganizationId(organizationId);
620
+ try {
621
+ const url = isRegionEdition()
622
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:getPipelineRun`
623
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:getPipelineRun`;
624
+ const response = await yunxiaoRequest(url, {
625
+ method: 'GET',
626
+ });
627
+ return GetReleaseStagePipelineRunResponseSchema.parse(response);
628
+ }
629
+ catch (error) {
630
+ throw error;
631
+ }
632
+ }
633
+ /**
634
+ * Pass release stage pipeline validate
635
+ */
636
+ export async function passReleaseStagePipelineValidate(params) {
637
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, executionNumber, jobId } = params;
638
+ const finalOrgId = await resolveOrganizationId(organizationId);
639
+ const query = {};
640
+ if (jobId)
641
+ query.jobId = jobId;
642
+ try {
643
+ const baseUrl = isRegionEdition()
644
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:passPipelineValidate`
645
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:passPipelineValidate`;
646
+ const url = buildUrl(baseUrl, query);
647
+ const response = await yunxiaoRequest(url, { method: 'POST' });
648
+ return PassReleaseStagePipelineValidateResponseSchema.parse(response);
649
+ }
650
+ catch (error) {
651
+ throw error;
652
+ }
653
+ }
654
+ /**
655
+ * Get app release stage execution pipeline job log
656
+ */
657
+ export async function getAppReleaseStageExecutionPipelineJobLog(params) {
658
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, executionNumber, jobId } = params;
659
+ const finalOrgId = await resolveOrganizationId(organizationId);
660
+ const query = {};
661
+ if (jobId)
662
+ query.jobId = jobId;
663
+ try {
664
+ const baseUrl = isRegionEdition()
665
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:pipelineJobLog`
666
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:pipelineJobLog`;
667
+ const url = buildUrl(baseUrl, query);
668
+ const response = await yunxiaoRequest(url, { method: 'GET' });
669
+ return GetAppReleaseStageExecutionPipelineJobLogResponseSchema.parse(response);
670
+ }
671
+ catch (error) {
672
+ throw error;
673
+ }
674
+ }
675
+ /**
676
+ * Refuse release stage pipeline validate
677
+ */
678
+ export async function refuseReleaseStagePipelineValidate(params) {
679
+ const { organizationId, appName, releaseWorkflowSn, releaseStageSn, executionNumber, jobId } = params;
680
+ const finalOrgId = await resolveOrganizationId(organizationId);
681
+ const query = {};
682
+ if (jobId)
683
+ query.jobId = jobId;
684
+ try {
685
+ const baseUrl = isRegionEdition()
686
+ ? `/oapi/v1/appstack/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:refusePipelineValidate`
687
+ : `/oapi/v1/appstack/organizations/${finalOrgId}/apps/${appName}/releaseWorkflows/${releaseWorkflowSn}/releaseStages/${releaseStageSn}/executions/${executionNumber}:refusePipelineValidate`;
688
+ const url = buildUrl(baseUrl, query);
689
+ const response = await yunxiaoRequest(url, { method: 'POST' });
690
+ return RefuseReleaseStagePipelineValidateResponseSchema.parse(response);
691
+ }
692
+ catch (error) {
693
+ throw error;
694
+ }
695
+ }