renovate 42.14.2 → 42.14.4

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.
@@ -13,6 +13,7 @@ const fs_1 = require("../../../util/fs");
13
13
  const config_1 = require("../../../util/git/config");
14
14
  const hash_1 = require("../../../util/hash");
15
15
  const memory_http_cache_provider_1 = require("../../../util/http/cache/memory-http-cache-provider");
16
+ const mutex_1 = require("../../../util/mutex");
16
17
  const regex_1 = require("../../../util/regex");
17
18
  const url_1 = require("../../../util/url");
18
19
  const cargoVersioning = tslib_1.__importStar(require("../../versioning/cargo"));
@@ -200,32 +201,35 @@ class CrateDatasource extends datasource_1.Datasource {
200
201
  }
201
202
  if (registry.flavor !== 'crates.io' && !registry.isSparse) {
202
203
  const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;
203
- const cacheKeyForError = `crate-datasource/registry-clone-path/${registryFetchUrl}/error`;
204
- // We need to ensure we don't run `git clone` in parallel. Therefore we store
205
- // a promise of the running operation in the mem cache, which in the end resolves
206
- // to the file path of the cloned repository.
207
- const clonePathPromise = memCache.get(cacheKey);
208
- let clonePath;
209
- if (clonePathPromise) {
210
- clonePath = await clonePathPromise;
211
- }
212
- else {
213
- clonePath = upath_1.default.join((0, fs_1.privateCacheDir)(), CrateDatasource.cacheDirFromUrl(url));
214
- logger_1.logger.info({ clonePath, registryFetchUrl }, `Cloning private cargo registry`);
215
- const clonePromise = CrateDatasource.clone(registryFetchUrl, clonePath, packageName, cacheKeyForError);
216
- memCache.set(cacheKey, clonePromise);
217
- await clonePromise;
204
+ const lockKey = registryFetchUrl;
205
+ const releaseLock = await (0, mutex_1.acquireLock)(lockKey, 'crate-registry');
206
+ try {
207
+ const cached = memCache.get(cacheKey);
208
+ if (cached?.err) {
209
+ logger_1.logger.warn({ err: cached.err, packageName, registryFetchUrl }, 'Previous git clone failed, bailing out.');
210
+ return null;
211
+ }
212
+ if (cached?.clonePath) {
213
+ registry.clonePath = cached.clonePath;
214
+ return registry;
215
+ }
216
+ const clonePath = upath_1.default.join((0, fs_1.privateCacheDir)(), CrateDatasource.cacheDirFromUrl(url));
217
+ const result = await CrateDatasource.clone(registryFetchUrl, clonePath, packageName);
218
+ memCache.set(cacheKey, result);
219
+ if (result.err) {
220
+ logger_1.logger.warn({ err: result.err, packageName, registryFetchUrl }, 'Git clone failed, bailing out.');
221
+ return null;
222
+ }
223
+ registry.clonePath = result.clonePath;
218
224
  }
219
- if (!clonePath) {
220
- const err = memCache.get(cacheKeyForError);
221
- logger_1.logger.warn({ err, packageName, registryFetchUrl }, 'Previous git clone failed, bailing out.');
222
- return null;
225
+ finally {
226
+ releaseLock();
223
227
  }
224
- registry.clonePath = clonePath;
225
228
  }
226
229
  return registry;
227
230
  }
228
- static async clone(registryFetchUrl, clonePath, packageName, cacheKeyForError) {
231
+ static async clone(registryFetchUrl, clonePath, packageName) {
232
+ logger_1.logger.info({ clonePath, registryFetchUrl }, `Cloning private cargo registry`);
229
233
  const git = (0, simple_git_1.default)({
230
234
  ...(0, config_1.simpleGitConfig)(),
231
235
  maxConcurrentProcesses: 1,
@@ -234,25 +238,23 @@ class CrateDatasource extends datasource_1.Datasource {
234
238
  await git.clone(registryFetchUrl, clonePath, {
235
239
  '--depth': 1,
236
240
  });
237
- return clonePath;
241
+ return { clonePath };
238
242
  }
239
243
  catch (err) {
240
244
  if (err.message.includes('fatal: dumb http transport does not support shallow capabilities')) {
241
245
  logger_1.logger.info({ packageName, registryFetchUrl }, 'failed to shallow clone git registry, doing full clone');
242
246
  try {
243
247
  await git.clone(registryFetchUrl, clonePath);
244
- return clonePath;
248
+ return { clonePath };
245
249
  }
246
250
  catch (err) {
247
251
  logger_1.logger.warn({ err, packageName, registryFetchUrl }, 'failed cloning git registry');
248
- memCache.set(cacheKeyForError, err);
249
- return null;
252
+ return { err };
250
253
  }
251
254
  }
252
255
  else {
253
256
  logger_1.logger.warn({ err, packageName, registryFetchUrl }, 'failed cloning git registry');
254
- memCache.set(cacheKeyForError, err);
255
- return null;
257
+ return { err };
256
258
  }
257
259
  }
258
260
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/crate/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getChildEnv } from '../../../util/exec/utils';\nimport { privateCacheDir, readCacheFile } from '../../../util/fs';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { toSha256 } from '../../../util/hash';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport * as cargoVersioning from '../../versioning/cargo';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n Release,\n ReleaseResult,\n} from '../types';\nimport { ReleaseTimestamp } from './schema';\nimport type {\n CrateMetadata,\n CrateRecord,\n RegistryFlavor,\n RegistryInfo,\n} from './types';\n\nexport class CrateDatasource extends Datasource {\n static readonly id = 'crate';\n\n constructor() {\n super(CrateDatasource.id);\n }\n\n override defaultRegistryUrls = ['https://crates.io'];\n\n override defaultVersioning = cargoVersioning.id;\n\n static readonly CRATES_IO_BASE_URL =\n 'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';\n\n static readonly CRATES_IO_API_BASE_URL = 'https://crates.io/api/v1/';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}/${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) =>\n CrateDatasource.areReleasesCacheable(registryUrl),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 6 -- should never happen */\n if (!registryUrl) {\n logger.warn(\n 'crate datasource: No registryUrl specified, cannot perform getReleases',\n );\n return null;\n }\n\n const registryInfo = await CrateDatasource.fetchRegistryInfo({\n packageName,\n registryUrl,\n });\n if (!registryInfo) {\n logger.debug(`Could not fetch registry info from ${registryUrl}`);\n return null;\n }\n\n const dependencyUrl = CrateDatasource.getDependencyUrl(\n registryInfo,\n packageName,\n );\n\n const payload = await this.fetchCrateRecordsPayload(\n registryInfo,\n packageName,\n );\n const lines = payload\n .split(newlineRegex) // break into lines\n .map((line) => line.trim()) // remove whitespace\n .filter((line) => line.length !== 0) // remove empty lines\n .map((line) => JSON.parse(line) as CrateRecord); // parse\n\n const metadata = await this.getCrateMetadata(registryInfo, packageName);\n\n const result: ReleaseResult = {\n dependencyUrl,\n releases: [],\n };\n\n if (metadata?.homepage) {\n result.homepage = metadata.homepage;\n }\n\n if (metadata?.repository) {\n result.sourceUrl = metadata.repository;\n }\n\n result.releases = lines\n .map((line) => {\n const versionOrig = line.vers;\n const version = versionOrig.replace(/\\+.*$/, '');\n const release: Release = { version };\n\n if (versionOrig !== version) {\n release.versionOrig = versionOrig;\n }\n\n if (line.yanked) {\n release.isDeprecated = true;\n }\n\n if (line.rust_version) {\n release.constraints = { rust: [line.rust_version] };\n }\n\n return release;\n })\n .filter((release) => release.version);\n if (!result.releases.length) {\n return null;\n }\n\n return result;\n }\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}-metadata`,\n key: (info: RegistryInfo, packageName: string) =>\n `${info.rawUrl}/${packageName}`,\n cacheable: (info: RegistryInfo) =>\n CrateDatasource.areReleasesCacheable(info.rawUrl),\n ttlMinutes: 24 * 60, // 24 hours\n })\n public async getCrateMetadata(\n info: RegistryInfo,\n packageName: string,\n ): Promise<CrateMetadata | null> {\n if (info.flavor !== 'crates.io') {\n return null;\n }\n\n // The `?include=` suffix is required to avoid unnecessary database queries\n // on the crates.io server. This lets us work around the regular request\n // throttling of one request per second.\n const crateUrl = `${CrateDatasource.CRATES_IO_API_BASE_URL}crates/${packageName}?include=`;\n\n logger.debug(\n { crateUrl, packageName, registryUrl: info.rawUrl },\n 'downloading crate metadata',\n );\n\n try {\n interface Response {\n crate: CrateMetadata;\n }\n const response = await this.http.getJsonUnchecked<Response>(crateUrl);\n return response.body.crate;\n } catch (err) {\n logger.warn(\n { err, packageName, registryUrl: info.rawUrl },\n 'failed to download crate metadata',\n );\n }\n\n return null;\n }\n\n public async fetchCrateRecordsPayload(\n info: RegistryInfo,\n packageName: string,\n ): Promise<string> {\n if (info.clonePath) {\n const path = upath.join(\n info.clonePath,\n ...CrateDatasource.getIndexSuffix(packageName),\n );\n return readCacheFile(path, 'utf8');\n }\n\n const baseUrl =\n info.flavor === 'crates.io'\n ? CrateDatasource.CRATES_IO_BASE_URL\n : info.rawUrl;\n\n if (info.flavor === 'crates.io' || info.isSparse) {\n const packageSuffix = CrateDatasource.getIndexSuffix(\n packageName.toLowerCase(),\n );\n const crateUrl = joinUrlParts(baseUrl, ...packageSuffix);\n try {\n return (await this.http.getText(crateUrl)).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n }\n throw new Error(`unsupported crate registry flavor: ${info.flavor}`);\n }\n\n /**\n * Computes the dependency URL for a crate, given\n * registry information\n */\n private static getDependencyUrl(\n info: RegistryInfo,\n packageName: string,\n ): string {\n switch (info.flavor) {\n case 'crates.io':\n return `https://crates.io/crates/${packageName}`;\n case 'cloudsmith': {\n // input: https://dl.cloudsmith.io/basic/$org/$repo/cargo/index.git\n const tokens = info.url.pathname.split('/');\n const org = tokens[2];\n const repo = tokens[3];\n return `https://cloudsmith.io/~${org}/repos/${repo}/packages/detail/cargo/${packageName}`;\n }\n default:\n return `${info.rawUrl}/${packageName}`;\n }\n }\n\n /**\n * Given a Git URL, computes a semi-human-readable name for a folder in which to\n * clone the repository.\n */\n private static cacheDirFromUrl(url: URL): string {\n const proto = url.protocol.replace(regEx(/:$/), '');\n const host = url.hostname;\n const hash = toSha256(url.pathname).substring(0, 7);\n\n return `crate-registry-${proto}-${host}-${hash}`;\n }\n\n private static isSparseRegistry(url: string): boolean {\n const parsed = parseUrl(url);\n if (!parsed) {\n return false;\n }\n return parsed.protocol.startsWith('sparse+');\n }\n\n /**\n * Fetches information about a registry, by url.\n * If no url is given, assumes crates.io.\n * If an url is given, assumes it's a valid Git repository\n * url and clones it to cache.\n */\n private static async fetchRegistryInfo({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<RegistryInfo | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const isSparseRegistry = CrateDatasource.isSparseRegistry(registryUrl);\n const registryFetchUrl = isSparseRegistry\n ? registryUrl.replace(/^sparse\\+/, '')\n : registryUrl;\n\n const url = parseUrl(registryFetchUrl);\n if (!url) {\n logger.debug(`Could not parse registry URL ${registryFetchUrl}`);\n return null;\n }\n\n let flavor: RegistryFlavor;\n if (url.hostname === 'crates.io') {\n flavor = 'crates.io';\n } else if (url.hostname === 'dl.cloudsmith.io') {\n flavor = 'cloudsmith';\n } else {\n flavor = 'other';\n }\n\n const registry: RegistryInfo = {\n flavor,\n rawUrl: registryFetchUrl,\n url,\n isSparse: isSparseRegistry,\n };\n\n if (\n registry.flavor !== 'crates.io' &&\n !GlobalConfig.get('allowCustomCrateRegistries')\n ) {\n logger.warn(\n 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out',\n );\n return null;\n }\n if (registry.flavor !== 'crates.io' && !registry.isSparse) {\n const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;\n const cacheKeyForError = `crate-datasource/registry-clone-path/${registryFetchUrl}/error`;\n\n // We need to ensure we don't run `git clone` in parallel. Therefore we store\n // a promise of the running operation in the mem cache, which in the end resolves\n // to the file path of the cloned repository.\n\n const clonePathPromise: Promise<string> | null = memCache.get(cacheKey);\n let clonePath: string;\n\n if (clonePathPromise) {\n clonePath = await clonePathPromise;\n } else {\n clonePath = upath.join(\n privateCacheDir(),\n CrateDatasource.cacheDirFromUrl(url),\n );\n logger.info(\n { clonePath, registryFetchUrl },\n `Cloning private cargo registry`,\n );\n const clonePromise = CrateDatasource.clone(\n registryFetchUrl,\n clonePath,\n packageName,\n cacheKeyForError,\n );\n\n memCache.set(cacheKey, clonePromise);\n await clonePromise;\n }\n\n if (!clonePath) {\n const err = memCache.get(cacheKeyForError);\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'Previous git clone failed, bailing out.',\n );\n\n return null;\n }\n\n registry.clonePath = clonePath;\n }\n\n return registry;\n }\n\n private static async clone(\n registryFetchUrl: string,\n clonePath: string,\n packageName: string,\n cacheKeyForError: string,\n ): Promise<string | null> {\n const git = Git({\n ...simpleGitConfig(),\n maxConcurrentProcesses: 1,\n }).env(getChildEnv());\n\n try {\n await git.clone(registryFetchUrl, clonePath, {\n '--depth': 1,\n });\n return clonePath;\n } catch (err) {\n if (\n err.message.includes(\n 'fatal: dumb http transport does not support shallow capabilities',\n )\n ) {\n logger.info(\n { packageName, registryFetchUrl },\n 'failed to shallow clone git registry, doing full clone',\n );\n try {\n await git.clone(registryFetchUrl, clonePath);\n return clonePath;\n } catch (err) {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n memCache.set(cacheKeyForError, err);\n\n return null;\n }\n } else {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n memCache.set(cacheKeyForError, err);\n\n return null;\n }\n }\n }\n\n private static areReleasesCacheable(\n registryUrl: string | undefined,\n ): boolean {\n // We only cache public releases, we don't want to cache private\n // cloned data between runs.\n return registryUrl === 'https://crates.io';\n }\n\n public static getIndexSuffix(packageName: string): string[] {\n const len = packageName.length;\n\n if (len === 1) {\n return ['1', packageName];\n }\n if (len === 2) {\n return ['2', packageName];\n }\n if (len === 3) {\n return ['3', packageName[0], packageName];\n }\n\n return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];\n }\n\n @cache({\n namespace: `datasource-crate`,\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 7 * 24 * 60,\n cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>\n registryUrl === 'https://crates.io',\n })\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n if (registryUrl !== 'https://crates.io') {\n return release;\n }\n\n const url = `https://crates.io/api/v1/crates/${packageName}/${release.versionOrig ?? release.version}`;\n const { body: releaseTimestamp } = await this.http.getJson(\n url,\n { cacheProvider: memCacheProvider },\n ReleaseTimestamp,\n );\n release.releaseTimestamp = releaseTimestamp;\n return release;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/crate/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getChildEnv } from '../../../util/exec/utils';\nimport { privateCacheDir, readCacheFile } from '../../../util/fs';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { toSha256 } from '../../../util/hash';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport { acquireLock } from '../../../util/mutex';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport * as cargoVersioning from '../../versioning/cargo';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n Release,\n ReleaseResult,\n} from '../types';\nimport { ReleaseTimestamp } from './schema';\nimport type {\n CrateMetadata,\n CrateRecord,\n RegistryFlavor,\n RegistryInfo,\n} from './types';\n\ntype CloneResult =\n | {\n err: Error;\n clonePath?: undefined;\n }\n | {\n clonePath: string;\n err?: undefined;\n };\n\nexport class CrateDatasource extends Datasource {\n static readonly id = 'crate';\n\n constructor() {\n super(CrateDatasource.id);\n }\n\n override defaultRegistryUrls = ['https://crates.io'];\n\n override defaultVersioning = cargoVersioning.id;\n\n static readonly CRATES_IO_BASE_URL =\n 'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';\n\n static readonly CRATES_IO_API_BASE_URL = 'https://crates.io/api/v1/';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}/${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) =>\n CrateDatasource.areReleasesCacheable(registryUrl),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 6 -- should never happen */\n if (!registryUrl) {\n logger.warn(\n 'crate datasource: No registryUrl specified, cannot perform getReleases',\n );\n return null;\n }\n\n const registryInfo = await CrateDatasource.fetchRegistryInfo({\n packageName,\n registryUrl,\n });\n if (!registryInfo) {\n logger.debug(`Could not fetch registry info from ${registryUrl}`);\n return null;\n }\n\n const dependencyUrl = CrateDatasource.getDependencyUrl(\n registryInfo,\n packageName,\n );\n\n const payload = await this.fetchCrateRecordsPayload(\n registryInfo,\n packageName,\n );\n const lines = payload\n .split(newlineRegex) // break into lines\n .map((line) => line.trim()) // remove whitespace\n .filter((line) => line.length !== 0) // remove empty lines\n .map((line) => JSON.parse(line) as CrateRecord); // parse\n\n const metadata = await this.getCrateMetadata(registryInfo, packageName);\n\n const result: ReleaseResult = {\n dependencyUrl,\n releases: [],\n };\n\n if (metadata?.homepage) {\n result.homepage = metadata.homepage;\n }\n\n if (metadata?.repository) {\n result.sourceUrl = metadata.repository;\n }\n\n result.releases = lines\n .map((line) => {\n const versionOrig = line.vers;\n const version = versionOrig.replace(/\\+.*$/, '');\n const release: Release = { version };\n\n if (versionOrig !== version) {\n release.versionOrig = versionOrig;\n }\n\n if (line.yanked) {\n release.isDeprecated = true;\n }\n\n if (line.rust_version) {\n release.constraints = { rust: [line.rust_version] };\n }\n\n return release;\n })\n .filter((release) => release.version);\n if (!result.releases.length) {\n return null;\n }\n\n return result;\n }\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}-metadata`,\n key: (info: RegistryInfo, packageName: string) =>\n `${info.rawUrl}/${packageName}`,\n cacheable: (info: RegistryInfo) =>\n CrateDatasource.areReleasesCacheable(info.rawUrl),\n ttlMinutes: 24 * 60, // 24 hours\n })\n public async getCrateMetadata(\n info: RegistryInfo,\n packageName: string,\n ): Promise<CrateMetadata | null> {\n if (info.flavor !== 'crates.io') {\n return null;\n }\n\n // The `?include=` suffix is required to avoid unnecessary database queries\n // on the crates.io server. This lets us work around the regular request\n // throttling of one request per second.\n const crateUrl = `${CrateDatasource.CRATES_IO_API_BASE_URL}crates/${packageName}?include=`;\n\n logger.debug(\n { crateUrl, packageName, registryUrl: info.rawUrl },\n 'downloading crate metadata',\n );\n\n try {\n interface Response {\n crate: CrateMetadata;\n }\n const response = await this.http.getJsonUnchecked<Response>(crateUrl);\n return response.body.crate;\n } catch (err) {\n logger.warn(\n { err, packageName, registryUrl: info.rawUrl },\n 'failed to download crate metadata',\n );\n }\n\n return null;\n }\n\n public async fetchCrateRecordsPayload(\n info: RegistryInfo,\n packageName: string,\n ): Promise<string> {\n if (info.clonePath) {\n const path = upath.join(\n info.clonePath,\n ...CrateDatasource.getIndexSuffix(packageName),\n );\n return readCacheFile(path, 'utf8');\n }\n\n const baseUrl =\n info.flavor === 'crates.io'\n ? CrateDatasource.CRATES_IO_BASE_URL\n : info.rawUrl;\n\n if (info.flavor === 'crates.io' || info.isSparse) {\n const packageSuffix = CrateDatasource.getIndexSuffix(\n packageName.toLowerCase(),\n );\n const crateUrl = joinUrlParts(baseUrl, ...packageSuffix);\n try {\n return (await this.http.getText(crateUrl)).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n }\n throw new Error(`unsupported crate registry flavor: ${info.flavor}`);\n }\n\n /**\n * Computes the dependency URL for a crate, given\n * registry information\n */\n private static getDependencyUrl(\n info: RegistryInfo,\n packageName: string,\n ): string {\n switch (info.flavor) {\n case 'crates.io':\n return `https://crates.io/crates/${packageName}`;\n case 'cloudsmith': {\n // input: https://dl.cloudsmith.io/basic/$org/$repo/cargo/index.git\n const tokens = info.url.pathname.split('/');\n const org = tokens[2];\n const repo = tokens[3];\n return `https://cloudsmith.io/~${org}/repos/${repo}/packages/detail/cargo/${packageName}`;\n }\n default:\n return `${info.rawUrl}/${packageName}`;\n }\n }\n\n /**\n * Given a Git URL, computes a semi-human-readable name for a folder in which to\n * clone the repository.\n */\n private static cacheDirFromUrl(url: URL): string {\n const proto = url.protocol.replace(regEx(/:$/), '');\n const host = url.hostname;\n const hash = toSha256(url.pathname).substring(0, 7);\n\n return `crate-registry-${proto}-${host}-${hash}`;\n }\n\n private static isSparseRegistry(url: string): boolean {\n const parsed = parseUrl(url);\n if (!parsed) {\n return false;\n }\n return parsed.protocol.startsWith('sparse+');\n }\n\n /**\n * Fetches information about a registry, by url.\n * If no url is given, assumes crates.io.\n * If an url is given, assumes it's a valid Git repository\n * url and clones it to cache.\n */\n private static async fetchRegistryInfo({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<RegistryInfo | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const isSparseRegistry = CrateDatasource.isSparseRegistry(registryUrl);\n const registryFetchUrl = isSparseRegistry\n ? registryUrl.replace(/^sparse\\+/, '')\n : registryUrl;\n\n const url = parseUrl(registryFetchUrl);\n if (!url) {\n logger.debug(`Could not parse registry URL ${registryFetchUrl}`);\n return null;\n }\n\n let flavor: RegistryFlavor;\n if (url.hostname === 'crates.io') {\n flavor = 'crates.io';\n } else if (url.hostname === 'dl.cloudsmith.io') {\n flavor = 'cloudsmith';\n } else {\n flavor = 'other';\n }\n\n const registry: RegistryInfo = {\n flavor,\n rawUrl: registryFetchUrl,\n url,\n isSparse: isSparseRegistry,\n };\n\n if (\n registry.flavor !== 'crates.io' &&\n !GlobalConfig.get('allowCustomCrateRegistries')\n ) {\n logger.warn(\n 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out',\n );\n return null;\n }\n if (registry.flavor !== 'crates.io' && !registry.isSparse) {\n const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;\n const lockKey = registryFetchUrl;\n\n const releaseLock = await acquireLock(lockKey, 'crate-registry');\n try {\n const cached = memCache.get<CloneResult>(cacheKey);\n\n if (cached?.err) {\n logger.warn(\n { err: cached.err, packageName, registryFetchUrl },\n 'Previous git clone failed, bailing out.',\n );\n return null;\n }\n\n if (cached?.clonePath) {\n registry.clonePath = cached.clonePath;\n return registry;\n }\n\n const clonePath = upath.join(\n privateCacheDir(),\n CrateDatasource.cacheDirFromUrl(url),\n );\n\n const result = await CrateDatasource.clone(\n registryFetchUrl,\n clonePath,\n packageName,\n );\n\n memCache.set(cacheKey, result);\n\n if (result.err) {\n logger.warn(\n { err: result.err, packageName, registryFetchUrl },\n 'Git clone failed, bailing out.',\n );\n return null;\n }\n\n registry.clonePath = result.clonePath;\n } finally {\n releaseLock();\n }\n }\n\n return registry;\n }\n\n private static async clone(\n registryFetchUrl: string,\n clonePath: string,\n packageName: string,\n ): Promise<CloneResult> {\n logger.info(\n { clonePath, registryFetchUrl },\n `Cloning private cargo registry`,\n );\n\n const git = Git({\n ...simpleGitConfig(),\n maxConcurrentProcesses: 1,\n }).env(getChildEnv());\n\n try {\n await git.clone(registryFetchUrl, clonePath, {\n '--depth': 1,\n });\n return { clonePath };\n } catch (err) {\n if (\n err.message.includes(\n 'fatal: dumb http transport does not support shallow capabilities',\n )\n ) {\n logger.info(\n { packageName, registryFetchUrl },\n 'failed to shallow clone git registry, doing full clone',\n );\n try {\n await git.clone(registryFetchUrl, clonePath);\n return { clonePath };\n } catch (err) {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n return { err };\n }\n } else {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n return { err };\n }\n }\n }\n\n private static areReleasesCacheable(\n registryUrl: string | undefined,\n ): boolean {\n // We only cache public releases, we don't want to cache private\n // cloned data between runs.\n return registryUrl === 'https://crates.io';\n }\n\n public static getIndexSuffix(packageName: string): string[] {\n const len = packageName.length;\n\n if (len === 1) {\n return ['1', packageName];\n }\n if (len === 2) {\n return ['2', packageName];\n }\n if (len === 3) {\n return ['3', packageName[0], packageName];\n }\n\n return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];\n }\n\n @cache({\n namespace: `datasource-crate`,\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 7 * 24 * 60,\n cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>\n registryUrl === 'https://crates.io',\n })\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n if (registryUrl !== 'https://crates.io') {\n return release;\n }\n\n const url = `https://crates.io/api/v1/crates/${packageName}/${release.versionOrig ?? release.version}`;\n const { body: releaseTimestamp } = await this.http.getJson(\n url,\n { cacheProvider: memCacheProvider },\n ReleaseTimestamp,\n );\n release.releaseTimestamp = releaseTimestamp;\n return release;\n }\n}\n"]}
@@ -33,7 +33,7 @@ function artifactError(packageFileName, message) {
33
33
  async function updateArtifacts({ packageFileName, updatedDeps, config, }) {
34
34
  if (updatedDeps?.length !== 1) {
35
35
  // Each answers file (~ packageFileName) has exactly one dependency to update.
36
- return artifactError(packageFileName, `Unexpected number of dependencies: ${updatedDeps.length} (should be 1)`);
36
+ return artifactError(packageFileName, `Unexpected number of dependencies: ${updatedDeps?.length} (should be 1)`);
37
37
  }
38
38
  const newValue = updatedDeps[0]?.newValue;
39
39
  if (!newValue) {
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../../lib/modules/manager/copier/artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport { exec } from '../../../util/exec';\nimport type { ExecOptions } from '../../../util/exec/types';\nimport { readLocalFile } from '../../../util/fs';\nimport { getRepoStatus } from '../../../util/git';\nimport { getGitEnvironmentVariables } from '../../../util/git/auth';\nimport type {\n UpdateArtifact,\n UpdateArtifactsConfig,\n UpdateArtifactsResult,\n} from '../types';\nimport {\n getCopierVersionConstraint,\n getPythonVersionConstraint,\n} from './utils';\n\nconst DEFAULT_COMMAND_OPTIONS = ['--skip-answered', '--defaults'];\n\nfunction buildCommand(\n config: UpdateArtifactsConfig,\n packageFileName: string,\n newValue: string,\n): string {\n const command = ['copier', 'update', ...DEFAULT_COMMAND_OPTIONS];\n if (GlobalConfig.get('allowScripts') && !config.ignoreScripts) {\n command.push('--trust');\n }\n command.push(\n '--answers-file',\n quote(upath.basename(packageFileName)),\n '--vcs-ref',\n quote(newValue),\n );\n return command.join(' ');\n}\n\nfunction artifactError(\n packageFileName: string,\n message: string,\n): UpdateArtifactsResult[] {\n return [\n {\n artifactError: {\n lockFile: packageFileName,\n stderr: message,\n },\n },\n ];\n}\n\nexport async function updateArtifacts({\n packageFileName,\n updatedDeps,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n if (updatedDeps?.length !== 1) {\n // Each answers file (~ packageFileName) has exactly one dependency to update.\n return artifactError(\n packageFileName,\n `Unexpected number of dependencies: ${updatedDeps.length} (should be 1)`,\n );\n }\n\n const newValue = updatedDeps[0]?.newValue;\n if (!newValue) {\n return artifactError(\n packageFileName,\n 'Missing copier template version to update to',\n );\n }\n\n const command = buildCommand(config, packageFileName, newValue);\n const gitEnv = getGitEnvironmentVariables(['git-tags']);\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n docker: {},\n extraEnv: gitEnv,\n toolConstraints: [\n {\n toolName: 'python',\n constraint: getPythonVersionConstraint(config),\n },\n {\n toolName: 'copier',\n constraint: getCopierVersionConstraint(config),\n },\n ],\n };\n try {\n await exec(command, execOptions);\n } catch (err) {\n logger.debug({ err }, `Failed to update copier template: ${err.message}`);\n return artifactError(packageFileName, err.message);\n }\n\n const status = await getRepoStatus();\n // If the answers file didn't change, Copier did not update anything.\n if (!status.modified.includes(packageFileName)) {\n return null;\n }\n\n if (status.conflicted.length > 0) {\n // Sometimes, Copier erroneously reports conflicts.\n const msg =\n `Updating the Copier template yielded ${status.conflicted.length} merge conflicts. ` +\n 'Please check the proposed changes carefully! Conflicting files:\\n * ' +\n status.conflicted.join('\\n * ');\n logger.debug({ packageFileName, depName: updatedDeps[0]?.depName }, msg);\n }\n\n const res: UpdateArtifactsResult[] = [];\n\n for (const f of [\n ...status.modified,\n ...status.not_added,\n ...status.conflicted,\n ]) {\n const fileRes: UpdateArtifactsResult = {\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n };\n if (status.conflicted.includes(f)) {\n // Make the reviewer aware of the conflicts.\n // This will be posted in a comment.\n fileRes.notice = {\n file: f,\n message:\n 'This file had merge conflicts. Please check the proposed changes carefully!',\n };\n }\n res.push(fileRes);\n }\n for (const f of status.deleted) {\n res.push({\n file: {\n type: 'deletion',\n path: f,\n },\n });\n }\n // `git status` might detect a rename, which is then not contained\n // in not_added/deleted. Ensure we respect renames as well if they happen.\n for (const f of status.renamed) {\n res.push({\n file: {\n type: 'deletion',\n path: f.from,\n },\n });\n res.push({\n file: {\n type: 'addition',\n path: f.to,\n contents: await readLocalFile(f.to),\n },\n });\n }\n return res;\n}\n"]}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../../lib/modules/manager/copier/artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport { exec } from '../../../util/exec';\nimport type { ExecOptions } from '../../../util/exec/types';\nimport { readLocalFile } from '../../../util/fs';\nimport { getRepoStatus } from '../../../util/git';\nimport { getGitEnvironmentVariables } from '../../../util/git/auth';\nimport type {\n UpdateArtifact,\n UpdateArtifactsConfig,\n UpdateArtifactsResult,\n} from '../types';\nimport {\n getCopierVersionConstraint,\n getPythonVersionConstraint,\n} from './utils';\n\nconst DEFAULT_COMMAND_OPTIONS = ['--skip-answered', '--defaults'];\n\nfunction buildCommand(\n config: UpdateArtifactsConfig,\n packageFileName: string,\n newValue: string,\n): string {\n const command = ['copier', 'update', ...DEFAULT_COMMAND_OPTIONS];\n if (GlobalConfig.get('allowScripts') && !config.ignoreScripts) {\n command.push('--trust');\n }\n command.push(\n '--answers-file',\n quote(upath.basename(packageFileName)),\n '--vcs-ref',\n quote(newValue),\n );\n return command.join(' ');\n}\n\nfunction artifactError(\n packageFileName: string,\n message: string,\n): UpdateArtifactsResult[] {\n return [\n {\n artifactError: {\n lockFile: packageFileName,\n stderr: message,\n },\n },\n ];\n}\n\nexport async function updateArtifacts({\n packageFileName,\n updatedDeps,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n if (updatedDeps?.length !== 1) {\n // Each answers file (~ packageFileName) has exactly one dependency to update.\n return artifactError(\n packageFileName,\n `Unexpected number of dependencies: ${updatedDeps?.length} (should be 1)`,\n );\n }\n\n const newValue = updatedDeps[0]?.newValue;\n if (!newValue) {\n return artifactError(\n packageFileName,\n 'Missing copier template version to update to',\n );\n }\n\n const command = buildCommand(config, packageFileName, newValue);\n const gitEnv = getGitEnvironmentVariables(['git-tags']);\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n docker: {},\n extraEnv: gitEnv,\n toolConstraints: [\n {\n toolName: 'python',\n constraint: getPythonVersionConstraint(config),\n },\n {\n toolName: 'copier',\n constraint: getCopierVersionConstraint(config),\n },\n ],\n };\n try {\n await exec(command, execOptions);\n } catch (err) {\n logger.debug({ err }, `Failed to update copier template: ${err.message}`);\n return artifactError(packageFileName, err.message);\n }\n\n const status = await getRepoStatus();\n // If the answers file didn't change, Copier did not update anything.\n if (!status.modified.includes(packageFileName)) {\n return null;\n }\n\n if (status.conflicted.length > 0) {\n // Sometimes, Copier erroneously reports conflicts.\n const msg =\n `Updating the Copier template yielded ${status.conflicted.length} merge conflicts. ` +\n 'Please check the proposed changes carefully! Conflicting files:\\n * ' +\n status.conflicted.join('\\n * ');\n logger.debug({ packageFileName, depName: updatedDeps[0]?.depName }, msg);\n }\n\n const res: UpdateArtifactsResult[] = [];\n\n for (const f of [\n ...status.modified,\n ...status.not_added,\n ...status.conflicted,\n ]) {\n const fileRes: UpdateArtifactsResult = {\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n };\n if (status.conflicted.includes(f)) {\n // Make the reviewer aware of the conflicts.\n // This will be posted in a comment.\n fileRes.notice = {\n file: f,\n message:\n 'This file had merge conflicts. Please check the proposed changes carefully!',\n };\n }\n res.push(fileRes);\n }\n for (const f of status.deleted) {\n res.push({\n file: {\n type: 'deletion',\n path: f,\n },\n });\n }\n // `git status` might detect a rename, which is then not contained\n // in not_added/deleted. Ensure we respect renames as well if they happen.\n for (const f of status.renamed) {\n res.push({\n file: {\n type: 'deletion',\n path: f.from,\n },\n });\n res.push({\n file: {\n type: 'addition',\n path: f.to,\n contents: await readLocalFile(f.to),\n },\n });\n }\n return res;\n}\n"]}
@@ -28,7 +28,7 @@ exports.hashMap.set('cloudbuild', 'e4f926bfb907220e97dce98335837c52b4e0fe66d8135
28
28
  exports.hashMap.set('cocoapods', 'a3be5ff98669b788cc796ac8f51111fa5cbf98dc9f0998c6856727ac9060c3ad');
29
29
  exports.hashMap.set('composer', 'd1de64c4276d4abd41a2007346d1c2b81735675ac4036b337beb25f37813c622');
30
30
  exports.hashMap.set('conan', '4df92ebfa53ec6b7103030316ff70822d18f73cca8c71f2dca1d71c0d00b9353');
31
- exports.hashMap.set('copier', 'aab6bf750a30b9efdbbee15b75e04e27383b2722ff7a64f238333a683ad442ca');
31
+ exports.hashMap.set('copier', '34a3f985c82673bb7a2828ef644e271e5031da873e8cd44bf992a1826b3e40db');
32
32
  exports.hashMap.set('cpanfile', '9b354db9666eee2485b27e44a6e61eaadc86ec2f2c6af9bb7bbc9fab54f31642');
33
33
  exports.hashMap.set('crossplane', '76261ff27b38f9850ee1a3a7e95168abefd96b4736f2cf04a7343e16827b42d8');
34
34
  exports.hashMap.set('crow', 'ffce0c24358c3097e3935bffc38ef3eff143dbbc589c1b75a6d3635a62fdeea4');
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.generated.js","sourceRoot":"","sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"names":[],"mappings":"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","sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','4c234d79f768392545924fa9b139f8d177f15b6aa46776cf063860a1d36e48c7');\nhashMap.set('ansible-galaxy','a211e40f5c8613986ac16bc8d5389ea23d145cd643091d1b951a7f65926e99ff');\nhashMap.set('argocd','8619ed756b6f7249ea836e14e8f8660ee5f971992e3862d43f19d42f10762560');\nhashMap.set('asdf','e7f29eb8157e6ca5928890a0cc2fc88d57ddcf7b426dad1c4f15386858d3cd6a');\nhashMap.set('azure-pipelines','0b741b2629f6d94589524ce9b3886765e5c5648c9b6d707bb0b5fede276f9c09');\nhashMap.set('batect','523e8d7a309b4814a02819371313b2dac3764eab64cabfaf1d58b6e89de4ce43');\nhashMap.set('batect-wrapper','90941650f810adb3d7abe476da7221ff3434aa9d09ffc3d310e35108f360f364');\nhashMap.set('bazel','19e8ee20f9882e3023b2126d4b8335693cae9fb2b908f59803bbdfd432055d28');\nhashMap.set('bazel-module','4e3d00184b146e5c0ad69433697076f722afe933701ab08676af13e47d289eac');\nhashMap.set('bazelisk','6fbef61d534724ff259ea6e4fc1cd0a3d5a46d740c375128fa59b225daddd39f');\nhashMap.set('bicep','fbbd74998411012cfba829526701109d1fc184ade0cb11a28e4ca2956174b0f1');\nhashMap.set('bitbucket-pipelines','98c0d715a7eb4e41b8231091b83385f325966373f37dc7d6bc10b1febb6f605e');\nhashMap.set('bitrise','d18d2dcd356e19c4cd94912511a88636198c23b64e54f31da273be11044970cf');\nhashMap.set('buildkite','ac713ce38da057ff3ceb08d092291356dfc74f5b33b75f010bb9db1a211439c0');\nhashMap.set('buildpacks','cc8bbe937416a012df36a5c7ab01ae3cdedbed03615549bbe9f0f27fa40a150b');\nhashMap.set('bun','940ad758faff772794f754d190725e9339e9139a0df0f5e16f46884ef31d0cfc');\nhashMap.set('bun-version','49194d7fcb6b7bdd7e7a1264f71532bb2be8142d48478bf74716f7a9d4b306b9');\nhashMap.set('bundler','5aa8dde194ca7ad7f6d5163ed088a906b40a0bba2b3f4d49e935e9a798075dc9');\nhashMap.set('cake','a04160b352550cb470acb62f9a532361842c12f2ffbcd473bffca3de024522d9');\nhashMap.set('cargo','cdd6020c52aacaf309d528b1ed05f92bc4e3b2b45b7e613950d026d6798fea3a');\nhashMap.set('cdnurl','70281459e771df007787fc25dba16e4d5109865f97209dcf4f572ddd287d538a');\nhashMap.set('circleci','c7c7a1b71385f0ea7cf1e9fc24c37a1d5dabf13d6952e1e3b2179861b55f4e44');\nhashMap.set('cloudbuild','e4f926bfb907220e97dce98335837c52b4e0fe66d813593a7e572736acfc53f7');\nhashMap.set('cocoapods','a3be5ff98669b788cc796ac8f51111fa5cbf98dc9f0998c6856727ac9060c3ad');\nhashMap.set('composer','d1de64c4276d4abd41a2007346d1c2b81735675ac4036b337beb25f37813c622');\nhashMap.set('conan','4df92ebfa53ec6b7103030316ff70822d18f73cca8c71f2dca1d71c0d00b9353');\nhashMap.set('copier','aab6bf750a30b9efdbbee15b75e04e27383b2722ff7a64f238333a683ad442ca');\nhashMap.set('cpanfile','9b354db9666eee2485b27e44a6e61eaadc86ec2f2c6af9bb7bbc9fab54f31642');\nhashMap.set('crossplane','76261ff27b38f9850ee1a3a7e95168abefd96b4736f2cf04a7343e16827b42d8');\nhashMap.set('crow','ffce0c24358c3097e3935bffc38ef3eff143dbbc589c1b75a6d3635a62fdeea4');\nhashMap.set('deps-edn','306376e0f00f47ea416dba972e6347f44c78228e298e4ed766635018e26f698a');\nhashMap.set('devbox','7acedf4c5d3bef2f6c75c8b490c47f18fb03597680b46e4670ae5fe6f9873960');\nhashMap.set('devcontainer','e9982b5ff8aeac8fefb40dc363d3ab35f58af8c08b91eb45d22937a8c60447bb');\nhashMap.set('docker-compose','0c867e3aa14ae7dfc673eef348b2086ae2e36cbebfd1827e031a8030f9295276');\nhashMap.set('dockerfile','0bddc097addf84db6aa48d985567f247ca89affe1265ac09e6cd9635f61710f9');\nhashMap.set('droneci','f2a98fcece07b462baaceb28cd6904e080cb1ab0727fcd7403bea5ffd2e05239');\nhashMap.set('fleet','642e8e7ab739fba65bce7222b6f3e80fe44806c4190c8e93c5bcab23d44e9fd4');\nhashMap.set('flux','3b87b351f98c11ca0e6cb275deb708dc9bf601a7e578f7a3a7e83fe6e15eb540');\nhashMap.set('fvm','aa154dd5ffe3caced30713a9a55967360b7a0f35edd2fc06bd6f3e73c5c87570');\nhashMap.set('git-submodules','b5d78ab86025516b8cc52ede93b390c45a1a46e7ca338e1d2b7f1d57481ebf43');\nhashMap.set('github-actions','8d44776f5902cd5aacdf7ece0282306d864e8a88f4c0427737846542e2d7cbed');\nhashMap.set('gitlabci','1f2e3e3a3013488e68d2aa0e39d80ee3bfbc9a01d817874f4c8195f8aff1fac9');\nhashMap.set('gitlabci-include','5bc01de9b40ecc8888a37690152f4a2f9cacc509b9cb5902aac024ca7a7c8e65');\nhashMap.set('glasskube','fd415356a866ad174a5b70522d662e4289a2c5d5e34c55d57542b0d8968f1645');\nhashMap.set('gleam','8be0140c0a26de7c588c03c2aa5c9f8bc1ffa2a6c9b46a70d23d90581392a3cf');\nhashMap.set('gomod','6809a0892a5b50c03f7cb1dd86f8139fc3d858215965cc6d12041dae07a47a1a');\nhashMap.set('gradle','f2d2cbc9d566c280d16dfb9378a8a57b2a0e8f6c75a0c0c7d0f3367f340d4f1d');\nhashMap.set('gradle-wrapper','8035248857cd8c32b382ee6411e67799885feac6c6c43f26d48d9dad8d004e76');\nhashMap.set('haskell-cabal','a2bf118238529952d0f2f352112dfbc86fb5533ef819625161a130f39c8ca713');\nhashMap.set('helm-requirements','8f643d415ab0cfbef05bce4dce9812eef47bddb7b8b67a191e6a4230489e652f');\nhashMap.set('helm-values','fbd4a0b4bdda8a71dc38ac8916287f73e2b7de5ef122096a5b5d525c1a3306cd');\nhashMap.set('helmfile','85424858e74869bf27bd38dd0105299540c665c259f46fa7a63506943fad0f5a');\nhashMap.set('helmsman','734fa89740fd5140ca3e39204872aba3451c05cd17f0b5e2b635934ed7b1710b');\nhashMap.set('helmv3','8f60a3ec95fded429df5a4bc4a0e8df536d55b85c8e744767101a3bbce57c41f');\nhashMap.set('hermit','c7bc14921a07e0ca5dcf02d0c1103702ee9262568097a2f50533aaee94af0158');\nhashMap.set('homebrew','4b05428b846b8a7c260a41500cc14938cca8e7d5df0e2510050f95718f6f823f');\nhashMap.set('html','226a9084e10ebf754906386159db08667394f5432105249bdb30d9c60af9fb56');\nhashMap.set('jenkins','309db014e3590e1cd6d53ede2755395c82e5cd4b880425daf52a6ab60e0d6a42');\nhashMap.set('jsonnet-bundler','f8e905391544e5d0464849d84e43a0143cbacdb2dacd7e5ae4278f8a25db583a');\nhashMap.set('kotlin-script','60f8f714bb3aef5d7e3e91c67f658847ad2b01bfc044a2f0dd0798fccb5c7c30');\nhashMap.set('kubernetes','62cfa6c77593b48290f3c26a2f390c4bdfe8ab3cfb79e358b10d8aece689a999');\nhashMap.set('kustomize','419e740651d058a0e7d7bca54b166600c9f4279875b8e4c9cd96054eed554ab7');\nhashMap.set('leiningen','0598d2f53cfc92076d47186245a7b591d2b0df157609a7f55a37b54ab2d32a77');\nhashMap.set('maven','5592ee2784417aa586aca86efa13e142c4fdf544bd0deea691c596788a9c48c7');\nhashMap.set('maven-wrapper','95f7c3473b9cf82dc57bf8352e8d9dd131c92ef0365db5a97a1e16bda4d19481');\nhashMap.set('meteor','a9785d85b3520ed9e763c800730f36b95747795699758ecbe1395133c5b0040e');\nhashMap.set('mint','7072e37f18bb57500018406eb8711b2615b1916f073867f30653cdd4a99dab81');\nhashMap.set('mise','d84dcf05c3a23985e20aeca65a51552c808c954196fb4eae1de319c11f539ad9');\nhashMap.set('mix','6f7951fd86e7abcd7d7703893a5cc2c49f907a0d36e75c8a939c9995728e51e4');\nhashMap.set('nix','7a9f99ee6ddad1b35a5056bb2d8905598f39873017889d3652e64e8031722c4d');\nhashMap.set('nodenv','d159174d53e39af2013443cf86df88e14aac79a5a8d602180af229dcb2ddeda9');\nhashMap.set('npm','3cccc64662d75f03e743437f9486f25e285868a0ad2953b3d50ce0dbbe5a1246');\nhashMap.set('nuget','f366c8d11da898ab9012bbec7511354890032f8afd87db944561cffe479c367c');\nhashMap.set('nvm','2d7a15f668d33a31302af960c3bc137b86d0284b1ea16c528d334e46a468b0d4');\nhashMap.set('ocb','bff1864d0937341790cfe08833c39642f785844762669f5753ff057bada923ab');\nhashMap.set('osgi','dae012cd486843eb53da4b032105e54d18f4e7537bd59c5321313950dd108a95');\nhashMap.set('pep621','df5a9a0d3826d6b24f9997c927cd906f563d01067c92cd426411a9c0d95bd9b0');\nhashMap.set('pep723','bf07d466ea1bc9513c8d2cb475fcca3bc9b61f2184bd9af0a7a28d45b6f57ecd');\nhashMap.set('pip-compile','19ea8b7c966f51a7516b114d2fcb099ddcfc96a8e437e525cab06a8b0f0ca1b7');\nhashMap.set('pip_requirements','140cca562c9264fc2570a1837994cec14c427651fba507f536adc084e48d8dec');\nhashMap.set('pip_setup','31b330d9666d61474326a761a3ce1479f9a189ef6838ecfee78843ff4c80af73');\nhashMap.set('pipenv','02b3c60e01f73dce4a439ba4aecfc97467dfae0ca5be9628548db4079a1e7b38');\nhashMap.set('pixi','ad1d3689a4f4815be8b579ec7455d4c20f1a7602accd45f451ee554f4bd9d1fd');\nhashMap.set('poetry','9716ea77180528cd18f327ce666b5019c64aa108cef900e31b0cd840a256c57a');\nhashMap.set('pre-commit','64efc3146f0981751a584a29bdcfe6701cc17849c7bc2bc87b238315d843524a');\nhashMap.set('pub','a2e38469167f49a34503e25816c7b9dd113b65bd10a3ad3fa325ac4ce571a453');\nhashMap.set('puppet','34f7e3916780e8ed352b65864bad91bf66547e29f91ee8fca7fd6e8fcd2621fd');\nhashMap.set('pyenv','4e520570d9a1407864aa7c5461d4008372d889254067e405cee2212d0ef8990b');\nhashMap.set('quadlet','972bb8017f8c7811a74b91b56cfcd9d6f1aef1c026c9a8b956cecc63d95b0bb2');\nhashMap.set('renovate-config-presets','27f100d67e2a1ad20cfd4aa3f1db1f1c34f62910929695f381160b3835a7fa65');\nhashMap.set('ruby-version','4aac2178a20ccdf8136363030e5156017f3d44368b4192b3280997df596dcacc');\nhashMap.set('runtime-version','dbf80ce2a5f07dd34bc9a008159b4f08052cc6fd0d92cbd2aeb0026c8008fa72');\nhashMap.set('sbt','dc1ec4aeeb5e012c7a595478873ad67e2dee6e2af951b12b9e9057cb64f2258d');\nhashMap.set('scalafmt','8a54fef703269ed31ce28887e62b0b838a13359e86fa77c7f4dceb89fda0f352');\nhashMap.set('setup-cfg','9a778d8a58f643fff1d23d750dfebed21e45bce99bfdcdc3de39795a407d983f');\nhashMap.set('sveltos','a69f9e206526af08685e20a72344b22d856f2effd882e67333a153a989a0a047');\nhashMap.set('swift','966398303fb2b86c14cede8e4a7bfc7810d3100c39a60ac9e01e56b181df3970');\nhashMap.set('tekton','eb8fb6a25ca7fd0d304f67d5ab2e93ddd8b34854553130003ce3340ca7b3bba1');\nhashMap.set('terraform','df2687884bcb81ebd6366deff3dd67aeafac8d0ba6e6bf8d18c61717eb928d78');\nhashMap.set('terraform-version','b08480f326c45daf3daeccc2d2f593a723c30a50437a66ac2290d671b427a355');\nhashMap.set('terragrunt','b32d2317bf2cf032243c417463f3760e4decf820d2e5332e6415e16dcf05e9ab');\nhashMap.set('terragrunt-version','45f221b13a193a42687f318e10cf1558079e28c970e91ce25c370f35f88f2f58');\nhashMap.set('tflint-plugin','719408f35a233216562aa62fb8126145a3450b69f917c8fcdf2f3b2c05a9898b');\nhashMap.set('travis','30174e78a6297e44db1c030ea2e111084e14b1eac220f522522c77d684a76285');\nhashMap.set('typst','d0e2b7cbf2ac47d55bd41fd4503251a4f606861dc60d812eff7532371ae2a8cb');\nhashMap.set('unity3d','9a61f8db397bc962f03a1d82045805ffa89863894e26824ecbeffcbf66b3ba3d');\nhashMap.set('velaci','9ad5d5d2584b9c189c4edcd25ad9103926bd4ba850a419a3b5e4aba9682817c3');\nhashMap.set('vendir','c281fb3cb9d8504f919eef08d40dc525dda9a689c2760d58b4bab0f746f32f17');\nhashMap.set('woodpecker','eaaa0a3bcfd0dc60c0990f2a1d7acf19c4f86ce4641ab3cf0a31f2bf46fc61b8');\nhashMap.set('jsonata','b8a0369f94be06f2109b7d233d8165a3e03d93498c43353720eb03b1eaa43e7b');\nhashMap.set('regex','baa61e8cd76a22201283a10749170dd35bae562ecf44a58ceca39cae754e208e');"]}
1
+ {"version":3,"file":"fingerprint.generated.js","sourceRoot":"","sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"names":[],"mappings":"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","sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','4c234d79f768392545924fa9b139f8d177f15b6aa46776cf063860a1d36e48c7');\nhashMap.set('ansible-galaxy','a211e40f5c8613986ac16bc8d5389ea23d145cd643091d1b951a7f65926e99ff');\nhashMap.set('argocd','8619ed756b6f7249ea836e14e8f8660ee5f971992e3862d43f19d42f10762560');\nhashMap.set('asdf','e7f29eb8157e6ca5928890a0cc2fc88d57ddcf7b426dad1c4f15386858d3cd6a');\nhashMap.set('azure-pipelines','0b741b2629f6d94589524ce9b3886765e5c5648c9b6d707bb0b5fede276f9c09');\nhashMap.set('batect','523e8d7a309b4814a02819371313b2dac3764eab64cabfaf1d58b6e89de4ce43');\nhashMap.set('batect-wrapper','90941650f810adb3d7abe476da7221ff3434aa9d09ffc3d310e35108f360f364');\nhashMap.set('bazel','19e8ee20f9882e3023b2126d4b8335693cae9fb2b908f59803bbdfd432055d28');\nhashMap.set('bazel-module','4e3d00184b146e5c0ad69433697076f722afe933701ab08676af13e47d289eac');\nhashMap.set('bazelisk','6fbef61d534724ff259ea6e4fc1cd0a3d5a46d740c375128fa59b225daddd39f');\nhashMap.set('bicep','fbbd74998411012cfba829526701109d1fc184ade0cb11a28e4ca2956174b0f1');\nhashMap.set('bitbucket-pipelines','98c0d715a7eb4e41b8231091b83385f325966373f37dc7d6bc10b1febb6f605e');\nhashMap.set('bitrise','d18d2dcd356e19c4cd94912511a88636198c23b64e54f31da273be11044970cf');\nhashMap.set('buildkite','ac713ce38da057ff3ceb08d092291356dfc74f5b33b75f010bb9db1a211439c0');\nhashMap.set('buildpacks','cc8bbe937416a012df36a5c7ab01ae3cdedbed03615549bbe9f0f27fa40a150b');\nhashMap.set('bun','940ad758faff772794f754d190725e9339e9139a0df0f5e16f46884ef31d0cfc');\nhashMap.set('bun-version','49194d7fcb6b7bdd7e7a1264f71532bb2be8142d48478bf74716f7a9d4b306b9');\nhashMap.set('bundler','5aa8dde194ca7ad7f6d5163ed088a906b40a0bba2b3f4d49e935e9a798075dc9');\nhashMap.set('cake','a04160b352550cb470acb62f9a532361842c12f2ffbcd473bffca3de024522d9');\nhashMap.set('cargo','cdd6020c52aacaf309d528b1ed05f92bc4e3b2b45b7e613950d026d6798fea3a');\nhashMap.set('cdnurl','70281459e771df007787fc25dba16e4d5109865f97209dcf4f572ddd287d538a');\nhashMap.set('circleci','c7c7a1b71385f0ea7cf1e9fc24c37a1d5dabf13d6952e1e3b2179861b55f4e44');\nhashMap.set('cloudbuild','e4f926bfb907220e97dce98335837c52b4e0fe66d813593a7e572736acfc53f7');\nhashMap.set('cocoapods','a3be5ff98669b788cc796ac8f51111fa5cbf98dc9f0998c6856727ac9060c3ad');\nhashMap.set('composer','d1de64c4276d4abd41a2007346d1c2b81735675ac4036b337beb25f37813c622');\nhashMap.set('conan','4df92ebfa53ec6b7103030316ff70822d18f73cca8c71f2dca1d71c0d00b9353');\nhashMap.set('copier','34a3f985c82673bb7a2828ef644e271e5031da873e8cd44bf992a1826b3e40db');\nhashMap.set('cpanfile','9b354db9666eee2485b27e44a6e61eaadc86ec2f2c6af9bb7bbc9fab54f31642');\nhashMap.set('crossplane','76261ff27b38f9850ee1a3a7e95168abefd96b4736f2cf04a7343e16827b42d8');\nhashMap.set('crow','ffce0c24358c3097e3935bffc38ef3eff143dbbc589c1b75a6d3635a62fdeea4');\nhashMap.set('deps-edn','306376e0f00f47ea416dba972e6347f44c78228e298e4ed766635018e26f698a');\nhashMap.set('devbox','7acedf4c5d3bef2f6c75c8b490c47f18fb03597680b46e4670ae5fe6f9873960');\nhashMap.set('devcontainer','e9982b5ff8aeac8fefb40dc363d3ab35f58af8c08b91eb45d22937a8c60447bb');\nhashMap.set('docker-compose','0c867e3aa14ae7dfc673eef348b2086ae2e36cbebfd1827e031a8030f9295276');\nhashMap.set('dockerfile','0bddc097addf84db6aa48d985567f247ca89affe1265ac09e6cd9635f61710f9');\nhashMap.set('droneci','f2a98fcece07b462baaceb28cd6904e080cb1ab0727fcd7403bea5ffd2e05239');\nhashMap.set('fleet','642e8e7ab739fba65bce7222b6f3e80fe44806c4190c8e93c5bcab23d44e9fd4');\nhashMap.set('flux','3b87b351f98c11ca0e6cb275deb708dc9bf601a7e578f7a3a7e83fe6e15eb540');\nhashMap.set('fvm','aa154dd5ffe3caced30713a9a55967360b7a0f35edd2fc06bd6f3e73c5c87570');\nhashMap.set('git-submodules','b5d78ab86025516b8cc52ede93b390c45a1a46e7ca338e1d2b7f1d57481ebf43');\nhashMap.set('github-actions','8d44776f5902cd5aacdf7ece0282306d864e8a88f4c0427737846542e2d7cbed');\nhashMap.set('gitlabci','1f2e3e3a3013488e68d2aa0e39d80ee3bfbc9a01d817874f4c8195f8aff1fac9');\nhashMap.set('gitlabci-include','5bc01de9b40ecc8888a37690152f4a2f9cacc509b9cb5902aac024ca7a7c8e65');\nhashMap.set('glasskube','fd415356a866ad174a5b70522d662e4289a2c5d5e34c55d57542b0d8968f1645');\nhashMap.set('gleam','8be0140c0a26de7c588c03c2aa5c9f8bc1ffa2a6c9b46a70d23d90581392a3cf');\nhashMap.set('gomod','6809a0892a5b50c03f7cb1dd86f8139fc3d858215965cc6d12041dae07a47a1a');\nhashMap.set('gradle','f2d2cbc9d566c280d16dfb9378a8a57b2a0e8f6c75a0c0c7d0f3367f340d4f1d');\nhashMap.set('gradle-wrapper','8035248857cd8c32b382ee6411e67799885feac6c6c43f26d48d9dad8d004e76');\nhashMap.set('haskell-cabal','a2bf118238529952d0f2f352112dfbc86fb5533ef819625161a130f39c8ca713');\nhashMap.set('helm-requirements','8f643d415ab0cfbef05bce4dce9812eef47bddb7b8b67a191e6a4230489e652f');\nhashMap.set('helm-values','fbd4a0b4bdda8a71dc38ac8916287f73e2b7de5ef122096a5b5d525c1a3306cd');\nhashMap.set('helmfile','85424858e74869bf27bd38dd0105299540c665c259f46fa7a63506943fad0f5a');\nhashMap.set('helmsman','734fa89740fd5140ca3e39204872aba3451c05cd17f0b5e2b635934ed7b1710b');\nhashMap.set('helmv3','8f60a3ec95fded429df5a4bc4a0e8df536d55b85c8e744767101a3bbce57c41f');\nhashMap.set('hermit','c7bc14921a07e0ca5dcf02d0c1103702ee9262568097a2f50533aaee94af0158');\nhashMap.set('homebrew','4b05428b846b8a7c260a41500cc14938cca8e7d5df0e2510050f95718f6f823f');\nhashMap.set('html','226a9084e10ebf754906386159db08667394f5432105249bdb30d9c60af9fb56');\nhashMap.set('jenkins','309db014e3590e1cd6d53ede2755395c82e5cd4b880425daf52a6ab60e0d6a42');\nhashMap.set('jsonnet-bundler','f8e905391544e5d0464849d84e43a0143cbacdb2dacd7e5ae4278f8a25db583a');\nhashMap.set('kotlin-script','60f8f714bb3aef5d7e3e91c67f658847ad2b01bfc044a2f0dd0798fccb5c7c30');\nhashMap.set('kubernetes','62cfa6c77593b48290f3c26a2f390c4bdfe8ab3cfb79e358b10d8aece689a999');\nhashMap.set('kustomize','419e740651d058a0e7d7bca54b166600c9f4279875b8e4c9cd96054eed554ab7');\nhashMap.set('leiningen','0598d2f53cfc92076d47186245a7b591d2b0df157609a7f55a37b54ab2d32a77');\nhashMap.set('maven','5592ee2784417aa586aca86efa13e142c4fdf544bd0deea691c596788a9c48c7');\nhashMap.set('maven-wrapper','95f7c3473b9cf82dc57bf8352e8d9dd131c92ef0365db5a97a1e16bda4d19481');\nhashMap.set('meteor','a9785d85b3520ed9e763c800730f36b95747795699758ecbe1395133c5b0040e');\nhashMap.set('mint','7072e37f18bb57500018406eb8711b2615b1916f073867f30653cdd4a99dab81');\nhashMap.set('mise','d84dcf05c3a23985e20aeca65a51552c808c954196fb4eae1de319c11f539ad9');\nhashMap.set('mix','6f7951fd86e7abcd7d7703893a5cc2c49f907a0d36e75c8a939c9995728e51e4');\nhashMap.set('nix','7a9f99ee6ddad1b35a5056bb2d8905598f39873017889d3652e64e8031722c4d');\nhashMap.set('nodenv','d159174d53e39af2013443cf86df88e14aac79a5a8d602180af229dcb2ddeda9');\nhashMap.set('npm','3cccc64662d75f03e743437f9486f25e285868a0ad2953b3d50ce0dbbe5a1246');\nhashMap.set('nuget','f366c8d11da898ab9012bbec7511354890032f8afd87db944561cffe479c367c');\nhashMap.set('nvm','2d7a15f668d33a31302af960c3bc137b86d0284b1ea16c528d334e46a468b0d4');\nhashMap.set('ocb','bff1864d0937341790cfe08833c39642f785844762669f5753ff057bada923ab');\nhashMap.set('osgi','dae012cd486843eb53da4b032105e54d18f4e7537bd59c5321313950dd108a95');\nhashMap.set('pep621','df5a9a0d3826d6b24f9997c927cd906f563d01067c92cd426411a9c0d95bd9b0');\nhashMap.set('pep723','bf07d466ea1bc9513c8d2cb475fcca3bc9b61f2184bd9af0a7a28d45b6f57ecd');\nhashMap.set('pip-compile','19ea8b7c966f51a7516b114d2fcb099ddcfc96a8e437e525cab06a8b0f0ca1b7');\nhashMap.set('pip_requirements','140cca562c9264fc2570a1837994cec14c427651fba507f536adc084e48d8dec');\nhashMap.set('pip_setup','31b330d9666d61474326a761a3ce1479f9a189ef6838ecfee78843ff4c80af73');\nhashMap.set('pipenv','02b3c60e01f73dce4a439ba4aecfc97467dfae0ca5be9628548db4079a1e7b38');\nhashMap.set('pixi','ad1d3689a4f4815be8b579ec7455d4c20f1a7602accd45f451ee554f4bd9d1fd');\nhashMap.set('poetry','9716ea77180528cd18f327ce666b5019c64aa108cef900e31b0cd840a256c57a');\nhashMap.set('pre-commit','64efc3146f0981751a584a29bdcfe6701cc17849c7bc2bc87b238315d843524a');\nhashMap.set('pub','a2e38469167f49a34503e25816c7b9dd113b65bd10a3ad3fa325ac4ce571a453');\nhashMap.set('puppet','34f7e3916780e8ed352b65864bad91bf66547e29f91ee8fca7fd6e8fcd2621fd');\nhashMap.set('pyenv','4e520570d9a1407864aa7c5461d4008372d889254067e405cee2212d0ef8990b');\nhashMap.set('quadlet','972bb8017f8c7811a74b91b56cfcd9d6f1aef1c026c9a8b956cecc63d95b0bb2');\nhashMap.set('renovate-config-presets','27f100d67e2a1ad20cfd4aa3f1db1f1c34f62910929695f381160b3835a7fa65');\nhashMap.set('ruby-version','4aac2178a20ccdf8136363030e5156017f3d44368b4192b3280997df596dcacc');\nhashMap.set('runtime-version','dbf80ce2a5f07dd34bc9a008159b4f08052cc6fd0d92cbd2aeb0026c8008fa72');\nhashMap.set('sbt','dc1ec4aeeb5e012c7a595478873ad67e2dee6e2af951b12b9e9057cb64f2258d');\nhashMap.set('scalafmt','8a54fef703269ed31ce28887e62b0b838a13359e86fa77c7f4dceb89fda0f352');\nhashMap.set('setup-cfg','9a778d8a58f643fff1d23d750dfebed21e45bce99bfdcdc3de39795a407d983f');\nhashMap.set('sveltos','a69f9e206526af08685e20a72344b22d856f2effd882e67333a153a989a0a047');\nhashMap.set('swift','966398303fb2b86c14cede8e4a7bfc7810d3100c39a60ac9e01e56b181df3970');\nhashMap.set('tekton','eb8fb6a25ca7fd0d304f67d5ab2e93ddd8b34854553130003ce3340ca7b3bba1');\nhashMap.set('terraform','df2687884bcb81ebd6366deff3dd67aeafac8d0ba6e6bf8d18c61717eb928d78');\nhashMap.set('terraform-version','b08480f326c45daf3daeccc2d2f593a723c30a50437a66ac2290d671b427a355');\nhashMap.set('terragrunt','b32d2317bf2cf032243c417463f3760e4decf820d2e5332e6415e16dcf05e9ab');\nhashMap.set('terragrunt-version','45f221b13a193a42687f318e10cf1558079e28c970e91ce25c370f35f88f2f58');\nhashMap.set('tflint-plugin','719408f35a233216562aa62fb8126145a3450b69f917c8fcdf2f3b2c05a9898b');\nhashMap.set('travis','30174e78a6297e44db1c030ea2e111084e14b1eac220f522522c77d684a76285');\nhashMap.set('typst','d0e2b7cbf2ac47d55bd41fd4503251a4f606861dc60d812eff7532371ae2a8cb');\nhashMap.set('unity3d','9a61f8db397bc962f03a1d82045805ffa89863894e26824ecbeffcbf66b3ba3d');\nhashMap.set('velaci','9ad5d5d2584b9c189c4edcd25ad9103926bd4ba850a419a3b5e4aba9682817c3');\nhashMap.set('vendir','c281fb3cb9d8504f919eef08d40dc525dda9a689c2760d58b4bab0f746f32f17');\nhashMap.set('woodpecker','eaaa0a3bcfd0dc60c0990f2a1d7acf19c4f86ce4641ab3cf0a31f2bf46fc61b8');\nhashMap.set('jsonata','b8a0369f94be06f2109b7d233d8165a3e03d93498c43353720eb03b1eaa43e7b');\nhashMap.set('regex','baa61e8cd76a22201283a10749170dd35bae562ecf44a58ceca39cae754e208e');"]}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ForgejoPrCache = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const is_1 = require("@sindresorhus/is");
5
6
  const dequal_1 = require("dequal");
6
7
  const luxon_1 = require("luxon");
7
8
  const error_messages_1 = require("../../../constants/error-messages");
@@ -24,7 +25,8 @@ class ForgejoPrCache {
24
25
  repoCache.platform ??= {};
25
26
  repoCache.platform.forgejo ??= {};
26
27
  let pullRequestCache = repoCache.platform.forgejo.pullRequestsCache;
27
- if (pullRequestCache?.author !== author) {
28
+ if ((0, is_1.isNullOrUndefined)(pullRequestCache) ||
29
+ pullRequestCache.author !== author) {
28
30
  pullRequestCache = {
29
31
  items: {},
30
32
  updated_at: null,
@@ -1 +1 @@
1
- {"version":3,"file":"pr-cache.js","sourceRoot":"","sources":["../../../../lib/modules/platform/forgejo/pr-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { dequal } from 'dequal';\nimport { DateTime } from 'luxon';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { getCache } from '../../../util/cache/repository';\nimport type { ForgejoHttp } from '../../../util/http/forgejo';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { getQueryString, parseLinkHeader, parseUrl } from '../../../util/url';\nimport type { Pr } from '../types';\nimport type { ForgejoPrCacheData, PR } from './types';\nimport { API_PATH, toRenovatePR } from './utils';\n\nexport class ForgejoPrCache {\n private cache: ForgejoPrCacheData;\n private items: Pr[] = [];\n\n private constructor(\n private repo: string,\n private readonly ignorePrAuthor: boolean,\n private author: string | null,\n ) {\n const repoCache = getCache();\n repoCache.platform ??= {};\n repoCache.platform.forgejo ??= {};\n let pullRequestCache = repoCache.platform.forgejo.pullRequestsCache as\n | ForgejoPrCacheData\n | undefined;\n if (pullRequestCache?.author !== author) {\n pullRequestCache = {\n items: {},\n updated_at: null,\n author,\n };\n }\n repoCache.platform.forgejo.pullRequestsCache = pullRequestCache;\n this.cache = pullRequestCache;\n this.updateItems();\n }\n\n static forceSync(): void {\n memCache.set('forgejo-pr-cache-synced', false);\n }\n\n private static async init(\n http: ForgejoHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string | null,\n ): Promise<ForgejoPrCache> {\n const res = new ForgejoPrCache(repo, ignorePrAuthor, author);\n const isSynced = memCache.get<true | undefined>('forgejo-pr-cache-synced');\n\n if (!isSynced) {\n await res.sync(http);\n memCache.set('forgejo-pr-cache-synced', true);\n }\n\n return res;\n }\n\n private getPrs(): Pr[] {\n return this.items;\n }\n\n static async getPrs(\n http: ForgejoHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string,\n ): Promise<Pr[]> {\n const prCache = await ForgejoPrCache.init(\n http,\n repo,\n ignorePrAuthor,\n author,\n );\n return prCache.getPrs();\n }\n\n private setPr(item: Pr): void {\n this.cache.items[item.number] = item;\n this.updateItems();\n }\n\n static async setPr(\n http: ForgejoHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string,\n item: Pr,\n ): Promise<void> {\n const prCache = await ForgejoPrCache.init(\n http,\n repo,\n ignorePrAuthor,\n author,\n );\n prCache.setPr(item);\n }\n\n private reconcile(rawItems: (PR | null)[]): boolean {\n const { items } = this.cache;\n let { updated_at } = this.cache;\n const cacheTime = updated_at ? DateTime.fromISO(updated_at) : null;\n\n let needNextPage = true;\n\n for (const rawItem of rawItems) {\n if (!rawItem) {\n logger.warn('Forgejo PR is empty, throwing temporary error');\n // Forgejo API sometimes returns empty PRs, so we throw a temporary error\n // https://github.com/go-forgejo/forgejo/blob/fcd096231ac2deaefbca10a7db1b9b01f1da93d7/services/convert/pull.go#L34-L52\n throw new Error(TEMPORARY_ERROR);\n }\n const id = rawItem.number;\n\n const newItem = toRenovatePR(rawItem, this.author);\n if (!newItem) {\n continue;\n }\n\n const oldItem = items[id];\n if (dequal(oldItem, newItem)) {\n needNextPage = false;\n continue;\n }\n\n items[id] = newItem;\n\n const itemTime = DateTime.fromISO(rawItem.updated_at);\n if (!cacheTime || itemTime > cacheTime) {\n updated_at = rawItem.updated_at;\n }\n }\n\n this.cache.updated_at = updated_at;\n\n return needNextPage;\n }\n\n private async sync(http: ForgejoHttp): Promise<ForgejoPrCache> {\n let query: string | null = getQueryString({\n state: 'all',\n sort: 'recentupdate',\n // Fetch 100 PRs on the first run to ensure we have the most recent PRs.\n // Forgejo will cap appropriate (50 by default, see `MAX_RESPONSE_ITEMS`).\n // https://docs.forgejo.com/administration/config-cheat-sheet#api-api\n // https://forgejo.org/docs/latest/admin/config-cheat-sheet/#api-api\n limit: this.items.length ? 20 : 100,\n // Supported since Forgejo v10.0.0.\n // Will be ignored by older instances.\n ...(this.ignorePrAuthor ? {} : { poster: this.author }),\n });\n\n while (query) {\n // TODO: use zod, typescript can't infer the type of the response #22198\n const res: HttpResponse<(PR | null)[]> = await http.getJsonUnchecked(\n `${API_PATH}/repos/${this.repo}/pulls?${query}`,\n {\n memCache: false,\n paginate: false,\n },\n );\n\n const needNextPage = this.reconcile(res.body);\n if (!needNextPage) {\n break;\n }\n\n const uri = parseUrl(parseLinkHeader(res.headers.link)?.next?.url);\n query = uri ? uri.search : null;\n }\n\n this.updateItems();\n\n return this;\n }\n\n /**\n * Ensure the pr cache starts with the most recent PRs.\n * JavaScript ensures that the cache is sorted by PR number.\n */\n private updateItems(): void {\n this.items = Object.values(this.cache.items).reverse();\n }\n}\n"]}
1
+ {"version":3,"file":"pr-cache.js","sourceRoot":"","sources":["../../../../lib/modules/platform/forgejo/pr-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNullOrUndefined } from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { DateTime } from 'luxon';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { getCache } from '../../../util/cache/repository';\nimport type { ForgejoHttp } from '../../../util/http/forgejo';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { getQueryString, parseLinkHeader, parseUrl } from '../../../util/url';\nimport type { Pr } from '../types';\nimport type { ForgejoPrCacheData, PR } from './types';\nimport { API_PATH, toRenovatePR } from './utils';\n\nexport class ForgejoPrCache {\n private cache: ForgejoPrCacheData;\n private items: Pr[] = [];\n\n private constructor(\n private repo: string,\n private readonly ignorePrAuthor: boolean,\n private author: string | null,\n ) {\n const repoCache = getCache();\n repoCache.platform ??= {};\n repoCache.platform.forgejo ??= {};\n let pullRequestCache = repoCache.platform.forgejo.pullRequestsCache as\n | ForgejoPrCacheData\n | undefined;\n if (\n isNullOrUndefined(pullRequestCache) ||\n pullRequestCache.author !== author\n ) {\n pullRequestCache = {\n items: {},\n updated_at: null,\n author,\n };\n }\n repoCache.platform.forgejo.pullRequestsCache = pullRequestCache;\n this.cache = pullRequestCache;\n this.updateItems();\n }\n\n static forceSync(): void {\n memCache.set('forgejo-pr-cache-synced', false);\n }\n\n private static async init(\n http: ForgejoHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string | null,\n ): Promise<ForgejoPrCache> {\n const res = new ForgejoPrCache(repo, ignorePrAuthor, author);\n const isSynced = memCache.get<true | undefined>('forgejo-pr-cache-synced');\n\n if (!isSynced) {\n await res.sync(http);\n memCache.set('forgejo-pr-cache-synced', true);\n }\n\n return res;\n }\n\n private getPrs(): Pr[] {\n return this.items;\n }\n\n static async getPrs(\n http: ForgejoHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string,\n ): Promise<Pr[]> {\n const prCache = await ForgejoPrCache.init(\n http,\n repo,\n ignorePrAuthor,\n author,\n );\n return prCache.getPrs();\n }\n\n private setPr(item: Pr): void {\n this.cache.items[item.number] = item;\n this.updateItems();\n }\n\n static async setPr(\n http: ForgejoHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string,\n item: Pr,\n ): Promise<void> {\n const prCache = await ForgejoPrCache.init(\n http,\n repo,\n ignorePrAuthor,\n author,\n );\n prCache.setPr(item);\n }\n\n private reconcile(rawItems: (PR | null)[]): boolean {\n const { items } = this.cache;\n let { updated_at } = this.cache;\n const cacheTime = updated_at ? DateTime.fromISO(updated_at) : null;\n\n let needNextPage = true;\n\n for (const rawItem of rawItems) {\n if (!rawItem) {\n logger.warn('Forgejo PR is empty, throwing temporary error');\n // Forgejo API sometimes returns empty PRs, so we throw a temporary error\n // https://github.com/go-forgejo/forgejo/blob/fcd096231ac2deaefbca10a7db1b9b01f1da93d7/services/convert/pull.go#L34-L52\n throw new Error(TEMPORARY_ERROR);\n }\n const id = rawItem.number;\n\n const newItem = toRenovatePR(rawItem, this.author);\n if (!newItem) {\n continue;\n }\n\n const oldItem = items[id];\n if (dequal(oldItem, newItem)) {\n needNextPage = false;\n continue;\n }\n\n items[id] = newItem;\n\n const itemTime = DateTime.fromISO(rawItem.updated_at);\n if (!cacheTime || itemTime > cacheTime) {\n updated_at = rawItem.updated_at;\n }\n }\n\n this.cache.updated_at = updated_at;\n\n return needNextPage;\n }\n\n private async sync(http: ForgejoHttp): Promise<ForgejoPrCache> {\n let query: string | null = getQueryString({\n state: 'all',\n sort: 'recentupdate',\n // Fetch 100 PRs on the first run to ensure we have the most recent PRs.\n // Forgejo will cap appropriate (50 by default, see `MAX_RESPONSE_ITEMS`).\n // https://docs.forgejo.com/administration/config-cheat-sheet#api-api\n // https://forgejo.org/docs/latest/admin/config-cheat-sheet/#api-api\n limit: this.items.length ? 20 : 100,\n // Supported since Forgejo v10.0.0.\n // Will be ignored by older instances.\n ...(this.ignorePrAuthor ? {} : { poster: this.author }),\n });\n\n while (query) {\n // TODO: use zod, typescript can't infer the type of the response #22198\n const res: HttpResponse<(PR | null)[]> = await http.getJsonUnchecked(\n `${API_PATH}/repos/${this.repo}/pulls?${query}`,\n {\n memCache: false,\n paginate: false,\n },\n );\n\n const needNextPage = this.reconcile(res.body);\n if (!needNextPage) {\n break;\n }\n\n const uri = parseUrl(parseLinkHeader(res.headers.link)?.next?.url);\n query = uri ? uri.search : null;\n }\n\n this.updateItems();\n\n return this;\n }\n\n /**\n * Ensure the pr cache starts with the most recent PRs.\n * JavaScript ensures that the cache is sorted by PR number.\n */\n private updateItems(): void {\n this.items = Object.values(this.cache.items).reverse();\n }\n}\n"]}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GiteaPrCache = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const is_1 = require("@sindresorhus/is");
5
6
  const dequal_1 = require("dequal");
6
7
  const luxon_1 = require("luxon");
7
8
  const error_messages_1 = require("../../../constants/error-messages");
@@ -24,7 +25,8 @@ class GiteaPrCache {
24
25
  repoCache.platform ??= {};
25
26
  repoCache.platform.gitea ??= {};
26
27
  let pullRequestCache = repoCache.platform.gitea.pullRequestsCache;
27
- if (pullRequestCache?.author !== author) {
28
+ if ((0, is_1.isNullOrUndefined)(pullRequestCache) ||
29
+ pullRequestCache.author !== author) {
28
30
  pullRequestCache = {
29
31
  items: {},
30
32
  updated_at: null,
@@ -1 +1 @@
1
- {"version":3,"file":"pr-cache.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gitea/pr-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { dequal } from 'dequal';\nimport { DateTime } from 'luxon';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { getCache } from '../../../util/cache/repository';\nimport type { GiteaHttp } from '../../../util/http/gitea';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { getQueryString, parseLinkHeader, parseUrl } from '../../../util/url';\nimport type { Pr } from '../types';\nimport type { GiteaPrCacheData, PR } from './types';\nimport { API_PATH, toRenovatePR } from './utils';\n\nexport class GiteaPrCache {\n private cache: GiteaPrCacheData;\n private items: Pr[] = [];\n\n private constructor(\n private repo: string,\n private readonly ignorePrAuthor: boolean,\n private author: string | null,\n ) {\n const repoCache = getCache();\n repoCache.platform ??= {};\n repoCache.platform.gitea ??= {};\n let pullRequestCache = repoCache.platform.gitea.pullRequestsCache as\n | GiteaPrCacheData\n | undefined;\n if (pullRequestCache?.author !== author) {\n pullRequestCache = {\n items: {},\n updated_at: null,\n author,\n };\n }\n repoCache.platform.gitea.pullRequestsCache = pullRequestCache;\n this.cache = pullRequestCache;\n this.updateItems();\n }\n\n static forceSync(): void {\n memCache.set('gitea-pr-cache-synced', false);\n }\n\n private static async init(\n http: GiteaHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string | null,\n ): Promise<GiteaPrCache> {\n const res = new GiteaPrCache(repo, ignorePrAuthor, author);\n const isSynced = memCache.get<true | undefined>('gitea-pr-cache-synced');\n\n if (!isSynced) {\n await res.sync(http);\n memCache.set('gitea-pr-cache-synced', true);\n }\n\n return res;\n }\n\n private getPrs(): Pr[] {\n return this.items;\n }\n\n static async getPrs(\n http: GiteaHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string,\n ): Promise<Pr[]> {\n const prCache = await GiteaPrCache.init(http, repo, ignorePrAuthor, author);\n return prCache.getPrs();\n }\n\n private setPr(item: Pr): void {\n this.cache.items[item.number] = item;\n this.updateItems();\n }\n\n static async setPr(\n http: GiteaHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string,\n item: Pr,\n ): Promise<void> {\n const prCache = await GiteaPrCache.init(http, repo, ignorePrAuthor, author);\n prCache.setPr(item);\n }\n\n private reconcile(rawItems: (PR | null)[]): boolean {\n const { items } = this.cache;\n let { updated_at } = this.cache;\n const cacheTime = updated_at ? DateTime.fromISO(updated_at) : null;\n\n let needNextPage = true;\n\n for (const rawItem of rawItems) {\n if (!rawItem) {\n logger.warn('Gitea PR is empty, throwing temporary error');\n // Gitea API sometimes returns empty PRs, so we throw a temporary error\n // https://github.com/go-gitea/gitea/blob/fcd096231ac2deaefbca10a7db1b9b01f1da93d7/services/convert/pull.go#L34-L52\n throw new Error(TEMPORARY_ERROR);\n }\n const id = rawItem.number;\n\n const newItem = toRenovatePR(rawItem, this.author);\n if (!newItem) {\n continue;\n }\n\n const oldItem = items[id];\n if (dequal(oldItem, newItem)) {\n needNextPage = false;\n continue;\n }\n\n items[id] = newItem;\n\n const itemTime = DateTime.fromISO(rawItem.updated_at);\n if (!cacheTime || itemTime > cacheTime) {\n updated_at = rawItem.updated_at;\n }\n }\n\n this.cache.updated_at = updated_at;\n\n return needNextPage;\n }\n\n private async sync(http: GiteaHttp): Promise<GiteaPrCache> {\n let query: string | null = getQueryString({\n state: 'all',\n sort: 'recentupdate',\n // Fetch 100 PRs on the first run to ensure we have the most recent PRs.\n // Gitea / Forgejo will cap appropriate (50 by default, see `MAX_RESPONSE_ITEMS`).\n // https://docs.gitea.com/administration/config-cheat-sheet#api-api\n // https://forgejo.org/docs/latest/admin/config-cheat-sheet/#api-api\n limit: this.items.length ? 20 : 100,\n // Supported since Gitea 1.23.0 and Forgejo v10.0.0.\n // Will be ignoded by older instances.\n ...(this.ignorePrAuthor ? {} : { poster: this.author }),\n });\n\n while (query) {\n // TODO: use zod, typescript can't infer the type of the response #22198\n const res: HttpResponse<(PR | null)[]> = await http.getJsonUnchecked(\n `${API_PATH}/repos/${this.repo}/pulls?${query}`,\n {\n memCache: false,\n paginate: false,\n },\n );\n\n const needNextPage = this.reconcile(res.body);\n if (!needNextPage) {\n break;\n }\n\n const uri = parseUrl(parseLinkHeader(res.headers.link)?.next?.url);\n query = uri ? uri.search : null;\n }\n\n this.updateItems();\n\n return this;\n }\n\n /**\n * Ensure the pr cache starts with the most recent PRs.\n * JavaScript ensures that the cache is sorted by PR number.\n */\n private updateItems(): void {\n this.items = Object.values(this.cache.items).reverse();\n }\n}\n"]}
1
+ {"version":3,"file":"pr-cache.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gitea/pr-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNullOrUndefined } from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { DateTime } from 'luxon';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { getCache } from '../../../util/cache/repository';\nimport type { GiteaHttp } from '../../../util/http/gitea';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { getQueryString, parseLinkHeader, parseUrl } from '../../../util/url';\nimport type { Pr } from '../types';\nimport type { GiteaPrCacheData, PR } from './types';\nimport { API_PATH, toRenovatePR } from './utils';\n\nexport class GiteaPrCache {\n private cache: GiteaPrCacheData;\n private items: Pr[] = [];\n\n private constructor(\n private repo: string,\n private readonly ignorePrAuthor: boolean,\n private author: string | null,\n ) {\n const repoCache = getCache();\n repoCache.platform ??= {};\n repoCache.platform.gitea ??= {};\n let pullRequestCache = repoCache.platform.gitea.pullRequestsCache as\n | GiteaPrCacheData\n | undefined;\n if (\n isNullOrUndefined(pullRequestCache) ||\n pullRequestCache.author !== author\n ) {\n pullRequestCache = {\n items: {},\n updated_at: null,\n author,\n };\n }\n repoCache.platform.gitea.pullRequestsCache = pullRequestCache;\n this.cache = pullRequestCache;\n this.updateItems();\n }\n\n static forceSync(): void {\n memCache.set('gitea-pr-cache-synced', false);\n }\n\n private static async init(\n http: GiteaHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string | null,\n ): Promise<GiteaPrCache> {\n const res = new GiteaPrCache(repo, ignorePrAuthor, author);\n const isSynced = memCache.get<true | undefined>('gitea-pr-cache-synced');\n\n if (!isSynced) {\n await res.sync(http);\n memCache.set('gitea-pr-cache-synced', true);\n }\n\n return res;\n }\n\n private getPrs(): Pr[] {\n return this.items;\n }\n\n static async getPrs(\n http: GiteaHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string,\n ): Promise<Pr[]> {\n const prCache = await GiteaPrCache.init(http, repo, ignorePrAuthor, author);\n return prCache.getPrs();\n }\n\n private setPr(item: Pr): void {\n this.cache.items[item.number] = item;\n this.updateItems();\n }\n\n static async setPr(\n http: GiteaHttp,\n repo: string,\n ignorePrAuthor: boolean,\n author: string,\n item: Pr,\n ): Promise<void> {\n const prCache = await GiteaPrCache.init(http, repo, ignorePrAuthor, author);\n prCache.setPr(item);\n }\n\n private reconcile(rawItems: (PR | null)[]): boolean {\n const { items } = this.cache;\n let { updated_at } = this.cache;\n const cacheTime = updated_at ? DateTime.fromISO(updated_at) : null;\n\n let needNextPage = true;\n\n for (const rawItem of rawItems) {\n if (!rawItem) {\n logger.warn('Gitea PR is empty, throwing temporary error');\n // Gitea API sometimes returns empty PRs, so we throw a temporary error\n // https://github.com/go-gitea/gitea/blob/fcd096231ac2deaefbca10a7db1b9b01f1da93d7/services/convert/pull.go#L34-L52\n throw new Error(TEMPORARY_ERROR);\n }\n const id = rawItem.number;\n\n const newItem = toRenovatePR(rawItem, this.author);\n if (!newItem) {\n continue;\n }\n\n const oldItem = items[id];\n if (dequal(oldItem, newItem)) {\n needNextPage = false;\n continue;\n }\n\n items[id] = newItem;\n\n const itemTime = DateTime.fromISO(rawItem.updated_at);\n if (!cacheTime || itemTime > cacheTime) {\n updated_at = rawItem.updated_at;\n }\n }\n\n this.cache.updated_at = updated_at;\n\n return needNextPage;\n }\n\n private async sync(http: GiteaHttp): Promise<GiteaPrCache> {\n let query: string | null = getQueryString({\n state: 'all',\n sort: 'recentupdate',\n // Fetch 100 PRs on the first run to ensure we have the most recent PRs.\n // Gitea / Forgejo will cap appropriate (50 by default, see `MAX_RESPONSE_ITEMS`).\n // https://docs.gitea.com/administration/config-cheat-sheet#api-api\n // https://forgejo.org/docs/latest/admin/config-cheat-sheet/#api-api\n limit: this.items.length ? 20 : 100,\n // Supported since Gitea 1.23.0 and Forgejo v10.0.0.\n // Will be ignoded by older instances.\n ...(this.ignorePrAuthor ? {} : { poster: this.author }),\n });\n\n while (query) {\n // TODO: use zod, typescript can't infer the type of the response #22198\n const res: HttpResponse<(PR | null)[]> = await http.getJsonUnchecked(\n `${API_PATH}/repos/${this.repo}/pulls?${query}`,\n {\n memCache: false,\n paginate: false,\n },\n );\n\n const needNextPage = this.reconcile(res.body);\n if (!needNextPage) {\n break;\n }\n\n const uri = parseUrl(parseLinkHeader(res.headers.link)?.next?.url);\n query = uri ? uri.search : null;\n }\n\n this.updateItems();\n\n return this;\n }\n\n /**\n * Ensure the pr cache starts with the most recent PRs.\n * JavaScript ensures that the cache is sorted by PR number.\n */\n private updateItems(): void {\n this.items = Object.values(this.cache.items).reverse();\n }\n}\n"]}
@@ -138,7 +138,7 @@ async function ensurePr(prConfig) {
138
138
  logger_1.logger.debug('Checking how long this branch has been pending');
139
139
  const lastCommitTime = await (0, git_1.getBranchLastCommitTime)(branchName);
140
140
  if ((0, date_1.getElapsedHours)(lastCommitTime) >= config.prNotPendingHours) {
141
- logger_1.logger.debug('Branch exceeds prNotPending hours - forcing PR creation');
141
+ logger_1.logger.debug(`Branch exceeds prNotPending=${config.prNotPendingHours}, hours - forcing PR creation`);
142
142
  config.forcePr = true;
143
143
  }
144
144
  }
@@ -172,7 +172,7 @@ async function ensurePr(prConfig) {
172
172
  ((config.stabilityStatus && config.stabilityStatus !== 'yellow') ||
173
173
  ((0, is_1.isNumber)(config.prNotPendingHours) &&
174
174
  elapsedHours < config.prNotPendingHours))) {
175
- logger_1.logger.debug(`Branch is ${elapsedHours} hours old - skipping PR creation`);
175
+ logger_1.logger.debug(`Branch is ${elapsedHours} hours old - skipping PR creation as prNotPendingHours is set to ${config.prNotPendingHours}`);
176
176
  return {
177
177
  type: 'without-pr',
178
178
  prBlockedBy: 'AwaitingTests',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/pr/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { isArray, isNonEmptyArray, isNumber } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global';\nimport type { RenovateConfig } from '../../../../config/types';\nimport {\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../../../constants/error-messages';\nimport { pkg } from '../../../../expose.cjs';\nimport { logger } from '../../../../logger';\nimport type {\n PlatformPrOptions,\n Pr,\n PrDebugData,\n UpdatePrConfig,\n} from '../../../../modules/platform';\nimport { platform } from '../../../../modules/platform';\nimport { ensureComment } from '../../../../modules/platform/comment';\nimport {\n getPrBodyStruct,\n hashBody,\n} from '../../../../modules/platform/pr-body';\nimport { scm } from '../../../../modules/platform/scm';\nimport { ExternalHostError } from '../../../../types/errors/external-host-error';\nimport { getElapsedHours } from '../../../../util/date';\nimport { stripEmojis } from '../../../../util/emoji';\nimport { fingerprint } from '../../../../util/fingerprint';\nimport { getBranchLastCommitTime } from '../../../../util/git';\nimport { memoize } from '../../../../util/memoize';\nimport { incCountValue, isLimitReached } from '../../../global/limits';\nimport type {\n BranchConfig,\n BranchUpgradeConfig,\n PrBlockedBy,\n} from '../../../types';\nimport { embedChangelogs } from '../../changelog';\nimport { resolveBranchStatus } from '../branch/status-checks';\nimport { getPrBody } from './body';\nimport { getChangedLabels, prepareLabels, shouldUpdateLabels } from './labels';\nimport { addParticipants } from './participants';\nimport { getPrCache, setPrCache } from './pr-cache';\nimport {\n generatePrBodyFingerprintConfig,\n validatePrCache,\n} from './pr-fingerprint';\nimport { tryReuseAutoclosedPr } from './pr-reuse';\n\nexport function getPlatformPrOptions(\n config: RenovateConfig & PlatformPrOptions,\n): PlatformPrOptions {\n const usePlatformAutomerge = Boolean(\n config.automerge &&\n (config.automergeType === 'pr' || config.automergeType === 'branch') &&\n config.platformAutomerge,\n );\n\n return {\n autoApprove: !!config.autoApprove,\n automergeStrategy: config.automergeStrategy,\n azureWorkItemId: config.azureWorkItemId ?? 0,\n bbAutoResolvePrTasks: !!config.bbAutoResolvePrTasks,\n bbUseDefaultReviewers: !!config.bbUseDefaultReviewers,\n gitLabIgnoreApprovals: !!config.gitLabIgnoreApprovals,\n forkModeDisallowMaintainerEdits: !!config.forkModeDisallowMaintainerEdits,\n usePlatformAutomerge,\n };\n}\n\nexport interface ResultWithPr {\n type: 'with-pr';\n pr: Pr;\n}\n\nexport interface ResultWithoutPr {\n type: 'without-pr';\n prBlockedBy: PrBlockedBy;\n}\n\nexport type EnsurePrResult = ResultWithPr | ResultWithoutPr;\n\nexport function updatePrDebugData(\n targetBranch: string,\n labels: string[],\n debugData: PrDebugData | undefined,\n): PrDebugData {\n const createdByRenovateVersion = debugData?.createdInVer ?? pkg.version;\n const updatedByRenovateVersion = pkg.version;\n\n const updatedPrDebugData: PrDebugData = {\n createdInVer: createdByRenovateVersion,\n updatedInVer: updatedByRenovateVersion,\n targetBranch,\n };\n\n // Add labels to the debug data object.\n // When to add:\n // 1. Add it when a new PR is created, i.e., when debugData is undefined.\n // 2. Add it if an existing PR already has labels in the debug data, confirming that we can update its labels.\n if (!debugData || isArray(debugData.labels)) {\n updatedPrDebugData.labels = labels;\n }\n\n return updatedPrDebugData;\n}\n\nfunction hasNotIgnoredReviewers(pr: Pr, config: BranchConfig): boolean {\n if (\n isNonEmptyArray(config.ignoreReviewers) &&\n isNonEmptyArray(pr.reviewers)\n ) {\n const ignoreReviewers = new Set(config.ignoreReviewers);\n return (\n pr.reviewers.filter((reviewer) => !ignoreReviewers.has(reviewer)).length >\n 0\n );\n }\n return isNonEmptyArray(pr.reviewers);\n}\n\nfunction addPullRequestNoteIfAttestationHasBeenLost(\n upgrade: BranchUpgradeConfig,\n): void {\n const { packageName, depName, currentVersion, newVersion } = upgrade;\n const name = packageName ?? depName;\n\n const currentRelease = upgrade.releases?.find(\n (release) => release.version === currentVersion,\n );\n const newRelease = upgrade.releases?.find(\n (release) => release.version === newVersion,\n );\n\n if (\n currentRelease &&\n newRelease &&\n currentRelease.attestation === true &&\n newRelease.attestation !== true\n ) {\n upgrade.prBodyNotes ??= [];\n upgrade.prBodyNotes.push(\n [\n '> :exclamation: **Warning**',\n '>',\n `> ${name} ${currentVersion} was released with an attestation, but ${newVersion} has no attestation.`,\n `> Verify that release ${newVersion} was published by the expected author.`,\n '\\n',\n ].join('\\n'),\n );\n }\n}\n\n// Ensures that PR exists with matching title/body\nexport async function ensurePr(\n prConfig: BranchConfig,\n): Promise<EnsurePrResult> {\n const config: BranchConfig = { ...prConfig };\n const filteredPrConfig = generatePrBodyFingerprintConfig(config);\n const prBodyFingerprint = fingerprint(filteredPrConfig);\n logger.trace({ config }, 'ensurePr');\n // If there is a group, it will use the config of the first upgrade in the array\n const {\n branchName,\n ignoreTests,\n internalChecksAsSuccess,\n prTitle = '',\n upgrades,\n } = config;\n const getBranchStatus = memoize(() =>\n resolveBranchStatus(branchName, !!internalChecksAsSuccess, ignoreTests),\n );\n const dependencyDashboardCheck =\n config.dependencyDashboardChecks?.[config.branchName];\n // Check if PR already exists\n const existingPr =\n (await platform.getBranchPr(branchName, config.baseBranch)) ??\n (await tryReuseAutoclosedPr(branchName, prTitle));\n const prCache = getPrCache(branchName);\n if (existingPr) {\n logger.debug('Found existing PR');\n if (existingPr.bodyStruct?.rebaseRequested) {\n logger.debug('PR rebase requested, so skipping cache check');\n } else if (prCache) {\n logger.trace({ prCache }, 'Found existing PR cache');\n // return if pr cache is valid and pr was not changed in the past 24hrs\n if (validatePrCache(prCache, prBodyFingerprint)) {\n return { type: 'with-pr', pr: existingPr };\n }\n } else if (config.repositoryCache === 'enabled') {\n logger.debug('PR cache not found');\n }\n }\n config.upgrades = [];\n\n if (config.artifactErrors?.length) {\n logger.debug('Forcing PR because of artifact errors');\n config.forcePr = true;\n }\n\n if (dependencyDashboardCheck === 'approvePr') {\n logger.debug('Forcing PR because of dependency dashboard approval');\n config.forcePr = true;\n }\n\n if (!existingPr) {\n // Only create a PR if a branch automerge has failed\n if (\n config.automerge === true &&\n config.automergeType?.startsWith('branch') &&\n !config.forcePr\n ) {\n logger.debug(`Branch automerge is enabled`);\n if (\n config.stabilityStatus !== 'yellow' &&\n (await getBranchStatus()) === 'yellow' &&\n isNumber(config.prNotPendingHours)\n ) {\n logger.debug('Checking how long this branch has been pending');\n const lastCommitTime = await getBranchLastCommitTime(branchName);\n if (getElapsedHours(lastCommitTime) >= config.prNotPendingHours) {\n logger.debug(\n 'Branch exceeds prNotPending hours - forcing PR creation',\n );\n config.forcePr = true;\n }\n }\n if (config.forcePr || (await getBranchStatus()) === 'red') {\n logger.debug(`Branch tests failed, so will create PR`);\n } else {\n // Branch should be automerged, so we don't want to create a PR\n return { type: 'without-pr', prBlockedBy: 'BranchAutomerge' };\n }\n }\n if (config.prCreation === 'status-success') {\n logger.debug('Checking branch combined status');\n if ((await getBranchStatus()) !== 'green') {\n logger.debug(`Branch status isn't green - not creating PR`);\n return { type: 'without-pr', prBlockedBy: 'AwaitingTests' };\n }\n logger.debug('Branch status success');\n } else if (\n config.prCreation === 'approval' &&\n dependencyDashboardCheck !== 'approvePr'\n ) {\n return { type: 'without-pr', prBlockedBy: 'NeedsApproval' };\n } else if (config.prCreation === 'not-pending' && !config.forcePr) {\n logger.debug('Checking branch combined status');\n if ((await getBranchStatus()) === 'yellow') {\n logger.debug(`Branch status is yellow - checking timeout`);\n const lastCommitTime = await getBranchLastCommitTime(branchName);\n const elapsedHours = getElapsedHours(lastCommitTime);\n if (\n !dependencyDashboardCheck &&\n ((config.stabilityStatus && config.stabilityStatus !== 'yellow') ||\n (isNumber(config.prNotPendingHours) &&\n elapsedHours < config.prNotPendingHours))\n ) {\n logger.debug(\n `Branch is ${elapsedHours} hours old - skipping PR creation`,\n );\n return {\n type: 'without-pr',\n prBlockedBy: 'AwaitingTests',\n };\n }\n const prNotPendingHours = String(config.prNotPendingHours);\n logger.debug(\n `prNotPendingHours=${prNotPendingHours} threshold hit - creating PR`,\n );\n }\n logger.debug('Branch status success');\n }\n }\n\n const processedUpgrades: string[] = [];\n const commitRepos: string[] = [];\n\n function getRepoNameWithSourceDirectory(\n upgrade: BranchUpgradeConfig,\n ): string {\n // TODO: types (#22198)\n return `${upgrade.repoName!}${\n upgrade.sourceDirectory ? `:${upgrade.sourceDirectory}` : ''\n }`;\n }\n\n if (config.fetchChangeLogs === 'pr') {\n // fetch changelogs when not already done;\n await embedChangelogs(upgrades);\n }\n\n // Get changelog and then generate template strings\n for (const upgrade of upgrades) {\n // TODO: types (#22198)\n const upgradeKey = `${upgrade.depType!}-${upgrade.depName!}-${upgrade.manager}-${upgrade.currentVersion ?? ''}-${upgrade.currentValue ?? ''}-${upgrade.newVersion ?? ''}-${upgrade.newValue ?? ''}`;\n if (processedUpgrades.includes(upgradeKey)) {\n continue;\n }\n processedUpgrades.push(upgradeKey);\n\n const logJSON = upgrade.logJSON;\n\n if (logJSON) {\n if (typeof logJSON.error === 'undefined') {\n if (logJSON.project) {\n upgrade.repoName = logJSON.project.repository;\n }\n upgrade.hasReleaseNotes = false;\n upgrade.releases = [];\n if (\n logJSON.hasReleaseNotes &&\n upgrade.repoName &&\n !commitRepos.includes(getRepoNameWithSourceDirectory(upgrade))\n ) {\n commitRepos.push(getRepoNameWithSourceDirectory(upgrade));\n upgrade.hasReleaseNotes = logJSON.hasReleaseNotes;\n if (logJSON.versions) {\n for (const version of logJSON.versions) {\n const release = { ...version };\n upgrade.releases.push(release);\n }\n }\n }\n } else if (logJSON.error === 'MissingGithubToken') {\n upgrade.prBodyNotes ??= [];\n upgrade.prBodyNotes.push(\n [\n '> :exclamation: **Important**',\n '> ',\n '> Release Notes retrieval for this PR were skipped because no github.com credentials were available. ',\n '> If you are self-hosted, please see [this instruction](https://github.com/renovatebot/renovate/blob/master/docs/usage/examples/self-hosting.md#githubcom-token-for-release-notes).',\n '\\n',\n ].join('\\n'),\n );\n }\n }\n\n addPullRequestNoteIfAttestationHasBeenLost(upgrade);\n\n config.upgrades.push(upgrade);\n }\n\n config.hasReleaseNotes = config.upgrades.some((upg) => upg.hasReleaseNotes);\n\n const releaseNotesSources: string[] = [];\n for (const upgrade of config.upgrades) {\n let notesSourceUrl = upgrade.releases?.[0]?.releaseNotes?.notesSourceUrl;\n // TODO: types (#22198)\n notesSourceUrl ??= `${upgrade.sourceUrl!}${\n upgrade.sourceDirectory ? `:${upgrade.sourceDirectory}` : ''\n }`;\n\n if (upgrade.hasReleaseNotes && notesSourceUrl) {\n if (releaseNotesSources.includes(notesSourceUrl)) {\n logger.debug(\n { depName: upgrade.depName },\n 'Removing duplicate release notes',\n );\n upgrade.hasReleaseNotes = false;\n } else {\n releaseNotesSources.push(notesSourceUrl);\n }\n }\n }\n\n const prBody = getPrBody(\n config,\n {\n debugData: updatePrDebugData(\n config.baseBranch,\n prepareLabels(config), // include labels in debug data\n existingPr?.bodyStruct?.debugData,\n ),\n },\n config,\n );\n\n try {\n if (existingPr) {\n logger.debug('Processing existing PR');\n\n if (\n !existingPr.hasAssignees &&\n !hasNotIgnoredReviewers(existingPr, config) &&\n config.automerge &&\n !config.assignAutomerge &&\n (await getBranchStatus()) === 'red'\n ) {\n logger.debug(`Setting assignees and reviewers as status checks failed`);\n await addParticipants(config, existingPr);\n }\n // Check if existing PR needs updating\n const existingPrTitle = stripEmojis(existingPr.title);\n const existingPrBodyHash = existingPr.bodyStruct?.hash;\n const newPrTitle = stripEmojis(prTitle);\n const newPrBodyHash = hashBody(prBody);\n\n const prInitialLabels = existingPr.bodyStruct?.debugData?.labels;\n const prCurrentLabels = existingPr.labels;\n const configuredLabels = prepareLabels(config);\n\n const labelsNeedUpdate = shouldUpdateLabels(\n prInitialLabels,\n prCurrentLabels,\n configuredLabels,\n );\n\n if (\n existingPr?.targetBranch === config.baseBranch &&\n existingPrTitle === newPrTitle &&\n existingPrBodyHash === newPrBodyHash &&\n !labelsNeedUpdate\n ) {\n // adds or-cache for existing PRs\n setPrCache(branchName, prBodyFingerprint, false);\n logger.debug(\n `Pull Request #${existingPr.number} does not need updating`,\n );\n return { type: 'with-pr', pr: existingPr };\n }\n\n const updatePrConfig: UpdatePrConfig = {\n number: existingPr.number,\n prTitle,\n prBody,\n platformPrOptions: getPlatformPrOptions(config),\n };\n // PR must need updating\n if (existingPr?.targetBranch !== config.baseBranch) {\n logger.debug(\n {\n branchName,\n oldBaseBranch: existingPr?.targetBranch,\n newBaseBranch: config.baseBranch,\n },\n 'PR base branch has changed',\n );\n updatePrConfig.targetBranch = config.baseBranch;\n }\n\n if (labelsNeedUpdate) {\n logger.debug(\n {\n branchName,\n prCurrentLabels,\n configuredLabels,\n },\n 'PR labels have changed',\n );\n\n // Divide labels into three categories:\n // i) addLabels: Labels that need to be added\n // ii) removeLabels: Labels that need to be removed\n // iii) labels: New labels for the PR, replacing the old labels array entirely.\n // This distinction is necessary because different platforms update labels differently\n // For more details, refer to the updatePr function of each platform.\n\n const [addLabels, removeLabels] = getChangedLabels(\n prCurrentLabels,\n configuredLabels,\n );\n\n // for Gitea\n updatePrConfig.labels = configuredLabels;\n\n // for GitHub, GitLab\n updatePrConfig.addLabels = addLabels;\n updatePrConfig.removeLabels = removeLabels;\n }\n if (existingPrTitle !== newPrTitle) {\n logger.debug(\n {\n branchName,\n oldPrTitle: existingPr.title,\n newPrTitle: prTitle,\n },\n 'PR title changed',\n );\n } else if (!config.committedFiles && !config.rebaseRequested) {\n logger.debug(\n {\n prTitle,\n },\n 'PR body changed',\n );\n }\n\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would update PR #${existingPr.number}`);\n return { type: 'with-pr', pr: existingPr };\n } else {\n await platform.updatePr(updatePrConfig);\n logger.info({ pr: existingPr.number, prTitle }, `PR updated`);\n setPrCache(branchName, prBodyFingerprint, true);\n }\n return {\n type: 'with-pr',\n pr: {\n ...existingPr,\n bodyStruct: getPrBodyStruct(prBody),\n title: prTitle,\n targetBranch: config.baseBranch,\n },\n };\n }\n logger.debug({ branch: branchName, prTitle }, `Creating PR`);\n if (config.updateType === 'rollback') {\n logger.info('Creating Rollback PR');\n }\n let pr: Pr | null;\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create PR: ' + prTitle);\n pr = { number: 0 } as never;\n } else {\n try {\n if (\n !dependencyDashboardCheck &&\n isLimitReached('ConcurrentPRs', prConfig) &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Skipping PR - limit reached');\n return { type: 'without-pr', prBlockedBy: 'RateLimited' };\n }\n pr = await platform.createPr({\n sourceBranch: branchName,\n targetBranch: config.baseBranch,\n prTitle,\n prBody,\n labels: prepareLabels(config),\n platformPrOptions: getPlatformPrOptions(config),\n draftPR: !!config.draftPR,\n milestone: config.milestone,\n });\n\n incCountValue('ConcurrentPRs');\n incCountValue('HourlyPRs');\n logger.info({ pr: pr?.number, prTitle }, 'PR created');\n } catch (err) {\n logger.debug({ err }, 'Pull request creation error');\n if (\n err.body?.message === 'Validation failed' &&\n err.body.errors?.length &&\n err.body.errors.some((error: { message?: string }) =>\n error.message?.startsWith('A pull request already exists'),\n )\n ) {\n logger.warn('A pull requests already exists');\n return { type: 'without-pr', prBlockedBy: 'Error' };\n }\n if (err.statusCode === 502) {\n logger.warn(\n { branch: branchName },\n 'Deleting branch due to server error',\n );\n await scm.deleteBranch(branchName);\n }\n return { type: 'without-pr', prBlockedBy: 'Error' };\n }\n }\n if (\n pr &&\n config.branchAutomergeFailureMessage &&\n !config.suppressNotifications?.includes('branchAutomergeFailure')\n ) {\n const topic = 'Branch automerge failure';\n let content =\n 'This PR was configured for branch automerge. However, this is not possible, so it has been raised as a PR instead.';\n if (config.branchAutomergeFailureMessage === 'branch status error') {\n content += '\\n___\\n * Branch has one or more failed status checks';\n }\n content = platform.massageMarkdown(content, config.rebaseLabel);\n logger.debug('Adding branch automerge failure message to PR');\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would add comment to PR #${pr.number}`);\n } else {\n await ensureComment({\n number: pr.number,\n topic,\n content,\n });\n }\n }\n // Skip assign and review if automerging PR\n if (pr) {\n if (\n config.automerge &&\n !config.assignAutomerge &&\n (await getBranchStatus()) !== 'red'\n ) {\n logger.debug(\n `Skipping assignees and reviewers as automerge=${config.automerge}`,\n );\n } else {\n await addParticipants(config, pr);\n }\n setPrCache(branchName, prBodyFingerprint, true);\n logger.debug(`Created Pull Request #${pr.number}`);\n return { type: 'with-pr', pr };\n }\n } catch (err) {\n if (\n err instanceof ExternalHostError ||\n err.message === REPOSITORY_CHANGED ||\n err.message === PLATFORM_RATE_LIMIT_EXCEEDED ||\n err.message === PLATFORM_INTEGRATION_UNAUTHORIZED\n ) {\n logger.debug('Passing error up');\n throw err;\n }\n logger.warn({ err, prTitle }, 'Failed to ensure PR');\n }\n if (existingPr) {\n return { type: 'with-pr', pr: existingPr };\n }\n return { type: 'without-pr', prBlockedBy: 'Error' };\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/pr/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { isArray, isNonEmptyArray, isNumber } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global';\nimport type { RenovateConfig } from '../../../../config/types';\nimport {\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../../../constants/error-messages';\nimport { pkg } from '../../../../expose.cjs';\nimport { logger } from '../../../../logger';\nimport type {\n PlatformPrOptions,\n Pr,\n PrDebugData,\n UpdatePrConfig,\n} from '../../../../modules/platform';\nimport { platform } from '../../../../modules/platform';\nimport { ensureComment } from '../../../../modules/platform/comment';\nimport {\n getPrBodyStruct,\n hashBody,\n} from '../../../../modules/platform/pr-body';\nimport { scm } from '../../../../modules/platform/scm';\nimport { ExternalHostError } from '../../../../types/errors/external-host-error';\nimport { getElapsedHours } from '../../../../util/date';\nimport { stripEmojis } from '../../../../util/emoji';\nimport { fingerprint } from '../../../../util/fingerprint';\nimport { getBranchLastCommitTime } from '../../../../util/git';\nimport { memoize } from '../../../../util/memoize';\nimport { incCountValue, isLimitReached } from '../../../global/limits';\nimport type {\n BranchConfig,\n BranchUpgradeConfig,\n PrBlockedBy,\n} from '../../../types';\nimport { embedChangelogs } from '../../changelog';\nimport { resolveBranchStatus } from '../branch/status-checks';\nimport { getPrBody } from './body';\nimport { getChangedLabels, prepareLabels, shouldUpdateLabels } from './labels';\nimport { addParticipants } from './participants';\nimport { getPrCache, setPrCache } from './pr-cache';\nimport {\n generatePrBodyFingerprintConfig,\n validatePrCache,\n} from './pr-fingerprint';\nimport { tryReuseAutoclosedPr } from './pr-reuse';\n\nexport function getPlatformPrOptions(\n config: RenovateConfig & PlatformPrOptions,\n): PlatformPrOptions {\n const usePlatformAutomerge = Boolean(\n config.automerge &&\n (config.automergeType === 'pr' || config.automergeType === 'branch') &&\n config.platformAutomerge,\n );\n\n return {\n autoApprove: !!config.autoApprove,\n automergeStrategy: config.automergeStrategy,\n azureWorkItemId: config.azureWorkItemId ?? 0,\n bbAutoResolvePrTasks: !!config.bbAutoResolvePrTasks,\n bbUseDefaultReviewers: !!config.bbUseDefaultReviewers,\n gitLabIgnoreApprovals: !!config.gitLabIgnoreApprovals,\n forkModeDisallowMaintainerEdits: !!config.forkModeDisallowMaintainerEdits,\n usePlatformAutomerge,\n };\n}\n\nexport interface ResultWithPr {\n type: 'with-pr';\n pr: Pr;\n}\n\nexport interface ResultWithoutPr {\n type: 'without-pr';\n prBlockedBy: PrBlockedBy;\n}\n\nexport type EnsurePrResult = ResultWithPr | ResultWithoutPr;\n\nexport function updatePrDebugData(\n targetBranch: string,\n labels: string[],\n debugData: PrDebugData | undefined,\n): PrDebugData {\n const createdByRenovateVersion = debugData?.createdInVer ?? pkg.version;\n const updatedByRenovateVersion = pkg.version;\n\n const updatedPrDebugData: PrDebugData = {\n createdInVer: createdByRenovateVersion,\n updatedInVer: updatedByRenovateVersion,\n targetBranch,\n };\n\n // Add labels to the debug data object.\n // When to add:\n // 1. Add it when a new PR is created, i.e., when debugData is undefined.\n // 2. Add it if an existing PR already has labels in the debug data, confirming that we can update its labels.\n if (!debugData || isArray(debugData.labels)) {\n updatedPrDebugData.labels = labels;\n }\n\n return updatedPrDebugData;\n}\n\nfunction hasNotIgnoredReviewers(pr: Pr, config: BranchConfig): boolean {\n if (\n isNonEmptyArray(config.ignoreReviewers) &&\n isNonEmptyArray(pr.reviewers)\n ) {\n const ignoreReviewers = new Set(config.ignoreReviewers);\n return (\n pr.reviewers.filter((reviewer) => !ignoreReviewers.has(reviewer)).length >\n 0\n );\n }\n return isNonEmptyArray(pr.reviewers);\n}\n\nfunction addPullRequestNoteIfAttestationHasBeenLost(\n upgrade: BranchUpgradeConfig,\n): void {\n const { packageName, depName, currentVersion, newVersion } = upgrade;\n const name = packageName ?? depName;\n\n const currentRelease = upgrade.releases?.find(\n (release) => release.version === currentVersion,\n );\n const newRelease = upgrade.releases?.find(\n (release) => release.version === newVersion,\n );\n\n if (\n currentRelease &&\n newRelease &&\n currentRelease.attestation === true &&\n newRelease.attestation !== true\n ) {\n upgrade.prBodyNotes ??= [];\n upgrade.prBodyNotes.push(\n [\n '> :exclamation: **Warning**',\n '>',\n `> ${name} ${currentVersion} was released with an attestation, but ${newVersion} has no attestation.`,\n `> Verify that release ${newVersion} was published by the expected author.`,\n '\\n',\n ].join('\\n'),\n );\n }\n}\n\n// Ensures that PR exists with matching title/body\nexport async function ensurePr(\n prConfig: BranchConfig,\n): Promise<EnsurePrResult> {\n const config: BranchConfig = { ...prConfig };\n const filteredPrConfig = generatePrBodyFingerprintConfig(config);\n const prBodyFingerprint = fingerprint(filteredPrConfig);\n logger.trace({ config }, 'ensurePr');\n // If there is a group, it will use the config of the first upgrade in the array\n const {\n branchName,\n ignoreTests,\n internalChecksAsSuccess,\n prTitle = '',\n upgrades,\n } = config;\n const getBranchStatus = memoize(() =>\n resolveBranchStatus(branchName, !!internalChecksAsSuccess, ignoreTests),\n );\n const dependencyDashboardCheck =\n config.dependencyDashboardChecks?.[config.branchName];\n // Check if PR already exists\n const existingPr =\n (await platform.getBranchPr(branchName, config.baseBranch)) ??\n (await tryReuseAutoclosedPr(branchName, prTitle));\n const prCache = getPrCache(branchName);\n if (existingPr) {\n logger.debug('Found existing PR');\n if (existingPr.bodyStruct?.rebaseRequested) {\n logger.debug('PR rebase requested, so skipping cache check');\n } else if (prCache) {\n logger.trace({ prCache }, 'Found existing PR cache');\n // return if pr cache is valid and pr was not changed in the past 24hrs\n if (validatePrCache(prCache, prBodyFingerprint)) {\n return { type: 'with-pr', pr: existingPr };\n }\n } else if (config.repositoryCache === 'enabled') {\n logger.debug('PR cache not found');\n }\n }\n config.upgrades = [];\n\n if (config.artifactErrors?.length) {\n logger.debug('Forcing PR because of artifact errors');\n config.forcePr = true;\n }\n\n if (dependencyDashboardCheck === 'approvePr') {\n logger.debug('Forcing PR because of dependency dashboard approval');\n config.forcePr = true;\n }\n\n if (!existingPr) {\n // Only create a PR if a branch automerge has failed\n if (\n config.automerge === true &&\n config.automergeType?.startsWith('branch') &&\n !config.forcePr\n ) {\n logger.debug(`Branch automerge is enabled`);\n if (\n config.stabilityStatus !== 'yellow' &&\n (await getBranchStatus()) === 'yellow' &&\n isNumber(config.prNotPendingHours)\n ) {\n logger.debug('Checking how long this branch has been pending');\n const lastCommitTime = await getBranchLastCommitTime(branchName);\n if (getElapsedHours(lastCommitTime) >= config.prNotPendingHours) {\n logger.debug(\n `Branch exceeds prNotPending=${config.prNotPendingHours}, hours - forcing PR creation`,\n );\n config.forcePr = true;\n }\n }\n if (config.forcePr || (await getBranchStatus()) === 'red') {\n logger.debug(`Branch tests failed, so will create PR`);\n } else {\n // Branch should be automerged, so we don't want to create a PR\n return { type: 'without-pr', prBlockedBy: 'BranchAutomerge' };\n }\n }\n if (config.prCreation === 'status-success') {\n logger.debug('Checking branch combined status');\n if ((await getBranchStatus()) !== 'green') {\n logger.debug(`Branch status isn't green - not creating PR`);\n return { type: 'without-pr', prBlockedBy: 'AwaitingTests' };\n }\n logger.debug('Branch status success');\n } else if (\n config.prCreation === 'approval' &&\n dependencyDashboardCheck !== 'approvePr'\n ) {\n return { type: 'without-pr', prBlockedBy: 'NeedsApproval' };\n } else if (config.prCreation === 'not-pending' && !config.forcePr) {\n logger.debug('Checking branch combined status');\n if ((await getBranchStatus()) === 'yellow') {\n logger.debug(`Branch status is yellow - checking timeout`);\n const lastCommitTime = await getBranchLastCommitTime(branchName);\n const elapsedHours = getElapsedHours(lastCommitTime);\n if (\n !dependencyDashboardCheck &&\n ((config.stabilityStatus && config.stabilityStatus !== 'yellow') ||\n (isNumber(config.prNotPendingHours) &&\n elapsedHours < config.prNotPendingHours))\n ) {\n logger.debug(\n `Branch is ${elapsedHours} hours old - skipping PR creation as prNotPendingHours is set to ${config.prNotPendingHours}`,\n );\n return {\n type: 'without-pr',\n prBlockedBy: 'AwaitingTests',\n };\n }\n const prNotPendingHours = String(config.prNotPendingHours);\n logger.debug(\n `prNotPendingHours=${prNotPendingHours} threshold hit - creating PR`,\n );\n }\n logger.debug('Branch status success');\n }\n }\n\n const processedUpgrades: string[] = [];\n const commitRepos: string[] = [];\n\n function getRepoNameWithSourceDirectory(\n upgrade: BranchUpgradeConfig,\n ): string {\n // TODO: types (#22198)\n return `${upgrade.repoName!}${\n upgrade.sourceDirectory ? `:${upgrade.sourceDirectory}` : ''\n }`;\n }\n\n if (config.fetchChangeLogs === 'pr') {\n // fetch changelogs when not already done;\n await embedChangelogs(upgrades);\n }\n\n // Get changelog and then generate template strings\n for (const upgrade of upgrades) {\n // TODO: types (#22198)\n const upgradeKey = `${upgrade.depType!}-${upgrade.depName!}-${upgrade.manager}-${upgrade.currentVersion ?? ''}-${upgrade.currentValue ?? ''}-${upgrade.newVersion ?? ''}-${upgrade.newValue ?? ''}`;\n if (processedUpgrades.includes(upgradeKey)) {\n continue;\n }\n processedUpgrades.push(upgradeKey);\n\n const logJSON = upgrade.logJSON;\n\n if (logJSON) {\n if (typeof logJSON.error === 'undefined') {\n if (logJSON.project) {\n upgrade.repoName = logJSON.project.repository;\n }\n upgrade.hasReleaseNotes = false;\n upgrade.releases = [];\n if (\n logJSON.hasReleaseNotes &&\n upgrade.repoName &&\n !commitRepos.includes(getRepoNameWithSourceDirectory(upgrade))\n ) {\n commitRepos.push(getRepoNameWithSourceDirectory(upgrade));\n upgrade.hasReleaseNotes = logJSON.hasReleaseNotes;\n if (logJSON.versions) {\n for (const version of logJSON.versions) {\n const release = { ...version };\n upgrade.releases.push(release);\n }\n }\n }\n } else if (logJSON.error === 'MissingGithubToken') {\n upgrade.prBodyNotes ??= [];\n upgrade.prBodyNotes.push(\n [\n '> :exclamation: **Important**',\n '> ',\n '> Release Notes retrieval for this PR were skipped because no github.com credentials were available. ',\n '> If you are self-hosted, please see [this instruction](https://github.com/renovatebot/renovate/blob/master/docs/usage/examples/self-hosting.md#githubcom-token-for-release-notes).',\n '\\n',\n ].join('\\n'),\n );\n }\n }\n\n addPullRequestNoteIfAttestationHasBeenLost(upgrade);\n\n config.upgrades.push(upgrade);\n }\n\n config.hasReleaseNotes = config.upgrades.some((upg) => upg.hasReleaseNotes);\n\n const releaseNotesSources: string[] = [];\n for (const upgrade of config.upgrades) {\n let notesSourceUrl = upgrade.releases?.[0]?.releaseNotes?.notesSourceUrl;\n // TODO: types (#22198)\n notesSourceUrl ??= `${upgrade.sourceUrl!}${\n upgrade.sourceDirectory ? `:${upgrade.sourceDirectory}` : ''\n }`;\n\n if (upgrade.hasReleaseNotes && notesSourceUrl) {\n if (releaseNotesSources.includes(notesSourceUrl)) {\n logger.debug(\n { depName: upgrade.depName },\n 'Removing duplicate release notes',\n );\n upgrade.hasReleaseNotes = false;\n } else {\n releaseNotesSources.push(notesSourceUrl);\n }\n }\n }\n\n const prBody = getPrBody(\n config,\n {\n debugData: updatePrDebugData(\n config.baseBranch,\n prepareLabels(config), // include labels in debug data\n existingPr?.bodyStruct?.debugData,\n ),\n },\n config,\n );\n\n try {\n if (existingPr) {\n logger.debug('Processing existing PR');\n\n if (\n !existingPr.hasAssignees &&\n !hasNotIgnoredReviewers(existingPr, config) &&\n config.automerge &&\n !config.assignAutomerge &&\n (await getBranchStatus()) === 'red'\n ) {\n logger.debug(`Setting assignees and reviewers as status checks failed`);\n await addParticipants(config, existingPr);\n }\n // Check if existing PR needs updating\n const existingPrTitle = stripEmojis(existingPr.title);\n const existingPrBodyHash = existingPr.bodyStruct?.hash;\n const newPrTitle = stripEmojis(prTitle);\n const newPrBodyHash = hashBody(prBody);\n\n const prInitialLabels = existingPr.bodyStruct?.debugData?.labels;\n const prCurrentLabels = existingPr.labels;\n const configuredLabels = prepareLabels(config);\n\n const labelsNeedUpdate = shouldUpdateLabels(\n prInitialLabels,\n prCurrentLabels,\n configuredLabels,\n );\n\n if (\n existingPr?.targetBranch === config.baseBranch &&\n existingPrTitle === newPrTitle &&\n existingPrBodyHash === newPrBodyHash &&\n !labelsNeedUpdate\n ) {\n // adds or-cache for existing PRs\n setPrCache(branchName, prBodyFingerprint, false);\n logger.debug(\n `Pull Request #${existingPr.number} does not need updating`,\n );\n return { type: 'with-pr', pr: existingPr };\n }\n\n const updatePrConfig: UpdatePrConfig = {\n number: existingPr.number,\n prTitle,\n prBody,\n platformPrOptions: getPlatformPrOptions(config),\n };\n // PR must need updating\n if (existingPr?.targetBranch !== config.baseBranch) {\n logger.debug(\n {\n branchName,\n oldBaseBranch: existingPr?.targetBranch,\n newBaseBranch: config.baseBranch,\n },\n 'PR base branch has changed',\n );\n updatePrConfig.targetBranch = config.baseBranch;\n }\n\n if (labelsNeedUpdate) {\n logger.debug(\n {\n branchName,\n prCurrentLabels,\n configuredLabels,\n },\n 'PR labels have changed',\n );\n\n // Divide labels into three categories:\n // i) addLabels: Labels that need to be added\n // ii) removeLabels: Labels that need to be removed\n // iii) labels: New labels for the PR, replacing the old labels array entirely.\n // This distinction is necessary because different platforms update labels differently\n // For more details, refer to the updatePr function of each platform.\n\n const [addLabels, removeLabels] = getChangedLabels(\n prCurrentLabels,\n configuredLabels,\n );\n\n // for Gitea\n updatePrConfig.labels = configuredLabels;\n\n // for GitHub, GitLab\n updatePrConfig.addLabels = addLabels;\n updatePrConfig.removeLabels = removeLabels;\n }\n if (existingPrTitle !== newPrTitle) {\n logger.debug(\n {\n branchName,\n oldPrTitle: existingPr.title,\n newPrTitle: prTitle,\n },\n 'PR title changed',\n );\n } else if (!config.committedFiles && !config.rebaseRequested) {\n logger.debug(\n {\n prTitle,\n },\n 'PR body changed',\n );\n }\n\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would update PR #${existingPr.number}`);\n return { type: 'with-pr', pr: existingPr };\n } else {\n await platform.updatePr(updatePrConfig);\n logger.info({ pr: existingPr.number, prTitle }, `PR updated`);\n setPrCache(branchName, prBodyFingerprint, true);\n }\n return {\n type: 'with-pr',\n pr: {\n ...existingPr,\n bodyStruct: getPrBodyStruct(prBody),\n title: prTitle,\n targetBranch: config.baseBranch,\n },\n };\n }\n logger.debug({ branch: branchName, prTitle }, `Creating PR`);\n if (config.updateType === 'rollback') {\n logger.info('Creating Rollback PR');\n }\n let pr: Pr | null;\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create PR: ' + prTitle);\n pr = { number: 0 } as never;\n } else {\n try {\n if (\n !dependencyDashboardCheck &&\n isLimitReached('ConcurrentPRs', prConfig) &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Skipping PR - limit reached');\n return { type: 'without-pr', prBlockedBy: 'RateLimited' };\n }\n pr = await platform.createPr({\n sourceBranch: branchName,\n targetBranch: config.baseBranch,\n prTitle,\n prBody,\n labels: prepareLabels(config),\n platformPrOptions: getPlatformPrOptions(config),\n draftPR: !!config.draftPR,\n milestone: config.milestone,\n });\n\n incCountValue('ConcurrentPRs');\n incCountValue('HourlyPRs');\n logger.info({ pr: pr?.number, prTitle }, 'PR created');\n } catch (err) {\n logger.debug({ err }, 'Pull request creation error');\n if (\n err.body?.message === 'Validation failed' &&\n err.body.errors?.length &&\n err.body.errors.some((error: { message?: string }) =>\n error.message?.startsWith('A pull request already exists'),\n )\n ) {\n logger.warn('A pull requests already exists');\n return { type: 'without-pr', prBlockedBy: 'Error' };\n }\n if (err.statusCode === 502) {\n logger.warn(\n { branch: branchName },\n 'Deleting branch due to server error',\n );\n await scm.deleteBranch(branchName);\n }\n return { type: 'without-pr', prBlockedBy: 'Error' };\n }\n }\n if (\n pr &&\n config.branchAutomergeFailureMessage &&\n !config.suppressNotifications?.includes('branchAutomergeFailure')\n ) {\n const topic = 'Branch automerge failure';\n let content =\n 'This PR was configured for branch automerge. However, this is not possible, so it has been raised as a PR instead.';\n if (config.branchAutomergeFailureMessage === 'branch status error') {\n content += '\\n___\\n * Branch has one or more failed status checks';\n }\n content = platform.massageMarkdown(content, config.rebaseLabel);\n logger.debug('Adding branch automerge failure message to PR');\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would add comment to PR #${pr.number}`);\n } else {\n await ensureComment({\n number: pr.number,\n topic,\n content,\n });\n }\n }\n // Skip assign and review if automerging PR\n if (pr) {\n if (\n config.automerge &&\n !config.assignAutomerge &&\n (await getBranchStatus()) !== 'red'\n ) {\n logger.debug(\n `Skipping assignees and reviewers as automerge=${config.automerge}`,\n );\n } else {\n await addParticipants(config, pr);\n }\n setPrCache(branchName, prBodyFingerprint, true);\n logger.debug(`Created Pull Request #${pr.number}`);\n return { type: 'with-pr', pr };\n }\n } catch (err) {\n if (\n err instanceof ExternalHostError ||\n err.message === REPOSITORY_CHANGED ||\n err.message === PLATFORM_RATE_LIMIT_EXCEEDED ||\n err.message === PLATFORM_INTEGRATION_UNAUTHORIZED\n ) {\n logger.debug('Passing error up');\n throw err;\n }\n logger.warn({ err, prTitle }, 'Failed to ensure PR');\n }\n if (existingPr) {\n return { type: 'with-pr', pr: existingPr };\n }\n return { type: 'without-pr', prBlockedBy: 'Error' };\n}\n"]}
@@ -86,6 +86,7 @@ export interface BranchConfig extends BranchUpgradeConfig, LegacyAdminConfig, Pl
86
86
  isConflicted?: boolean;
87
87
  commitFingerprint?: string;
88
88
  cacheFingerprintMatch?: CacheFingerprintMatchResult;
89
+ prNotPendingHours?: number;
89
90
  }
90
91
  export interface BranchMetadata {
91
92
  branchName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/workers/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Merge } from 'type-fest';\nimport type {\n GroupConfig,\n LegacyAdminConfig,\n RenovateConfig,\n RenovateSharedConfig,\n ValidationMessage,\n} from '../config/types';\nimport type { Release } from '../modules/datasource/types';\nimport type {\n ArtifactError,\n ArtifactNotice,\n ExtractConfig,\n LookupUpdate,\n PackageDependency,\n PackageFile,\n} from '../modules/manager/types';\nimport type { PlatformPrOptions } from '../modules/platform/types';\nimport type { FileChange } from '../util/git/types';\nimport type { MergeConfidence } from '../util/merge-confidence/types';\nimport type { Timestamp } from '../util/timestamp';\nimport type {\n ChangeLogRelease,\n ChangeLogResult,\n} from './repository/update/pr/changelog/types';\n\nexport type ReleaseWithNotes = Release & Partial<ChangeLogRelease>;\n\nexport interface BranchUpgradeConfig\n extends Merge<RenovateConfig, PackageDependency>,\n Partial<LookupUpdate>,\n RenovateSharedConfig {\n artifactErrors?: ArtifactError[];\n artifactNotices?: ArtifactNotice[];\n autoReplaceStringTemplate?: string;\n baseDeps?: PackageDependency[];\n branchName: string;\n commitBody?: string;\n commitMessage?: string;\n commitMessageExtra?: string;\n currentDigest?: string;\n currentDigestShort?: string;\n currentValue?: string;\n\n currentValueTemplate?: string;\n depIndex?: number;\n depTypes?: string[];\n\n displayPending?: string;\n excludeCommitPaths?: string[];\n githubName?: string;\n group?: GroupConfig;\n groupName?: string;\n groupSlug?: string;\n dependencyDashboardCategory?: string;\n manager: string;\n packageFile?: string;\n lockFile?: string;\n lockFiles?: string[];\n reuseExistingBranch?: boolean;\n prHeader?: string;\n prFooter?: string;\n prBodyNotes?: string[];\n prBodyTemplate?: string;\n prPriority?: number;\n prTitle?: string;\n prTitleStrict?: boolean;\n prettyNewMajor?: string;\n prettyNewVersion?: string;\n releases?: ReleaseWithNotes[];\n releaseTimestamp?: Timestamp;\n repoName?: string;\n minimumConfidence?: MergeConfidence | undefined;\n sourceDirectory?: string;\n\n updatedPackageFiles?: FileChange[];\n updatedArtifacts?: FileChange[];\n\n logJSON?: ChangeLogResult | null;\n\n hasReleaseNotes?: boolean;\n homepage?: string;\n changelogContent?: string;\n changelogUrl?: string;\n dependencyUrl?: string;\n sourceUrl?: string;\n sourceRepo?: string;\n sourceRepoOrg?: string;\n sourceRepoName?: string;\n minimumGroupSize?: number;\n}\n\nexport type PrBlockedBy =\n | 'BranchAutomerge'\n | 'NeedsApproval'\n | 'AwaitingTests'\n | 'RateLimited'\n | 'Error';\n\nexport type BranchResult =\n | 'already-existed'\n | 'automerged'\n | 'done'\n | 'error'\n | 'needs-approval'\n | 'needs-pr-approval'\n | 'not-scheduled'\n | 'no-work'\n | 'pending'\n | 'pr-created'\n | 'pr-edited'\n | 'pr-limit-reached'\n | 'commit-limit-reached'\n | 'branch-limit-reached'\n | 'rebase'\n | 'update-not-scheduled'\n | 'minimum-group-size-not-met';\n\nexport type CacheFingerprintMatchResult =\n | 'matched'\n | 'no-match'\n | 'no-fingerprint';\n\nexport interface BranchConfig\n extends BranchUpgradeConfig,\n LegacyAdminConfig,\n PlatformPrOptions {\n automergeComment?: string;\n automergeType?: string;\n automergedPreviously?: boolean;\n baseBranch: string;\n errors?: ValidationMessage[];\n hasTypes?: boolean;\n dependencyDashboardChecks?: Record<string, string>;\n releaseTimestamp?: Timestamp;\n forceCommit?: boolean;\n rebaseRequested?: boolean;\n result?: BranchResult;\n upgrades: BranchUpgradeConfig[];\n packageFiles?: Record<string, PackageFile[]>;\n prBlockedBy?: PrBlockedBy;\n prNo?: number;\n stopUpdating?: boolean;\n isConflicted?: boolean;\n commitFingerprint?: string;\n cacheFingerprintMatch?: CacheFingerprintMatchResult;\n}\n\nexport interface BranchMetadata {\n branchName: string;\n branchSha?: string | null;\n baseBranch?: string;\n baseBranchSha?: string | null;\n automerge?: boolean;\n isModified?: boolean;\n isPristine?: boolean;\n}\n\nexport interface BaseBranchMetadata {\n branchName: string;\n sha: string;\n}\n\nexport interface BranchSummary {\n baseBranches: BaseBranchMetadata[];\n branches: BranchMetadata[];\n cacheModified?: boolean;\n defaultBranch?: string;\n inactiveBranches: string[];\n}\n\nexport interface WorkerExtractConfig extends ExtractConfig {\n manager: string;\n fileList: string[];\n managerFilePatterns?: string[];\n includePaths?: string[];\n ignorePaths?: string[];\n enabled?: boolean;\n}\n\nexport interface DepWarnings {\n warnings: string[];\n warningFiles: string[];\n}\n\nexport interface SelectAllConfig extends RenovateConfig {\n dependencyDashboardRebaseAllOpen?: boolean;\n dependencyDashboardAllPending?: boolean;\n dependencyDashboardAllRateLimited?: boolean;\n}\n\nexport interface UpgradeFingerprintConfig {\n autoReplaceStringTemplate?: string;\n currentDigest?: string;\n currentValue?: string;\n currentVersion?: string;\n datasource?: string;\n depName?: string;\n lockFile?: string;\n lockedVersion?: string;\n manager?: string | null;\n newName?: string;\n newDigest?: string;\n newValue?: string;\n newVersion?: string;\n packageFile?: string;\n replaceString?: string;\n}\n\nexport interface ExtractResult {\n extractionFingerprints: Record<string, string | undefined>;\n packageFiles: Record<string, PackageFile[]>;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/workers/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Merge } from 'type-fest';\nimport type {\n GroupConfig,\n LegacyAdminConfig,\n RenovateConfig,\n RenovateSharedConfig,\n ValidationMessage,\n} from '../config/types';\nimport type { Release } from '../modules/datasource/types';\nimport type {\n ArtifactError,\n ArtifactNotice,\n ExtractConfig,\n LookupUpdate,\n PackageDependency,\n PackageFile,\n} from '../modules/manager/types';\nimport type { PlatformPrOptions } from '../modules/platform/types';\nimport type { FileChange } from '../util/git/types';\nimport type { MergeConfidence } from '../util/merge-confidence/types';\nimport type { Timestamp } from '../util/timestamp';\nimport type {\n ChangeLogRelease,\n ChangeLogResult,\n} from './repository/update/pr/changelog/types';\n\nexport type ReleaseWithNotes = Release & Partial<ChangeLogRelease>;\n\nexport interface BranchUpgradeConfig\n extends Merge<RenovateConfig, PackageDependency>,\n Partial<LookupUpdate>,\n RenovateSharedConfig {\n artifactErrors?: ArtifactError[];\n artifactNotices?: ArtifactNotice[];\n autoReplaceStringTemplate?: string;\n baseDeps?: PackageDependency[];\n branchName: string;\n commitBody?: string;\n commitMessage?: string;\n commitMessageExtra?: string;\n currentDigest?: string;\n currentDigestShort?: string;\n currentValue?: string;\n\n currentValueTemplate?: string;\n depIndex?: number;\n depTypes?: string[];\n\n displayPending?: string;\n excludeCommitPaths?: string[];\n githubName?: string;\n group?: GroupConfig;\n groupName?: string;\n groupSlug?: string;\n dependencyDashboardCategory?: string;\n manager: string;\n packageFile?: string;\n lockFile?: string;\n lockFiles?: string[];\n reuseExistingBranch?: boolean;\n prHeader?: string;\n prFooter?: string;\n prBodyNotes?: string[];\n prBodyTemplate?: string;\n prPriority?: number;\n prTitle?: string;\n prTitleStrict?: boolean;\n prettyNewMajor?: string;\n prettyNewVersion?: string;\n releases?: ReleaseWithNotes[];\n releaseTimestamp?: Timestamp;\n repoName?: string;\n minimumConfidence?: MergeConfidence | undefined;\n sourceDirectory?: string;\n\n updatedPackageFiles?: FileChange[];\n updatedArtifacts?: FileChange[];\n\n logJSON?: ChangeLogResult | null;\n\n hasReleaseNotes?: boolean;\n homepage?: string;\n changelogContent?: string;\n changelogUrl?: string;\n dependencyUrl?: string;\n sourceUrl?: string;\n sourceRepo?: string;\n sourceRepoOrg?: string;\n sourceRepoName?: string;\n minimumGroupSize?: number;\n}\n\nexport type PrBlockedBy =\n | 'BranchAutomerge'\n | 'NeedsApproval'\n | 'AwaitingTests'\n | 'RateLimited'\n | 'Error';\n\nexport type BranchResult =\n | 'already-existed'\n | 'automerged'\n | 'done'\n | 'error'\n | 'needs-approval'\n | 'needs-pr-approval'\n | 'not-scheduled'\n | 'no-work'\n | 'pending'\n | 'pr-created'\n | 'pr-edited'\n | 'pr-limit-reached'\n | 'commit-limit-reached'\n | 'branch-limit-reached'\n | 'rebase'\n | 'update-not-scheduled'\n | 'minimum-group-size-not-met';\n\nexport type CacheFingerprintMatchResult =\n | 'matched'\n | 'no-match'\n | 'no-fingerprint';\n\nexport interface BranchConfig\n extends BranchUpgradeConfig,\n LegacyAdminConfig,\n PlatformPrOptions {\n automergeComment?: string;\n automergeType?: string;\n automergedPreviously?: boolean;\n baseBranch: string;\n errors?: ValidationMessage[];\n hasTypes?: boolean;\n dependencyDashboardChecks?: Record<string, string>;\n releaseTimestamp?: Timestamp;\n forceCommit?: boolean;\n rebaseRequested?: boolean;\n result?: BranchResult;\n upgrades: BranchUpgradeConfig[];\n packageFiles?: Record<string, PackageFile[]>;\n prBlockedBy?: PrBlockedBy;\n prNo?: number;\n stopUpdating?: boolean;\n isConflicted?: boolean;\n commitFingerprint?: string;\n cacheFingerprintMatch?: CacheFingerprintMatchResult;\n prNotPendingHours?: number;\n}\n\nexport interface BranchMetadata {\n branchName: string;\n branchSha?: string | null;\n baseBranch?: string;\n baseBranchSha?: string | null;\n automerge?: boolean;\n isModified?: boolean;\n isPristine?: boolean;\n}\n\nexport interface BaseBranchMetadata {\n branchName: string;\n sha: string;\n}\n\nexport interface BranchSummary {\n baseBranches: BaseBranchMetadata[];\n branches: BranchMetadata[];\n cacheModified?: boolean;\n defaultBranch?: string;\n inactiveBranches: string[];\n}\n\nexport interface WorkerExtractConfig extends ExtractConfig {\n manager: string;\n fileList: string[];\n managerFilePatterns?: string[];\n includePaths?: string[];\n ignorePaths?: string[];\n enabled?: boolean;\n}\n\nexport interface DepWarnings {\n warnings: string[];\n warningFiles: string[];\n}\n\nexport interface SelectAllConfig extends RenovateConfig {\n dependencyDashboardRebaseAllOpen?: boolean;\n dependencyDashboardAllPending?: boolean;\n dependencyDashboardAllRateLimited?: boolean;\n}\n\nexport interface UpgradeFingerprintConfig {\n autoReplaceStringTemplate?: string;\n currentDigest?: string;\n currentValue?: string;\n currentVersion?: string;\n datasource?: string;\n depName?: string;\n lockFile?: string;\n lockedVersion?: string;\n manager?: string | null;\n newName?: string;\n newDigest?: string;\n newValue?: string;\n newVersion?: string;\n packageFile?: string;\n replaceString?: string;\n}\n\nexport interface ExtractResult {\n extractionFingerprints: Record<string, string | undefined>;\n packageFiles: Record<string, PackageFile[]>;\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "renovate",
3
3
  "description": "Automated dependency updates. Flexible so you don't need to be.",
4
- "version": "42.14.2",
4
+ "version": "42.14.4",
5
5
  "type": "commonjs",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -250,7 +250,7 @@
250
250
  "@types/mdast": "4.0.4",
251
251
  "@types/moo": "0.5.10",
252
252
  "@types/ms": "2.1.0",
253
- "@types/node": "22.19.0",
253
+ "@types/node": "22.19.1",
254
254
  "@types/parse-link-header": "2.0.3",
255
255
  "@types/punycode": "2.1.4",
256
256
  "@types/sax": "1.2.7",
@@ -1,7 +1,7 @@
1
1
  {
2
- "title": "JSON schema for Renovate 42.14.2 config files (https://renovatebot.com/)",
2
+ "title": "JSON schema for Renovate 42.14.4 config files (https://renovatebot.com/)",
3
3
  "$schema": "http://json-schema.org/draft-07/schema#",
4
- "x-renovate-version": "42.14.2",
4
+ "x-renovate-version": "42.14.4",
5
5
  "allowComments": true,
6
6
  "type": "object",
7
7
  "properties": {