From 8f9c54c3418c67e75a789ae7e490f2eb9aa3f780 Mon Sep 17 00:00:00 2001 From: Bogdan Nechyporenko Date: Fri, 14 Mar 2025 21:36:35 +0100 Subject: [PATCH] Made "github:repo:create" action idempotent Signed-off-by: Bogdan Nechyporenko --- .changeset/tasty-jeans-ask.md | 5 ++ .../src/actions/githubRepoCreate.ts | 62 ++++++++++--------- 2 files changed, 39 insertions(+), 28 deletions(-) create mode 100644 .changeset/tasty-jeans-ask.md diff --git a/.changeset/tasty-jeans-ask.md b/.changeset/tasty-jeans-ask.md new file mode 100644 index 0000000000..15060242fa --- /dev/null +++ b/.changeset/tasty-jeans-ask.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-github': patch +--- + +Made "github:repo:create" action idempotent diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.ts b/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.ts index d32f7447a6..91b0580da9 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.ts @@ -196,35 +196,41 @@ export function createGithubRepoCreateAction(options: { }); const client = new Octokit(octokitOptions); - const newRepo = await createGithubRepoWithCollaboratorsAndTopics( - client, - repo, - owner, - repoVisibility, - description, - homepage, - deleteBranchOnMerge, - allowMergeCommit, - allowSquashMerge, - squashMergeCommitTitle, - squashMergeCommitMessage, - allowRebaseMerge, - allowAutoMerge, - access, - collaborators, - hasProjects, - hasWiki, - hasIssues, - topics, - repoVariables, - secrets, - oidcCustomization, - customProperties, - subscribe, - ctx.logger, - ); + const remoteUrl = await ctx.checkpoint({ + key: `create.repo.and.topics.${owner}.${repo}`, + fn: async () => { + const newRepo = await createGithubRepoWithCollaboratorsAndTopics( + client, + repo, + owner, + repoVisibility, + description, + homepage, + deleteBranchOnMerge, + allowMergeCommit, + allowSquashMerge, + squashMergeCommitTitle, + squashMergeCommitMessage, + allowRebaseMerge, + allowAutoMerge, + access, + collaborators, + hasProjects, + hasWiki, + hasIssues, + topics, + repoVariables, + secrets, + oidcCustomization, + customProperties, + subscribe, + ctx.logger, + ); + return newRepo.clone_url; + }, + }); - ctx.output('remoteUrl', newRepo.clone_url); + ctx.output('remoteUrl', remoteUrl); }, }); }