diff --git a/.changeset/lazy-queens-hope.md b/.changeset/lazy-queens-hope.md new file mode 100644 index 0000000000..05f03044b4 --- /dev/null +++ b/.changeset/lazy-queens-hope.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-gitlab': patch +--- + +Made "gitlab:projectDeployToken:create" action idempotent diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.ts index 600d982d8d..26cf36d6c1 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabProjectDeployTokenCreate.ts @@ -70,21 +70,31 @@ export const createGitlabProjectDeployTokenAction = (options: { token: token, }); - const deployToken = await api.DeployTokens.create( - name, - scopes as DeployTokenScope[], - { - projectId, - username, + const { deployToken, deployUsername } = await ctx.checkpoint({ + key: `create.deploy.token.${projectId}.${name}`, + fn: async () => { + const res = await api.DeployTokens.create( + name, + scopes as DeployTokenScope[], + { + projectId, + username, + }, + ); + + if (!res.hasOwnProperty('token')) { + throw new InputError(`No deploy_token given from gitlab instance`); + } + + return { + deployToken: res.token as string, + deployUsername: res.username, + }; }, - ); + }); - if (!deployToken.hasOwnProperty('token')) { - throw new InputError(`No deploy_token given from gitlab instance`); - } - - ctx.output('deploy_token', deployToken.token as string); - ctx.output('user', deployToken.username); + ctx.output('deploy_token', deployToken); + ctx.output('user', deployUsername); }, }); };