renovate 40.0.0-next.16 → 40.0.0-next.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/decrypt.d.ts +3 -1
- package/dist/config/decrypt.js +54 -11
- package/dist/config/decrypt.js.map +1 -1
- package/dist/config/options/index.js +1 -1
- package/dist/config/options/index.js.map +1 -1
- package/dist/config/presets/gitlab/index.js +1 -1
- package/dist/config/presets/gitlab/index.js.map +1 -1
- package/dist/config/presets/http/index.js +1 -1
- package/dist/config/presets/http/index.js.map +1 -1
- package/dist/config/presets/internal/custom-managers.js +3 -4
- package/dist/config/presets/internal/custom-managers.js.map +1 -1
- package/dist/data/monorepo.json +2 -1
- package/dist/instrumentation/utils.js +1 -1
- package/dist/instrumentation/utils.js.map +1 -1
- package/dist/modules/datasource/artifactory/index.js +1 -1
- package/dist/modules/datasource/artifactory/index.js.map +1 -1
- package/dist/modules/datasource/azure-pipelines-tasks/index.js +11 -1
- package/dist/modules/datasource/azure-pipelines-tasks/index.js.map +1 -1
- package/dist/modules/datasource/azure-pipelines-tasks/schema.d.ts +16 -0
- package/dist/modules/datasource/azure-pipelines-tasks/schema.js +2 -0
- package/dist/modules/datasource/azure-pipelines-tasks/schema.js.map +1 -1
- package/dist/modules/datasource/crate/index.js +1 -1
- package/dist/modules/datasource/crate/index.js.map +1 -1
- package/dist/modules/datasource/custom/formats/html.js +1 -1
- package/dist/modules/datasource/custom/formats/html.js.map +1 -1
- package/dist/modules/datasource/custom/formats/yaml.js +1 -1
- package/dist/modules/datasource/custom/formats/yaml.js.map +1 -1
- package/dist/modules/datasource/deb/index.js +1 -1
- package/dist/modules/datasource/deb/index.js.map +1 -1
- package/dist/modules/datasource/docker/common.js +1 -1
- package/dist/modules/datasource/docker/common.js.map +1 -1
- package/dist/modules/datasource/docker/index.js +1 -1
- package/dist/modules/datasource/docker/index.js.map +1 -1
- package/dist/modules/datasource/github-release-attachments/index.js +2 -2
- package/dist/modules/datasource/github-release-attachments/index.js.map +1 -1
- package/dist/modules/datasource/go/base.js +1 -1
- package/dist/modules/datasource/go/base.js.map +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
- package/dist/modules/datasource/golang-version/index.js +1 -1
- package/dist/modules/datasource/golang-version/index.js.map +1 -1
- package/dist/modules/datasource/hexpm-bob/index.js +1 -1
- package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
- package/dist/modules/datasource/maven/util.js +1 -1
- package/dist/modules/datasource/maven/util.js.map +1 -1
- package/dist/modules/datasource/nuget/v2.js +1 -1
- package/dist/modules/datasource/nuget/v2.js.map +1 -1
- package/dist/modules/datasource/nuget/v3.js +1 -1
- package/dist/modules/datasource/nuget/v3.js.map +1 -1
- package/dist/modules/datasource/pod/index.js +1 -1
- package/dist/modules/datasource/pod/index.js.map +1 -1
- package/dist/modules/datasource/pypi/index.js +1 -1
- package/dist/modules/datasource/pypi/index.js.map +1 -1
- package/dist/modules/datasource/ruby-version/index.js +1 -1
- package/dist/modules/datasource/ruby-version/index.js.map +1 -1
- package/dist/modules/datasource/rubygems/index.js +1 -1
- package/dist/modules/datasource/rubygems/index.js.map +1 -1
- package/dist/modules/datasource/rubygems/versions-endpoint-cache.js +2 -2
- package/dist/modules/datasource/rubygems/versions-endpoint-cache.js.map +1 -1
- package/dist/modules/datasource/terraform-provider/index.js +1 -1
- package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
- package/dist/modules/manager/batect-wrapper/artifacts.js +1 -1
- package/dist/modules/manager/batect-wrapper/artifacts.js.map +1 -1
- package/dist/modules/manager/bazel/rules/git.js +7 -1
- package/dist/modules/manager/bazel/rules/git.js.map +1 -1
- package/dist/modules/manager/composer/utils.js +9 -6
- package/dist/modules/manager/composer/utils.js.map +1 -1
- package/dist/modules/manager/devbox/artifacts.d.ts +1 -1
- package/dist/modules/manager/devbox/artifacts.js +29 -11
- package/dist/modules/manager/devbox/artifacts.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +6 -6
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/gradle-wrapper/artifacts.js +1 -1
- package/dist/modules/manager/gradle-wrapper/artifacts.js.map +1 -1
- package/dist/modules/manager/maven/extract.js +3 -1
- package/dist/modules/manager/maven/extract.js.map +1 -1
- package/dist/modules/manager/pep621/utils.js +1 -2
- package/dist/modules/manager/pep621/utils.js.map +1 -1
- package/dist/modules/manager/poetry/artifacts.js +3 -4
- package/dist/modules/manager/poetry/artifacts.js.map +1 -1
- package/dist/modules/manager/poetry/extract.js +2 -2
- package/dist/modules/manager/poetry/extract.js.map +1 -1
- package/dist/modules/manager/terraform/lockfile/hash.d.ts +1 -1
- package/dist/modules/platform/bitbucket/index.js +1 -1
- package/dist/modules/platform/bitbucket/index.js.map +1 -1
- package/dist/modules/platform/gerrit/client.js +1 -1
- package/dist/modules/platform/gerrit/client.js.map +1 -1
- package/dist/modules/platform/github/common.d.ts +2 -0
- package/dist/modules/platform/github/common.js +16 -0
- package/dist/modules/platform/github/common.js.map +1 -1
- package/dist/modules/platform/github/index.d.ts +1 -1
- package/dist/modules/platform/github/index.js +6 -4
- package/dist/modules/platform/github/index.js.map +1 -1
- package/dist/modules/versioning/composer/index.js +10 -0
- package/dist/modules/versioning/composer/index.js.map +1 -1
- package/dist/modules/versioning/npm/index.js +2 -1
- package/dist/modules/versioning/npm/index.js.map +1 -1
- package/dist/modules/versioning/types.d.ts +4 -0
- package/dist/modules/versioning/types.js.map +1 -1
- package/dist/util/exec/containerbase.js +1 -1
- package/dist/util/exec/containerbase.js.map +1 -1
- package/dist/util/http/auth.js +0 -1
- package/dist/util/http/auth.js.map +1 -1
- package/dist/util/http/bitbucket-server.d.ts +5 -4
- package/dist/util/http/bitbucket-server.js +17 -20
- package/dist/util/http/bitbucket-server.js.map +1 -1
- package/dist/util/http/bitbucket.d.ts +6 -5
- package/dist/util/http/bitbucket.js +30 -31
- package/dist/util/http/bitbucket.js.map +1 -1
- package/dist/util/http/cache/abstract-http-cache-provider.js +1 -1
- package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
- package/dist/util/http/errors.d.ts +2 -0
- package/dist/util/http/errors.js +8 -0
- package/dist/util/http/errors.js.map +1 -0
- package/dist/util/http/gerrit.d.ts +6 -4
- package/dist/util/http/gerrit.js +11 -12
- package/dist/util/http/gerrit.js.map +1 -1
- package/dist/util/http/gitea.d.ts +5 -4
- package/dist/util/http/gitea.js +12 -13
- package/dist/util/http/gitea.js.map +1 -1
- package/dist/util/http/github.d.ts +14 -8
- package/dist/util/http/github.js +64 -60
- package/dist/util/http/github.js.map +1 -1
- package/dist/util/http/gitlab.d.ts +7 -5
- package/dist/util/http/gitlab.js +56 -46
- package/dist/util/http/gitlab.js.map +1 -1
- package/dist/util/http/got.d.ts +9 -0
- package/dist/util/http/got.js +54 -0
- package/dist/util/http/got.js.map +1 -0
- package/dist/util/http/host-rules.d.ts +2 -1
- package/dist/util/http/host-rules.js.map +1 -1
- package/dist/util/http/http.d.ts +93 -0
- package/dist/util/http/http.js +339 -0
- package/dist/util/http/http.js.map +1 -0
- package/dist/util/http/index.d.ts +6 -74
- package/dist/util/http/index.js +5 -359
- package/dist/util/http/index.js.map +1 -1
- package/dist/util/http/types.d.ts +9 -16
- package/dist/util/http/types.js.map +1 -1
- package/dist/util/toml.d.ts +1 -0
- package/dist/util/toml.js +6 -0
- package/dist/util/toml.js.map +1 -1
- package/dist/util/url.js +3 -8
- package/dist/util/url.js.map +1 -1
- package/dist/workers/global/config/parse/env.js +3 -2
- package/dist/workers/global/config/parse/env.js.map +1 -1
- package/dist/workers/global/config/parse/file.js +18 -8
- package/dist/workers/global/config/parse/file.js.map +1 -1
- package/dist/workers/global/config/parse/host-rules-from-env.js +6 -2
- package/dist/workers/global/config/parse/host-rules-from-env.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/bitbucket/index.js +1 -1
- package/dist/workers/repository/update/pr/changelog/bitbucket/index.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/gitlab/index.js +1 -1
- package/dist/workers/repository/update/pr/changelog/gitlab/index.js.map +1 -1
- package/package.json +30 -30
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/deb/index.ts"],"names":[],"mappings":"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","sourcesContent":["import readline from 'readline';\nimport { nanoid } from 'nanoid';\nimport upath from 'upath';\nimport { logger } from '../../../logger';\nimport { cache } from '../../../util/cache/package/decorator';\nimport * as fs from '../../../util/fs';\nimport { toSha256 } from '../../../util/hash';\nimport type { HttpOptions } from '../../../util/http/types';\nimport { joinUrlParts } from '../../../util/url';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { computeFileChecksum, parseChecksumsFromInRelease } from './checksum';\nimport { cacheSubDir, packageKeys, requiredPackageKeys } from './common';\nimport { extract, getFileCreationTime } from './file';\nimport { formatReleaseResult, releaseMetaInformationMatches } from './release';\nimport type { PackageDescription } from './types';\nimport { constructComponentUrls, getBaseReleaseUrl } from './url';\n\nexport class DebDatasource extends Datasource {\n static readonly id = 'deb';\n\n constructor() {\n super(DebDatasource.id);\n }\n\n /**\n * Users are able to specify custom Debian repositories as long as they follow\n * the Debian package repository format as specified here\n * @see{https://wiki.debian.org/DebianRepository/Format}\n */\n override readonly customRegistrySupport = true;\n\n /**\n * Users can specify multiple upstream repositories and the datasource will aggregate the release\n * @example\n * When specifying multiple dependencies both internal and external dependencies from internal/external artifactory\n */\n override readonly registryStrategy = 'merge';\n\n /**\n * The original apt source list file format is\n * deb uri distribution [component1] [component2] [...]\n * @see{https://wiki.debian.org/DebianRepository/Format}\n *\n * However, for Renovate, we require the registry URLs to be\n * valid URLs which is why the parameters are encoded in the URL.\n *\n * The following query parameters are required:\n * - components: comma separated list of components\n * - suite: stable, oldstable or other alias for a release, either this or release must be given\n * - release: buster, etc.\n * - binaryArch: e.g. amd64 resolves to http://deb.debian.org/debian/dists/stable/non-free/binary-amd64/\n */\n override readonly defaultRegistryUrls = [\n 'https://deb.debian.org/debian?suite=stable&components=main,contrib,non-free&binaryArch=amd64',\n ];\n\n override readonly defaultVersioning = 'deb';\n\n /**\n * Downloads and extracts a package file from a component URL.\n *\n * @param componentUrl - The URL of the component.\n * @returns The path to the extracted file and the last modification timestamp.\n * @throws Will throw an error if no valid compression method is found.\n */\n private async downloadAndExtractPackage(\n componentUrl: string,\n ): Promise<{ extractedFile: string; lastTimestamp: Date }> {\n const packageUrlHash = toSha256(componentUrl);\n const fullCacheDir = await fs.ensureCacheDir(cacheSubDir);\n const extractedFile = upath.join(fullCacheDir, `${packageUrlHash}.txt`);\n let lastTimestamp = await getFileCreationTime(extractedFile);\n\n const compression = 'gz';\n const compressedFile = upath.join(\n fullCacheDir,\n `${nanoid()}_${packageUrlHash}.${compression}`,\n );\n\n const wasUpdated = await this.downloadPackageFile(\n componentUrl,\n compression,\n compressedFile,\n lastTimestamp,\n );\n\n if (wasUpdated || !lastTimestamp) {\n try {\n await extract(compressedFile, compression, extractedFile);\n lastTimestamp = await getFileCreationTime(extractedFile);\n } catch (error) {\n logger.warn(\n {\n compressedFile,\n componentUrl,\n compression,\n error: error.message,\n },\n 'Failed to extract package file from compressed file',\n );\n } finally {\n await fs.rmCache(compressedFile);\n }\n }\n\n if (!lastTimestamp) {\n //extracting went wrong\n throw new Error('Missing metadata in extracted package index file!');\n }\n\n return { extractedFile, lastTimestamp };\n }\n\n /**\n * Downloads a package file if it has been modified since the last download timestamp.\n *\n * @param basePackageUrl - The base URL of the package.\n * @param compression - The compression method used (e.g., 'gz').\n * @param compressedFile - The path where the compressed file will be saved.\n * @param lastDownloadTimestamp - The timestamp of the last download.\n * @returns True if the file was downloaded, otherwise false.\n */\n private async downloadPackageFile(\n basePackageUrl: string,\n compression: string,\n compressedFile: string,\n lastDownloadTimestamp?: Date,\n ): Promise<boolean> {\n const baseReleaseUrl = getBaseReleaseUrl(basePackageUrl);\n const packageUrl = joinUrlParts(basePackageUrl, `Packages.${compression}`);\n let needsToDownload = true;\n\n if (lastDownloadTimestamp) {\n needsToDownload = await this.checkIfModified(\n packageUrl,\n lastDownloadTimestamp,\n );\n }\n\n if (!needsToDownload) {\n logger.debug(`No need to download ${packageUrl}, file is up to date.`);\n return false;\n }\n const readStream = this.http.stream(packageUrl);\n const writeStream = fs.createCacheWriteStream(compressedFile);\n await fs.pipeline(readStream, writeStream);\n logger.debug(\n { url: packageUrl, targetFile: compressedFile },\n 'Downloading Debian package file',\n );\n\n let inReleaseContent = '';\n\n try {\n inReleaseContent = await this.fetchInReleaseFile(baseReleaseUrl);\n } catch (error) {\n // This is expected to fail for Artifactory if GPG verification is not enabled\n logger.debug(\n { url: baseReleaseUrl, err: error },\n 'Could not fetch InRelease file',\n );\n }\n\n if (inReleaseContent) {\n const actualChecksum = await computeFileChecksum(compressedFile);\n const expectedChecksum = parseChecksumsFromInRelease(\n inReleaseContent,\n // path to the Package.gz file\n packageUrl.replace(`${baseReleaseUrl}/`, ''),\n );\n if (actualChecksum !== expectedChecksum) {\n await fs.rmCache(compressedFile);\n throw new Error('SHA256 checksum validation failed');\n }\n }\n\n return needsToDownload;\n }\n\n /**\n * Fetches the content of the InRelease file from the given base release URL.\n *\n * @param baseReleaseUrl - The base URL of the release (e.g., 'https://deb.debian.org/debian/dists/bullseye').\n * @returns resolves to the content of the InRelease file.\n * @throws An error if the InRelease file could not be downloaded.\n */\n private async fetchInReleaseFile(baseReleaseUrl: string): Promise<string> {\n const inReleaseUrl = joinUrlParts(baseReleaseUrl, 'InRelease');\n const response = await this.http.get(inReleaseUrl);\n return response.body;\n }\n\n /**\n * Checks if a packageUrl content has been modified since the specified timestamp.\n *\n * @param packageUrl - The URL to check.\n * @param lastDownloadTimestamp - The timestamp of the last download.\n * @returns True if the content has been modified, otherwise false.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since\n */\n private async checkIfModified(\n packageUrl: string,\n lastDownloadTimestamp: Date,\n ): Promise<boolean> {\n const options: HttpOptions = {\n headers: {\n 'If-Modified-Since': lastDownloadTimestamp.toUTCString(),\n },\n };\n\n try {\n const response = await this.http.head(packageUrl, options);\n return response.statusCode !== 304;\n } catch (error) {\n logger.warn(\n { packageUrl, lastDownloadTimestamp, errorMessage: error.message },\n 'Could not determine if package file is modified since last download',\n );\n return true; // Assume it needs to be downloaded if check fails\n }\n }\n\n /**\n * Parses the extracted package index file.\n *\n * @param extractedFile - The path to the extracted package file.\n * @param lastTimestamp - The timestamp of the last modification.\n * @returns a list of packages with minimal Metadata.\n */\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: (extractedFile: string, lastTimestamp: Date) =>\n `${extractedFile}:${lastTimestamp.getTime()}`,\n ttlMinutes: 24 * 60,\n })\n async parseExtractedPackageIndex(\n extractedFile: string,\n lastTimestamp: Date,\n ): Promise<Record<string, PackageDescription[]>> {\n // read line by line to avoid high memory consumption as the extracted Packages\n // files can be multiple MBs in size\n const rl = readline.createInterface({\n input: fs.createCacheReadStream(extractedFile),\n terminal: false,\n });\n\n let currentPackage: PackageDescription = {};\n // A Package Index can contain multiple Versions of the package on private Artifactory (e.g. Jfrog)\n const allPackages: Record<string, PackageDescription[]> = {};\n\n for await (const line of rl) {\n if (line === '') {\n // All information of the package are available, add to the list of packages\n if (requiredPackageKeys.every((key) => key in currentPackage)) {\n if (!allPackages[currentPackage.Package!]) {\n allPackages[currentPackage.Package!] = [];\n }\n allPackages[currentPackage.Package!].push(currentPackage);\n currentPackage = {};\n }\n } else {\n for (const key of packageKeys) {\n if (line.startsWith(`${key}:`)) {\n currentPackage[key] = line.substring(key.length + 1).trim();\n break;\n }\n }\n }\n }\n\n // Check the last package after file reading is complete\n if (requiredPackageKeys.every((key) => key in currentPackage)) {\n if (!allPackages[currentPackage.Package!]) {\n allPackages[currentPackage.Package!] = [];\n }\n allPackages[currentPackage.Package!].push(currentPackage);\n }\n\n return allPackages;\n }\n\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: (componentUrl: string) => componentUrl,\n })\n async getPackageIndex(\n componentUrl: string,\n ): Promise<Record<string, PackageDescription[]>> {\n const { extractedFile, lastTimestamp } =\n await this.downloadAndExtractPackage(componentUrl);\n return await this.parseExtractedPackageIndex(extractedFile, lastTimestamp);\n }\n\n /**\n * Fetches the release information for a given package from the registry URL.\n *\n * @param config - Configuration for fetching releases.\n * @returns The release result if the package is found, otherwise null.\n */\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n `${registryUrl}:${packageName}`,\n })\n async getReleases({\n registryUrl,\n packageName,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n const componentUrls = constructComponentUrls(registryUrl);\n let aggregatedRelease: ReleaseResult | null = null;\n\n for (const componentUrl of componentUrls) {\n try {\n const packageIndex = await this.getPackageIndex(componentUrl);\n const parsedPackages = packageIndex[packageName];\n\n if (parsedPackages) {\n const newRelease = formatReleaseResult(parsedPackages);\n if (aggregatedRelease === null) {\n aggregatedRelease = newRelease;\n } else {\n if (!releaseMetaInformationMatches(aggregatedRelease, newRelease)) {\n logger.warn(\n { packageName },\n 'Package occurred in more than one repository with different meta information. Aggregating releases anyway.',\n );\n }\n aggregatedRelease.releases.push(...newRelease.releases);\n }\n }\n } catch (error) {\n logger.debug(\n { componentUrl, error },\n 'Skipping component due to an error',\n );\n }\n }\n\n return aggregatedRelease;\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/deb/index.ts"],"names":[],"mappings":"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","sourcesContent":["import readline from 'readline';\nimport { nanoid } from 'nanoid';\nimport upath from 'upath';\nimport { logger } from '../../../logger';\nimport { cache } from '../../../util/cache/package/decorator';\nimport * as fs from '../../../util/fs';\nimport { toSha256 } from '../../../util/hash';\nimport type { HttpOptions } from '../../../util/http/types';\nimport { joinUrlParts } from '../../../util/url';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { computeFileChecksum, parseChecksumsFromInRelease } from './checksum';\nimport { cacheSubDir, packageKeys, requiredPackageKeys } from './common';\nimport { extract, getFileCreationTime } from './file';\nimport { formatReleaseResult, releaseMetaInformationMatches } from './release';\nimport type { PackageDescription } from './types';\nimport { constructComponentUrls, getBaseReleaseUrl } from './url';\n\nexport class DebDatasource extends Datasource {\n static readonly id = 'deb';\n\n constructor() {\n super(DebDatasource.id);\n }\n\n /**\n * Users are able to specify custom Debian repositories as long as they follow\n * the Debian package repository format as specified here\n * @see{https://wiki.debian.org/DebianRepository/Format}\n */\n override readonly customRegistrySupport = true;\n\n /**\n * Users can specify multiple upstream repositories and the datasource will aggregate the release\n * @example\n * When specifying multiple dependencies both internal and external dependencies from internal/external artifactory\n */\n override readonly registryStrategy = 'merge';\n\n /**\n * The original apt source list file format is\n * deb uri distribution [component1] [component2] [...]\n * @see{https://wiki.debian.org/DebianRepository/Format}\n *\n * However, for Renovate, we require the registry URLs to be\n * valid URLs which is why the parameters are encoded in the URL.\n *\n * The following query parameters are required:\n * - components: comma separated list of components\n * - suite: stable, oldstable or other alias for a release, either this or release must be given\n * - release: buster, etc.\n * - binaryArch: e.g. amd64 resolves to http://deb.debian.org/debian/dists/stable/non-free/binary-amd64/\n */\n override readonly defaultRegistryUrls = [\n 'https://deb.debian.org/debian?suite=stable&components=main,contrib,non-free&binaryArch=amd64',\n ];\n\n override readonly defaultVersioning = 'deb';\n\n /**\n * Downloads and extracts a package file from a component URL.\n *\n * @param componentUrl - The URL of the component.\n * @returns The path to the extracted file and the last modification timestamp.\n * @throws Will throw an error if no valid compression method is found.\n */\n private async downloadAndExtractPackage(\n componentUrl: string,\n ): Promise<{ extractedFile: string; lastTimestamp: Date }> {\n const packageUrlHash = toSha256(componentUrl);\n const fullCacheDir = await fs.ensureCacheDir(cacheSubDir);\n const extractedFile = upath.join(fullCacheDir, `${packageUrlHash}.txt`);\n let lastTimestamp = await getFileCreationTime(extractedFile);\n\n const compression = 'gz';\n const compressedFile = upath.join(\n fullCacheDir,\n `${nanoid()}_${packageUrlHash}.${compression}`,\n );\n\n const wasUpdated = await this.downloadPackageFile(\n componentUrl,\n compression,\n compressedFile,\n lastTimestamp,\n );\n\n if (wasUpdated || !lastTimestamp) {\n try {\n await extract(compressedFile, compression, extractedFile);\n lastTimestamp = await getFileCreationTime(extractedFile);\n } catch (error) {\n logger.warn(\n {\n compressedFile,\n componentUrl,\n compression,\n error: error.message,\n },\n 'Failed to extract package file from compressed file',\n );\n } finally {\n await fs.rmCache(compressedFile);\n }\n }\n\n if (!lastTimestamp) {\n //extracting went wrong\n throw new Error('Missing metadata in extracted package index file!');\n }\n\n return { extractedFile, lastTimestamp };\n }\n\n /**\n * Downloads a package file if it has been modified since the last download timestamp.\n *\n * @param basePackageUrl - The base URL of the package.\n * @param compression - The compression method used (e.g., 'gz').\n * @param compressedFile - The path where the compressed file will be saved.\n * @param lastDownloadTimestamp - The timestamp of the last download.\n * @returns True if the file was downloaded, otherwise false.\n */\n private async downloadPackageFile(\n basePackageUrl: string,\n compression: string,\n compressedFile: string,\n lastDownloadTimestamp?: Date,\n ): Promise<boolean> {\n const baseReleaseUrl = getBaseReleaseUrl(basePackageUrl);\n const packageUrl = joinUrlParts(basePackageUrl, `Packages.${compression}`);\n let needsToDownload = true;\n\n if (lastDownloadTimestamp) {\n needsToDownload = await this.checkIfModified(\n packageUrl,\n lastDownloadTimestamp,\n );\n }\n\n if (!needsToDownload) {\n logger.debug(`No need to download ${packageUrl}, file is up to date.`);\n return false;\n }\n const readStream = this.http.stream(packageUrl);\n const writeStream = fs.createCacheWriteStream(compressedFile);\n await fs.pipeline(readStream, writeStream);\n logger.debug(\n { url: packageUrl, targetFile: compressedFile },\n 'Downloading Debian package file',\n );\n\n let inReleaseContent = '';\n\n try {\n inReleaseContent = await this.fetchInReleaseFile(baseReleaseUrl);\n } catch (error) {\n // This is expected to fail for Artifactory if GPG verification is not enabled\n logger.debug(\n { url: baseReleaseUrl, err: error },\n 'Could not fetch InRelease file',\n );\n }\n\n if (inReleaseContent) {\n const actualChecksum = await computeFileChecksum(compressedFile);\n const expectedChecksum = parseChecksumsFromInRelease(\n inReleaseContent,\n // path to the Package.gz file\n packageUrl.replace(`${baseReleaseUrl}/`, ''),\n );\n if (actualChecksum !== expectedChecksum) {\n await fs.rmCache(compressedFile);\n throw new Error('SHA256 checksum validation failed');\n }\n }\n\n return needsToDownload;\n }\n\n /**\n * Fetches the content of the InRelease file from the given base release URL.\n *\n * @param baseReleaseUrl - The base URL of the release (e.g., 'https://deb.debian.org/debian/dists/bullseye').\n * @returns resolves to the content of the InRelease file.\n * @throws An error if the InRelease file could not be downloaded.\n */\n private async fetchInReleaseFile(baseReleaseUrl: string): Promise<string> {\n const inReleaseUrl = joinUrlParts(baseReleaseUrl, 'InRelease');\n const response = await this.http.getText(inReleaseUrl);\n return response.body;\n }\n\n /**\n * Checks if a packageUrl content has been modified since the specified timestamp.\n *\n * @param packageUrl - The URL to check.\n * @param lastDownloadTimestamp - The timestamp of the last download.\n * @returns True if the content has been modified, otherwise false.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since\n */\n private async checkIfModified(\n packageUrl: string,\n lastDownloadTimestamp: Date,\n ): Promise<boolean> {\n const options: HttpOptions = {\n headers: {\n 'If-Modified-Since': lastDownloadTimestamp.toUTCString(),\n },\n };\n\n try {\n const response = await this.http.head(packageUrl, options);\n return response.statusCode !== 304;\n } catch (error) {\n logger.warn(\n { packageUrl, lastDownloadTimestamp, errorMessage: error.message },\n 'Could not determine if package file is modified since last download',\n );\n return true; // Assume it needs to be downloaded if check fails\n }\n }\n\n /**\n * Parses the extracted package index file.\n *\n * @param extractedFile - The path to the extracted package file.\n * @param lastTimestamp - The timestamp of the last modification.\n * @returns a list of packages with minimal Metadata.\n */\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: (extractedFile: string, lastTimestamp: Date) =>\n `${extractedFile}:${lastTimestamp.getTime()}`,\n ttlMinutes: 24 * 60,\n })\n async parseExtractedPackageIndex(\n extractedFile: string,\n lastTimestamp: Date,\n ): Promise<Record<string, PackageDescription[]>> {\n // read line by line to avoid high memory consumption as the extracted Packages\n // files can be multiple MBs in size\n const rl = readline.createInterface({\n input: fs.createCacheReadStream(extractedFile),\n terminal: false,\n });\n\n let currentPackage: PackageDescription = {};\n // A Package Index can contain multiple Versions of the package on private Artifactory (e.g. Jfrog)\n const allPackages: Record<string, PackageDescription[]> = {};\n\n for await (const line of rl) {\n if (line === '') {\n // All information of the package are available, add to the list of packages\n if (requiredPackageKeys.every((key) => key in currentPackage)) {\n if (!allPackages[currentPackage.Package!]) {\n allPackages[currentPackage.Package!] = [];\n }\n allPackages[currentPackage.Package!].push(currentPackage);\n currentPackage = {};\n }\n } else {\n for (const key of packageKeys) {\n if (line.startsWith(`${key}:`)) {\n currentPackage[key] = line.substring(key.length + 1).trim();\n break;\n }\n }\n }\n }\n\n // Check the last package after file reading is complete\n if (requiredPackageKeys.every((key) => key in currentPackage)) {\n if (!allPackages[currentPackage.Package!]) {\n allPackages[currentPackage.Package!] = [];\n }\n allPackages[currentPackage.Package!].push(currentPackage);\n }\n\n return allPackages;\n }\n\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: (componentUrl: string) => componentUrl,\n })\n async getPackageIndex(\n componentUrl: string,\n ): Promise<Record<string, PackageDescription[]>> {\n const { extractedFile, lastTimestamp } =\n await this.downloadAndExtractPackage(componentUrl);\n return await this.parseExtractedPackageIndex(extractedFile, lastTimestamp);\n }\n\n /**\n * Fetches the release information for a given package from the registry URL.\n *\n * @param config - Configuration for fetching releases.\n * @returns The release result if the package is found, otherwise null.\n */\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n `${registryUrl}:${packageName}`,\n })\n async getReleases({\n registryUrl,\n packageName,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n const componentUrls = constructComponentUrls(registryUrl);\n let aggregatedRelease: ReleaseResult | null = null;\n\n for (const componentUrl of componentUrls) {\n try {\n const packageIndex = await this.getPackageIndex(componentUrl);\n const parsedPackages = packageIndex[packageName];\n\n if (parsedPackages) {\n const newRelease = formatReleaseResult(parsedPackages);\n if (aggregatedRelease === null) {\n aggregatedRelease = newRelease;\n } else {\n if (!releaseMetaInformationMatches(aggregatedRelease, newRelease)) {\n logger.warn(\n { packageName },\n 'Package occurred in more than one repository with different meta information. Aggregating releases anyway.',\n );\n }\n aggregatedRelease.releases.push(...newRelease.releases);\n }\n }\n } catch (error) {\n logger.debug(\n { componentUrl, error },\n 'Skipping component due to an error',\n );\n }\n }\n\n return aggregatedRelease;\n }\n}\n"]}
|
@@ -246,7 +246,7 @@ function findLatestStable(tags) {
|
|
246
246
|
}
|
247
247
|
return stable;
|
248
248
|
}
|
249
|
-
const chartRepo = (0, regex_1.regEx)(/charts?|helm|helm-charts
|
249
|
+
const chartRepo = (0, regex_1.regEx)(/charts?|helm|helm-charts?/i);
|
250
250
|
function isPossibleChartRepo(url) {
|
251
251
|
if ((0, common_1.detectPlatform)(url) === null) {
|
252
252
|
return false;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/common.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { parse } from 'auth-header';\nimport {\n HOST_DISABLED,\n PAGE_NOT_FOUND_ERROR,\n} from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { HostRule } from '../../../types';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { coerceArray } from '../../../util/array';\nimport { detectPlatform } from '../../../util/common';\nimport { parseGitUrl } from '../../../util/git/url';\nimport { toSha256 } from '../../../util/hash';\nimport * as hostRules from '../../../util/host-rules';\nimport type { Http } from '../../../util/http';\nimport type {\n HttpOptions,\n HttpResponse,\n OutgoingHttpHeaders,\n} from '../../../util/http/types';\nimport { regEx } from '../../../util/regex';\nimport { addSecretForSanitizing } from '../../../util/sanitize';\nimport {\n ensureTrailingSlash,\n parseUrl,\n trimTrailingSlash,\n} from '../../../util/url';\nimport { api as dockerVersioning } from '../../versioning/docker';\nimport { getGoogleAuthToken } from '../util';\nimport { ecrRegex, getECRAuthToken } from './ecr';\nimport { googleRegex } from './google';\nimport type { OciHelmConfig } from './schema';\nimport type { RegistryRepository } from './types';\n\nexport const dockerDatasourceId = 'docker';\n\nexport const imageUrlLabel = 'org.opencontainers.image.url';\n\nexport const sourceLabel = 'org.opencontainers.image.source';\nexport const sourceLabels = [sourceLabel, 'org.label-schema.vcs-url'] as const;\n\nexport const gitRefLabel = 'org.opencontainers.image.revision';\n\nexport const DOCKER_HUB = 'https://index.docker.io';\n\nexport function isDockerHost(host: string): boolean {\n const regex = regEx(/(?:^|\\.)docker\\.io$/);\n return regex.test(host);\n}\n\nexport async function getAuthHeaders(\n http: Http,\n registryHost: string,\n dockerRepository: string,\n apiCheckUrl = `${registryHost}/v2/`,\n): Promise<OutgoingHttpHeaders | null> {\n try {\n const options = {\n throwHttpErrors: false,\n noAuth: true,\n };\n const apiCheckResponse = apiCheckUrl.endsWith('/v2/')\n ? await http.get(apiCheckUrl, options)\n : // use json request, as this will be cached for tags, so it returns json\n // TODO: add cache test\n await http.getJsonUnchecked(apiCheckUrl, options);\n\n if (apiCheckResponse.statusCode === 200) {\n logger.debug(`No registry auth required for ${apiCheckUrl}`);\n return {};\n }\n if (apiCheckResponse.statusCode === 404) {\n logger.debug(`Page Not Found ${apiCheckUrl}`);\n // throw error up to be caught and potentially retried with library/ prefix\n throw new Error(PAGE_NOT_FOUND_ERROR);\n }\n if (\n apiCheckResponse.statusCode !== 401 ||\n !is.nonEmptyString(apiCheckResponse.headers['www-authenticate'])\n ) {\n logger.warn(\n { apiCheckUrl, res: apiCheckResponse },\n 'Invalid registry response',\n );\n return null;\n }\n\n const authenticateHeader = parse(\n apiCheckResponse.headers['www-authenticate'],\n );\n\n const opts: HostRule & HttpOptions = hostRules.find({\n hostType: dockerDatasourceId,\n url: apiCheckUrl,\n });\n if (ecrRegex.test(registryHost)) {\n logger.once.debug(`hostRules: ecr auth for ${registryHost}`);\n logger.trace(\n { registryHost, dockerRepository },\n `Using ecr auth for Docker registry`,\n );\n const [, region] = coerceArray(ecrRegex.exec(registryHost));\n const auth = await getECRAuthToken(region, opts);\n if (auth) {\n opts.headers = { authorization: `Basic ${auth}` };\n }\n } else if (\n googleRegex.test(registryHost) &&\n typeof opts.username === 'undefined' &&\n typeof opts.password === 'undefined' &&\n typeof opts.token === 'undefined'\n ) {\n logger.once.debug(`hostRules: google auth for ${registryHost}`);\n logger.trace(\n { registryHost, dockerRepository },\n `Using google auth for Docker registry`,\n );\n const auth = await getGoogleAuthToken();\n if (auth) {\n opts.headers = { authorization: `Basic ${auth}` };\n } else {\n logger.once.debug(\n { registryHost, dockerRepository },\n 'Could not get Google access token, using no auth',\n );\n }\n } else if (opts.username && opts.password) {\n logger.once.debug(`hostRules: basic auth for ${registryHost}`);\n logger.trace(\n { registryHost, dockerRepository },\n `Using basic auth for Docker registry`,\n );\n const auth = Buffer.from(`${opts.username}:${opts.password}`).toString(\n 'base64',\n );\n opts.headers = { authorization: `Basic ${auth}` };\n } else if (opts.token) {\n const authType = opts.authType ?? 'Bearer';\n logger.once.debug(\n `hostRules: ${authType} token auth for ${registryHost}`,\n );\n logger.trace(\n { registryHost, dockerRepository },\n `Using ${authType} token for Docker registry`,\n );\n opts.headers = { authorization: `${authType} ${opts.token}` };\n }\n delete opts.username;\n delete opts.password;\n delete opts.token;\n\n // If realm isn't an url, we should directly use auth header\n // Can happen when we get a Basic auth or some other auth type\n // * WWW-Authenticate: Basic realm=\"Artifactory Realm\"\n // * Www-Authenticate: Basic realm=\"https://123456789.dkr.ecr.eu-central-1.amazonaws.com/\",service=\"ecr.amazonaws.com\"\n // * www-authenticate: Bearer realm=\"https://ghcr.io/token\",service=\"ghcr.io\",scope=\"repository:user/image:pull\"\n // * www-authenticate: Bearer realm=\"https://auth.docker.io/token\",service=\"registry.docker.io\"\n if (\n authenticateHeader.scheme.toUpperCase() !== 'BEARER' ||\n !is.string(authenticateHeader.params.realm) ||\n parseUrl(authenticateHeader.params.realm) === null\n ) {\n logger.once.debug(`hostRules: testing direct auth for ${registryHost}`);\n logger.trace(\n { registryHost, dockerRepository, authenticateHeader },\n `Invalid realm, testing direct auth`,\n );\n return opts.headers ?? null;\n }\n\n const authUrl = new URL(`${authenticateHeader.params.realm}`);\n\n // repo isn't known to server yet, so causing wrong scope `repository:user/image:pull`\n if (\n is.string(authenticateHeader.params.scope) &&\n !apiCheckUrl.endsWith('/v2/')\n ) {\n authUrl.searchParams.append('scope', authenticateHeader.params.scope);\n } else {\n authUrl.searchParams.append(\n 'scope',\n `repository:${dockerRepository}:pull`,\n );\n }\n\n if (is.string(authenticateHeader.params.service)) {\n authUrl.searchParams.append('service', authenticateHeader.params.service);\n }\n\n logger.trace(\n { registryHost, dockerRepository, authUrl: authUrl.href },\n `Obtaining docker registry token`,\n );\n opts.noAuth = true;\n const authResponse = (\n await http.getJsonUnchecked<{ token?: string; access_token?: string }>(\n authUrl.href,\n opts,\n )\n ).body;\n\n const token = authResponse.token ?? authResponse.access_token;\n // istanbul ignore if\n if (!token) {\n logger.warn('Failed to obtain docker registry token');\n return null;\n }\n // sanitize token\n addSecretForSanitizing(token);\n return {\n authorization: `Bearer ${token}`,\n };\n } catch (err) /* istanbul ignore next */ {\n if (err.host === 'quay.io') {\n // TODO: debug why quay throws errors (#9604)\n return null;\n }\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Unauthorized docker lookup',\n );\n logger.debug({ err });\n return null;\n }\n if (err.statusCode === 403) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Not allowed to access docker registry',\n );\n logger.debug({ err });\n return null;\n }\n if (err.name === 'RequestError' && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n if (err.message === PAGE_NOT_FOUND_ERROR) {\n throw err;\n }\n if (err.message === HOST_DISABLED) {\n logger.trace({ registryHost, dockerRepository, err }, 'Host disabled');\n return null;\n }\n logger.warn(\n { registryHost, dockerRepository, err },\n 'Error obtaining docker token',\n );\n return null;\n }\n}\n\nexport function getRegistryRepository(\n packageName: string,\n registryUrl: string,\n): RegistryRepository {\n if (registryUrl !== DOCKER_HUB) {\n const registryEndingWithSlash = ensureTrailingSlash(\n registryUrl.replace(regEx(/^https?:\\/\\//), ''),\n );\n if (packageName.startsWith(registryEndingWithSlash)) {\n let registryHost = trimTrailingSlash(registryUrl);\n if (!regEx(/^https?:\\/\\//).test(registryHost)) {\n registryHost = `https://${registryHost}`;\n }\n let dockerRepository = packageName.replace(registryEndingWithSlash, '');\n const fullUrl = `${registryHost}/${dockerRepository}`;\n const { origin, pathname } = parseUrl(fullUrl)!;\n registryHost = origin;\n dockerRepository = pathname.substring(1);\n return {\n registryHost,\n dockerRepository,\n };\n }\n }\n let registryHost = registryUrl;\n const split = packageName.split('/');\n if (split.length > 1 && (split[0].includes('.') || split[0].includes(':'))) {\n [registryHost] = split;\n split.shift();\n }\n let dockerRepository = split.join('/');\n\n if (!regEx(/^https?:\\/\\//).test(registryHost)) {\n registryHost = `https://${registryHost}`;\n }\n\n const { path, base } =\n regEx(/^(?<base>https:\\/\\/[^/]+)\\/(?<path>.+)$/).exec(registryHost)\n ?.groups ?? {};\n if (base && path) {\n registryHost = base;\n dockerRepository = `${trimTrailingSlash(path)}/${dockerRepository}`;\n }\n\n registryHost = registryHost\n .replace('https://docker.io', 'https://index.docker.io')\n .replace('https://registry-1.docker.io', 'https://index.docker.io');\n\n const opts = hostRules.find({\n hostType: dockerDatasourceId,\n url: registryHost,\n });\n if (opts?.insecureRegistry) {\n registryHost = registryHost.replace('https', 'http');\n }\n if (registryHost.endsWith('.docker.io') && !dockerRepository.includes('/')) {\n dockerRepository = 'library/' + dockerRepository;\n }\n return {\n registryHost,\n dockerRepository,\n };\n}\n\nexport function extractDigestFromResponseBody(\n manifestResponse: HttpResponse,\n): string {\n return 'sha256:' + toSha256(manifestResponse.body);\n}\n\nexport function findLatestStable(tags: string[]): string | null {\n let stable: string | null = null;\n\n for (const tag of tags) {\n if (!dockerVersioning.isValid(tag) || !dockerVersioning.isStable(tag)) {\n continue;\n }\n\n if (!stable || dockerVersioning.isGreaterThan(tag, stable)) {\n stable = tag;\n }\n }\n\n return stable;\n}\n\nconst chartRepo = regEx(/charts?|helm|helm-charts/i);\n\nfunction isPossibleChartRepo(url: string): boolean {\n if (detectPlatform(url) === null) {\n return false;\n }\n\n const parsed = parseGitUrl(url);\n return chartRepo.test(parsed.name);\n}\n\nexport function findHelmSourceUrl(release: OciHelmConfig): string | null {\n if (release.home && isPossibleChartRepo(release.home)) {\n return release.home;\n }\n\n if (!release.sources?.length) {\n return null;\n }\n\n for (const url of release.sources) {\n if (isPossibleChartRepo(url)) {\n return url;\n }\n }\n\n // fallback\n return release.sources[0];\n}\n"]}
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/common.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { parse } from 'auth-header';\nimport {\n HOST_DISABLED,\n PAGE_NOT_FOUND_ERROR,\n} from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { HostRule } from '../../../types';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { coerceArray } from '../../../util/array';\nimport { detectPlatform } from '../../../util/common';\nimport { parseGitUrl } from '../../../util/git/url';\nimport { toSha256 } from '../../../util/hash';\nimport * as hostRules from '../../../util/host-rules';\nimport type { Http } from '../../../util/http';\nimport type {\n HttpOptions,\n HttpResponse,\n OutgoingHttpHeaders,\n} from '../../../util/http/types';\nimport { regEx } from '../../../util/regex';\nimport { addSecretForSanitizing } from '../../../util/sanitize';\nimport {\n ensureTrailingSlash,\n parseUrl,\n trimTrailingSlash,\n} from '../../../util/url';\nimport { api as dockerVersioning } from '../../versioning/docker';\nimport { getGoogleAuthToken } from '../util';\nimport { ecrRegex, getECRAuthToken } from './ecr';\nimport { googleRegex } from './google';\nimport type { OciHelmConfig } from './schema';\nimport type { RegistryRepository } from './types';\n\nexport const dockerDatasourceId = 'docker';\n\nexport const imageUrlLabel = 'org.opencontainers.image.url';\n\nexport const sourceLabel = 'org.opencontainers.image.source';\nexport const sourceLabels = [sourceLabel, 'org.label-schema.vcs-url'] as const;\n\nexport const gitRefLabel = 'org.opencontainers.image.revision';\n\nexport const DOCKER_HUB = 'https://index.docker.io';\n\nexport function isDockerHost(host: string): boolean {\n const regex = regEx(/(?:^|\\.)docker\\.io$/);\n return regex.test(host);\n}\n\nexport async function getAuthHeaders(\n http: Http,\n registryHost: string,\n dockerRepository: string,\n apiCheckUrl = `${registryHost}/v2/`,\n): Promise<OutgoingHttpHeaders | null> {\n try {\n const options = {\n throwHttpErrors: false,\n noAuth: true,\n };\n const apiCheckResponse = apiCheckUrl.endsWith('/v2/')\n ? await http.get(apiCheckUrl, options)\n : // use json request, as this will be cached for tags, so it returns json\n // TODO: add cache test\n await http.getJsonUnchecked(apiCheckUrl, options);\n\n if (apiCheckResponse.statusCode === 200) {\n logger.debug(`No registry auth required for ${apiCheckUrl}`);\n return {};\n }\n if (apiCheckResponse.statusCode === 404) {\n logger.debug(`Page Not Found ${apiCheckUrl}`);\n // throw error up to be caught and potentially retried with library/ prefix\n throw new Error(PAGE_NOT_FOUND_ERROR);\n }\n if (\n apiCheckResponse.statusCode !== 401 ||\n !is.nonEmptyString(apiCheckResponse.headers['www-authenticate'])\n ) {\n logger.warn(\n { apiCheckUrl, res: apiCheckResponse },\n 'Invalid registry response',\n );\n return null;\n }\n\n const authenticateHeader = parse(\n apiCheckResponse.headers['www-authenticate'],\n );\n\n const opts: HostRule & HttpOptions = hostRules.find({\n hostType: dockerDatasourceId,\n url: apiCheckUrl,\n });\n if (ecrRegex.test(registryHost)) {\n logger.once.debug(`hostRules: ecr auth for ${registryHost}`);\n logger.trace(\n { registryHost, dockerRepository },\n `Using ecr auth for Docker registry`,\n );\n const [, region] = coerceArray(ecrRegex.exec(registryHost));\n const auth = await getECRAuthToken(region, opts);\n if (auth) {\n opts.headers = { authorization: `Basic ${auth}` };\n }\n } else if (\n googleRegex.test(registryHost) &&\n typeof opts.username === 'undefined' &&\n typeof opts.password === 'undefined' &&\n typeof opts.token === 'undefined'\n ) {\n logger.once.debug(`hostRules: google auth for ${registryHost}`);\n logger.trace(\n { registryHost, dockerRepository },\n `Using google auth for Docker registry`,\n );\n const auth = await getGoogleAuthToken();\n if (auth) {\n opts.headers = { authorization: `Basic ${auth}` };\n } else {\n logger.once.debug(\n { registryHost, dockerRepository },\n 'Could not get Google access token, using no auth',\n );\n }\n } else if (opts.username && opts.password) {\n logger.once.debug(`hostRules: basic auth for ${registryHost}`);\n logger.trace(\n { registryHost, dockerRepository },\n `Using basic auth for Docker registry`,\n );\n const auth = Buffer.from(`${opts.username}:${opts.password}`).toString(\n 'base64',\n );\n opts.headers = { authorization: `Basic ${auth}` };\n } else if (opts.token) {\n const authType = opts.authType ?? 'Bearer';\n logger.once.debug(\n `hostRules: ${authType} token auth for ${registryHost}`,\n );\n logger.trace(\n { registryHost, dockerRepository },\n `Using ${authType} token for Docker registry`,\n );\n opts.headers = { authorization: `${authType} ${opts.token}` };\n }\n delete opts.username;\n delete opts.password;\n delete opts.token;\n\n // If realm isn't an url, we should directly use auth header\n // Can happen when we get a Basic auth or some other auth type\n // * WWW-Authenticate: Basic realm=\"Artifactory Realm\"\n // * Www-Authenticate: Basic realm=\"https://123456789.dkr.ecr.eu-central-1.amazonaws.com/\",service=\"ecr.amazonaws.com\"\n // * www-authenticate: Bearer realm=\"https://ghcr.io/token\",service=\"ghcr.io\",scope=\"repository:user/image:pull\"\n // * www-authenticate: Bearer realm=\"https://auth.docker.io/token\",service=\"registry.docker.io\"\n if (\n authenticateHeader.scheme.toUpperCase() !== 'BEARER' ||\n !is.string(authenticateHeader.params.realm) ||\n parseUrl(authenticateHeader.params.realm) === null\n ) {\n logger.once.debug(`hostRules: testing direct auth for ${registryHost}`);\n logger.trace(\n { registryHost, dockerRepository, authenticateHeader },\n `Invalid realm, testing direct auth`,\n );\n return opts.headers ?? null;\n }\n\n const authUrl = new URL(`${authenticateHeader.params.realm}`);\n\n // repo isn't known to server yet, so causing wrong scope `repository:user/image:pull`\n if (\n is.string(authenticateHeader.params.scope) &&\n !apiCheckUrl.endsWith('/v2/')\n ) {\n authUrl.searchParams.append('scope', authenticateHeader.params.scope);\n } else {\n authUrl.searchParams.append(\n 'scope',\n `repository:${dockerRepository}:pull`,\n );\n }\n\n if (is.string(authenticateHeader.params.service)) {\n authUrl.searchParams.append('service', authenticateHeader.params.service);\n }\n\n logger.trace(\n { registryHost, dockerRepository, authUrl: authUrl.href },\n `Obtaining docker registry token`,\n );\n opts.noAuth = true;\n const authResponse = (\n await http.getJsonUnchecked<{ token?: string; access_token?: string }>(\n authUrl.href,\n opts,\n )\n ).body;\n\n const token = authResponse.token ?? authResponse.access_token;\n // istanbul ignore if\n if (!token) {\n logger.warn('Failed to obtain docker registry token');\n return null;\n }\n // sanitize token\n addSecretForSanitizing(token);\n return {\n authorization: `Bearer ${token}`,\n };\n } catch (err) /* istanbul ignore next */ {\n if (err.host === 'quay.io') {\n // TODO: debug why quay throws errors (#9604)\n return null;\n }\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Unauthorized docker lookup',\n );\n logger.debug({ err });\n return null;\n }\n if (err.statusCode === 403) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Not allowed to access docker registry',\n );\n logger.debug({ err });\n return null;\n }\n if (err.name === 'RequestError' && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n if (err.message === PAGE_NOT_FOUND_ERROR) {\n throw err;\n }\n if (err.message === HOST_DISABLED) {\n logger.trace({ registryHost, dockerRepository, err }, 'Host disabled');\n return null;\n }\n logger.warn(\n { registryHost, dockerRepository, err },\n 'Error obtaining docker token',\n );\n return null;\n }\n}\n\nexport function getRegistryRepository(\n packageName: string,\n registryUrl: string,\n): RegistryRepository {\n if (registryUrl !== DOCKER_HUB) {\n const registryEndingWithSlash = ensureTrailingSlash(\n registryUrl.replace(regEx(/^https?:\\/\\//), ''),\n );\n if (packageName.startsWith(registryEndingWithSlash)) {\n let registryHost = trimTrailingSlash(registryUrl);\n if (!regEx(/^https?:\\/\\//).test(registryHost)) {\n registryHost = `https://${registryHost}`;\n }\n let dockerRepository = packageName.replace(registryEndingWithSlash, '');\n const fullUrl = `${registryHost}/${dockerRepository}`;\n const { origin, pathname } = parseUrl(fullUrl)!;\n registryHost = origin;\n dockerRepository = pathname.substring(1);\n return {\n registryHost,\n dockerRepository,\n };\n }\n }\n let registryHost = registryUrl;\n const split = packageName.split('/');\n if (split.length > 1 && (split[0].includes('.') || split[0].includes(':'))) {\n [registryHost] = split;\n split.shift();\n }\n let dockerRepository = split.join('/');\n\n if (!regEx(/^https?:\\/\\//).test(registryHost)) {\n registryHost = `https://${registryHost}`;\n }\n\n const { path, base } =\n regEx(/^(?<base>https:\\/\\/[^/]+)\\/(?<path>.+)$/).exec(registryHost)\n ?.groups ?? {};\n if (base && path) {\n registryHost = base;\n dockerRepository = `${trimTrailingSlash(path)}/${dockerRepository}`;\n }\n\n registryHost = registryHost\n .replace('https://docker.io', 'https://index.docker.io')\n .replace('https://registry-1.docker.io', 'https://index.docker.io');\n\n const opts = hostRules.find({\n hostType: dockerDatasourceId,\n url: registryHost,\n });\n if (opts?.insecureRegistry) {\n registryHost = registryHost.replace('https', 'http');\n }\n if (registryHost.endsWith('.docker.io') && !dockerRepository.includes('/')) {\n dockerRepository = 'library/' + dockerRepository;\n }\n return {\n registryHost,\n dockerRepository,\n };\n}\n\nexport function extractDigestFromResponseBody(\n manifestResponse: HttpResponse,\n): string {\n return 'sha256:' + toSha256(manifestResponse.body);\n}\n\nexport function findLatestStable(tags: string[]): string | null {\n let stable: string | null = null;\n\n for (const tag of tags) {\n if (!dockerVersioning.isValid(tag) || !dockerVersioning.isStable(tag)) {\n continue;\n }\n\n if (!stable || dockerVersioning.isGreaterThan(tag, stable)) {\n stable = tag;\n }\n }\n\n return stable;\n}\n\nconst chartRepo = regEx(/charts?|helm|helm-charts?/i);\n\nfunction isPossibleChartRepo(url: string): boolean {\n if (detectPlatform(url) === null) {\n return false;\n }\n\n const parsed = parseGitUrl(url);\n return chartRepo.test(parsed.name);\n}\n\nexport function findHelmSourceUrl(release: OciHelmConfig): string | null {\n if (release.home && isPossibleChartRepo(release.home)) {\n return release.home;\n }\n\n if (!release.sources?.length) {\n return null;\n }\n\n for (const url of release.sources) {\n if (isPossibleChartRepo(url)) {\n return url;\n }\n }\n\n // fallback\n return release.sources[0];\n}\n"]}
|
@@ -56,7 +56,7 @@ class DockerDatasource extends datasource_1.Datasource {
|
|
56
56
|
super(DockerDatasource.id);
|
57
57
|
}
|
58
58
|
// TODO: debug why quay throws errors (#9612)
|
59
|
-
async getManifestResponse(registryHost, dockerRepository, tag, mode = '
|
59
|
+
async getManifestResponse(registryHost, dockerRepository, tag, mode = 'getText') {
|
60
60
|
logger_1.logger.debug(`getManifestResponse(${registryHost}, ${dockerRepository}, ${tag}, ${mode})`);
|
61
61
|
try {
|
62
62
|
const headers = await (0, common_1.getAuthHeaders)(this.http, registryHost, dockerRepository);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport { PAGE_NOT_FOUND_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { HttpError } from '../../../util/http';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { hasKey } from '../../../util/object';\nimport { regEx } from '../../../util/regex';\nimport { type AsyncResult, Result } from '../../../util/result';\nimport { isDockerDigest } from '../../../util/string-match';\nimport { asTimestamp } from '../../../util/timestamp';\nimport {\n ensurePathPrefix,\n joinUrlParts,\n parseLinkHeader,\n} from '../../../util/url';\nimport { id as dockerVersioningId } from '../../versioning/docker';\nimport { Datasource } from '../datasource';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport { isArtifactoryServer } from '../util';\nimport {\n DOCKER_HUB,\n dockerDatasourceId,\n extractDigestFromResponseBody,\n findHelmSourceUrl,\n findLatestStable,\n getAuthHeaders,\n getRegistryRepository,\n gitRefLabel,\n imageUrlLabel,\n isDockerHost,\n sourceLabel,\n sourceLabels,\n} from './common';\nimport { DockerHubCache } from './dockerhub-cache';\nimport { ecrPublicRegex, ecrRegex, isECRMaxResultsError } from './ecr';\nimport type { DistributionManifest, OciImageManifest } from './schema';\nimport {\n DockerHubTagsPage,\n ManifestJson,\n OciHelmConfig,\n OciImageConfig,\n} from './schema';\n\nconst defaultConfig = {\n commitMessageTopic: '{{{depName}}} Docker tag',\n commitMessageExtra:\n 'to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}{{/if}}',\n digest: {\n branchTopic: '{{{depNameSanitized}}}-{{{currentValue}}}',\n commitMessageExtra: 'to {{newDigestShort}}',\n commitMessageTopic:\n '{{{depName}}}{{#if currentValue}}:{{{currentValue}}}{{/if}} Docker digest',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n commitMessageExtra: '',\n },\n },\n pin: {\n commitMessageExtra: '',\n groupName: 'Docker digests',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n branchTopic: 'digests-pin',\n },\n },\n};\n\nexport class DockerDatasource extends Datasource {\n static readonly id = dockerDatasourceId;\n\n override readonly defaultVersioning = dockerVersioningId;\n\n override readonly defaultRegistryUrls = [DOCKER_HUB];\n\n override readonly defaultConfig = defaultConfig;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `tag_last_pushed` field in thre results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `org.opencontainers.image.source` and `org.label-schema.vcs-url` labels present in the metadata of the **latest stable** image found on the Docker registry.';\n\n constructor() {\n super(DockerDatasource.id);\n }\n\n // TODO: debug why quay throws errors (#9612)\n private async getManifestResponse(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n mode: 'head' | 'get' = 'get',\n ): Promise<HttpResponse | null> {\n logger.debug(\n `getManifestResponse(${registryHost}, ${dockerRepository}, ${tag}, ${mode})`,\n );\n try {\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return null;\n }\n headers.accept = [\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n 'application/vnd.docker.distribution.manifest.v2+json',\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ].join(', ');\n const url = `${registryHost}/v2/${dockerRepository}/manifests/${tag}`;\n const manifestResponse = await this.http[mode](url, {\n headers,\n noAuth: true,\n });\n return manifestResponse;\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Unauthorized docker lookup',\n );\n logger.debug({ err });\n return null;\n }\n if (err.statusCode === 404) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Docker Manifest is unknown',\n );\n return null;\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n if (err.code === 'ETIMEDOUT') {\n logger.debug(\n { registryHost },\n 'Timeout when attempting to connect to docker registry',\n );\n logger.debug({ err });\n return null;\n }\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Unknown Error looking up docker manifest',\n );\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciImageConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n // istanbul ignore if: Should never happen\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciImageConfig,\n );\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getHelmConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciHelmConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n // istanbul ignore if: Should never happen\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciHelmConfig,\n );\n }\n\n private async getConfigDigest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<string | null> {\n return (\n (await this.getManifest(registry, dockerRepository, tag))?.config\n ?.digest ?? null\n );\n }\n\n private async getManifest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<OciImageManifest | DistributionManifest | null> {\n const manifestResponse = await this.getManifestResponse(\n registry,\n dockerRepository,\n tag,\n );\n\n // If getting the manifest fails here, then abort\n // This means that the latest tag doesn't have a manifest, which shouldn't\n // be possible\n // istanbul ignore if\n if (!manifestResponse) {\n return null;\n }\n\n // Softfail on invalid manifests\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n if (!parsed.success) {\n logger.debug(\n {\n registry,\n dockerRepository,\n tag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Invalid manifest response',\n );\n return null;\n }\n\n const manifest = parsed.data;\n\n switch (manifest.mediaType) {\n case 'application/vnd.docker.distribution.manifest.v2+json':\n case 'application/vnd.oci.image.manifest.v1+json':\n return manifest;\n case 'application/vnd.docker.distribution.manifest.list.v2+json':\n case 'application/vnd.oci.image.index.v1+json':\n if (!manifest.manifests.length) {\n logger.debug(\n { manifest },\n 'Invalid manifest list with no manifests - returning',\n );\n return null;\n }\n logger.trace(\n { registry, dockerRepository, tag },\n 'Found manifest list, using first image',\n );\n return this.getManifest(\n registry,\n dockerRepository,\n manifest.manifests[0].digest,\n );\n // istanbul ignore next: can't happen\n default:\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-architecture',\n key: (\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ) => `${registryHost}:${dockerRepository}@${currentDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageArchitecture(\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ): Promise<string | null | undefined> {\n try {\n let manifestResponse: HttpResponse<string> | null;\n\n try {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n currentDigest,\n 'head',\n );\n } catch (_err) {\n const err =\n _err instanceof ExternalHostError\n ? _err.err\n : /* istanbul ignore next: can never happen */ _err;\n\n if (\n typeof err.statusCode === 'number' &&\n err.statusCode >= 500 &&\n err.statusCode < 600\n ) {\n // querying the digest manifest for a non existent image leads to a 500 statusCode\n return null;\n }\n\n /* istanbul ignore next */\n throw _err;\n }\n\n if (\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.docker.distribution.manifest.v2+json' &&\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.oci.image.manifest.v1+json'\n ) {\n return null;\n }\n\n const configDigest = await this.getConfigDigest(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n if (!configDigest) {\n return null;\n }\n\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n configDigest,\n );\n\n // TODO: fix me, architecture is required in spec\n if (\n configResponse &&\n ('config' in configResponse.body ||\n 'architecture' in configResponse.body)\n ) {\n const architecture = configResponse.body.architecture ?? null;\n logger.debug(\n `Current digest ${currentDigest} relates to architecture ${\n architecture ?? 'null'\n }`,\n );\n\n return architecture;\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.statusCode !== 404 || err.message === PAGE_NOT_FOUND_ERROR) {\n throw err;\n }\n logger.debug(\n { registryHost, dockerRepository, currentDigest, err },\n 'Unknown error getting image architecture',\n );\n }\n\n return undefined;\n }\n\n /*\n * docker.getLabels\n *\n * This function will:\n * - Return the labels for the requested image\n */\n @cache({\n namespace: 'datasource-docker-labels',\n key: (registryHost: string, dockerRepository: string, tag: string) =>\n `${registryHost}:${dockerRepository}:${tag}`,\n ttlMinutes: 24 * 60,\n })\n async getLabels(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n ): Promise<Record<string, string> | undefined> {\n logger.debug(`getLabels(${registryHost}, ${dockerRepository}, ${tag})`);\n // Skip Docker Hub image if RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP is set\n if (\n process.env.RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP &&\n registryHost === 'https://index.docker.io'\n ) {\n logger.debug(\n 'Docker Hub image - skipping label lookup due to RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP',\n );\n return {};\n }\n // Docker Hub library images don't have labels we need\n if (\n registryHost === 'https://index.docker.io' &&\n dockerRepository.startsWith('library/')\n ) {\n logger.debug('Docker Hub library image - skipping label lookup');\n return {};\n }\n try {\n let labels: Record<string, string> | undefined = {};\n const manifest = await this.getManifest(\n registryHost,\n dockerRepository,\n tag,\n );\n\n if (!manifest) {\n logger.debug(\n { registryHost, dockerRepository, tag },\n 'No manifest found',\n );\n return undefined;\n }\n\n if ('annotations' in manifest && manifest.annotations) {\n labels = manifest.annotations;\n }\n\n switch (manifest.config.mediaType) {\n case 'application/vnd.cncf.helm.config.v1+json': {\n if (labels[sourceLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getHelmConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n if (configResponse) {\n // Helm chart\n const url = findHelmSourceUrl(configResponse.body);\n if (url) {\n labels[sourceLabel] = url;\n }\n }\n break;\n }\n case 'application/vnd.oci.image.config.v1+json':\n case 'application/vnd.docker.container.image.v1+json': {\n if (labels[sourceLabel] && labels[gitRefLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n // istanbul ignore if: should never happen\n if (!configResponse) {\n return labels;\n }\n\n const body = configResponse.body;\n if (body.config) {\n labels = { ...labels, ...body.config.Labels };\n } else {\n logger.debug(\n { headers: configResponse.headers, body },\n `manifest blob response body missing the \"config\" property`,\n );\n }\n break;\n }\n }\n\n if (labels) {\n logger.debug(\n {\n labels,\n },\n 'found labels in manifest',\n );\n }\n return labels;\n } catch (err) /* istanbul ignore next: should be tested in future */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 400 || err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository, err },\n 'Unauthorized docker lookup',\n );\n } else if (err.statusCode === 404) {\n logger.warn(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Config Manifest is unknown',\n );\n } else if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn({ err }, 'docker registry failure: too many requests');\n } else if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'docker registry failure: internal error',\n );\n } else if (\n err.code === 'ERR_TLS_CERT_ALTNAME_INVALID' ||\n err.code === 'ETIMEDOUT'\n ) {\n logger.debug(\n { registryHost, err },\n 'Error connecting to docker registry',\n );\n } else if (registryHost === 'https://quay.io') {\n // istanbul ignore next\n logger.debug(\n 'Ignoring quay.io errors until they fully support v2 schema',\n );\n } else {\n logger.info(\n { registryHost, dockerRepository, tag, err },\n 'Unknown error getting Docker labels',\n );\n }\n return {};\n }\n }\n\n private async getTagsQuayRegistry(\n registry: string,\n repository: string,\n ): Promise<string[]> {\n let tags: string[] = [];\n const limit = 100;\n\n const pageUrl = (page: number): string =>\n `${registry}/api/v1/repository/${repository}/tag/?limit=${limit}&page=${page}&onlyActiveTags=true`;\n\n let page = 1;\n let url: string | null = pageUrl(page);\n while (url && page <= 20) {\n interface QuayRestDockerTags {\n tags: {\n name: string;\n }[];\n has_additional: boolean;\n }\n\n // typescript issue :-/\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const res = (await this.http.getJsonUnchecked<QuayRestDockerTags>(\n url,\n )) as HttpResponse<QuayRestDockerTags>;\n const pageTags = res.body.tags.map((tag) => tag.name);\n tags = tags.concat(pageTags);\n page += 1;\n url = res.body.has_additional ? pageUrl(page) : null;\n }\n return tags;\n }\n\n private async getDockerApiTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n let tags: string[] = [];\n // AWS ECR limits the maximum number of results to 1000\n // See https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeRepositories.html#ECR-DescribeRepositories-request-maxResults\n // See https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_DescribeRepositories.html#ecrpublic-DescribeRepositories-request-maxResults\n const limit =\n ecrRegex.test(registryHost) || ecrPublicRegex.test(registryHost)\n ? 1000\n : 10000;\n let url: string | null =\n `${registryHost}/${dockerRepository}/tags/list?n=${limit}`;\n url = ensurePathPrefix(url, '/v2');\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n url,\n );\n if (!headers) {\n logger.debug('Failed to get authHeaders for getTags lookup');\n return null;\n }\n let page = 0;\n const pages = GlobalConfig.get('dockerMaxPages', 20);\n let foundMaxResultsError = false;\n do {\n let res: HttpResponse<{ tags: string[] }>;\n try {\n res = await this.http.getJsonUnchecked<{ tags: string[] }>(url, {\n headers,\n noAuth: true,\n });\n } catch (err) {\n if (\n !foundMaxResultsError &&\n err instanceof HttpError &&\n isECRMaxResultsError(err)\n ) {\n const maxResults = 1000;\n url = `${registryHost}/${dockerRepository}/tags/list?n=${maxResults}`;\n url = ensurePathPrefix(url, '/v2');\n foundMaxResultsError = true;\n continue;\n }\n throw err;\n }\n tags = tags.concat(res.body.tags);\n const linkHeader = parseLinkHeader(res.headers.link);\n if (isArtifactoryServer(res)) {\n // Artifactory incorrectly returns a next link without the virtual repository name\n // this is due to a bug in Artifactory https://jfrog.atlassian.net/browse/RTFACT-18971\n url = linkHeader?.next?.last\n ? `${url}&last=${linkHeader.next.last}`\n : null;\n } else {\n url = linkHeader?.next ? new URL(linkHeader.next.url, url).href : null;\n }\n page += 1;\n } while (url && page < pages);\n return tags;\n }\n\n @cache({\n namespace: 'datasource-docker-tags',\n key: (registryHost: string, dockerRepository: string) =>\n `${registryHost}:${dockerRepository}`,\n })\n async getTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n try {\n const isQuay = regEx(/^https:\\/\\/quay\\.io(?::[1-9][0-9]{0,4})?$/i).test(\n registryHost,\n );\n let tags: string[] | null;\n if (isQuay) {\n tags = await this.getTagsQuayRegistry(registryHost, dockerRepository);\n } else {\n tags = await this.getDockerApiTags(registryHost, dockerRepository);\n }\n return tags;\n } catch (_err) /* istanbul ignore next */ {\n const err = _err instanceof ExternalHostError ? _err.err : _err;\n\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n !dockerRepository.includes('/')\n ) {\n logger.debug(\n `Retrying Tags for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getTags(registryHost, 'library/' + dockerRepository);\n }\n // JFrog Artifactory - Retry handling when resolving Docker Official Images\n // These follow the format of {{registryHost}}{{jFrogRepository}}/library/{{dockerRepository}}\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n isArtifactoryServer(err.response) &&\n dockerRepository.split('/').length === 2\n ) {\n logger.debug(\n `JFrog Artifactory: Retrying Tags for ${registryHost}/${dockerRepository} using library/ path between JFrog virtual repository and image`,\n );\n\n const dockerRepositoryParts = dockerRepository.split('/');\n const jfrogRepository = dockerRepositoryParts[0];\n const dockerImage = dockerRepositoryParts[1];\n\n return this.getTags(\n registryHost,\n jfrogRepository + '/library/' + dockerImage,\n );\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: too many requests',\n );\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: internal error',\n );\n throw new ExternalHostError(err);\n }\n const errorCodes = ['ECONNRESET', 'ETIMEDOUT'];\n if (errorCodes.includes(err.code)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry connection failure',\n );\n throw new ExternalHostError(err);\n }\n if (isDockerHost(registryHost)) {\n logger.info({ err }, 'Docker Hub lookup failure');\n }\n throw _err;\n }\n }\n\n /**\n * docker.getDigest\n *\n * The `newValue` supplied here should be a valid tag for the docker image.\n *\n * This function will:\n * - Look up a sha256 digest for a tag on its registry\n * - Return the digest as a string\n */\n @cache({\n namespace: 'datasource-docker-digest',\n key: (\n { registryUrl, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ) => {\n const newTag = newValue ?? 'latest';\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n const digest = currentDigest ? `@${currentDigest}` : '';\n return `${registryHost}:${dockerRepository}:${newTag}${digest}`;\n },\n })\n override async getDigest(\n { registryUrl, lookupName, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n let registryHost: string;\n let dockerRepository: string;\n if (registryUrl && lookupName) {\n // Reuse the resolved values from getReleases()\n registryHost = registryUrl;\n dockerRepository = lookupName;\n } else {\n // Resolve values independently\n ({ registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n ));\n }\n logger.debug(\n // TODO: types (#22198)\n `getDigest(${registryHost}, ${dockerRepository}, ${newValue})`,\n );\n const newTag = is.nonEmptyString(newValue) ? newValue : 'latest';\n let digest: string | null = null;\n try {\n let architecture: string | null | undefined = null;\n if (currentDigest && isDockerDigest(currentDigest)) {\n architecture = await this.getImageArchitecture(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n }\n\n let manifestResponse: HttpResponse | null = null;\n if (!architecture) {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n 'head',\n );\n\n if (\n manifestResponse &&\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n digest =\n (manifestResponse.headers['docker-content-digest'] as string) ||\n null;\n }\n }\n\n if (\n is.string(architecture) ||\n (manifestResponse &&\n !hasKey('docker-content-digest', manifestResponse.headers))\n ) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Architecture-specific digest or missing docker-content-digest header - pulling full manifest',\n );\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n );\n\n if (architecture && manifestResponse) {\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n /* istanbul ignore else: hard to test */\n if (parsed.success) {\n const manifestList = parsed.data;\n if (\n manifestList.mediaType ===\n 'application/vnd.docker.distribution.manifest.list.v2+json' ||\n manifestList.mediaType ===\n 'application/vnd.oci.image.index.v1+json'\n ) {\n for (const manifest of manifestList.manifests) {\n if (manifest.platform?.architecture === architecture) {\n digest = manifest.digest;\n break;\n }\n }\n // TODO: return null if no matching architecture digest found\n // https://github.com/renovatebot/renovate/discussions/22639\n } else if (\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n // TODO: return null if no matching architecture, requires to fetch the config manifest\n // https://github.com/renovatebot/renovate/discussions/22639\n digest = manifestResponse.headers[\n 'docker-content-digest'\n ] as string;\n }\n } else {\n logger.debug(\n {\n registryHost,\n dockerRepository,\n newTag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Failed to parse manifest response',\n );\n }\n }\n\n if (!digest) {\n logger.debug(\n { registryHost, dockerRepository, newTag },\n 'Extraction digest from manifest response body is deprecated',\n );\n digest = extractDigestFromResponseBody(manifestResponse!);\n }\n }\n\n if (\n !manifestResponse &&\n !dockerRepository.includes('/') &&\n !packageName.includes('/')\n ) {\n logger.debug(\n `Retrying Digest for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getDigest(\n {\n registryUrl,\n packageName: 'library/' + packageName,\n currentDigest,\n },\n newValue,\n );\n }\n\n if (manifestResponse) {\n // TODO: fix types (#22198)\n logger.debug(`Got docker digest ${digest!}`);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n {\n err,\n packageName,\n newTag,\n },\n 'Unknown Error looking up docker image digest',\n );\n }\n return digest;\n }\n\n @cache({\n namespace: 'datasource-docker-hub-tags',\n key: (dockerRepository: string) => `${dockerRepository}`,\n })\n async getDockerHubTags(dockerRepository: string): Promise<Release[] | null> {\n let url = `https://hub.docker.com/v2/repositories/${dockerRepository}/tags?page_size=1000&ordering=last_updated`;\n\n const cache = await DockerHubCache.init(dockerRepository);\n const maxPages = GlobalConfig.get('dockerMaxPages', 20);\n let page = 0,\n needNextPage = true;\n while (needNextPage && page < maxPages) {\n const { val, err } = await this.http\n .getJsonSafe(url, DockerHubTagsPage)\n .unwrap();\n\n if (err) {\n logger.debug({ err }, `Docker: error fetching data from DockerHub`);\n return null;\n }\n page++;\n const { results, next, count } = val;\n\n needNextPage = cache.reconcile(results, count);\n\n if (!next) {\n break;\n }\n\n url = next;\n }\n\n await cache.save();\n\n const items = cache.getItems();\n return items.map(\n ({ name: version, tag_last_pushed, digest: newDigest }) => {\n const release: Release = { version };\n\n const releaseTimestamp = asTimestamp(tag_last_pushed);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n\n if (newDigest) {\n release.newDigest = newDigest;\n }\n\n return release;\n },\n );\n }\n\n /**\n * docker.getReleases\n *\n * A docker image usually looks something like this: somehost.io/owner/repo:8.1.0-alpine\n * In the above:\n * - 'somehost.io' is the registry\n * - 'owner/repo' is the package name\n * - '8.1.0-alpine' is the tag\n *\n * This function will filter only tags that contain a semver version\n */\n @cache({\n namespace: 'datasource-docker-releases-v2',\n key: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n return `${registryHost}:${dockerRepository}`;\n },\n cacheable: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost } = getRegistryRepository(packageName, registryUrl!);\n return registryHost === 'https://index.docker.io';\n },\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n\n type TagsResultType = AsyncResult<\n Release[],\n NonNullable<Error | 'tags-error' | 'dockerhub-error'>\n >;\n\n const getTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getTags(registryHost, dockerRepository),\n 'tags-error' as const,\n ).transform((tags) => tags.map((version) => ({ version })));\n\n const getDockerHubTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getDockerHubTags(dockerRepository),\n 'dockerhub-error' as const,\n ).catch(getTags);\n\n const tagsResult =\n registryHost === 'https://index.docker.io' &&\n !process.env.RENOVATE_X_DOCKER_HUB_TAGS_DISABLE\n ? getDockerHubTags()\n : getTags();\n\n const { val: releases, err } = await tagsResult.unwrap();\n if (err instanceof Error) {\n throw err;\n } else if (err) {\n return null;\n }\n\n const ret: ReleaseResult = {\n registryUrl: registryHost,\n releases,\n };\n if (dockerRepository !== packageName) {\n // This will be reused later if a getDigest() call is made\n ret.lookupName = dockerRepository;\n }\n\n const tags = releases.map((release) => release.version);\n const latestTag = tags.includes('latest')\n ? 'latest'\n : (findLatestStable(tags) ?? tags[tags.length - 1]);\n\n // istanbul ignore if: needs test\n if (!latestTag) {\n return ret;\n }\n const labels = await this.getLabels(\n registryHost,\n dockerRepository,\n latestTag,\n );\n if (labels) {\n if (is.nonEmptyString(labels[gitRefLabel])) {\n ret.gitRef = labels[gitRefLabel];\n }\n for (const label of sourceLabels) {\n if (is.nonEmptyString(labels[label])) {\n ret.sourceUrl = labels[label];\n break;\n }\n }\n if (is.nonEmptyString(labels[imageUrlLabel])) {\n ret.homepage = labels[imageUrlLabel];\n }\n }\n return ret;\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/docker/index.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AAClC,mDAAsD;AACtD,sEAAyE;AACzE,4CAAyC;AACzC,mFAA8E;AAC9E,qEAA8D;AAC9D,6CAA+C;AAE/C,iDAA8C;AAC9C,+CAA4C;AAC5C,iDAAgE;AAChE,6DAA4D;AAC5D,uDAAsD;AACtD,2CAI2B;AAC3B,oDAAmE;AACnE,8CAA2C;AAO3C,kCAA8C;AAC9C,qCAakB;AAClB,uDAAmD;AACnD,+BAAuE;AAEvE,qCAKkB;AAElB,MAAM,aAAa,GAAG;IACpB,kBAAkB,EAAE,0BAA0B;IAC9C,kBAAkB,EAChB,mIAAmI;IACrI,MAAM,EAAE;QACN,WAAW,EAAE,2CAA2C;QACxD,kBAAkB,EAAE,uBAAuB;QAC3C,kBAAkB,EAChB,2EAA2E;QAC7E,KAAK,EAAE;YACL,kBAAkB,EAAE,iBAAiB;YACrC,kBAAkB,EAAE,EAAE;SACvB;KACF;IACD,GAAG,EAAE;QACH,kBAAkB,EAAE,EAAE;QACtB,SAAS,EAAE,gBAAgB;QAC3B,KAAK,EAAE;YACL,kBAAkB,EAAE,iBAAiB;YACrC,WAAW,EAAE,aAAa;SAC3B;KACF;CACF,CAAC;AAEF,MAAa,gBAAiB,SAAQ,uBAAU;IAC9C,MAAM,CAAU,EAAE,GAAG,2BAAkB,CAAC;IAEtB,iBAAiB,GAAG,WAAkB,CAAC;IAEvC,mBAAmB,GAAG,CAAC,mBAAU,CAAC,CAAC;IAEnC,aAAa,GAAG,aAAa,CAAC;IAE9B,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,uFAAuF,CAAC;IACxE,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,oMAAoM,CAAC;IAEvM;QACE,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,6CAA6C;IACrC,KAAK,CAAC,mBAAmB,CAC/B,YAAoB,EACpB,gBAAwB,EACxB,GAAW,EACX,OAA2B,SAAS;QAEpC,eAAM,CAAC,KAAK,CACV,uBAAuB,YAAY,KAAK,gBAAgB,KAAK,GAAG,KAAK,IAAI,GAAG,CAC7E,CAAC;QACF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAc,EAClC,IAAI,CAAC,IAAI,EACT,YAAY,EACZ,gBAAgB,CACjB,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,CAAC,MAAM,GAAG;gBACf,2DAA2D;gBAC3D,sDAAsD;gBACtD,4CAA4C;gBAC5C,yCAAyC;aAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,OAAO,gBAAgB,cAAc,GAAG,EAAE,CAAC;YACtE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;gBAClD,OAAO;gBACP,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;YACxC,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;gBACrC,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC3B,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAClC,4BAA4B,CAC7B,CAAC;gBACF,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC3B,eAAM,CAAC,KAAK,CACV;oBACE,GAAG;oBACH,YAAY;oBACZ,gBAAgB;oBAChB,GAAG;iBACJ,EACD,4BAA4B,CAC7B,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,IAAA,qBAAY,EAAC,YAAY,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAClD,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC7B,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,EAChB,uDAAuD,CACxD,CAAC;gBACF,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,eAAM,CAAC,KAAK,CACV;gBACE,GAAG;gBACH,YAAY;gBACZ,gBAAgB;gBAChB,GAAG;aACJ,EACD,0CAA0C,CAC3C,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAWK,AAAN,KAAK,CAAC,cAAc,CAClB,YAAoB,EACpB,gBAAwB,EACxB,YAAoB;QAEpB,eAAM,CAAC,KAAK,CACV,kBAAkB,YAAY,KAAK,gBAAgB,KAAK,YAAY,GAAG,CACxE,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAc,EAClC,IAAI,CAAC,IAAI,EACT,YAAY,EACZ,gBAAgB,CACjB,CAAC;QACF,0CAA0C;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,GAAG,GAAG,IAAA,kBAAY,EACtB,YAAY,EACZ,IAAI,EACJ,gBAAgB,EAChB,OAAO,EACP,YAAY,CACb,CAAC;QACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAC5B,GAAG,EACH;YACE,OAAO;YACP,MAAM,EAAE,IAAI;SACb,EACD,uBAAc,CACf,CAAC;IACJ,CAAC;IAWK,AAAN,KAAK,CAAC,aAAa,CACjB,YAAoB,EACpB,gBAAwB,EACxB,YAAoB;QAEpB,eAAM,CAAC,KAAK,CACV,kBAAkB,YAAY,KAAK,gBAAgB,KAAK,YAAY,GAAG,CACxE,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAc,EAClC,IAAI,CAAC,IAAI,EACT,YAAY,EACZ,gBAAgB,CACjB,CAAC;QACF,0CAA0C;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,GAAG,GAAG,IAAA,kBAAY,EACtB,YAAY,EACZ,IAAI,EACJ,gBAAgB,EAChB,OAAO,EACP,YAAY,CACb,CAAC;QACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAC5B,GAAG,EACH;YACE,OAAO;YACP,MAAM,EAAE,IAAI;SACb,EACD,sBAAa,CACd,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,QAAgB,EAChB,gBAAwB,EACxB,GAAW;QAEX,OAAO,CACL,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM;YAC/D,EAAE,MAAM,IAAI,IAAI,CACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,QAAgB,EAChB,gBAAwB,EACxB,GAAW;QAEX,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CACrD,QAAQ,EACR,gBAAgB,EAChB,GAAG,CACJ,CAAC;QAEF,iDAAiD;QACjD,0EAA0E;QAC1E,cAAc;QACd,qBAAqB;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gCAAgC;QAChC,MAAM,MAAM,GAAG,qBAAY,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,eAAM,CAAC,KAAK,CACV;gBACE,QAAQ;gBACR,gBAAgB;gBAChB,GAAG;gBACH,IAAI,EAAE,gBAAgB,CAAC,IAAI;gBAC3B,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,GAAG,EAAE,MAAM,CAAC,KAAK;aAClB,EACD,2BAA2B,CAC5B,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;QAE7B,QAAQ,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC3B,KAAK,sDAAsD,CAAC;YAC5D,KAAK,4CAA4C;gBAC/C,OAAO,QAAQ,CAAC;YAClB,KAAK,2DAA2D,CAAC;YACjE,KAAK,yCAAyC;gBAC5C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;oBAC/B,eAAM,CAAC,KAAK,CACV,EAAE,QAAQ,EAAE,EACZ,qDAAqD,CACtD,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACnC,wCAAwC,CACzC,CAAC;gBACF,OAAO,IAAI,CAAC,WAAW,CACrB,QAAQ,EACR,gBAAgB,EAChB,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAC7B,CAAC;YACJ,qCAAqC;YACrC;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAWK,AAAN,KAAK,CAAC,oBAAoB,CACxB,YAAoB,EACpB,gBAAwB,EACxB,aAAqB;QAErB,IAAI,CAAC;YACH,IAAI,gBAA6C,CAAC;YAElD,IAAI,CAAC;gBACH,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC/C,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,MAAM,CACP,CAAC;YACJ,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACd,MAAM,GAAG,GACP,IAAI,YAAY,uCAAiB;oBAC/B,CAAC,CAAC,IAAI,CAAC,GAAG;oBACV,CAAC,CAAC,4CAA4C,CAAC,IAAI,CAAC;gBAExD,IACE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;oBAClC,GAAG,CAAC,UAAU,IAAI,GAAG;oBACrB,GAAG,CAAC,UAAU,GAAG,GAAG,EACpB,CAAC;oBACD,kFAAkF;oBAClF,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,0BAA0B;gBAC1B,MAAM,IAAI,CAAC;YACb,CAAC;YAED,IACE,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC;gBACvC,sDAAsD;gBACxD,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC;oBACvC,4CAA4C,EAC9C,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAC7C,YAAY,EACZ,gBAAgB,EAChB,aAAa,CACd,CAAC;YACF,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAC9C,YAAY,EACZ,gBAAgB,EAChB,YAAY,CACb,CAAC;YAEF,iDAAiD;YACjD,IACE,cAAc;gBACd,CAAC,QAAQ,IAAI,cAAc,CAAC,IAAI;oBAC9B,cAAc,IAAI,cAAc,CAAC,IAAI,CAAC,EACxC,CAAC;gBACD,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;gBAC9D,eAAM,CAAC,KAAK,CACV,kBAAkB,aAAa,4BAC7B,YAAY,IAAI,MAClB,EAAE,CACH,CAAC;gBAEF,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;YACxC,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,qCAAoB,EAAE,CAAC;gBACnE,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,EAAE,EACtD,0CAA0C,CAC3C,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IAOG,AAAN,KAAK,CAAC,SAAS,CACb,YAAoB,EACpB,gBAAwB,EACxB,GAAW;QAEX,eAAM,CAAC,KAAK,CAAC,aAAa,YAAY,KAAK,gBAAgB,KAAK,GAAG,GAAG,CAAC,CAAC;QACxE,6EAA6E;QAC7E,IACE,OAAO,CAAC,GAAG,CAAC,0CAA0C;YACtD,YAAY,KAAK,yBAAyB,EAC1C,CAAC;YACD,eAAM,CAAC,KAAK,CACV,4FAA4F,CAC7F,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,sDAAsD;QACtD,IACE,YAAY,KAAK,yBAAyB;YAC1C,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,EACvC,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACjE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC;YACH,IAAI,MAAM,GAAuC,EAAE,CAAC;YACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CACrC,YAAY,EACZ,gBAAgB,EAChB,GAAG,CACJ,CAAC;YAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACvC,mBAAmB,CACpB,CAAC;gBACF,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,IAAI,aAAa,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACtD,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC;YAChC,CAAC;YAED,QAAQ,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAClC,KAAK,0CAA0C,CAAC,CAAC,CAAC;oBAChD,IAAI,MAAM,CAAC,oBAAW,CAAC,EAAE,CAAC;wBACxB,gEAAgE;wBAChE,OAAO,MAAM,CAAC;oBAChB,CAAC;oBACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAC7C,YAAY,EACZ,gBAAgB,EAChB,QAAQ,CAAC,MAAM,CAAC,MAAM,CACvB,CAAC;oBAEF,IAAI,cAAc,EAAE,CAAC;wBACnB,aAAa;wBACb,MAAM,GAAG,GAAG,IAAA,0BAAiB,EAAC,cAAc,CAAC,IAAI,CAAC,CAAC;wBACnD,IAAI,GAAG,EAAE,CAAC;4BACR,MAAM,CAAC,oBAAW,CAAC,GAAG,GAAG,CAAC;wBAC5B,CAAC;oBACH,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,0CAA0C,CAAC;gBAChD,KAAK,gDAAgD,CAAC,CAAC,CAAC;oBACtD,IAAI,MAAM,CAAC,oBAAW,CAAC,IAAI,MAAM,CAAC,oBAAW,CAAC,EAAE,CAAC;wBAC/C,gEAAgE;wBAChE,OAAO,MAAM,CAAC;oBAChB,CAAC;oBACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAC9C,YAAY,EACZ,gBAAgB,EAChB,QAAQ,CAAC,MAAM,CAAC,MAAM,CACvB,CAAC;oBAEF,0CAA0C;oBAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;wBACpB,OAAO,MAAM,CAAC;oBAChB,CAAC;oBAED,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;oBACjC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAChB,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACN,eAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,EACzC,2DAA2D,CAC5D,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,eAAM,CAAC,KAAK,CACV;oBACE,MAAM;iBACP,EACD,0BAA0B,CAC3B,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,sDAAsD,CAAC,CAAC;YACpE,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;gBACrC,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBACrD,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACvC,4BAA4B,CAC7B,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAClC,eAAM,CAAC,IAAI,CACT;oBACE,GAAG;oBACH,YAAY;oBACZ,gBAAgB;oBAChB,GAAG;iBACJ,EACD,4BAA4B,CAC7B,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,IAAA,qBAAY,EAAC,YAAY,CAAC,EAAE,CAAC;gBAChE,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,4CAA4C,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBACzD,eAAM,CAAC,KAAK,CACV;oBACE,GAAG;oBACH,YAAY;oBACZ,gBAAgB;oBAChB,GAAG;iBACJ,EACD,yCAAyC,CAC1C,CAAC;YACJ,CAAC;iBAAM,IACL,GAAG,CAAC,IAAI,KAAK,8BAA8B;gBAC3C,GAAG,CAAC,IAAI,KAAK,WAAW,EACxB,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,GAAG,EAAE,EACrB,qCAAqC,CACtC,CAAC;YACJ,CAAC;iBAAM,IAAI,YAAY,KAAK,iBAAiB,EAAE,CAAC;gBAC9C,uBAAuB;gBACvB,eAAM,CAAC,KAAK,CACV,4DAA4D,CAC7D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,IAAI,CACT,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,EAC5C,qCAAqC,CACtC,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,QAAgB,EAChB,UAAkB;QAElB,IAAI,IAAI,GAAa,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC;QAElB,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CACvC,GAAG,QAAQ,sBAAsB,UAAU,eAAe,KAAK,SAAS,IAAI,sBAAsB,CAAC;QAErG,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,GAAG,GAAkB,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;YAQzB,uBAAuB;YACvB,4EAA4E;YAC5E,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAC3C,GAAG,CACJ,CAAqC,CAAC;YACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,CAAC;YACV,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,YAAoB,EACpB,gBAAwB;QAExB,IAAI,IAAI,GAAa,EAAE,CAAC;QACxB,uDAAuD;QACvD,0IAA0I;QAC1I,sJAAsJ;QACtJ,MAAM,KAAK,GACT,cAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,oBAAc,CAAC,IAAI,CAAC,YAAY,CAAC;YAC9D,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,GAAG,GACL,GAAG,YAAY,IAAI,gBAAgB,gBAAgB,KAAK,EAAE,CAAC;QAC7D,GAAG,GAAG,IAAA,sBAAgB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAc,EAClC,IAAI,CAAC,IAAI,EACT,YAAY,EACZ,gBAAgB,EAChB,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,eAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,MAAM,KAAK,GAAG,qBAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,GAAG,CAAC;YACF,IAAI,GAAqC,CAAC;YAC1C,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAqB,GAAG,EAAE;oBAC9D,OAAO;oBACP,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IACE,CAAC,oBAAoB;oBACrB,GAAG,YAAY,gBAAS;oBACxB,IAAA,0BAAoB,EAAC,GAAG,CAAC,EACzB,CAAC;oBACD,MAAM,UAAU,GAAG,IAAI,CAAC;oBACxB,GAAG,GAAG,GAAG,YAAY,IAAI,gBAAgB,gBAAgB,UAAU,EAAE,CAAC;oBACtE,GAAG,GAAG,IAAA,sBAAgB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACnC,oBAAoB,GAAG,IAAI,CAAC;oBAC5B,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,IAAA,qBAAe,EAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,IAAA,0BAAmB,EAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,kFAAkF;gBAClF,sFAAsF;gBACtF,GAAG,GAAG,UAAU,EAAE,IAAI,EAAE,IAAI;oBAC1B,CAAC,CAAC,GAAG,GAAG,SAAS,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;oBACvC,CAAC,CAAC,IAAI,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACzE,CAAC;YACD,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC,QAAQ,GAAG,IAAI,IAAI,GAAG,KAAK,EAAE;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAOK,AAAN,KAAK,CAAC,OAAO,CACX,YAAoB,EACpB,gBAAwB;QAExB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,aAAK,EAAC,4CAA4C,CAAC,CAAC,IAAI,CACrE,YAAY,CACb,CAAC;YACF,IAAI,IAAqB,CAAC;YAC1B,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,IAAI,EAAE,0BAA0B,CAAC,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,YAAY,uCAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAEhE,IACE,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,qCAAoB,CAAC;gBAChE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC/B,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,qBAAqB,YAAY,IAAI,gBAAgB,wBAAwB,CAC9E,CAAC;gBACF,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,GAAG,gBAAgB,CAAC,CAAC;YACnE,CAAC;YACD,2EAA2E;YAC3E,8FAA8F;YAC9F,IACE,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,qCAAoB,CAAC;gBAChE,IAAA,0BAAmB,EAAC,GAAG,CAAC,QAAQ,CAAC;gBACjC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EACxC,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,wCAAwC,YAAY,IAAI,gBAAgB,iEAAiE,CAC1I,CAAC;gBAEF,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1D,MAAM,eAAe,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACjD,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAE7C,OAAO,IAAI,CAAC,OAAO,CACjB,YAAY,EACZ,eAAe,GAAG,WAAW,GAAG,WAAW,CAC5C,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,IAAA,qBAAY,EAAC,YAAY,CAAC,EAAE,CAAC;gBACzD,eAAM,CAAC,IAAI,CACT,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACvC,4CAA4C,CAC7C,CAAC;gBACF,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAClD,eAAM,CAAC,IAAI,CACT,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACvC,yCAAyC,CAC1C,CAAC;gBACF,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,eAAM,CAAC,IAAI,CACT,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,EACvC,oCAAoC,CACrC,CAAC;gBACF,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,IAAA,qBAAY,EAAC,YAAY,CAAC,EAAE,CAAC;gBAC/B,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,2BAA2B,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,IAAI,CAAC;QACb,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IAgBY,AAAN,KAAK,CAAC,SAAS,CACtB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAgB,EACrE,QAAiB;QAEjB,IAAI,YAAoB,CAAC;QACzB,IAAI,gBAAwB,CAAC;QAC7B,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;YAC9B,+CAA+C;YAC/C,YAAY,GAAG,WAAW,CAAC;YAC3B,gBAAgB,GAAG,UAAU,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,+BAA+B;YAC/B,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAA,8BAAqB,EACzD,WAAW,EACX,WAAY,CACb,CAAC,CAAC;QACL,CAAC;QACD,eAAM,CAAC,KAAK;QACV,uBAAuB;QACvB,aAAa,YAAY,KAAK,gBAAgB,KAAK,QAAQ,GAAG,CAC/D,CAAC;QACF,MAAM,MAAM,GAAG,YAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjE,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,CAAC;YACH,IAAI,YAAY,GAA8B,IAAI,CAAC;YACnD,IAAI,aAAa,IAAI,IAAA,6BAAc,EAAC,aAAa,CAAC,EAAE,CAAC;gBACnD,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAC5C,YAAY,EACZ,gBAAgB,EAChB,aAAa,CACd,CAAC;YACJ,CAAC;YAED,IAAI,gBAAgB,GAAwB,IAAI,CAAC;YACjD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC/C,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,MAAM,CACP,CAAC;gBAEF,IACE,gBAAgB;oBAChB,IAAA,eAAM,EAAC,uBAAuB,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACzD,CAAC;oBACD,MAAM;wBACH,gBAAgB,CAAC,OAAO,CAAC,uBAAuB,CAAY;4BAC7D,IAAI,CAAC;gBACT,CAAC;YACH,CAAC;YAED,IACE,YAAE,CAAC,MAAM,CAAC,YAAY,CAAC;gBACvB,CAAC,gBAAgB;oBACf,CAAC,IAAA,eAAM,EAAC,uBAAuB,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAC7D,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAClC,8FAA8F,CAC/F,CAAC;gBACF,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC/C,YAAY,EACZ,gBAAgB,EAChB,MAAM,CACP,CAAC;gBAEF,IAAI,YAAY,IAAI,gBAAgB,EAAE,CAAC;oBACrC,MAAM,MAAM,GAAG,qBAAY,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAC7D,wCAAwC;oBACxC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;wBACjC,IACE,YAAY,CAAC,SAAS;4BACpB,2DAA2D;4BAC7D,YAAY,CAAC,SAAS;gCACpB,yCAAyC,EAC3C,CAAC;4BACD,KAAK,MAAM,QAAQ,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;gCAC9C,IAAI,QAAQ,CAAC,QAAQ,EAAE,YAAY,KAAK,YAAY,EAAE,CAAC;oCACrD,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;oCACzB,MAAM;gCACR,CAAC;4BACH,CAAC;4BACD,6DAA6D;4BAC7D,4DAA4D;wBAC9D,CAAC;6BAAM,IACL,IAAA,eAAM,EAAC,uBAAuB,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACzD,CAAC;4BACD,uFAAuF;4BACvF,4DAA4D;4BAC5D,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAC/B,uBAAuB,CACd,CAAC;wBACd,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,eAAM,CAAC,KAAK,CACV;4BACE,YAAY;4BACZ,gBAAgB;4BAChB,MAAM;4BACN,IAAI,EAAE,gBAAgB,CAAC,IAAI;4BAC3B,OAAO,EAAE,gBAAgB,CAAC,OAAO;4BACjC,GAAG,EAAE,MAAM,CAAC,KAAK;yBAClB,EACD,mCAAmC,CACpC,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,eAAM,CAAC,KAAK,CACV,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAC1C,6DAA6D,CAC9D,CAAC;oBACF,MAAM,GAAG,IAAA,sCAA6B,EAAC,gBAAiB,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YAED,IACE,CAAC,gBAAgB;gBACjB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC/B,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC1B,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,uBAAuB,YAAY,IAAI,gBAAgB,wBAAwB,CAChF,CAAC;gBACF,OAAO,IAAI,CAAC,SAAS,CACnB;oBACE,WAAW;oBACX,WAAW,EAAE,UAAU,GAAG,WAAW;oBACrC,aAAa;iBACd,EACD,QAAQ,CACT,CAAC;YACJ,CAAC;YAED,IAAI,gBAAgB,EAAE,CAAC;gBACrB,2BAA2B;gBAC3B,eAAM,CAAC,KAAK,CAAC,qBAAqB,MAAO,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;YACxC,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;gBACrC,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,eAAM,CAAC,KAAK,CACV;gBACE,GAAG;gBACH,WAAW;gBACX,MAAM;aACP,EACD,8CAA8C,CAC/C,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAMK,AAAN,KAAK,CAAC,gBAAgB,CAAC,gBAAwB;QAC7C,IAAI,GAAG,GAAG,0CAA0C,gBAAgB,4CAA4C,CAAC;QAEjH,MAAM,KAAK,GAAG,MAAM,gCAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,qBAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,GAAG,CAAC,EACV,YAAY,GAAG,IAAI,CAAC;QACtB,OAAO,YAAY,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YACvC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI;iBACjC,WAAW,CAAC,GAAG,EAAE,0BAAiB,CAAC;iBACnC,MAAM,EAAE,CAAC;YAEZ,IAAI,GAAG,EAAE,CAAC;gBACR,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,4CAA4C,CAAC,CAAC;gBACpE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;YAErC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAE/C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM;YACR,CAAC;YAED,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;QAED,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAEnB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,GAAG,CACd,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;YACxD,MAAM,OAAO,GAAY,EAAE,OAAO,EAAE,CAAC;YAErC,MAAM,gBAAgB,GAAG,IAAA,uBAAW,EAAC,eAAe,CAAC,CAAC;YACtD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YAC9C,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;YAChC,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IAeG,AAAN,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAA,8BAAqB,EAC9D,WAAW,EACX,WAAY,CACb,CAAC;QAOF,MAAM,OAAO,GAAG,GAAmB,EAAE,CACnC,eAAM,CAAC,YAAY,CACjB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAC5C,YAAqB,CACtB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,GAAmB,EAAE,CAC5C,eAAM,CAAC,YAAY,CACjB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EACvC,iBAA0B,CAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnB,MAAM,UAAU,GACd,YAAY,KAAK,yBAAyB;YAC1C,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC;YAC7C,CAAC,CAAC,gBAAgB,EAAE;YACpB,CAAC,CAAC,OAAO,EAAE,CAAC;QAEhB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;QACzD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC;QACZ,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAkB;YACzB,WAAW,EAAE,YAAY;YACzB,QAAQ;SACT,CAAC;QACF,IAAI,gBAAgB,KAAK,WAAW,EAAE,CAAC;YACrC,0DAA0D;YAC1D,GAAG,CAAC,UAAU,GAAG,gBAAgB,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,CAAC,IAAA,yBAAgB,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtD,iCAAiC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CACjC,YAAY,EACZ,gBAAgB,EAChB,SAAS,CACV,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,oBAAW,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,oBAAW,CAAC,CAAC;YACnC,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,qBAAY,EAAE,CAAC;gBACjC,IAAI,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACrC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC9B,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,sBAAa,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,sBAAa,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;;AA1hCH,4CA2hCC;AA36BO;IATL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,+BAA+B;QAC1C,GAAG,EAAE,CACH,YAAoB,EACpB,gBAAwB,EACxB,YAAoB,EACpB,EAAE,CAAC,GAAG,YAAY,IAAI,gBAAgB,IAAI,YAAY,EAAE;QAC1D,UAAU,EAAE,IAAI,GAAG,EAAE;KACtB,CAAC;sDAmCD;AAWK;IATL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,+BAA+B;QAC1C,GAAG,EAAE,CACH,YAAoB,EACpB,gBAAwB,EACxB,YAAoB,EACpB,EAAE,CAAC,GAAG,YAAY,IAAI,gBAAgB,IAAI,YAAY,EAAE;QAC1D,UAAU,EAAE,IAAI,GAAG,EAAE;KACtB,CAAC;qDAmCD;AAwFK;IATL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,gCAAgC;QAC3C,GAAG,EAAE,CACH,YAAoB,EACpB,gBAAwB,EACxB,aAAqB,EACrB,EAAE,CAAC,GAAG,YAAY,IAAI,gBAAgB,IAAI,aAAa,EAAE;QAC3D,UAAU,EAAE,IAAI,GAAG,EAAE;KACtB,CAAC;4DAqFD;AAcK;IANL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,0BAA0B;QACrC,GAAG,EAAE,CAAC,YAAoB,EAAE,gBAAwB,EAAE,GAAW,EAAE,EAAE,CACnE,GAAG,YAAY,IAAI,gBAAgB,IAAI,GAAG,EAAE;QAC9C,UAAU,EAAE,EAAE,GAAG,EAAE;KACpB,CAAC;iDA6JD;AAyGK;IALL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,wBAAwB;QACnC,GAAG,EAAE,CAAC,YAAoB,EAAE,gBAAwB,EAAE,EAAE,CACtD,GAAG,YAAY,IAAI,gBAAgB,EAAE;KACxC,CAAC;+CA2ED;AA0Bc;IAfd,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,0BAA0B;QACrC,GAAG,EAAE,CACH,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAgB,EACzD,QAAiB,EACjB,EAAE;YACF,MAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC;YACpC,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAA,8BAAqB,EAC9D,WAAW,EACX,WAAY,CACb,CAAC;YACF,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,GAAG,YAAY,IAAI,gBAAgB,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;QAClE,CAAC;KACF,CAAC;iDA4JD;AAMK;IAJL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,4BAA4B;QACvC,GAAG,EAAE,CAAC,gBAAwB,EAAE,EAAE,CAAC,GAAG,gBAAgB,EAAE;KACzD,CAAC;wDAgDD;AA2BK;IAdL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,+BAA+B;QAC1C,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAqB,EAAE,EAAE;YACvD,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAA,8BAAqB,EAC9D,WAAW,EACX,WAAY,CACb,CAAC;YACF,OAAO,GAAG,YAAY,IAAI,gBAAgB,EAAE,CAAC;QAC/C,CAAC;QACD,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAqB,EAAE,EAAE;YAC7D,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,8BAAqB,EAAC,WAAW,EAAE,WAAY,CAAC,CAAC;YAC1E,OAAO,YAAY,KAAK,yBAAyB,CAAC;QACpD,CAAC;KACF,CAAC;mDA8ED","sourcesContent":["import is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport { PAGE_NOT_FOUND_ERROR } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { HttpError } from '../../../util/http';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { hasKey } from '../../../util/object';\nimport { regEx } from '../../../util/regex';\nimport { type AsyncResult, Result } from '../../../util/result';\nimport { isDockerDigest } from '../../../util/string-match';\nimport { asTimestamp } from '../../../util/timestamp';\nimport {\n ensurePathPrefix,\n joinUrlParts,\n parseLinkHeader,\n} from '../../../util/url';\nimport { id as dockerVersioningId } from '../../versioning/docker';\nimport { Datasource } from '../datasource';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types';\nimport { isArtifactoryServer } from '../util';\nimport {\n DOCKER_HUB,\n dockerDatasourceId,\n extractDigestFromResponseBody,\n findHelmSourceUrl,\n findLatestStable,\n getAuthHeaders,\n getRegistryRepository,\n gitRefLabel,\n imageUrlLabel,\n isDockerHost,\n sourceLabel,\n sourceLabels,\n} from './common';\nimport { DockerHubCache } from './dockerhub-cache';\nimport { ecrPublicRegex, ecrRegex, isECRMaxResultsError } from './ecr';\nimport type { DistributionManifest, OciImageManifest } from './schema';\nimport {\n DockerHubTagsPage,\n ManifestJson,\n OciHelmConfig,\n OciImageConfig,\n} from './schema';\n\nconst defaultConfig = {\n commitMessageTopic: '{{{depName}}} Docker tag',\n commitMessageExtra:\n 'to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}{{/if}}',\n digest: {\n branchTopic: '{{{depNameSanitized}}}-{{{currentValue}}}',\n commitMessageExtra: 'to {{newDigestShort}}',\n commitMessageTopic:\n '{{{depName}}}{{#if currentValue}}:{{{currentValue}}}{{/if}} Docker digest',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n commitMessageExtra: '',\n },\n },\n pin: {\n commitMessageExtra: '',\n groupName: 'Docker digests',\n group: {\n commitMessageTopic: '{{{groupName}}}',\n branchTopic: 'digests-pin',\n },\n },\n};\n\nexport class DockerDatasource extends Datasource {\n static readonly id = dockerDatasourceId;\n\n override readonly defaultVersioning = dockerVersioningId;\n\n override readonly defaultRegistryUrls = [DOCKER_HUB];\n\n override readonly defaultConfig = defaultConfig;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `tag_last_pushed` field in thre results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `org.opencontainers.image.source` and `org.label-schema.vcs-url` labels present in the metadata of the **latest stable** image found on the Docker registry.';\n\n constructor() {\n super(DockerDatasource.id);\n }\n\n // TODO: debug why quay throws errors (#9612)\n private async getManifestResponse(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n mode: 'head' | 'getText' = 'getText',\n ): Promise<HttpResponse | null> {\n logger.debug(\n `getManifestResponse(${registryHost}, ${dockerRepository}, ${tag}, ${mode})`,\n );\n try {\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return null;\n }\n headers.accept = [\n 'application/vnd.docker.distribution.manifest.list.v2+json',\n 'application/vnd.docker.distribution.manifest.v2+json',\n 'application/vnd.oci.image.manifest.v1+json',\n 'application/vnd.oci.image.index.v1+json',\n ].join(', ');\n const url = `${registryHost}/v2/${dockerRepository}/manifests/${tag}`;\n const manifestResponse = await this.http[mode](url, {\n headers,\n noAuth: true,\n });\n return manifestResponse;\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Unauthorized docker lookup',\n );\n logger.debug({ err });\n return null;\n }\n if (err.statusCode === 404) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Docker Manifest is unknown',\n );\n return null;\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n if (err.code === 'ETIMEDOUT') {\n logger.debug(\n { registryHost },\n 'Timeout when attempting to connect to docker registry',\n );\n logger.debug({ err });\n return null;\n }\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Unknown Error looking up docker manifest',\n );\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciImageConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n // istanbul ignore if: Should never happen\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciImageConfig,\n );\n }\n\n @cache({\n namespace: 'datasource-docker-imageconfig',\n key: (\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ) => `${registryHost}:${dockerRepository}@${configDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getHelmConfig(\n registryHost: string,\n dockerRepository: string,\n configDigest: string,\n ): Promise<HttpResponse<OciHelmConfig> | undefined> {\n logger.trace(\n `getImageConfig(${registryHost}, ${dockerRepository}, ${configDigest})`,\n );\n\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n );\n // istanbul ignore if: Should never happen\n if (!headers) {\n logger.warn('No docker auth found - returning');\n return undefined;\n }\n const url = joinUrlParts(\n registryHost,\n 'v2',\n dockerRepository,\n 'blobs',\n configDigest,\n );\n return await this.http.getJson(\n url,\n {\n headers,\n noAuth: true,\n },\n OciHelmConfig,\n );\n }\n\n private async getConfigDigest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<string | null> {\n return (\n (await this.getManifest(registry, dockerRepository, tag))?.config\n ?.digest ?? null\n );\n }\n\n private async getManifest(\n registry: string,\n dockerRepository: string,\n tag: string,\n ): Promise<OciImageManifest | DistributionManifest | null> {\n const manifestResponse = await this.getManifestResponse(\n registry,\n dockerRepository,\n tag,\n );\n\n // If getting the manifest fails here, then abort\n // This means that the latest tag doesn't have a manifest, which shouldn't\n // be possible\n // istanbul ignore if\n if (!manifestResponse) {\n return null;\n }\n\n // Softfail on invalid manifests\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n if (!parsed.success) {\n logger.debug(\n {\n registry,\n dockerRepository,\n tag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Invalid manifest response',\n );\n return null;\n }\n\n const manifest = parsed.data;\n\n switch (manifest.mediaType) {\n case 'application/vnd.docker.distribution.manifest.v2+json':\n case 'application/vnd.oci.image.manifest.v1+json':\n return manifest;\n case 'application/vnd.docker.distribution.manifest.list.v2+json':\n case 'application/vnd.oci.image.index.v1+json':\n if (!manifest.manifests.length) {\n logger.debug(\n { manifest },\n 'Invalid manifest list with no manifests - returning',\n );\n return null;\n }\n logger.trace(\n { registry, dockerRepository, tag },\n 'Found manifest list, using first image',\n );\n return this.getManifest(\n registry,\n dockerRepository,\n manifest.manifests[0].digest,\n );\n // istanbul ignore next: can't happen\n default:\n return null;\n }\n }\n\n @cache({\n namespace: 'datasource-docker-architecture',\n key: (\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ) => `${registryHost}:${dockerRepository}@${currentDigest}`,\n ttlMinutes: 1440 * 28,\n })\n async getImageArchitecture(\n registryHost: string,\n dockerRepository: string,\n currentDigest: string,\n ): Promise<string | null | undefined> {\n try {\n let manifestResponse: HttpResponse<string> | null;\n\n try {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n currentDigest,\n 'head',\n );\n } catch (_err) {\n const err =\n _err instanceof ExternalHostError\n ? _err.err\n : /* istanbul ignore next: can never happen */ _err;\n\n if (\n typeof err.statusCode === 'number' &&\n err.statusCode >= 500 &&\n err.statusCode < 600\n ) {\n // querying the digest manifest for a non existent image leads to a 500 statusCode\n return null;\n }\n\n /* istanbul ignore next */\n throw _err;\n }\n\n if (\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.docker.distribution.manifest.v2+json' &&\n manifestResponse?.headers['content-type'] !==\n 'application/vnd.oci.image.manifest.v1+json'\n ) {\n return null;\n }\n\n const configDigest = await this.getConfigDigest(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n if (!configDigest) {\n return null;\n }\n\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n configDigest,\n );\n\n // TODO: fix me, architecture is required in spec\n if (\n configResponse &&\n ('config' in configResponse.body ||\n 'architecture' in configResponse.body)\n ) {\n const architecture = configResponse.body.architecture ?? null;\n logger.debug(\n `Current digest ${currentDigest} relates to architecture ${\n architecture ?? 'null'\n }`,\n );\n\n return architecture;\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.statusCode !== 404 || err.message === PAGE_NOT_FOUND_ERROR) {\n throw err;\n }\n logger.debug(\n { registryHost, dockerRepository, currentDigest, err },\n 'Unknown error getting image architecture',\n );\n }\n\n return undefined;\n }\n\n /*\n * docker.getLabels\n *\n * This function will:\n * - Return the labels for the requested image\n */\n @cache({\n namespace: 'datasource-docker-labels',\n key: (registryHost: string, dockerRepository: string, tag: string) =>\n `${registryHost}:${dockerRepository}:${tag}`,\n ttlMinutes: 24 * 60,\n })\n async getLabels(\n registryHost: string,\n dockerRepository: string,\n tag: string,\n ): Promise<Record<string, string> | undefined> {\n logger.debug(`getLabels(${registryHost}, ${dockerRepository}, ${tag})`);\n // Skip Docker Hub image if RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP is set\n if (\n process.env.RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP &&\n registryHost === 'https://index.docker.io'\n ) {\n logger.debug(\n 'Docker Hub image - skipping label lookup due to RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP',\n );\n return {};\n }\n // Docker Hub library images don't have labels we need\n if (\n registryHost === 'https://index.docker.io' &&\n dockerRepository.startsWith('library/')\n ) {\n logger.debug('Docker Hub library image - skipping label lookup');\n return {};\n }\n try {\n let labels: Record<string, string> | undefined = {};\n const manifest = await this.getManifest(\n registryHost,\n dockerRepository,\n tag,\n );\n\n if (!manifest) {\n logger.debug(\n { registryHost, dockerRepository, tag },\n 'No manifest found',\n );\n return undefined;\n }\n\n if ('annotations' in manifest && manifest.annotations) {\n labels = manifest.annotations;\n }\n\n switch (manifest.config.mediaType) {\n case 'application/vnd.cncf.helm.config.v1+json': {\n if (labels[sourceLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getHelmConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n if (configResponse) {\n // Helm chart\n const url = findHelmSourceUrl(configResponse.body);\n if (url) {\n labels[sourceLabel] = url;\n }\n }\n break;\n }\n case 'application/vnd.oci.image.config.v1+json':\n case 'application/vnd.docker.container.image.v1+json': {\n if (labels[sourceLabel] && labels[gitRefLabel]) {\n // we already have the source url, so no need to pull the config\n return labels;\n }\n const configResponse = await this.getImageConfig(\n registryHost,\n dockerRepository,\n manifest.config.digest,\n );\n\n // istanbul ignore if: should never happen\n if (!configResponse) {\n return labels;\n }\n\n const body = configResponse.body;\n if (body.config) {\n labels = { ...labels, ...body.config.Labels };\n } else {\n logger.debug(\n { headers: configResponse.headers, body },\n `manifest blob response body missing the \"config\" property`,\n );\n }\n break;\n }\n }\n\n if (labels) {\n logger.debug(\n {\n labels,\n },\n 'found labels in manifest',\n );\n }\n return labels;\n } catch (err) /* istanbul ignore next: should be tested in future */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.statusCode === 400 || err.statusCode === 401) {\n logger.debug(\n { registryHost, dockerRepository, err },\n 'Unauthorized docker lookup',\n );\n } else if (err.statusCode === 404) {\n logger.warn(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'Config Manifest is unknown',\n );\n } else if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn({ err }, 'docker registry failure: too many requests');\n } else if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug(\n {\n err,\n registryHost,\n dockerRepository,\n tag,\n },\n 'docker registry failure: internal error',\n );\n } else if (\n err.code === 'ERR_TLS_CERT_ALTNAME_INVALID' ||\n err.code === 'ETIMEDOUT'\n ) {\n logger.debug(\n { registryHost, err },\n 'Error connecting to docker registry',\n );\n } else if (registryHost === 'https://quay.io') {\n // istanbul ignore next\n logger.debug(\n 'Ignoring quay.io errors until they fully support v2 schema',\n );\n } else {\n logger.info(\n { registryHost, dockerRepository, tag, err },\n 'Unknown error getting Docker labels',\n );\n }\n return {};\n }\n }\n\n private async getTagsQuayRegistry(\n registry: string,\n repository: string,\n ): Promise<string[]> {\n let tags: string[] = [];\n const limit = 100;\n\n const pageUrl = (page: number): string =>\n `${registry}/api/v1/repository/${repository}/tag/?limit=${limit}&page=${page}&onlyActiveTags=true`;\n\n let page = 1;\n let url: string | null = pageUrl(page);\n while (url && page <= 20) {\n interface QuayRestDockerTags {\n tags: {\n name: string;\n }[];\n has_additional: boolean;\n }\n\n // typescript issue :-/\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const res = (await this.http.getJsonUnchecked<QuayRestDockerTags>(\n url,\n )) as HttpResponse<QuayRestDockerTags>;\n const pageTags = res.body.tags.map((tag) => tag.name);\n tags = tags.concat(pageTags);\n page += 1;\n url = res.body.has_additional ? pageUrl(page) : null;\n }\n return tags;\n }\n\n private async getDockerApiTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n let tags: string[] = [];\n // AWS ECR limits the maximum number of results to 1000\n // See https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeRepositories.html#ECR-DescribeRepositories-request-maxResults\n // See https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_DescribeRepositories.html#ecrpublic-DescribeRepositories-request-maxResults\n const limit =\n ecrRegex.test(registryHost) || ecrPublicRegex.test(registryHost)\n ? 1000\n : 10000;\n let url: string | null =\n `${registryHost}/${dockerRepository}/tags/list?n=${limit}`;\n url = ensurePathPrefix(url, '/v2');\n const headers = await getAuthHeaders(\n this.http,\n registryHost,\n dockerRepository,\n url,\n );\n if (!headers) {\n logger.debug('Failed to get authHeaders for getTags lookup');\n return null;\n }\n let page = 0;\n const pages = GlobalConfig.get('dockerMaxPages', 20);\n let foundMaxResultsError = false;\n do {\n let res: HttpResponse<{ tags: string[] }>;\n try {\n res = await this.http.getJsonUnchecked<{ tags: string[] }>(url, {\n headers,\n noAuth: true,\n });\n } catch (err) {\n if (\n !foundMaxResultsError &&\n err instanceof HttpError &&\n isECRMaxResultsError(err)\n ) {\n const maxResults = 1000;\n url = `${registryHost}/${dockerRepository}/tags/list?n=${maxResults}`;\n url = ensurePathPrefix(url, '/v2');\n foundMaxResultsError = true;\n continue;\n }\n throw err;\n }\n tags = tags.concat(res.body.tags);\n const linkHeader = parseLinkHeader(res.headers.link);\n if (isArtifactoryServer(res)) {\n // Artifactory incorrectly returns a next link without the virtual repository name\n // this is due to a bug in Artifactory https://jfrog.atlassian.net/browse/RTFACT-18971\n url = linkHeader?.next?.last\n ? `${url}&last=${linkHeader.next.last}`\n : null;\n } else {\n url = linkHeader?.next ? new URL(linkHeader.next.url, url).href : null;\n }\n page += 1;\n } while (url && page < pages);\n return tags;\n }\n\n @cache({\n namespace: 'datasource-docker-tags',\n key: (registryHost: string, dockerRepository: string) =>\n `${registryHost}:${dockerRepository}`,\n })\n async getTags(\n registryHost: string,\n dockerRepository: string,\n ): Promise<string[] | null> {\n try {\n const isQuay = regEx(/^https:\\/\\/quay\\.io(?::[1-9][0-9]{0,4})?$/i).test(\n registryHost,\n );\n let tags: string[] | null;\n if (isQuay) {\n tags = await this.getTagsQuayRegistry(registryHost, dockerRepository);\n } else {\n tags = await this.getDockerApiTags(registryHost, dockerRepository);\n }\n return tags;\n } catch (_err) /* istanbul ignore next */ {\n const err = _err instanceof ExternalHostError ? _err.err : _err;\n\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n !dockerRepository.includes('/')\n ) {\n logger.debug(\n `Retrying Tags for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getTags(registryHost, 'library/' + dockerRepository);\n }\n // JFrog Artifactory - Retry handling when resolving Docker Official Images\n // These follow the format of {{registryHost}}{{jFrogRepository}}/library/{{dockerRepository}}\n if (\n (err.statusCode === 404 || err.message === PAGE_NOT_FOUND_ERROR) &&\n isArtifactoryServer(err.response) &&\n dockerRepository.split('/').length === 2\n ) {\n logger.debug(\n `JFrog Artifactory: Retrying Tags for ${registryHost}/${dockerRepository} using library/ path between JFrog virtual repository and image`,\n );\n\n const dockerRepositoryParts = dockerRepository.split('/');\n const jfrogRepository = dockerRepositoryParts[0];\n const dockerImage = dockerRepositoryParts[1];\n\n return this.getTags(\n registryHost,\n jfrogRepository + '/library/' + dockerImage,\n );\n }\n if (err.statusCode === 429 && isDockerHost(registryHost)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: too many requests',\n );\n throw new ExternalHostError(err);\n }\n if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry failure: internal error',\n );\n throw new ExternalHostError(err);\n }\n const errorCodes = ['ECONNRESET', 'ETIMEDOUT'];\n if (errorCodes.includes(err.code)) {\n logger.warn(\n { registryHost, dockerRepository, err },\n 'docker registry connection failure',\n );\n throw new ExternalHostError(err);\n }\n if (isDockerHost(registryHost)) {\n logger.info({ err }, 'Docker Hub lookup failure');\n }\n throw _err;\n }\n }\n\n /**\n * docker.getDigest\n *\n * The `newValue` supplied here should be a valid tag for the docker image.\n *\n * This function will:\n * - Look up a sha256 digest for a tag on its registry\n * - Return the digest as a string\n */\n @cache({\n namespace: 'datasource-docker-digest',\n key: (\n { registryUrl, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ) => {\n const newTag = newValue ?? 'latest';\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n const digest = currentDigest ? `@${currentDigest}` : '';\n return `${registryHost}:${dockerRepository}:${newTag}${digest}`;\n },\n })\n override async getDigest(\n { registryUrl, lookupName, packageName, currentDigest }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n let registryHost: string;\n let dockerRepository: string;\n if (registryUrl && lookupName) {\n // Reuse the resolved values from getReleases()\n registryHost = registryUrl;\n dockerRepository = lookupName;\n } else {\n // Resolve values independently\n ({ registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n ));\n }\n logger.debug(\n // TODO: types (#22198)\n `getDigest(${registryHost}, ${dockerRepository}, ${newValue})`,\n );\n const newTag = is.nonEmptyString(newValue) ? newValue : 'latest';\n let digest: string | null = null;\n try {\n let architecture: string | null | undefined = null;\n if (currentDigest && isDockerDigest(currentDigest)) {\n architecture = await this.getImageArchitecture(\n registryHost,\n dockerRepository,\n currentDigest,\n );\n }\n\n let manifestResponse: HttpResponse | null = null;\n if (!architecture) {\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n 'head',\n );\n\n if (\n manifestResponse &&\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n digest =\n (manifestResponse.headers['docker-content-digest'] as string) ||\n null;\n }\n }\n\n if (\n is.string(architecture) ||\n (manifestResponse &&\n !hasKey('docker-content-digest', manifestResponse.headers))\n ) {\n logger.debug(\n { registryHost, dockerRepository },\n 'Architecture-specific digest or missing docker-content-digest header - pulling full manifest',\n );\n manifestResponse = await this.getManifestResponse(\n registryHost,\n dockerRepository,\n newTag,\n );\n\n if (architecture && manifestResponse) {\n const parsed = ManifestJson.safeParse(manifestResponse.body);\n /* istanbul ignore else: hard to test */\n if (parsed.success) {\n const manifestList = parsed.data;\n if (\n manifestList.mediaType ===\n 'application/vnd.docker.distribution.manifest.list.v2+json' ||\n manifestList.mediaType ===\n 'application/vnd.oci.image.index.v1+json'\n ) {\n for (const manifest of manifestList.manifests) {\n if (manifest.platform?.architecture === architecture) {\n digest = manifest.digest;\n break;\n }\n }\n // TODO: return null if no matching architecture digest found\n // https://github.com/renovatebot/renovate/discussions/22639\n } else if (\n hasKey('docker-content-digest', manifestResponse.headers)\n ) {\n // TODO: return null if no matching architecture, requires to fetch the config manifest\n // https://github.com/renovatebot/renovate/discussions/22639\n digest = manifestResponse.headers[\n 'docker-content-digest'\n ] as string;\n }\n } else {\n logger.debug(\n {\n registryHost,\n dockerRepository,\n newTag,\n body: manifestResponse.body,\n headers: manifestResponse.headers,\n err: parsed.error,\n },\n 'Failed to parse manifest response',\n );\n }\n }\n\n if (!digest) {\n logger.debug(\n { registryHost, dockerRepository, newTag },\n 'Extraction digest from manifest response body is deprecated',\n );\n digest = extractDigestFromResponseBody(manifestResponse!);\n }\n }\n\n if (\n !manifestResponse &&\n !dockerRepository.includes('/') &&\n !packageName.includes('/')\n ) {\n logger.debug(\n `Retrying Digest for ${registryHost}/${dockerRepository} using library/ prefix`,\n );\n return this.getDigest(\n {\n registryUrl,\n packageName: 'library/' + packageName,\n currentDigest,\n },\n newValue,\n );\n }\n\n if (manifestResponse) {\n // TODO: fix types (#22198)\n logger.debug(`Got docker digest ${digest!}`);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n {\n err,\n packageName,\n newTag,\n },\n 'Unknown Error looking up docker image digest',\n );\n }\n return digest;\n }\n\n @cache({\n namespace: 'datasource-docker-hub-tags',\n key: (dockerRepository: string) => `${dockerRepository}`,\n })\n async getDockerHubTags(dockerRepository: string): Promise<Release[] | null> {\n let url = `https://hub.docker.com/v2/repositories/${dockerRepository}/tags?page_size=1000&ordering=last_updated`;\n\n const cache = await DockerHubCache.init(dockerRepository);\n const maxPages = GlobalConfig.get('dockerMaxPages', 20);\n let page = 0,\n needNextPage = true;\n while (needNextPage && page < maxPages) {\n const { val, err } = await this.http\n .getJsonSafe(url, DockerHubTagsPage)\n .unwrap();\n\n if (err) {\n logger.debug({ err }, `Docker: error fetching data from DockerHub`);\n return null;\n }\n page++;\n const { results, next, count } = val;\n\n needNextPage = cache.reconcile(results, count);\n\n if (!next) {\n break;\n }\n\n url = next;\n }\n\n await cache.save();\n\n const items = cache.getItems();\n return items.map(\n ({ name: version, tag_last_pushed, digest: newDigest }) => {\n const release: Release = { version };\n\n const releaseTimestamp = asTimestamp(tag_last_pushed);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n\n if (newDigest) {\n release.newDigest = newDigest;\n }\n\n return release;\n },\n );\n }\n\n /**\n * docker.getReleases\n *\n * A docker image usually looks something like this: somehost.io/owner/repo:8.1.0-alpine\n * In the above:\n * - 'somehost.io' is the registry\n * - 'owner/repo' is the package name\n * - '8.1.0-alpine' is the tag\n *\n * This function will filter only tags that contain a semver version\n */\n @cache({\n namespace: 'datasource-docker-releases-v2',\n key: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n return `${registryHost}:${dockerRepository}`;\n },\n cacheable: ({ registryUrl, packageName }: GetReleasesConfig) => {\n const { registryHost } = getRegistryRepository(packageName, registryUrl!);\n return registryHost === 'https://index.docker.io';\n },\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const { registryHost, dockerRepository } = getRegistryRepository(\n packageName,\n registryUrl!,\n );\n\n type TagsResultType = AsyncResult<\n Release[],\n NonNullable<Error | 'tags-error' | 'dockerhub-error'>\n >;\n\n const getTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getTags(registryHost, dockerRepository),\n 'tags-error' as const,\n ).transform((tags) => tags.map((version) => ({ version })));\n\n const getDockerHubTags = (): TagsResultType =>\n Result.wrapNullable(\n this.getDockerHubTags(dockerRepository),\n 'dockerhub-error' as const,\n ).catch(getTags);\n\n const tagsResult =\n registryHost === 'https://index.docker.io' &&\n !process.env.RENOVATE_X_DOCKER_HUB_TAGS_DISABLE\n ? getDockerHubTags()\n : getTags();\n\n const { val: releases, err } = await tagsResult.unwrap();\n if (err instanceof Error) {\n throw err;\n } else if (err) {\n return null;\n }\n\n const ret: ReleaseResult = {\n registryUrl: registryHost,\n releases,\n };\n if (dockerRepository !== packageName) {\n // This will be reused later if a getDigest() call is made\n ret.lookupName = dockerRepository;\n }\n\n const tags = releases.map((release) => release.version);\n const latestTag = tags.includes('latest')\n ? 'latest'\n : (findLatestStable(tags) ?? tags[tags.length - 1]);\n\n // istanbul ignore if: needs test\n if (!latestTag) {\n return ret;\n }\n const labels = await this.getLabels(\n registryHost,\n dockerRepository,\n latestTag,\n );\n if (labels) {\n if (is.nonEmptyString(labels[gitRefLabel])) {\n ret.gitRef = labels[gitRefLabel];\n }\n for (const label of sourceLabels) {\n if (is.nonEmptyString(labels[label])) {\n ret.sourceUrl = labels[label];\n break;\n }\n }\n if (is.nonEmptyString(labels[imageUrlLabel])) {\n ret.homepage = labels[imageUrlLabel];\n }\n }\n return ret;\n }\n}\n"]}
|
@@ -37,7 +37,7 @@ class GithubReleaseAttachmentsDatasource extends datasource_1.Datasource {
|
|
37
37
|
async findDigestFile(release, digest) {
|
38
38
|
const smallAssets = release.assets.filter((a) => a.size < 5 * 1024);
|
39
39
|
for (const asset of smallAssets) {
|
40
|
-
const res = await this.http.
|
40
|
+
const res = await this.http.getText(asset.browser_download_url);
|
41
41
|
for (const line of res.body.split(regex_1.newlineRegex)) {
|
42
42
|
const [lineDigest, lineFilename] = line.split((0, regex_1.regEx)(/\s+/), 2);
|
43
43
|
if (lineDigest === digest) {
|
@@ -100,7 +100,7 @@ class GithubReleaseAttachmentsDatasource extends datasource_1.Datasource {
|
|
100
100
|
}
|
101
101
|
if (digestAsset.digestedFileName) {
|
102
102
|
const releaseFilename = digestAsset.digestedFileName.replace(current, next);
|
103
|
-
const res = await this.http.
|
103
|
+
const res = await this.http.getText(releaseAsset.browser_download_url);
|
104
104
|
for (const line of res.body.split(regex_1.newlineRegex)) {
|
105
105
|
const [lineDigest, lineFn] = line.split((0, regex_1.regEx)(/\s+/), 2);
|
106
106
|
if (lineFn === releaseFilename) {
|