renovate 42.26.0 → 42.26.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/util/exec/index.js
CHANGED
|
@@ -103,6 +103,10 @@ async function prepareRawExec(cmd, opts) {
|
|
|
103
103
|
...hermitEnvVars,
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
|
+
if (global_1.GlobalConfig.get('binarySource') === 'global' &&
|
|
107
|
+
opts.toolConstraints?.length) {
|
|
108
|
+
logger_1.logger.once.debug({ toolConstraints: opts.toolConstraints }, 'Ignoring tool contraints because of `binarySource=global`');
|
|
109
|
+
}
|
|
106
110
|
return { rawCommands, rawOptions };
|
|
107
111
|
}
|
|
108
112
|
async function exec(cmd, opts = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/util/exec/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../config/global';\nimport { TEMPORARY_ERROR } from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { getCustomEnv, getUserEnv } from '../env';\nimport { rawExec } from './common';\nimport { generateInstallCommands, isDynamicInstall } from './containerbase';\nimport {\n generateDockerCommand,\n removeDockerContainer,\n sideCarImage,\n} from './docker';\nimport { getHermitEnvs, isHermit } from './hermit';\nimport type {\n DockerOptions,\n ExecOptions,\n ExecResult,\n ExtraEnv,\n Opt,\n RawExecOptions,\n} from './types';\nimport { getChildEnv } from './utils';\n\nfunction dockerEnvVars(extraEnv: ExtraEnv, childEnv: ExtraEnv): string[] {\n const extraEnvKeys = Object.keys(extraEnv);\n return extraEnvKeys.filter((key) => isNonEmptyString(childEnv[key]));\n}\n\nfunction getCwd({ cwd, cwdFile }: ExecOptions): string | undefined {\n const defaultCwd = GlobalConfig.get('localDir');\n const paramCwd = cwdFile\n ? upath.join(defaultCwd, upath.dirname(cwdFile))\n : cwd;\n return paramCwd ?? defaultCwd;\n}\n\nfunction getRawExecOptions(opts: ExecOptions): RawExecOptions {\n const defaultExecutionTimeout = GlobalConfig.get('executionTimeout');\n const childEnv = getChildEnv(opts);\n const cwd = getCwd(opts);\n const rawExecOptions: RawExecOptions = {\n cwd,\n encoding: 'utf-8',\n env: childEnv,\n maxBuffer: opts.maxBuffer,\n timeout: opts.timeout,\n };\n // Set default timeout config.executionTimeout if specified; othrwise to 15 minutes\n if (!rawExecOptions.timeout) {\n if (defaultExecutionTimeout) {\n rawExecOptions.timeout = defaultExecutionTimeout * 60 * 1000;\n } else {\n rawExecOptions.timeout = 15 * 60 * 1000;\n }\n }\n\n // Set default max buffer size to 10MB\n rawExecOptions.maxBuffer = rawExecOptions.maxBuffer ?? 10 * 1024 * 1024;\n\n if (opts.ignoreStdout) {\n rawExecOptions.stdio = ['pipe', 'ignore', 'pipe'];\n }\n\n return rawExecOptions;\n}\n\nfunction isDocker(docker: Opt<DockerOptions>): docker is DockerOptions {\n return GlobalConfig.get('binarySource') === 'docker' && !!docker;\n}\n\ninterface RawExecArguments {\n rawCommands: string[];\n rawOptions: RawExecOptions;\n}\n\nasync function prepareRawExec(\n cmd: string | string[],\n opts: ExecOptions,\n): Promise<RawExecArguments> {\n const { docker } = opts;\n const preCommands = opts.preCommands ?? [];\n const customEnvVariables = getCustomEnv();\n const userConfiguredEnv = getUserEnv();\n const { containerbaseDir, binarySource } = GlobalConfig.get();\n\n if (binarySource === 'docker' || binarySource === 'install') {\n logger.debug(`Setting CONTAINERBASE_CACHE_DIR to ${containerbaseDir!}`);\n opts.env ??= {};\n opts.env.CONTAINERBASE_CACHE_DIR = containerbaseDir;\n }\n\n const rawOptions = getRawExecOptions(opts);\n\n let rawCommands = typeof cmd === 'string' ? [cmd] : cmd;\n\n if (isDocker(docker)) {\n logger.debug({ image: sideCarImage }, 'Using docker to execute');\n const extraEnv = {\n ...opts.extraEnv,\n ...customEnvVariables,\n ...userConfiguredEnv,\n };\n const childEnv = getChildEnv(opts);\n const envVars = [\n ...dockerEnvVars(extraEnv, childEnv),\n 'CONTAINERBASE_CACHE_DIR',\n ];\n const cwd = getCwd(opts);\n const dockerOptions: DockerOptions = { ...docker, cwd, envVars };\n const dockerCommand = await generateDockerCommand(\n rawCommands,\n [\n ...(await generateInstallCommands(opts.toolConstraints)),\n ...preCommands,\n ],\n dockerOptions,\n );\n rawCommands = [dockerCommand];\n } else if (isDynamicInstall(opts.toolConstraints)) {\n logger.debug('Using containerbase dynamic installs');\n rawCommands = [\n ...(await generateInstallCommands(opts.toolConstraints)),\n ...preCommands,\n ...rawCommands,\n ];\n } else if (isHermit()) {\n const hermitEnvVars = await getHermitEnvs(rawOptions);\n logger.debug(\n { hermitEnvVars },\n 'merging hermit environment variables into the execution options',\n );\n rawOptions.env = {\n ...rawOptions.env,\n ...hermitEnvVars,\n };\n }\n\n return { rawCommands, rawOptions };\n}\n\nexport async function exec(\n cmd: string | string[],\n opts: ExecOptions = {},\n): Promise<ExecResult> {\n const { docker } = opts;\n const dockerChildPrefix = GlobalConfig.get('dockerChildPrefix', 'renovate_');\n\n const { rawCommands, rawOptions } = await prepareRawExec(cmd, opts);\n const useDocker = isDocker(docker);\n\n let res: ExecResult = { stdout: '', stderr: '' };\n for (const rawCmd of rawCommands) {\n const startTime = Date.now();\n if (useDocker) {\n await removeDockerContainer(sideCarImage, dockerChildPrefix);\n }\n logger.debug({ command: rawCmd }, 'Executing command');\n logger.trace({ commandOptions: rawOptions }, 'Command options');\n try {\n res = await rawExec(rawCmd, rawOptions);\n } catch (err) {\n const durationMs = Math.round(Date.now() - startTime);\n logger.debug({ err, durationMs }, 'rawExec err');\n if (useDocker) {\n await removeDockerContainer(sideCarImage, dockerChildPrefix).catch(\n (removeErr: Error) => {\n const message: string = err.message;\n throw new Error(\n `Error: \"${removeErr.message}\" - Original Error: \"${message}\"`,\n );\n },\n );\n }\n if (err.signal === `SIGTERM`) {\n logger.debug(\n { err },\n 'exec interrupted by SIGTERM - run needs to be aborted',\n );\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n const durationMs = Math.round(Date.now() - startTime);\n logger.debug(\n {\n durationMs,\n stdout: res.stdout,\n stderr: res.stderr,\n },\n 'exec completed',\n );\n }\n\n return res;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/util/exec/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../config/global';\nimport { TEMPORARY_ERROR } from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { getCustomEnv, getUserEnv } from '../env';\nimport { rawExec } from './common';\nimport { generateInstallCommands, isDynamicInstall } from './containerbase';\nimport {\n generateDockerCommand,\n removeDockerContainer,\n sideCarImage,\n} from './docker';\nimport { getHermitEnvs, isHermit } from './hermit';\nimport type {\n DockerOptions,\n ExecOptions,\n ExecResult,\n ExtraEnv,\n Opt,\n RawExecOptions,\n} from './types';\nimport { getChildEnv } from './utils';\n\nfunction dockerEnvVars(extraEnv: ExtraEnv, childEnv: ExtraEnv): string[] {\n const extraEnvKeys = Object.keys(extraEnv);\n return extraEnvKeys.filter((key) => isNonEmptyString(childEnv[key]));\n}\n\nfunction getCwd({ cwd, cwdFile }: ExecOptions): string | undefined {\n const defaultCwd = GlobalConfig.get('localDir');\n const paramCwd = cwdFile\n ? upath.join(defaultCwd, upath.dirname(cwdFile))\n : cwd;\n return paramCwd ?? defaultCwd;\n}\n\nfunction getRawExecOptions(opts: ExecOptions): RawExecOptions {\n const defaultExecutionTimeout = GlobalConfig.get('executionTimeout');\n const childEnv = getChildEnv(opts);\n const cwd = getCwd(opts);\n const rawExecOptions: RawExecOptions = {\n cwd,\n encoding: 'utf-8',\n env: childEnv,\n maxBuffer: opts.maxBuffer,\n timeout: opts.timeout,\n };\n // Set default timeout config.executionTimeout if specified; othrwise to 15 minutes\n if (!rawExecOptions.timeout) {\n if (defaultExecutionTimeout) {\n rawExecOptions.timeout = defaultExecutionTimeout * 60 * 1000;\n } else {\n rawExecOptions.timeout = 15 * 60 * 1000;\n }\n }\n\n // Set default max buffer size to 10MB\n rawExecOptions.maxBuffer = rawExecOptions.maxBuffer ?? 10 * 1024 * 1024;\n\n if (opts.ignoreStdout) {\n rawExecOptions.stdio = ['pipe', 'ignore', 'pipe'];\n }\n\n return rawExecOptions;\n}\n\nfunction isDocker(docker: Opt<DockerOptions>): docker is DockerOptions {\n return GlobalConfig.get('binarySource') === 'docker' && !!docker;\n}\n\ninterface RawExecArguments {\n rawCommands: string[];\n rawOptions: RawExecOptions;\n}\n\nasync function prepareRawExec(\n cmd: string | string[],\n opts: ExecOptions,\n): Promise<RawExecArguments> {\n const { docker } = opts;\n const preCommands = opts.preCommands ?? [];\n const customEnvVariables = getCustomEnv();\n const userConfiguredEnv = getUserEnv();\n const { containerbaseDir, binarySource } = GlobalConfig.get();\n\n if (binarySource === 'docker' || binarySource === 'install') {\n logger.debug(`Setting CONTAINERBASE_CACHE_DIR to ${containerbaseDir!}`);\n opts.env ??= {};\n opts.env.CONTAINERBASE_CACHE_DIR = containerbaseDir;\n }\n\n const rawOptions = getRawExecOptions(opts);\n\n let rawCommands = typeof cmd === 'string' ? [cmd] : cmd;\n\n if (isDocker(docker)) {\n logger.debug({ image: sideCarImage }, 'Using docker to execute');\n const extraEnv = {\n ...opts.extraEnv,\n ...customEnvVariables,\n ...userConfiguredEnv,\n };\n const childEnv = getChildEnv(opts);\n const envVars = [\n ...dockerEnvVars(extraEnv, childEnv),\n 'CONTAINERBASE_CACHE_DIR',\n ];\n const cwd = getCwd(opts);\n const dockerOptions: DockerOptions = { ...docker, cwd, envVars };\n const dockerCommand = await generateDockerCommand(\n rawCommands,\n [\n ...(await generateInstallCommands(opts.toolConstraints)),\n ...preCommands,\n ],\n dockerOptions,\n );\n rawCommands = [dockerCommand];\n } else if (isDynamicInstall(opts.toolConstraints)) {\n logger.debug('Using containerbase dynamic installs');\n rawCommands = [\n ...(await generateInstallCommands(opts.toolConstraints)),\n ...preCommands,\n ...rawCommands,\n ];\n } else if (isHermit()) {\n const hermitEnvVars = await getHermitEnvs(rawOptions);\n logger.debug(\n { hermitEnvVars },\n 'merging hermit environment variables into the execution options',\n );\n rawOptions.env = {\n ...rawOptions.env,\n ...hermitEnvVars,\n };\n }\n\n if (\n GlobalConfig.get('binarySource') === 'global' &&\n opts.toolConstraints?.length\n ) {\n logger.once.debug(\n { toolConstraints: opts.toolConstraints },\n 'Ignoring tool contraints because of `binarySource=global`',\n );\n }\n\n return { rawCommands, rawOptions };\n}\n\nexport async function exec(\n cmd: string | string[],\n opts: ExecOptions = {},\n): Promise<ExecResult> {\n const { docker } = opts;\n const dockerChildPrefix = GlobalConfig.get('dockerChildPrefix', 'renovate_');\n\n const { rawCommands, rawOptions } = await prepareRawExec(cmd, opts);\n const useDocker = isDocker(docker);\n\n let res: ExecResult = { stdout: '', stderr: '' };\n for (const rawCmd of rawCommands) {\n const startTime = Date.now();\n if (useDocker) {\n await removeDockerContainer(sideCarImage, dockerChildPrefix);\n }\n logger.debug({ command: rawCmd }, 'Executing command');\n logger.trace({ commandOptions: rawOptions }, 'Command options');\n try {\n res = await rawExec(rawCmd, rawOptions);\n } catch (err) {\n const durationMs = Math.round(Date.now() - startTime);\n logger.debug({ err, durationMs }, 'rawExec err');\n if (useDocker) {\n await removeDockerContainer(sideCarImage, dockerChildPrefix).catch(\n (removeErr: Error) => {\n const message: string = err.message;\n throw new Error(\n `Error: \"${removeErr.message}\" - Original Error: \"${message}\"`,\n );\n },\n );\n }\n if (err.signal === `SIGTERM`) {\n logger.debug(\n { err },\n 'exec interrupted by SIGTERM - run needs to be aborted',\n );\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n const durationMs = Math.round(Date.now() - startTime);\n logger.debug(\n {\n durationMs,\n stdout: res.stdout,\n stderr: res.stderr,\n },\n 'exec completed',\n );\n }\n\n return res;\n}\n"]}
|
package/dist/util/http/github.js
CHANGED
|
@@ -9,6 +9,7 @@ const logger_1 = require("../../logger");
|
|
|
9
9
|
const external_host_error_1 = require("../../types/errors/external-host-error");
|
|
10
10
|
const repository_1 = require("../cache/repository");
|
|
11
11
|
const env_1 = require("../env");
|
|
12
|
+
const hostRules = tslib_1.__importStar(require("../host-rules"));
|
|
12
13
|
const mask_1 = require("../mask");
|
|
13
14
|
const p = tslib_1.__importStar(require("../promises"));
|
|
14
15
|
const range_1 = require("../range");
|
|
@@ -61,6 +62,21 @@ function handleGotError(err, url, opts) {
|
|
|
61
62
|
}
|
|
62
63
|
if (err.statusCode === 403 && message.includes('rate limit exceeded')) {
|
|
63
64
|
logger_1.logger.debug({ err }, 'GitHub failure: rate limit');
|
|
65
|
+
const parsed = (0, url_1.parseUrl)(baseUrl);
|
|
66
|
+
const rule = hostRules.find({ url: baseUrl });
|
|
67
|
+
if (rule.token || rule.password) {
|
|
68
|
+
logger_1.logger.once.warn('Rate limit exceeded for api.github.com, even though we are authenticated');
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
if (parsed?.hostname === 'api.github.com') {
|
|
72
|
+
logger_1.logger.once.warn({
|
|
73
|
+
documentationUrl: 'https://docs.renovatebot.com/getting-started/running/#githubcom-token-for-changelogs-and-tools',
|
|
74
|
+
}, `Rate limit exceeded for ${parsed.host}, as no hostRules set for this host. Please set a GITHUB_COM_TOKEN`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
logger_1.logger.once.warn(`Rate limit exceeded for ${parsed.host}, as no hostRules set for this host`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
64
80
|
return new Error(error_messages_1.PLATFORM_RATE_LIMIT_EXCEEDED);
|
|
65
81
|
}
|
|
66
82
|
if (err.statusCode === 403 &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../lib/util/http/github.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isArray,\n isNonEmptyObject,\n isNullOrUndefined,\n isPlainObject,\n} from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport {\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport { getCache } from '../cache/repository';\nimport { getEnv } from '../env';\nimport { maskToken } from '../mask';\nimport * as p from '../promises';\nimport { range } from '../range';\nimport { regEx } from '../regex';\nimport { joinUrlParts, parseLinkHeader, parseUrl } from '../url';\nimport { findMatchingRule } from './host-rules';\nimport {\n HttpBase,\n type InternalHttpOptions,\n type InternalJsonUnsafeOptions,\n} from './http';\nimport type { GotLegacyError } from './legacy';\nimport type {\n GraphqlOptions,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n} from './types';\n\nconst githubBaseUrl = 'https://api.github.com/';\nlet baseUrl = githubBaseUrl;\nexport const setBaseUrl = (url: string): void => {\n baseUrl = url;\n};\n\nexport interface GithubBaseHttpOptions extends HttpOptions {\n repository?: string;\n}\n\nexport interface GithubHttpOptions extends GithubBaseHttpOptions {\n paginate?: boolean | string;\n paginationField?: string;\n pageLimit?: number;\n}\n\ninterface GithubGraphqlRepoData<T = unknown> {\n repository?: T;\n}\n\nexport type GithubGraphqlResponse<T = unknown> =\n | {\n data: T;\n errors?: never;\n }\n | {\n data?: never;\n errors: {\n type?: string;\n message: string;\n }[];\n };\n\nfunction handleGotError(\n err: GotLegacyError,\n url: string | URL,\n opts: GithubBaseHttpOptions,\n): Error {\n const path = url.toString();\n let message = err.message || '';\n const body = err.response?.body;\n if (isPlainObject(body) && 'message' in body) {\n message = String(body.message);\n }\n if (\n err.code === 'ERR_HTTP2_STREAM_ERROR' ||\n err.code === 'ENOTFOUND' ||\n err.code === 'ETIMEDOUT' ||\n err.code === 'EAI_AGAIN' ||\n err.code === 'ECONNRESET'\n ) {\n logger.debug({ err }, 'GitHub failure: RequestError');\n return new ExternalHostError(err, 'github');\n }\n if (err.name === 'ParseError') {\n logger.debug({ err }, '');\n return new ExternalHostError(err, 'github');\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug({ err }, 'GitHub failure: 5xx');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have triggered an abuse detection mechanism')\n ) {\n logger.debug({ err }, 'GitHub failure: abuse detection');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have exceeded a secondary rate limit')\n ) {\n logger.warn({ err }, 'GitHub failure: secondary rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (err.statusCode === 403 && message.includes('Upgrade to GitHub Pro')) {\n logger.debug(`Endpoint: ${path}, needs paid GitHub plan`);\n return err;\n }\n if (err.statusCode === 403 && message.includes('rate limit exceeded')) {\n logger.debug({ err }, 'GitHub failure: rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('Resource not accessible by integration')\n ) {\n logger.debug(\n { err },\n 'GitHub failure: Resource not accessible by integration',\n );\n return new Error(PLATFORM_INTEGRATION_UNAUTHORIZED);\n }\n if (err.statusCode === 401) {\n // Warn once for github.com token if unauthorized\n const hostname = parseUrl(url)?.hostname;\n if (hostname === 'github.com' || hostname === 'api.github.com') {\n logger.once.warn('github.com token 401 unauthorized');\n }\n if (message.includes('Bad credentials')) {\n const rateLimit = err.headers?.['x-ratelimit-limit'] ?? -1;\n logger.debug(\n {\n token: maskToken(opts.token),\n err,\n },\n 'GitHub failure: Bad credentials',\n );\n if (rateLimit === '60') {\n return new ExternalHostError(err, 'github');\n }\n return new Error(PLATFORM_BAD_CREDENTIALS);\n }\n }\n if (err.statusCode === 422) {\n if (\n message.includes('Review cannot be requested from pull request author')\n ) {\n return err;\n } else if (err.body?.errors?.find((e: any) => e.field === 'milestone')) {\n return err;\n } else if (err.body?.errors?.find((e: any) => e.code === 'invalid')) {\n logger.debug({ err }, 'Received invalid response - aborting');\n return new Error(REPOSITORY_CHANGED);\n } else if (\n err.body?.errors?.find((e: any) =>\n e.message?.startsWith('A pull request already exists'),\n )\n ) {\n return err;\n }\n logger.debug({ err }, '422 Error thrown from GitHub');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 410 &&\n err.body?.message === 'Issues are disabled for this repo'\n ) {\n return err;\n }\n return err;\n}\n\ninterface GraphqlPaginatedContent<T = unknown> {\n nodes: T[];\n edges: T[];\n pageInfo: { hasNextPage: boolean; endCursor: string };\n}\n\nfunction constructAcceptString(input?: any): string {\n const defaultAccept = 'application/vnd.github.v3+json';\n const acceptStrings =\n typeof input === 'string' ? input.split(regEx(/\\s*,\\s*/)) : [];\n\n // TODO: regression of #6736\n if (\n !acceptStrings.some((x) => x === defaultAccept) &&\n (!acceptStrings.some((x) => x.startsWith('application/vnd.github.')) ||\n acceptStrings.length < 2)\n ) {\n acceptStrings.push(defaultAccept);\n }\n return acceptStrings.join(', ');\n}\n\nconst MAX_GRAPHQL_PAGE_SIZE = 100;\n\ninterface GraphqlPageCacheItem {\n pageLastResizedAt: string;\n pageSize: number;\n}\n\nexport type GraphqlPageCache = Record<string, GraphqlPageCacheItem>;\n\nfunction getGraphqlPageSize(\n fieldName: string,\n defaultPageSize = MAX_GRAPHQL_PAGE_SIZE,\n): number {\n const cache = getCache();\n const graphqlPageCache = cache?.platform?.github\n ?.graphqlPageCache as GraphqlPageCache;\n const cachedRecord = graphqlPageCache?.[fieldName];\n\n if (graphqlPageCache && cachedRecord) {\n logger.debug(\n { fieldName, ...cachedRecord },\n 'GraphQL page size: found cached value',\n );\n\n const oldPageSize = cachedRecord.pageSize;\n\n const now = DateTime.local();\n const then = DateTime.fromISO(cachedRecord.pageLastResizedAt);\n const expiry = then.plus({ hours: 24 });\n if (now > expiry) {\n const newPageSize = Math.min(oldPageSize * 2, MAX_GRAPHQL_PAGE_SIZE);\n if (newPageSize < MAX_GRAPHQL_PAGE_SIZE) {\n const timestamp = now.toISO();\n\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp },\n 'GraphQL page size: expanding',\n );\n\n cachedRecord.pageLastResizedAt = timestamp;\n cachedRecord.pageSize = newPageSize;\n } else {\n logger.debug(\n { fieldName, oldPageSize, newPageSize },\n 'GraphQL page size: expanded to default page size',\n );\n\n delete graphqlPageCache[fieldName];\n }\n\n return newPageSize;\n }\n\n return oldPageSize;\n }\n\n return defaultPageSize;\n}\n\nfunction setGraphqlPageSize(fieldName: string, newPageSize: number): void {\n const oldPageSize = getGraphqlPageSize(fieldName);\n if (newPageSize !== oldPageSize) {\n const now = DateTime.local();\n const pageLastResizedAt = now.toISO();\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp: pageLastResizedAt },\n 'GraphQL page size: shrinking',\n );\n const cache = getCache();\n cache.platform ??= {};\n cache.platform.github ??= {};\n cache.platform.github.graphqlPageCache ??= {};\n const graphqlPageCache = cache.platform.github\n .graphqlPageCache as GraphqlPageCache;\n graphqlPageCache[fieldName] = {\n pageLastResizedAt,\n pageSize: newPageSize,\n };\n }\n}\n\nfunction replaceUrlBase(url: URL, baseUrl: string): URL {\n const relativeUrl = `${url.pathname}${url.search}`;\n return new URL(relativeUrl, baseUrl);\n}\n\nexport class GithubHttp extends HttpBase<GithubHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(hostType = 'github', options?: HttpOptions) {\n super(hostType, options);\n }\n\n protected override processOptions(\n url: URL,\n opts: InternalHttpOptions & GithubBaseHttpOptions,\n ): void {\n if (!opts.token) {\n const authUrl = new URL(url);\n\n if (opts.repository) {\n // set authUrl to https://api.github.com/repos/org/repo or https://gihub.domain.com/api/v3/repos/org/repo\n authUrl.hash = '';\n authUrl.search = '';\n authUrl.pathname = joinUrlParts(\n authUrl.pathname.startsWith('/api/v3') ? '/api/v3' : '',\n 'repos',\n `${opts.repository}`,\n );\n }\n\n let readOnly = opts.readOnly;\n const { method = 'get' } = opts;\n if (\n readOnly === undefined &&\n ['get', 'head'].includes(method.toLowerCase())\n ) {\n readOnly = true;\n }\n const { token } = findMatchingRule(authUrl.toString(), {\n hostType: this.hostType,\n readOnly,\n });\n opts.token = token;\n }\n\n const accept = constructAcceptString(opts.headers?.accept);\n\n opts.headers = {\n ...opts.headers,\n accept,\n };\n }\n\n protected override handleError(\n url: string | URL,\n opts: HttpOptions,\n err: GotLegacyError,\n ): never {\n throw handleGotError(err, url, opts);\n }\n\n protected override async requestJsonUnsafe<T>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GithubHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const httpOptions = options.httpOptions ?? {};\n const resolvedUrl = this.resolveUrl(options.url, httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (httpOptions.paginate) {\n delete httpOptions.cacheProvider;\n httpOptions.memCache = false;\n // Check if result is paginated\n const pageLimit = httpOptions.pageLimit ?? 10;\n const linkHeader = parseLinkHeader(result?.headers?.link);\n const next = linkHeader?.next;\n const env = getEnv();\n if (next?.url && linkHeader?.last?.page) {\n let lastPage = parseInt(linkHeader.last.page);\n if (!env.RENOVATE_PAGINATE_ALL && httpOptions.paginate !== 'all') {\n lastPage = Math.min(pageLimit, lastPage);\n }\n const baseUrl = httpOptions.baseUrl ?? this.baseUrl;\n const parsedUrl = new URL(next.url, baseUrl);\n const rebasePagination =\n !!baseUrl &&\n !!env.RENOVATE_X_REBASE_PAGINATION_LINKS &&\n // Preserve github.com URLs for use cases like release notes\n parsedUrl.origin !== 'https://api.github.com';\n const firstPageUrl = rebasePagination\n ? replaceUrlBase(parsedUrl, baseUrl)\n : parsedUrl;\n const queue = [...range(2, lastPage)].map(\n (pageNumber) => (): Promise<HttpResponse<T>> => {\n // copy before modifying searchParams\n const nextUrl = new URL(firstPageUrl);\n nextUrl.searchParams.set('page', String(pageNumber));\n return super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n },\n );\n const pages = await p.all(queue);\n if (httpOptions.paginationField && isPlainObject(result.body)) {\n const paginatedResult = result.body[httpOptions.paginationField];\n if (isArray<T>(paginatedResult)) {\n for (const nextPage of pages) {\n if (isPlainObject(nextPage.body)) {\n const nextPageResults =\n nextPage.body[httpOptions.paginationField];\n if (isArray<T>(nextPageResults)) {\n paginatedResult.push(...nextPageResults);\n }\n }\n }\n }\n } else if (isArray<T>(result.body)) {\n for (const nextPage of pages) {\n if (isArray<T>(nextPage.body)) {\n result.body.push(...nextPage.body);\n }\n }\n }\n }\n }\n return result;\n }\n\n public async requestGraphql<T = unknown>(\n query: string,\n options: GraphqlOptions = {},\n ): Promise<GithubGraphqlResponse<T> | null> {\n const path = 'graphql';\n\n const { paginate, count = MAX_GRAPHQL_PAGE_SIZE, cursor = null } = options;\n let { variables } = options;\n if (paginate) {\n variables = {\n ...variables,\n count,\n cursor,\n };\n }\n const body = variables ? { query, variables } : { query };\n\n const opts: GithubBaseHttpOptions = {\n baseUrl: baseUrl.replace('/v3/', '/'), // GHE uses unversioned graphql path\n body,\n headers: { accept: options?.acceptHeader },\n readOnly: options.readOnly,\n };\n if (options.token) {\n opts.token = options.token;\n }\n logger.trace(`Performing Github GraphQL request`);\n\n try {\n const res = await this.postJson<GithubGraphqlResponse<T>>(path, opts);\n return res?.body;\n } catch (err) {\n logger.debug({ err, query, options }, 'Unexpected GraphQL Error');\n if (err instanceof ExternalHostError && count && count > 10) {\n logger.info('Reducing pagination count to workaround graphql errors');\n return null;\n }\n throw handleGotError(err, path, opts);\n }\n }\n\n async queryRepoField<T = Record<string, unknown>>(\n query: string,\n fieldName: string,\n options: GraphqlOptions = {},\n ): Promise<T[]> {\n const result: T[] = [];\n\n const { paginate = true } = options;\n\n let optimalCount: null | number = null;\n let count = getGraphqlPageSize(\n fieldName,\n options.count ?? MAX_GRAPHQL_PAGE_SIZE,\n );\n let limit = options.limit ?? 1000;\n let cursor: string | null = null;\n\n let isIterating = true;\n while (isIterating) {\n const res = await this.requestGraphql<GithubGraphqlRepoData<T>>(query, {\n ...options,\n count: Math.min(count, limit),\n cursor,\n paginate,\n });\n const repositoryData = res?.data?.repository;\n if (\n isNonEmptyObject(repositoryData) &&\n !isNullOrUndefined(repositoryData[fieldName])\n ) {\n optimalCount = count;\n\n const {\n nodes = [],\n edges = [],\n pageInfo,\n } = repositoryData[fieldName] as GraphqlPaginatedContent<T>;\n result.push(...nodes);\n result.push(...edges);\n\n limit = Math.max(0, limit - nodes.length - edges.length);\n\n if (limit === 0) {\n isIterating = false;\n } else if (paginate && pageInfo) {\n const { hasNextPage, endCursor } = pageInfo;\n if (hasNextPage && endCursor) {\n cursor = endCursor;\n } else {\n isIterating = false;\n }\n }\n } else {\n count = Math.floor(count / 2);\n if (count === 0) {\n logger.warn({ query, options, res }, 'Error fetching GraphQL nodes');\n isIterating = false;\n }\n }\n\n if (!paginate) {\n isIterating = false;\n }\n }\n\n if (optimalCount && optimalCount < MAX_GRAPHQL_PAGE_SIZE) {\n setGraphqlPageSize(fieldName, optimalCount);\n }\n\n return result;\n }\n\n /**\n * Get the raw text file from a URL.\n * Only use this method to fetch text files.\n *\n * @param url Full API URL, contents path or path inside the repository to the file\n * @param options\n *\n * @example url = 'https://api.github.com/repos/renovatebot/renovate/contents/package.json'\n * @example url = 'renovatebot/renovate/contents/package.json'\n * @example url = 'package.json' & options.repository = 'renovatebot/renovate'\n */\n public async getRawTextFile(\n url: string,\n options: InternalHttpOptions & GithubBaseHttpOptions = {},\n ): Promise<HttpResponse> {\n const newOptions: InternalHttpOptions & GithubBaseHttpOptions = {\n ...options,\n headers: {\n accept: 'application/vnd.github.raw+json',\n },\n };\n\n let newURL = url;\n const httpRegex = regEx(/^https?:\\/\\//);\n if (options.repository && !httpRegex.test(options.repository)) {\n newURL = joinUrlParts(options.repository, 'contents', url);\n }\n\n return await this.getText(newURL, newOptions);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../lib/util/http/github.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isArray,\n isNonEmptyObject,\n isNullOrUndefined,\n isPlainObject,\n} from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport {\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport { getCache } from '../cache/repository';\nimport { getEnv } from '../env';\nimport * as hostRules from '../host-rules';\nimport { maskToken } from '../mask';\nimport * as p from '../promises';\nimport { range } from '../range';\nimport { regEx } from '../regex';\nimport { joinUrlParts, parseLinkHeader, parseUrl } from '../url';\nimport { findMatchingRule } from './host-rules';\nimport {\n HttpBase,\n type InternalHttpOptions,\n type InternalJsonUnsafeOptions,\n} from './http';\nimport type { GotLegacyError } from './legacy';\nimport type {\n GraphqlOptions,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n} from './types';\n\nconst githubBaseUrl = 'https://api.github.com/';\nlet baseUrl = githubBaseUrl;\nexport const setBaseUrl = (url: string): void => {\n baseUrl = url;\n};\n\nexport interface GithubBaseHttpOptions extends HttpOptions {\n repository?: string;\n}\n\nexport interface GithubHttpOptions extends GithubBaseHttpOptions {\n paginate?: boolean | string;\n paginationField?: string;\n pageLimit?: number;\n}\n\ninterface GithubGraphqlRepoData<T = unknown> {\n repository?: T;\n}\n\nexport type GithubGraphqlResponse<T = unknown> =\n | {\n data: T;\n errors?: never;\n }\n | {\n data?: never;\n errors: {\n type?: string;\n message: string;\n }[];\n };\n\nfunction handleGotError(\n err: GotLegacyError,\n url: string | URL,\n opts: GithubBaseHttpOptions,\n): Error {\n const path = url.toString();\n let message = err.message || '';\n const body = err.response?.body;\n if (isPlainObject(body) && 'message' in body) {\n message = String(body.message);\n }\n if (\n err.code === 'ERR_HTTP2_STREAM_ERROR' ||\n err.code === 'ENOTFOUND' ||\n err.code === 'ETIMEDOUT' ||\n err.code === 'EAI_AGAIN' ||\n err.code === 'ECONNRESET'\n ) {\n logger.debug({ err }, 'GitHub failure: RequestError');\n return new ExternalHostError(err, 'github');\n }\n if (err.name === 'ParseError') {\n logger.debug({ err }, '');\n return new ExternalHostError(err, 'github');\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug({ err }, 'GitHub failure: 5xx');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have triggered an abuse detection mechanism')\n ) {\n logger.debug({ err }, 'GitHub failure: abuse detection');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have exceeded a secondary rate limit')\n ) {\n logger.warn({ err }, 'GitHub failure: secondary rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (err.statusCode === 403 && message.includes('Upgrade to GitHub Pro')) {\n logger.debug(`Endpoint: ${path}, needs paid GitHub plan`);\n return err;\n }\n if (err.statusCode === 403 && message.includes('rate limit exceeded')) {\n logger.debug({ err }, 'GitHub failure: rate limit');\n\n const parsed = parseUrl(baseUrl);\n\n const rule = hostRules.find({ url: baseUrl });\n if (rule.token || rule.password) {\n logger.once.warn(\n 'Rate limit exceeded for api.github.com, even though we are authenticated',\n );\n } else {\n if (parsed?.hostname === 'api.github.com') {\n logger.once.warn(\n {\n documentationUrl:\n 'https://docs.renovatebot.com/getting-started/running/#githubcom-token-for-changelogs-and-tools',\n },\n `Rate limit exceeded for ${parsed.host}, as no hostRules set for this host. Please set a GITHUB_COM_TOKEN`,\n );\n } else {\n logger.once.warn(\n `Rate limit exceeded for ${parsed!.host}, as no hostRules set for this host`,\n );\n }\n }\n\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('Resource not accessible by integration')\n ) {\n logger.debug(\n { err },\n 'GitHub failure: Resource not accessible by integration',\n );\n return new Error(PLATFORM_INTEGRATION_UNAUTHORIZED);\n }\n if (err.statusCode === 401) {\n // Warn once for github.com token if unauthorized\n const hostname = parseUrl(url)?.hostname;\n if (hostname === 'github.com' || hostname === 'api.github.com') {\n logger.once.warn('github.com token 401 unauthorized');\n }\n if (message.includes('Bad credentials')) {\n const rateLimit = err.headers?.['x-ratelimit-limit'] ?? -1;\n logger.debug(\n {\n token: maskToken(opts.token),\n err,\n },\n 'GitHub failure: Bad credentials',\n );\n if (rateLimit === '60') {\n return new ExternalHostError(err, 'github');\n }\n return new Error(PLATFORM_BAD_CREDENTIALS);\n }\n }\n if (err.statusCode === 422) {\n if (\n message.includes('Review cannot be requested from pull request author')\n ) {\n return err;\n } else if (err.body?.errors?.find((e: any) => e.field === 'milestone')) {\n return err;\n } else if (err.body?.errors?.find((e: any) => e.code === 'invalid')) {\n logger.debug({ err }, 'Received invalid response - aborting');\n return new Error(REPOSITORY_CHANGED);\n } else if (\n err.body?.errors?.find((e: any) =>\n e.message?.startsWith('A pull request already exists'),\n )\n ) {\n return err;\n }\n logger.debug({ err }, '422 Error thrown from GitHub');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 410 &&\n err.body?.message === 'Issues are disabled for this repo'\n ) {\n return err;\n }\n return err;\n}\n\ninterface GraphqlPaginatedContent<T = unknown> {\n nodes: T[];\n edges: T[];\n pageInfo: { hasNextPage: boolean; endCursor: string };\n}\n\nfunction constructAcceptString(input?: any): string {\n const defaultAccept = 'application/vnd.github.v3+json';\n const acceptStrings =\n typeof input === 'string' ? input.split(regEx(/\\s*,\\s*/)) : [];\n\n // TODO: regression of #6736\n if (\n !acceptStrings.some((x) => x === defaultAccept) &&\n (!acceptStrings.some((x) => x.startsWith('application/vnd.github.')) ||\n acceptStrings.length < 2)\n ) {\n acceptStrings.push(defaultAccept);\n }\n return acceptStrings.join(', ');\n}\n\nconst MAX_GRAPHQL_PAGE_SIZE = 100;\n\ninterface GraphqlPageCacheItem {\n pageLastResizedAt: string;\n pageSize: number;\n}\n\nexport type GraphqlPageCache = Record<string, GraphqlPageCacheItem>;\n\nfunction getGraphqlPageSize(\n fieldName: string,\n defaultPageSize = MAX_GRAPHQL_PAGE_SIZE,\n): number {\n const cache = getCache();\n const graphqlPageCache = cache?.platform?.github\n ?.graphqlPageCache as GraphqlPageCache;\n const cachedRecord = graphqlPageCache?.[fieldName];\n\n if (graphqlPageCache && cachedRecord) {\n logger.debug(\n { fieldName, ...cachedRecord },\n 'GraphQL page size: found cached value',\n );\n\n const oldPageSize = cachedRecord.pageSize;\n\n const now = DateTime.local();\n const then = DateTime.fromISO(cachedRecord.pageLastResizedAt);\n const expiry = then.plus({ hours: 24 });\n if (now > expiry) {\n const newPageSize = Math.min(oldPageSize * 2, MAX_GRAPHQL_PAGE_SIZE);\n if (newPageSize < MAX_GRAPHQL_PAGE_SIZE) {\n const timestamp = now.toISO();\n\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp },\n 'GraphQL page size: expanding',\n );\n\n cachedRecord.pageLastResizedAt = timestamp;\n cachedRecord.pageSize = newPageSize;\n } else {\n logger.debug(\n { fieldName, oldPageSize, newPageSize },\n 'GraphQL page size: expanded to default page size',\n );\n\n delete graphqlPageCache[fieldName];\n }\n\n return newPageSize;\n }\n\n return oldPageSize;\n }\n\n return defaultPageSize;\n}\n\nfunction setGraphqlPageSize(fieldName: string, newPageSize: number): void {\n const oldPageSize = getGraphqlPageSize(fieldName);\n if (newPageSize !== oldPageSize) {\n const now = DateTime.local();\n const pageLastResizedAt = now.toISO();\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp: pageLastResizedAt },\n 'GraphQL page size: shrinking',\n );\n const cache = getCache();\n cache.platform ??= {};\n cache.platform.github ??= {};\n cache.platform.github.graphqlPageCache ??= {};\n const graphqlPageCache = cache.platform.github\n .graphqlPageCache as GraphqlPageCache;\n graphqlPageCache[fieldName] = {\n pageLastResizedAt,\n pageSize: newPageSize,\n };\n }\n}\n\nfunction replaceUrlBase(url: URL, baseUrl: string): URL {\n const relativeUrl = `${url.pathname}${url.search}`;\n return new URL(relativeUrl, baseUrl);\n}\n\nexport class GithubHttp extends HttpBase<GithubHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(hostType = 'github', options?: HttpOptions) {\n super(hostType, options);\n }\n\n protected override processOptions(\n url: URL,\n opts: InternalHttpOptions & GithubBaseHttpOptions,\n ): void {\n if (!opts.token) {\n const authUrl = new URL(url);\n\n if (opts.repository) {\n // set authUrl to https://api.github.com/repos/org/repo or https://gihub.domain.com/api/v3/repos/org/repo\n authUrl.hash = '';\n authUrl.search = '';\n authUrl.pathname = joinUrlParts(\n authUrl.pathname.startsWith('/api/v3') ? '/api/v3' : '',\n 'repos',\n `${opts.repository}`,\n );\n }\n\n let readOnly = opts.readOnly;\n const { method = 'get' } = opts;\n if (\n readOnly === undefined &&\n ['get', 'head'].includes(method.toLowerCase())\n ) {\n readOnly = true;\n }\n const { token } = findMatchingRule(authUrl.toString(), {\n hostType: this.hostType,\n readOnly,\n });\n opts.token = token;\n }\n\n const accept = constructAcceptString(opts.headers?.accept);\n\n opts.headers = {\n ...opts.headers,\n accept,\n };\n }\n\n protected override handleError(\n url: string | URL,\n opts: HttpOptions,\n err: GotLegacyError,\n ): never {\n throw handleGotError(err, url, opts);\n }\n\n protected override async requestJsonUnsafe<T>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GithubHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const httpOptions = options.httpOptions ?? {};\n const resolvedUrl = this.resolveUrl(options.url, httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (httpOptions.paginate) {\n delete httpOptions.cacheProvider;\n httpOptions.memCache = false;\n // Check if result is paginated\n const pageLimit = httpOptions.pageLimit ?? 10;\n const linkHeader = parseLinkHeader(result?.headers?.link);\n const next = linkHeader?.next;\n const env = getEnv();\n if (next?.url && linkHeader?.last?.page) {\n let lastPage = parseInt(linkHeader.last.page);\n if (!env.RENOVATE_PAGINATE_ALL && httpOptions.paginate !== 'all') {\n lastPage = Math.min(pageLimit, lastPage);\n }\n const baseUrl = httpOptions.baseUrl ?? this.baseUrl;\n const parsedUrl = new URL(next.url, baseUrl);\n const rebasePagination =\n !!baseUrl &&\n !!env.RENOVATE_X_REBASE_PAGINATION_LINKS &&\n // Preserve github.com URLs for use cases like release notes\n parsedUrl.origin !== 'https://api.github.com';\n const firstPageUrl = rebasePagination\n ? replaceUrlBase(parsedUrl, baseUrl)\n : parsedUrl;\n const queue = [...range(2, lastPage)].map(\n (pageNumber) => (): Promise<HttpResponse<T>> => {\n // copy before modifying searchParams\n const nextUrl = new URL(firstPageUrl);\n nextUrl.searchParams.set('page', String(pageNumber));\n return super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n },\n );\n const pages = await p.all(queue);\n if (httpOptions.paginationField && isPlainObject(result.body)) {\n const paginatedResult = result.body[httpOptions.paginationField];\n if (isArray<T>(paginatedResult)) {\n for (const nextPage of pages) {\n if (isPlainObject(nextPage.body)) {\n const nextPageResults =\n nextPage.body[httpOptions.paginationField];\n if (isArray<T>(nextPageResults)) {\n paginatedResult.push(...nextPageResults);\n }\n }\n }\n }\n } else if (isArray<T>(result.body)) {\n for (const nextPage of pages) {\n if (isArray<T>(nextPage.body)) {\n result.body.push(...nextPage.body);\n }\n }\n }\n }\n }\n return result;\n }\n\n public async requestGraphql<T = unknown>(\n query: string,\n options: GraphqlOptions = {},\n ): Promise<GithubGraphqlResponse<T> | null> {\n const path = 'graphql';\n\n const { paginate, count = MAX_GRAPHQL_PAGE_SIZE, cursor = null } = options;\n let { variables } = options;\n if (paginate) {\n variables = {\n ...variables,\n count,\n cursor,\n };\n }\n const body = variables ? { query, variables } : { query };\n\n const opts: GithubBaseHttpOptions = {\n baseUrl: baseUrl.replace('/v3/', '/'), // GHE uses unversioned graphql path\n body,\n headers: { accept: options?.acceptHeader },\n readOnly: options.readOnly,\n };\n if (options.token) {\n opts.token = options.token;\n }\n logger.trace(`Performing Github GraphQL request`);\n\n try {\n const res = await this.postJson<GithubGraphqlResponse<T>>(path, opts);\n return res?.body;\n } catch (err) {\n logger.debug({ err, query, options }, 'Unexpected GraphQL Error');\n if (err instanceof ExternalHostError && count && count > 10) {\n logger.info('Reducing pagination count to workaround graphql errors');\n return null;\n }\n throw handleGotError(err, path, opts);\n }\n }\n\n async queryRepoField<T = Record<string, unknown>>(\n query: string,\n fieldName: string,\n options: GraphqlOptions = {},\n ): Promise<T[]> {\n const result: T[] = [];\n\n const { paginate = true } = options;\n\n let optimalCount: null | number = null;\n let count = getGraphqlPageSize(\n fieldName,\n options.count ?? MAX_GRAPHQL_PAGE_SIZE,\n );\n let limit = options.limit ?? 1000;\n let cursor: string | null = null;\n\n let isIterating = true;\n while (isIterating) {\n const res = await this.requestGraphql<GithubGraphqlRepoData<T>>(query, {\n ...options,\n count: Math.min(count, limit),\n cursor,\n paginate,\n });\n const repositoryData = res?.data?.repository;\n if (\n isNonEmptyObject(repositoryData) &&\n !isNullOrUndefined(repositoryData[fieldName])\n ) {\n optimalCount = count;\n\n const {\n nodes = [],\n edges = [],\n pageInfo,\n } = repositoryData[fieldName] as GraphqlPaginatedContent<T>;\n result.push(...nodes);\n result.push(...edges);\n\n limit = Math.max(0, limit - nodes.length - edges.length);\n\n if (limit === 0) {\n isIterating = false;\n } else if (paginate && pageInfo) {\n const { hasNextPage, endCursor } = pageInfo;\n if (hasNextPage && endCursor) {\n cursor = endCursor;\n } else {\n isIterating = false;\n }\n }\n } else {\n count = Math.floor(count / 2);\n if (count === 0) {\n logger.warn({ query, options, res }, 'Error fetching GraphQL nodes');\n isIterating = false;\n }\n }\n\n if (!paginate) {\n isIterating = false;\n }\n }\n\n if (optimalCount && optimalCount < MAX_GRAPHQL_PAGE_SIZE) {\n setGraphqlPageSize(fieldName, optimalCount);\n }\n\n return result;\n }\n\n /**\n * Get the raw text file from a URL.\n * Only use this method to fetch text files.\n *\n * @param url Full API URL, contents path or path inside the repository to the file\n * @param options\n *\n * @example url = 'https://api.github.com/repos/renovatebot/renovate/contents/package.json'\n * @example url = 'renovatebot/renovate/contents/package.json'\n * @example url = 'package.json' & options.repository = 'renovatebot/renovate'\n */\n public async getRawTextFile(\n url: string,\n options: InternalHttpOptions & GithubBaseHttpOptions = {},\n ): Promise<HttpResponse> {\n const newOptions: InternalHttpOptions & GithubBaseHttpOptions = {\n ...options,\n headers: {\n accept: 'application/vnd.github.raw+json',\n },\n };\n\n let newURL = url;\n const httpRegex = regEx(/^https?:\\/\\//);\n if (options.repository && !httpRegex.test(options.repository)) {\n newURL = joinUrlParts(options.repository, 'contents', url);\n }\n\n return await this.getText(newURL, newOptions);\n }\n}\n"]}
|
package/package.json
CHANGED
package/renovate-schema.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"title": "JSON schema for Renovate 42.26.
|
|
2
|
+
"title": "JSON schema for Renovate 42.26.2 config files (https://renovatebot.com/)",
|
|
3
3
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
-
"x-renovate-version": "42.26.
|
|
4
|
+
"x-renovate-version": "42.26.2",
|
|
5
5
|
"allowComments": true,
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|