@xemahq/biomes-platform-gitlab 0.6.0 → 0.7.1

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.
@@ -1,575 +0,0 @@
1
- import { adapterError, err, ok, } from '@xemahq/biome-sdk/adapter';
2
- import { createGitLabApi, encodePathSegment, GitLabApiError, } from './gitlab-client.factory.js';
3
- export const GITLAB_SCM_ACTION = {
4
- GET_REPOSITORY: 'get-repository',
5
- LIST_BRANCHES: 'list-branches',
6
- CREATE_BRANCH: 'create-branch',
7
- LIST_CHANGE_REQUESTS: 'list-change-requests',
8
- GET_CHANGE_REQUEST: 'get-change-request',
9
- CREATE_CHANGE_REQUEST: 'create-change-request',
10
- UPDATE_CHANGE_REQUEST: 'update-change-request',
11
- POST_COMMENT: 'post-comment',
12
- LIST_COMMENTS: 'list-comments',
13
- LIST_FILES: 'list-files',
14
- GET_FILE: 'get-file',
15
- GET_DIFF: 'get-diff',
16
- LIST_COMMITS: 'list-commits',
17
- GET_CHECKS: 'get-checks',
18
- };
19
- const CHANGE_REQUEST_STATUS = {
20
- OPEN: 'open',
21
- MERGED: 'merged',
22
- CLOSED: 'closed',
23
- };
24
- const CHECK_STATUS = {
25
- QUEUED: 'queued',
26
- IN_PROGRESS: 'in_progress',
27
- COMPLETED: 'completed',
28
- };
29
- const CHECK_CONCLUSION = {
30
- SUCCESS: 'success',
31
- FAILURE: 'failure',
32
- PENDING: 'pending',
33
- ERROR: 'error',
34
- };
35
- const DEFAULT_COMMIT_LIMIT = 30;
36
- function requireString(params, key) {
37
- return params[key];
38
- }
39
- function optionalString(params, key) {
40
- return params[key];
41
- }
42
- function optionalNumber(params, key) {
43
- return params[key];
44
- }
45
- function resolveTarget(input, action) {
46
- const projectPath = requireString(input.params, 'projectPath');
47
- const apiUrl = optionalString(input.params, 'apiUrl');
48
- const token = input.credential.accessToken;
49
- if (typeof token !== 'string' || token.length === 0) {
50
- return err(adapterError('unauthorized', `gitlab ${action}: the resolved connection credential carries no access token`));
51
- }
52
- return ok({
53
- encodedProjectPath: encodePathSegment(projectPath),
54
- api: createGitLabApi(apiUrl ?? '', token, input.credential.tokenType, input.signal),
55
- });
56
- }
57
- function toAdapterError(cause) {
58
- if (cause instanceof GitLabApiError) {
59
- switch (cause.kind) {
60
- case 'unauthorized':
61
- return adapterError('unauthorized', cause.message);
62
- case 'not-found':
63
- return adapterError('not-found', cause.message);
64
- case 'rate-limited':
65
- return adapterError('rate-limited', cause.message, cause.retryAfterSec === undefined
66
- ? undefined
67
- : { retryAfterSec: cause.retryAfterSec });
68
- case 'upstream':
69
- default:
70
- return adapterError('upstream-unavailable', cause.message);
71
- }
72
- }
73
- return adapterError('internal', `gitlab action failed: ${cause instanceof Error ? cause.message : String(cause)}`);
74
- }
75
- function mapMergeRequest(mr) {
76
- const status = mr.state === 'merged'
77
- ? CHANGE_REQUEST_STATUS.MERGED
78
- : mr.state === 'closed'
79
- ? CHANGE_REQUEST_STATUS.CLOSED
80
- : CHANGE_REQUEST_STATUS.OPEN;
81
- const changeRequest = {
82
- id: String(mr.iid),
83
- externalId: String(mr.id),
84
- sourceBranch: mr.source_branch ?? '',
85
- targetBranch: mr.target_branch ?? '',
86
- title: mr.title ?? '',
87
- status,
88
- createdAt: mr.created_at ?? '',
89
- updatedAt: mr.updated_at ?? '',
90
- };
91
- if (mr.description !== undefined) {
92
- changeRequest.description = mr.description;
93
- }
94
- if (mr.author?.username !== undefined) {
95
- changeRequest.authorId = mr.author.username;
96
- }
97
- if (mr.sha !== undefined) {
98
- changeRequest.headCommit = mr.sha;
99
- }
100
- return changeRequest;
101
- }
102
- function mapNote(note, changeRequestId) {
103
- return {
104
- id: String(note.id),
105
- changeRequestId,
106
- body: note.body ?? '',
107
- authorId: note.author?.username ?? 'unknown',
108
- authorType: 'human',
109
- createdAt: note.created_at ?? '',
110
- };
111
- }
112
- function mapPipelineState(state) {
113
- switch (state) {
114
- case 'success':
115
- case 'skipped':
116
- return {
117
- status: CHECK_STATUS.COMPLETED,
118
- conclusion: CHECK_CONCLUSION.SUCCESS,
119
- };
120
- case 'failed':
121
- case 'canceled':
122
- return {
123
- status: CHECK_STATUS.COMPLETED,
124
- conclusion: CHECK_CONCLUSION.FAILURE,
125
- };
126
- case 'running':
127
- return {
128
- status: CHECK_STATUS.IN_PROGRESS,
129
- conclusion: CHECK_CONCLUSION.PENDING,
130
- };
131
- default:
132
- return {
133
- status: CHECK_STATUS.QUEUED,
134
- conclusion: CHECK_CONCLUSION.PENDING,
135
- };
136
- }
137
- }
138
- export function mapGitlabPipelines(pipelines) {
139
- const latest = pipelines[0];
140
- if (!latest) {
141
- return [];
142
- }
143
- const { status, conclusion } = mapPipelineState(latest.status);
144
- const check = {
145
- name: latest.name ?? (latest.id ? `pipeline #${latest.id}` : 'pipeline'),
146
- status,
147
- conclusion,
148
- };
149
- if (latest.web_url) {
150
- check.detailsUrl = latest.web_url;
151
- }
152
- return [check];
153
- }
154
- export function aggregateChecks(checks) {
155
- if (checks.length === 0) {
156
- return { conclusion: CHECK_CONCLUSION.SUCCESS, checks };
157
- }
158
- const conclusions = new Set(checks.map((c) => c.conclusion));
159
- const conclusion = conclusions.has(CHECK_CONCLUSION.PENDING)
160
- ? CHECK_CONCLUSION.PENDING
161
- : conclusions.has(CHECK_CONCLUSION.FAILURE)
162
- ? CHECK_CONCLUSION.FAILURE
163
- : conclusions.has(CHECK_CONCLUSION.ERROR)
164
- ? CHECK_CONCLUSION.ERROR
165
- : CHECK_CONCLUSION.SUCCESS;
166
- return { conclusion, checks };
167
- }
168
- const TARGET_PROPERTIES = {
169
- projectPath: {
170
- type: 'string',
171
- description: 'GitLab project path, "group/project" (or "group/subgroup/project"). Encoded by the connector.',
172
- },
173
- apiUrl: {
174
- type: 'string',
175
- description: 'OPTIONAL base URL of a self-hosted GitLab instance. Defaults to https://gitlab.com.',
176
- },
177
- };
178
- const TARGET_REQUIRED = ['projectPath'];
179
- const EMPTY_ALLOWED_PARAMS = {
180
- [GITLAB_SCM_ACTION.LIST_FILES]: ['path'],
181
- };
182
- function withNonEmptyRequired(action, properties, required) {
183
- const emptyAllowed = EMPTY_ALLOWED_PARAMS[action] ?? [];
184
- return Object.fromEntries(Object.entries(properties).map(([key, schema]) => [
185
- key,
186
- required.includes(key) && schema.type === 'string' && !emptyAllowed.includes(key)
187
- ? { ...schema, minLength: 1 }
188
- : schema,
189
- ]));
190
- }
191
- function defineScmAction(action, properties, required, run) {
192
- return {
193
- action,
194
- schema: {
195
- type: 'object',
196
- properties: withNonEmptyRequired(action, { ...TARGET_PROPERTIES, ...properties }, [...TARGET_REQUIRED, ...required]),
197
- required: [...TARGET_REQUIRED, ...required],
198
- },
199
- async execute(input) {
200
- const target = resolveTarget(input, action);
201
- if (!target.ok) {
202
- return target;
203
- }
204
- try {
205
- return await run(target.value, input.params);
206
- }
207
- catch (cause) {
208
- if (input.signal?.aborted === true) {
209
- throw cause;
210
- }
211
- return err(toAdapterError(cause));
212
- }
213
- },
214
- };
215
- }
216
- const getRepository = defineScmAction(GITLAB_SCM_ACTION.GET_REPOSITORY, {}, [], async ({ api, encodedProjectPath }) => {
217
- const data = await api.request({
218
- method: 'GET',
219
- path: `/projects/${encodedProjectPath}`,
220
- });
221
- const repository = {
222
- id: String(data.id),
223
- provider: 'gitlab',
224
- defaultBranch: data.default_branch ?? 'main',
225
- isActive: !data.archived,
226
- contentBrowsingEnabled: true,
227
- };
228
- const remoteUrl = data.http_url_to_repo ?? data.web_url;
229
- if (remoteUrl !== undefined) {
230
- repository.remoteUrl = remoteUrl;
231
- }
232
- return ok({ externalId: String(data.id), outputs: { repository } });
233
- });
234
- const listBranches = defineScmAction(GITLAB_SCM_ACTION.LIST_BRANCHES, {}, [], async ({ api, encodedProjectPath }) => {
235
- const data = await api.request({
236
- method: 'GET',
237
- path: `/projects/${encodedProjectPath}/repository/branches`,
238
- query: { per_page: '100' },
239
- });
240
- return ok({
241
- outputs: {
242
- branches: data.map((b) => ({
243
- name: b.name,
244
- commit: b.commit?.id ?? '',
245
- isDefault: b.default === true,
246
- })),
247
- },
248
- });
249
- });
250
- const createBranch = defineScmAction(GITLAB_SCM_ACTION.CREATE_BRANCH, {
251
- name: { type: 'string', description: 'Name of the branch to create.' },
252
- fromRef: {
253
- type: 'string',
254
- description: 'Ref the branch is cut from. Defaults to "main".',
255
- },
256
- }, ['name'], async ({ api, encodedProjectPath }, params) => {
257
- const name = requireString(params, 'name');
258
- const fromRef = optionalString(params, 'fromRef');
259
- const data = await api.request({
260
- method: 'POST',
261
- path: `/projects/${encodedProjectPath}/repository/branches`,
262
- body: { branch: name, ref: fromRef ?? 'main' },
263
- });
264
- return ok({
265
- externalId: data.name,
266
- outputs: {
267
- branch: {
268
- name: data.name,
269
- commit: data.commit?.id ?? '',
270
- isDefault: false,
271
- },
272
- },
273
- });
274
- });
275
- const listChangeRequests = defineScmAction(GITLAB_SCM_ACTION.LIST_CHANGE_REQUESTS, {}, [], async ({ api, encodedProjectPath }) => {
276
- const data = await api.request({
277
- method: 'GET',
278
- path: `/projects/${encodedProjectPath}/merge_requests`,
279
- query: {
280
- state: 'all',
281
- per_page: '50',
282
- order_by: 'updated_at',
283
- sort: 'desc',
284
- },
285
- });
286
- return ok({ outputs: { changeRequests: data.map(mapMergeRequest) } });
287
- });
288
- const getChangeRequest = defineScmAction(GITLAB_SCM_ACTION.GET_CHANGE_REQUEST, {
289
- changeRequestId: {
290
- type: 'string',
291
- description: 'Merge-request IID within the project.',
292
- },
293
- }, ['changeRequestId'], async ({ api, encodedProjectPath }, params) => {
294
- const id = requireString(params, 'changeRequestId');
295
- const data = await api.request({
296
- method: 'GET',
297
- path: `/projects/${encodedProjectPath}/merge_requests/${encodePathSegment(id)}`,
298
- });
299
- return ok({
300
- externalId: String(data.id),
301
- outputs: { changeRequest: mapMergeRequest(data) },
302
- });
303
- });
304
- const createChangeRequest = defineScmAction(GITLAB_SCM_ACTION.CREATE_CHANGE_REQUEST, {
305
- sourceBranch: { type: 'string', description: 'Branch to merge FROM.' },
306
- targetBranch: { type: 'string', description: 'Branch to merge INTO.' },
307
- title: { type: 'string', description: 'Merge-request title.' },
308
- description: {
309
- type: 'string',
310
- description: 'Merge-request description. Defaults to empty.',
311
- },
312
- }, ['sourceBranch', 'targetBranch', 'title'], async ({ api, encodedProjectPath }, params) => {
313
- const sourceBranch = requireString(params, 'sourceBranch');
314
- const targetBranch = requireString(params, 'targetBranch');
315
- const title = requireString(params, 'title');
316
- const description = optionalString(params, 'description');
317
- const data = await api.request({
318
- method: 'POST',
319
- path: `/projects/${encodedProjectPath}/merge_requests`,
320
- body: {
321
- source_branch: sourceBranch,
322
- target_branch: targetBranch,
323
- title: title,
324
- description: description ?? '',
325
- },
326
- });
327
- return ok({
328
- externalId: String(data.id),
329
- outputs: { changeRequest: mapMergeRequest(data) },
330
- });
331
- });
332
- const updateChangeRequest = defineScmAction(GITLAB_SCM_ACTION.UPDATE_CHANGE_REQUEST, {
333
- changeRequestId: {
334
- type: 'string',
335
- description: 'Merge-request IID within the project.',
336
- },
337
- title: { type: 'string', description: 'New title.' },
338
- status: {
339
- type: 'string',
340
- description: 'New status — "closed" closes the merge request, "open" reopens it. Any other value changes no state.',
341
- },
342
- }, ['changeRequestId'], async ({ api, encodedProjectPath }, params) => {
343
- const id = requireString(params, 'changeRequestId');
344
- const title = optionalString(params, 'title');
345
- const status = optionalString(params, 'status');
346
- const body = {};
347
- if (title !== undefined && title.length > 0) {
348
- body.title = title;
349
- }
350
- if (status === CHANGE_REQUEST_STATUS.CLOSED) {
351
- body.state_event = 'close';
352
- }
353
- if (status === CHANGE_REQUEST_STATUS.OPEN) {
354
- body.state_event = 'reopen';
355
- }
356
- const data = await api.request({
357
- method: 'PUT',
358
- path: `/projects/${encodedProjectPath}/merge_requests/${encodePathSegment(id)}`,
359
- body,
360
- });
361
- return ok({
362
- externalId: String(data.id),
363
- outputs: { changeRequest: mapMergeRequest(data) },
364
- });
365
- });
366
- const postComment = defineScmAction(GITLAB_SCM_ACTION.POST_COMMENT, {
367
- changeRequestId: {
368
- type: 'string',
369
- description: 'Merge-request IID to comment on.',
370
- },
371
- body: { type: 'string', description: 'Comment body (GitLab note).' },
372
- }, ['changeRequestId', 'body'], async ({ api, encodedProjectPath }, params) => {
373
- const id = requireString(params, 'changeRequestId');
374
- const content = requireString(params, 'body');
375
- const data = await api.request({
376
- method: 'POST',
377
- path: `/projects/${encodedProjectPath}/merge_requests/${encodePathSegment(id)}/notes`,
378
- body: { body: content },
379
- });
380
- return ok({
381
- externalId: String(data.id),
382
- outputs: { comment: mapNote(data, id) },
383
- });
384
- });
385
- const listComments = defineScmAction(GITLAB_SCM_ACTION.LIST_COMMENTS, {
386
- changeRequestId: {
387
- type: 'string',
388
- description: 'Merge-request IID whose notes to list.',
389
- },
390
- }, ['changeRequestId'], async ({ api, encodedProjectPath }, params) => {
391
- const id = requireString(params, 'changeRequestId');
392
- const data = await api.request({
393
- method: 'GET',
394
- path: `/projects/${encodedProjectPath}/merge_requests/${encodePathSegment(id)}/notes`,
395
- query: { per_page: '100', sort: 'asc' },
396
- });
397
- return ok({
398
- outputs: {
399
- comments: data
400
- .filter((n) => !n.system)
401
- .map((n) => mapNote(n, id)),
402
- },
403
- });
404
- });
405
- const listFiles = defineScmAction(GITLAB_SCM_ACTION.LIST_FILES, {
406
- path: {
407
- type: 'string',
408
- description: 'Directory path to list. Empty string lists the root.',
409
- },
410
- ref: { type: 'string', description: 'Branch, tag or commit sha.' },
411
- }, ['path'], async ({ api, encodedProjectPath }, params) => {
412
- const rawPath = optionalString(params, 'path');
413
- const ref = optionalString(params, 'ref');
414
- const safePath = (rawPath ?? '').replace(/^\/+/, '');
415
- const query = { per_page: '100' };
416
- if (ref) {
417
- query.ref = ref;
418
- }
419
- if (safePath) {
420
- query.path = safePath;
421
- }
422
- const data = await api.request({
423
- method: 'GET',
424
- path: `/projects/${encodedProjectPath}/repository/tree`,
425
- query,
426
- });
427
- return ok({
428
- outputs: {
429
- entries: data.map((e) => {
430
- const entry = {
431
- name: e.name,
432
- path: e.path,
433
- type: e.type === 'tree' ? 'dir' : 'file',
434
- };
435
- if (e.id !== undefined) {
436
- entry.sha = e.id;
437
- }
438
- return entry;
439
- }),
440
- },
441
- });
442
- });
443
- const getFile = defineScmAction(GITLAB_SCM_ACTION.GET_FILE, {
444
- path: { type: 'string', description: 'File path within the repository.' },
445
- ref: { type: 'string', description: 'Branch, tag or commit sha.' },
446
- }, ['path'], async ({ api, encodedProjectPath }, params) => {
447
- const rawPath = requireString(params, 'path');
448
- const ref = optionalString(params, 'ref');
449
- const safePath = rawPath.replace(/^\/+/, '');
450
- const data = await api.request({
451
- method: 'GET',
452
- path: `/projects/${encodedProjectPath}/repository/files/${encodePathSegment(safePath)}`,
453
- ...(ref === undefined ? {} : { query: { ref: ref } }),
454
- });
455
- const content = data.content
456
- ? Buffer.from(data.content, data.encoding === 'base64' ? 'base64' : 'utf-8').toString('utf-8')
457
- : '';
458
- const file = {
459
- path: safePath,
460
- content,
461
- encoding: 'utf-8',
462
- size: data.size ?? content.length,
463
- };
464
- const sha = data.blob_id ?? data.content_sha256;
465
- if (sha !== undefined) {
466
- file.sha = sha;
467
- }
468
- return ok({ outputs: { file } });
469
- });
470
- const getDiff = defineScmAction(GITLAB_SCM_ACTION.GET_DIFF, {
471
- base: { type: 'string', description: 'Ref to compare FROM.' },
472
- head: { type: 'string', description: 'Ref to compare TO.' },
473
- }, ['base', 'head'], async ({ api, encodedProjectPath }, params) => {
474
- const base = requireString(params, 'base');
475
- const head = requireString(params, 'head');
476
- const data = await api.request({
477
- method: 'GET',
478
- path: `/projects/${encodedProjectPath}/repository/compare`,
479
- query: { from: base, to: head },
480
- });
481
- const diff = {
482
- base: base,
483
- head: head,
484
- files: (data.diffs ?? []).map((d) => {
485
- const file = {
486
- filename: d.new_path,
487
- status: d.new_file
488
- ? 'added'
489
- : d.deleted_file
490
- ? 'removed'
491
- : d.renamed_file
492
- ? 'renamed'
493
- : 'modified',
494
- additions: 0,
495
- deletions: 0,
496
- };
497
- if (d.diff !== undefined) {
498
- file.patch = d.diff;
499
- }
500
- return file;
501
- }),
502
- };
503
- if (data.commits) {
504
- diff.stats = {
505
- additions: 0,
506
- deletions: 0,
507
- changes: data.diffs?.length ?? 0,
508
- };
509
- }
510
- return ok({ outputs: { diff } });
511
- });
512
- const listCommits = defineScmAction(GITLAB_SCM_ACTION.LIST_COMMITS, {
513
- ref: { type: 'string', description: 'Branch, tag or commit sha.' },
514
- limit: {
515
- type: 'integer',
516
- minimum: 1,
517
- description: `Maximum commits to return. Defaults to ${DEFAULT_COMMIT_LIMIT}.`,
518
- },
519
- }, [], async ({ api, encodedProjectPath }, params) => {
520
- const ref = optionalString(params, 'ref');
521
- const limit = optionalNumber(params, 'limit');
522
- const query = {
523
- per_page: String(limit ?? DEFAULT_COMMIT_LIMIT),
524
- };
525
- if (ref) {
526
- query.ref_name = ref;
527
- }
528
- const data = await api.request({
529
- method: 'GET',
530
- path: `/projects/${encodedProjectPath}/repository/commits`,
531
- query,
532
- });
533
- return ok({
534
- outputs: {
535
- commits: data.map((c) => ({
536
- sha: c.id,
537
- message: c.message ?? '',
538
- authorName: c.author_name ?? '',
539
- authorEmail: c.author_email ?? '',
540
- date: c.created_at ?? '',
541
- })),
542
- },
543
- });
544
- });
545
- const getChecks = defineScmAction(GITLAB_SCM_ACTION.GET_CHECKS, {
546
- headSha: {
547
- type: 'string',
548
- description: 'Commit sha whose CI pipelines to normalize.',
549
- },
550
- }, ['headSha'], async ({ api, encodedProjectPath }, params) => {
551
- const headSha = requireString(params, 'headSha');
552
- const pipelines = await api.request({
553
- method: 'GET',
554
- path: `/projects/${encodedProjectPath}/pipelines`,
555
- query: { sha: headSha },
556
- });
557
- return ok({ outputs: aggregateChecks(mapGitlabPipelines(pipelines)) });
558
- });
559
- export const gitlabScmActions = {
560
- [GITLAB_SCM_ACTION.GET_REPOSITORY]: getRepository,
561
- [GITLAB_SCM_ACTION.LIST_BRANCHES]: listBranches,
562
- [GITLAB_SCM_ACTION.CREATE_BRANCH]: createBranch,
563
- [GITLAB_SCM_ACTION.LIST_CHANGE_REQUESTS]: listChangeRequests,
564
- [GITLAB_SCM_ACTION.GET_CHANGE_REQUEST]: getChangeRequest,
565
- [GITLAB_SCM_ACTION.CREATE_CHANGE_REQUEST]: createChangeRequest,
566
- [GITLAB_SCM_ACTION.UPDATE_CHANGE_REQUEST]: updateChangeRequest,
567
- [GITLAB_SCM_ACTION.POST_COMMENT]: postComment,
568
- [GITLAB_SCM_ACTION.LIST_COMMENTS]: listComments,
569
- [GITLAB_SCM_ACTION.LIST_FILES]: listFiles,
570
- [GITLAB_SCM_ACTION.GET_FILE]: getFile,
571
- [GITLAB_SCM_ACTION.GET_DIFF]: getDiff,
572
- [GITLAB_SCM_ACTION.LIST_COMMITS]: listCommits,
573
- [GITLAB_SCM_ACTION.GET_CHECKS]: getChecks,
574
- };
575
- //# sourceMappingURL=scm-actions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scm-actions.js","sourceRoot":"","sources":["../../src/connector-adapters/scm-actions.ts"],"names":[],"mappings":"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"}