From d6deb5e440afb16aab5579dabb5d304a3527a83b Mon Sep 17 00:00:00 2001 From: Nicolas Arnold Date: Fri, 25 Feb 2022 13:04:57 +0000 Subject: [PATCH 1/3] Set timeout for scaffolder octokit client If a client fails to contact github (or the network connectivity is bad), there is no reasonible timeout for the Octokit client. This change here adds a default timeout of 60 seconds Here is a link to the octokit type definition: https://github.com/octokit/types.ts/blob/master/src/RequestRequestOptions.ts Signed-off-by: Nicolas Arnold --- .changeset/khaki-socks-wash.md | 5 +++++ .../src/scaffolder/actions/builtin/github/helpers.ts | 7 +++++++ 2 files changed, 12 insertions(+) create mode 100644 .changeset/khaki-socks-wash.md diff --git a/.changeset/khaki-socks-wash.md b/.changeset/khaki-socks-wash.md new file mode 100644 index 0000000000..241ac75be3 --- /dev/null +++ b/.changeset/khaki-socks-wash.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Set timeout for scaffolder octokit client diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts index c310389488..8354d50471 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts @@ -22,6 +22,8 @@ import { import { OctokitOptions } from '@octokit/core/dist-types/types'; import { parseRepoUrl } from '../publish/util'; +const SECOND = 1000; + export async function getOctokitOptions(options: { integrations: ScmIntegrationRegistry; credentialsProvider?: GithubCredentialsProvider; @@ -30,6 +32,10 @@ export async function getOctokitOptions(options: { }): Promise { const { integrations, credentialsProvider, repoUrl, token } = options; const { owner, repo, host } = parseRepoUrl(repoUrl, integrations); + const requestOptions = { + // set timeout to 60 seconds + timeout: 60 * SECOND, + }; if (!owner) { throw new InputError(`No owner provided for repo ${repoUrl}`); @@ -47,6 +53,7 @@ export async function getOctokitOptions(options: { auth: token, baseUrl: integrationConfig.apiBaseUrl, previews: ['nebula-preview'], + request: requestOptions, }; } From 1f0fc6db697bff67be640da71d4bd031987242a5 Mon Sep 17 00:00:00 2001 From: Nicolas Arnold Date: Fri, 25 Feb 2022 13:56:48 +0000 Subject: [PATCH 2/3] Changing the timeout value to 60_000 Signed-off-by: Nicolas Arnold --- .../src/scaffolder/actions/builtin/github/helpers.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts index 8354d50471..2affcb5a45 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts @@ -22,8 +22,6 @@ import { import { OctokitOptions } from '@octokit/core/dist-types/types'; import { parseRepoUrl } from '../publish/util'; -const SECOND = 1000; - export async function getOctokitOptions(options: { integrations: ScmIntegrationRegistry; credentialsProvider?: GithubCredentialsProvider; @@ -34,7 +32,7 @@ export async function getOctokitOptions(options: { const { owner, repo, host } = parseRepoUrl(repoUrl, integrations); const requestOptions = { // set timeout to 60 seconds - timeout: 60 * SECOND, + timeout: 60_000, }; if (!owner) { From 2974c561686135cde454205fef363a5d5cde09b7 Mon Sep 17 00:00:00 2001 From: Nicolas Arnold Date: Fri, 25 Feb 2022 14:03:17 +0000 Subject: [PATCH 3/3] Set timeout as const variable per comments Signed-off-by: Nicolas Arnold --- .../src/scaffolder/actions/builtin/github/helpers.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts index 2affcb5a45..29997e5843 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts @@ -22,6 +22,8 @@ import { import { OctokitOptions } from '@octokit/core/dist-types/types'; import { parseRepoUrl } from '../publish/util'; +const DEFAULT_TIMEOUT_MS = 60_000; + export async function getOctokitOptions(options: { integrations: ScmIntegrationRegistry; credentialsProvider?: GithubCredentialsProvider; @@ -30,9 +32,10 @@ export async function getOctokitOptions(options: { }): Promise { const { integrations, credentialsProvider, repoUrl, token } = options; const { owner, repo, host } = parseRepoUrl(repoUrl, integrations); + const requestOptions = { // set timeout to 60 seconds - timeout: 60_000, + timeout: DEFAULT_TIMEOUT_MS, }; if (!owner) {