fix(scaffolder-backend-module-gitlab): update GroupMembers.add for gitbeaker v43 (#33091)
@gitbeaker/core v43 changed ResourceMembers.add signature to accept accessLevel as the second arg and userId in an options object. Signed-off-by: benjdlambert <ben@blam.sh>
This commit is contained in:
@@ -50,6 +50,7 @@
|
||||
"@backstage/errors": "workspace:^",
|
||||
"@backstage/integration": "workspace:^",
|
||||
"@backstage/plugin-scaffolder-node": "workspace:^",
|
||||
"@gitbeaker/core": "^43.8.0",
|
||||
"@gitbeaker/requester-utils": "^43.8.0",
|
||||
"@gitbeaker/rest": "^43.8.0",
|
||||
"luxon": "^3.0.0",
|
||||
|
||||
+7
-11
@@ -73,16 +73,12 @@ describe('gitlab:group:access examples', () => {
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledTimes(2);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
789,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 456,
|
||||
});
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 789,
|
||||
});
|
||||
|
||||
expect(mockContext.output).toHaveBeenCalledWith('userIds', [456, 789]);
|
||||
expect(mockContext.output).toHaveBeenCalledWith('path', 123);
|
||||
@@ -99,8 +95,8 @@ describe('gitlab:group:access examples', () => {
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
'group1',
|
||||
456,
|
||||
30,
|
||||
{ userId: 456 },
|
||||
);
|
||||
|
||||
expect(mockContext.output).toHaveBeenCalledWith('userIds', [456]);
|
||||
|
||||
+42
-70
@@ -88,11 +88,9 @@ describe('gitlab:group:access', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 456,
|
||||
});
|
||||
|
||||
expect(mockContext.output).toHaveBeenCalledWith('userIds', [456]);
|
||||
expect(mockContext.output).toHaveBeenCalledWith('path', 123);
|
||||
@@ -113,21 +111,15 @@ describe('gitlab:group:access', () => {
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledTimes(3);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
789,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
101,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 456,
|
||||
});
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 789,
|
||||
});
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 101,
|
||||
});
|
||||
|
||||
expect(mockContext.output).toHaveBeenCalledWith('userIds', [456, 789, 101]);
|
||||
expect(mockContext.output).toHaveBeenCalledWith('path', 123);
|
||||
@@ -147,11 +139,9 @@ describe('gitlab:group:access', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 456,
|
||||
});
|
||||
expect(mockGitlabClient.GroupMembers.remove).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
@@ -211,11 +201,9 @@ describe('gitlab:group:access', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 456,
|
||||
});
|
||||
expect(mockContext.output).toHaveBeenCalledWith('accessLevel', 30);
|
||||
});
|
||||
|
||||
@@ -314,11 +302,9 @@ describe('gitlab:group:access', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
10,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 10, {
|
||||
userId: 456,
|
||||
});
|
||||
});
|
||||
|
||||
it('should add users as Maintainer (accessLevel 40)', async () => {
|
||||
@@ -334,11 +320,9 @@ describe('gitlab:group:access', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
40,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 40, {
|
||||
userId: 456,
|
||||
});
|
||||
});
|
||||
|
||||
it('should add users as Owner (accessLevel 50)', async () => {
|
||||
@@ -354,11 +338,9 @@ describe('gitlab:group:access', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
50,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 50, {
|
||||
userId: 456,
|
||||
});
|
||||
});
|
||||
|
||||
it('should accept string accessLevel "developer"', async () => {
|
||||
@@ -374,11 +356,9 @@ describe('gitlab:group:access', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 456,
|
||||
});
|
||||
expect(mockContext.output).toHaveBeenCalledWith('accessLevel', 30);
|
||||
});
|
||||
|
||||
@@ -395,11 +375,9 @@ describe('gitlab:group:access', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
40,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 40, {
|
||||
userId: 456,
|
||||
});
|
||||
expect(mockContext.output).toHaveBeenCalledWith('accessLevel', 40);
|
||||
});
|
||||
|
||||
@@ -435,11 +413,9 @@ describe('gitlab:group:access', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 456,
|
||||
});
|
||||
expect(mockGitlabClient.GroupMembers.edit).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
@@ -585,16 +561,12 @@ describe('gitlab:group:access', () => {
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledTimes(2);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
456,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(
|
||||
123,
|
||||
789,
|
||||
30,
|
||||
);
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 456,
|
||||
});
|
||||
expect(mockGitlabClient.GroupMembers.add).toHaveBeenCalledWith(123, 30, {
|
||||
userId: 789,
|
||||
});
|
||||
|
||||
expect(mockGitlabClient.Groups.share).toHaveBeenCalledTimes(2);
|
||||
expect(mockGitlabClient.Groups.share).toHaveBeenCalledWith(
|
||||
|
||||
@@ -17,9 +17,12 @@
|
||||
import { InputError } from '@backstage/errors';
|
||||
import { ScmIntegrationRegistry } from '@backstage/integration';
|
||||
import { createTemplateAction } from '@backstage/plugin-scaffolder-node';
|
||||
import { AccessLevel } from '@gitbeaker/core';
|
||||
import { getClient, parseRepoHost } from '../util';
|
||||
import { examples } from './gitlabGroupAccessAction.examples';
|
||||
|
||||
type NonAdminAccessLevel = Exclude<AccessLevel, AccessLevel.ADMIN>;
|
||||
|
||||
const accessLevelMapping: Record<string, number> = {
|
||||
no_access: 0,
|
||||
minimal_access: 5,
|
||||
@@ -154,8 +157,7 @@ export const createGitlabGroupAccessAction = (options: {
|
||||
);
|
||||
}
|
||||
|
||||
const accessLevel =
|
||||
action === 'add' ? resolveAccessLevel(rawAccessLevel) : 0;
|
||||
const accessLevel = resolveAccessLevel(rawAccessLevel);
|
||||
|
||||
if (ctx.isDryRun) {
|
||||
if (userIds.length > 0) {
|
||||
@@ -187,11 +189,19 @@ export const createGitlabGroupAccessAction = (options: {
|
||||
fn: async () => {
|
||||
if (action === 'add') {
|
||||
try {
|
||||
await api.GroupMembers.add(path, userId, accessLevel);
|
||||
await api.GroupMembers.add(
|
||||
path,
|
||||
accessLevel as NonAdminAccessLevel,
|
||||
{ userId },
|
||||
);
|
||||
} catch (error: any) {
|
||||
// If member already exists, try to edit instead
|
||||
if (error.cause?.response?.status === 409) {
|
||||
await api.GroupMembers.edit(path, userId, accessLevel);
|
||||
await api.GroupMembers.edit(
|
||||
path,
|
||||
userId,
|
||||
accessLevel as NonAdminAccessLevel,
|
||||
);
|
||||
return;
|
||||
}
|
||||
throw error;
|
||||
|
||||
@@ -6881,6 +6881,7 @@ __metadata:
|
||||
"@backstage/integration": "workspace:^"
|
||||
"@backstage/plugin-scaffolder-node": "workspace:^"
|
||||
"@backstage/plugin-scaffolder-node-test-utils": "workspace:^"
|
||||
"@gitbeaker/core": "npm:^43.8.0"
|
||||
"@gitbeaker/requester-utils": "npm:^43.8.0"
|
||||
"@gitbeaker/rest": "npm:^43.8.0"
|
||||
luxon: "npm:^3.0.0"
|
||||
|
||||
Reference in New Issue
Block a user