diff --git a/.changeset/swift-boats-add.md b/.changeset/swift-boats-add.md new file mode 100644 index 0000000000..42682437b0 --- /dev/null +++ b/.changeset/swift-boats-add.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-github': patch +--- + +Made "publish:github" action idempotent diff --git a/plugins/scaffolder-backend-module-github/src/actions/github.ts b/plugins/scaffolder-backend-module-github/src/actions/github.ts index 6c47a2dade..02b1fbbe32 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/github.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/github.ts @@ -241,36 +241,43 @@ export function createPublishGithubAction(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, repoContentsUrl } = await ctx.checkpoint({ + key: `create.github.repo.${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, + ); - const remoteUrl = newRepo.clone_url; - const repoContentsUrl = `${newRepo.html_url}/blob/${defaultBranch}`; + return { + remoteUrl: newRepo.clone_url, + repoContentsUrl: `${newRepo.html_url}/blob/${defaultBranch}`, + }; + }, + }); const commitResult = await initRepoPushAndProtect( remoteUrl,