From 8182a599fa2ecfa91f576ab63da261736e99028e Mon Sep 17 00:00:00 2001 From: Bogdan Nechyporenko Date: Fri, 14 Mar 2025 21:30:29 +0100 Subject: [PATCH] Made "github:webhook" action idempotent Signed-off-by: Bogdan Nechyporenko --- .changeset/pretty-bobcats-design.md | 5 ++++ .../src/actions/githubWebhook.ts | 27 ++++++++++++------- 2 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 .changeset/pretty-bobcats-design.md diff --git a/.changeset/pretty-bobcats-design.md b/.changeset/pretty-bobcats-design.md new file mode 100644 index 0000000000..1d16c6c63c --- /dev/null +++ b/.changeset/pretty-bobcats-design.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-github': patch +--- + +Made "github:webhook" action idempotent diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubWebhook.ts b/plugins/scaffolder-backend-module-github/src/actions/githubWebhook.ts index 50ae7cd9b8..39a659cd0a 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/githubWebhook.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/githubWebhook.ts @@ -168,18 +168,25 @@ export function createGithubWebhookAction(options: { try { const insecure_ssl = insecureSsl ? '1' : '0'; - await client.rest.repos.createWebhook({ - owner, - repo, - config: { - url: webhookUrl, - content_type: contentType, - secret: webhookSecret, - insecure_ssl, + + await ctx.checkpoint({ + key: `create.webhhook.${owner}.${repo}.${webhookUrl}`, + fn: async () => { + await client.rest.repos.createWebhook({ + owner, + repo, + config: { + url: webhookUrl, + content_type: contentType, + secret: webhookSecret, + insecure_ssl, + }, + events, + active, + }); }, - events, - active, }); + ctx.logger.info(`Webhook '${webhookUrl}' created successfully`); } catch (e) { assertError(e);