renovate 43.124.0 → 43.125.0

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.
@@ -7,6 +7,7 @@ var replacements_default = {
7
7
  "replacements:actions-attest-build-provenance-to-actions-attest",
8
8
  "replacements:airbnb-prop-types-to-prop-types-tools",
9
9
  "replacements:apollo-server-to-scoped",
10
+ "replacements:astral-v8-full-semver",
10
11
  "replacements:babel-eslint-to-eslint-parser",
11
12
  "replacements:base-ui-components-to-base-ui",
12
13
  "replacements:containerbase",
@@ -143,6 +144,15 @@ var replacements_default = {
143
144
  }
144
145
  ]
145
146
  },
147
+ "astral-v8-full-semver": {
148
+ "description": "`astral-sh/setup-astral` now requires full SemVer tags as of v8",
149
+ "packageRules": [{
150
+ "matchPackageNames": ["astral-sh/setup-uv"],
151
+ "matchDatasources": ["github-tags"],
152
+ "replacementName": "astral-sh/setup-uv",
153
+ "replacementVersion": "v8.0.0"
154
+ }]
155
+ },
146
156
  "babel-eslint-to-eslint-parser": {
147
157
  "description": "`babel-eslint` was renamed under the `@babel` scope.",
148
158
  "packageRules": [{
@@ -76,15 +76,15 @@ const quayRegex = regEx(/^quay\.io(?::[1-9][0-9]{0,4})?/i);
76
76
  function getDep(currentFrom, specifyReplaceString = true, registryAliases) {
77
77
  if (!isString(currentFrom) || !isNonEmptyStringAndNotWhitespace(currentFrom)) return { skipReason: "invalid-value" };
78
78
  for (const [name, value] of Object.entries(registryAliases ?? {})) if (currentFrom.startsWith(`${name}/`)) {
79
- const dep = {
80
- ...getDep(`${value}/${currentFrom.substring(name.length + 1)}`, false),
81
- replaceString: currentFrom
82
- };
79
+ const dep = getDep(`${value}/${currentFrom.substring(name.length + 1)}`, false);
83
80
  if (dep.depName?.startsWith(value)) {
84
81
  dep.packageName = dep.depName;
85
82
  dep.depName = `${name}/${dep.depName.substring(value.length + 1)}`;
86
83
  }
87
- if (specifyReplaceString) dep.autoReplaceStringTemplate = getAutoReplaceTemplate(dep);
84
+ if (specifyReplaceString) {
85
+ dep.replaceString = currentFrom;
86
+ dep.autoReplaceStringTemplate = getAutoReplaceTemplate(dep);
87
+ }
88
88
  return dep;
89
89
  }
90
90
  const dep = splitImageParts(currentFrom);
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":["ubuntuVersioning.id","debianVersioning.id"],"sources":["../../../../lib/modules/manager/dockerfile/extract.ts"],"sourcesContent":["import { isNonEmptyStringAndNotWhitespace, isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { DockerDatasource } from '../../datasource/docker/index.ts';\nimport * as debianVersioning from '../../versioning/debian/index.ts';\nimport * as ubuntuVersioning from '../../versioning/ubuntu/index.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\n\nconst variableMarker = '$';\n\nexport function extractVariables(image: string): Record<string, string> {\n const variables: Record<string, string> = {};\n const variableRegex = regEx(\n /(?<fullvariable>\\\\?\\$(?<simplearg>\\w+)|\\\\?\\${(?<complexarg>\\w+)(?::.+?)?}+)/gi,\n );\n\n let match: RegExpExecArray | null;\n do {\n match = variableRegex.exec(image);\n if (match?.groups?.fullvariable) {\n variables[match.groups.fullvariable] =\n match.groups?.simplearg || match.groups?.complexarg;\n }\n } while (match);\n\n return variables;\n}\n\nfunction getAutoReplaceTemplate(dep: PackageDependency): string | undefined {\n let template = dep.replaceString;\n\n if (dep.currentValue) {\n let placeholder = '{{#if newValue}}{{newValue}}{{/if}}';\n if (!dep.currentDigest) {\n placeholder += '{{#if newDigest}}@{{newDigest}}{{/if}}';\n }\n template = template?.replace(dep.currentValue, placeholder);\n }\n\n if (dep.currentDigest) {\n template = template?.replace(\n dep.currentDigest,\n '{{#if newDigest}}{{newDigest}}{{/if}}',\n );\n }\n\n return template;\n}\n\nfunction processDepForAutoReplace(\n dep: PackageDependency,\n lineNumberRanges: number[][],\n lines: string[],\n linefeed: string,\n): void {\n const lineNumberRangesToReplace: number[][] = [];\n for (const lineNumberRange of lineNumberRanges) {\n for (const lineNumber of lineNumberRange) {\n if (\n (isString(dep.currentValue) &&\n lines[lineNumber].includes(dep.currentValue)) ||\n (isString(dep.currentDigest) &&\n lines[lineNumber].includes(dep.currentDigest))\n ) {\n lineNumberRangesToReplace.push(lineNumberRange);\n }\n }\n }\n\n lineNumberRangesToReplace.sort((a, b) => {\n return a[0] - b[0];\n });\n\n const minLine = lineNumberRangesToReplace[0]?.[0];\n const maxLine =\n lineNumberRangesToReplace[lineNumberRangesToReplace.length - 1]?.[1];\n if (\n lineNumberRanges.length === 1 ||\n minLine === undefined ||\n maxLine === undefined\n ) {\n return;\n }\n\n const unfoldedLineNumbers = Array.from(\n { length: maxLine - minLine + 1 },\n (_v, k) => k + minLine,\n );\n\n dep.replaceString = unfoldedLineNumbers\n .map((lineNumber) => lines[lineNumber])\n .join(linefeed);\n\n if (!dep.currentDigest) {\n dep.replaceString += linefeed;\n }\n\n dep.autoReplaceStringTemplate = getAutoReplaceTemplate(dep);\n}\n\nexport function splitImageParts(currentFrom: string): PackageDependency {\n let isVariable = false;\n let cleanedCurrentFrom = currentFrom;\n\n // Check if we have a variable in format of \"${VARIABLE:-<image>:<defaultVal>@<digest>}\"\n // If so, remove everything except the image, defaultVal and digest.\n if (cleanedCurrentFrom?.includes(variableMarker)) {\n const defaultValueRegex = regEx(/^\\${.+?:-\"?(?<value>.*?)\"?}$/);\n const defaultValueMatch =\n defaultValueRegex.exec(cleanedCurrentFrom)?.groups;\n if (defaultValueMatch?.value) {\n isVariable = true;\n cleanedCurrentFrom = defaultValueMatch.value;\n }\n\n if (cleanedCurrentFrom?.includes(variableMarker)) {\n // If cleanedCurrentFrom contains a variable, after cleaning, e.g. \"$REGISTRY/alpine\", we do not support this.\n return {\n skipReason: 'contains-variable',\n };\n }\n }\n\n const [currentDepTag, currentDigest] = cleanedCurrentFrom.split('@');\n const depTagSplit = currentDepTag.split(':');\n let depName: string;\n let currentValue: string | undefined;\n if (\n depTagSplit.length === 1 ||\n depTagSplit[depTagSplit.length - 1].includes('/')\n ) {\n depName = currentDepTag;\n } else {\n currentValue = depTagSplit.pop();\n depName = depTagSplit.join(':');\n }\n\n const dep: PackageDependency = {\n depName,\n packageName: depName,\n currentValue,\n currentDigest,\n };\n\n if (isVariable) {\n dep.replaceString = cleanedCurrentFrom;\n\n if (!dep.currentValue) {\n delete dep.currentValue;\n }\n\n if (!dep.currentDigest) {\n delete dep.currentDigest;\n }\n }\n\n return dep;\n}\n\nconst quayRegex = regEx(/^quay\\.io(?::[1-9][0-9]{0,4})?/i);\n\nexport function getDep(\n currentFrom: string | null | undefined,\n specifyReplaceString = true,\n registryAliases?: Record<string, string>,\n): PackageDependency {\n if (\n !isString(currentFrom) ||\n !isNonEmptyStringAndNotWhitespace(currentFrom)\n ) {\n return {\n skipReason: 'invalid-value',\n };\n }\n\n // Resolve registry aliases first so that we don't need special casing later on:\n for (const [name, value] of Object.entries(registryAliases ?? {})) {\n if (currentFrom.startsWith(`${name}/`)) {\n const depName = currentFrom.substring(name.length + 1);\n const dep = {\n ...getDep(`${value}/${depName}`, false),\n replaceString: currentFrom,\n };\n // retain depName, not sure if condition is necessary\n if (dep.depName?.startsWith(value)) {\n dep.packageName = dep.depName;\n dep.depName = `${name}/${dep.depName.substring(value.length + 1)}`;\n }\n if (specifyReplaceString) {\n dep.autoReplaceStringTemplate = getAutoReplaceTemplate(dep);\n }\n return dep;\n }\n }\n\n const dep = splitImageParts(currentFrom);\n if (specifyReplaceString) {\n dep.replaceString ??= currentFrom;\n dep.autoReplaceStringTemplate =\n '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}';\n }\n dep.datasource = DockerDatasource.id;\n\n // Pretty up special prefixes\n if (dep.depName) {\n const specialPrefixes = ['amd64', 'arm64', 'library'];\n for (const prefix of specialPrefixes) {\n if (dep.depName.startsWith(`${prefix}/`)) {\n dep.depName = dep.depName.replace(`${prefix}/`, '');\n if (specifyReplaceString) {\n dep.autoReplaceStringTemplate =\n '{{packageName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}';\n }\n }\n }\n }\n\n if (dep.depName === 'ubuntu' || dep.depName?.endsWith('/ubuntu')) {\n dep.versioning = ubuntuVersioning.id;\n }\n\n if (\n (dep.depName === 'debian' || dep.depName?.endsWith('/debian')) &&\n debianVersioning.api.isVersion(dep.currentValue)\n ) {\n dep.versioning = debianVersioning.id;\n }\n\n // Don't display quay.io ports\n if (dep.depName && quayRegex.test(dep.depName)) {\n const depName = dep.depName.replace(quayRegex, 'quay.io');\n if (depName !== dep.depName) {\n dep.depName = depName;\n dep.autoReplaceStringTemplate =\n '{{packageName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}';\n }\n }\n\n return dep;\n}\n\nexport function extractPackageFile(\n content: string,\n _packageFile: string,\n config: ExtractConfig,\n): PackageFileContent | null {\n const sanitizedContent = content.replace(regEx(/^\\uFEFF/), ''); // remove bom marker\n const deps: PackageDependency[] = [];\n const stageNames: string[] = [];\n const args: Record<string, string> = {};\n const argsLines: Record<string, number[]> = {};\n\n let escapeChar = '\\\\\\\\';\n let lookForEscapeChar = true;\n let lookForSyntaxDirective = true;\n\n const lineFeed = sanitizedContent.includes('\\r\\n') ? '\\r\\n' : '\\n';\n const lines = sanitizedContent.split(newlineRegex);\n for (let lineNumber = 0; lineNumber < lines.length; ) {\n const lineNumberInstrStart = lineNumber;\n let instruction = lines[lineNumber];\n\n if (lookForEscapeChar) {\n const directivesMatch = regEx(\n /^[ \\t]*#[ \\t]*(?<directive>syntax|escape)[ \\t]*=[ \\t]*(?<escapeChar>\\S)/i,\n ).exec(instruction);\n if (!directivesMatch) {\n lookForEscapeChar = false;\n } else if (directivesMatch.groups?.directive.toLowerCase() === 'escape') {\n if (directivesMatch.groups?.escapeChar === '`') {\n escapeChar = '`';\n }\n lookForEscapeChar = false;\n }\n }\n\n if (lookForSyntaxDirective) {\n const syntaxRegex = regEx(\n '^#[ \\\\t]*syntax[ \\\\t]*=[ \\\\t]*(?<image>\\\\S+)',\n 'im',\n );\n const syntaxMatch = instruction.match(syntaxRegex);\n if (syntaxMatch?.groups?.image) {\n const syntaxImage = syntaxMatch.groups.image;\n const lineNumberRanges: number[][] = [\n [lineNumberInstrStart, lineNumber],\n ];\n const dep = getDep(syntaxImage, true, config.registryAliases);\n dep.depType = 'syntax';\n processDepForAutoReplace(dep, lineNumberRanges, lines, lineFeed);\n logger.trace(\n {\n depName: dep.depName,\n currentValue: dep.currentValue,\n currentDigest: dep.currentDigest,\n },\n 'Dockerfile # syntax',\n );\n deps.push(dep);\n }\n lookForSyntaxDirective = false;\n }\n\n const lineContinuationRegex = regEx(escapeChar + '[ \\\\t]*$|^[ \\\\t]*#', 'm');\n let lineLookahead = instruction;\n while (\n !lookForEscapeChar &&\n !instruction.trimStart().startsWith('#') &&\n lineContinuationRegex.test(lineLookahead)\n ) {\n lineLookahead = lines[++lineNumber] || '';\n instruction += '\\n' + lineLookahead;\n }\n\n const argRegex = regEx(\n '^[ \\\\t]*ARG(?:' +\n escapeChar +\n '[ \\\\t]*\\\\r?\\\\n| |\\\\t|#.*?\\\\r?\\\\n)+(?<name>\\\\w+)[ =](?<value>\\\\S*)',\n 'im',\n );\n const argMatch = argRegex.exec(instruction);\n if (argMatch?.groups?.name) {\n argsLines[argMatch.groups.name] = [lineNumberInstrStart, lineNumber];\n let argMatchValue = argMatch.groups?.value;\n\n if (argMatchValue.startsWith('\"') && argMatchValue.endsWith('\"')) {\n argMatchValue = argMatchValue.slice(1, -1);\n }\n\n args[argMatch.groups.name] = argMatchValue || '';\n }\n\n const fromRegex = new RegExp(\n '^[ \\\\t]*FROM(?:' +\n escapeChar +\n '[ \\\\t]*\\\\r?\\\\n| |\\\\t|#.*?\\\\r?\\\\n|--platform=\\\\S+)+(?<image>\\\\S+)(?:(?:' +\n escapeChar +\n '[ \\\\t]*\\\\r?\\\\n| |\\\\t|#.*?\\\\r?\\\\n)+as[ \\\\t]+(?<name>\\\\S+))?',\n 'im',\n ); // TODO #12875 complex for re2 has too many not supported groups\n const fromMatch = instruction.match(fromRegex);\n if (fromMatch?.groups?.image) {\n let fromImage = fromMatch.groups.image;\n const lineNumberRanges: number[][] = [[lineNumberInstrStart, lineNumber]];\n\n if (fromImage.includes(variableMarker)) {\n const variables = extractVariables(fromImage);\n for (const [fullVariable, argName] of Object.entries(variables)) {\n const resolvedArgValue = args[argName];\n if (resolvedArgValue || resolvedArgValue === '') {\n fromImage = fromImage.replaceAll(fullVariable, resolvedArgValue);\n lineNumberRanges.push(argsLines[argName]);\n }\n }\n }\n\n if (fromMatch.groups?.name) {\n logger.debug(\n `Found a multistage build stage name: ${fromMatch.groups.name}`,\n );\n stageNames.push(fromMatch.groups.name);\n }\n if (fromImage === 'scratch') {\n logger.debug('Skipping scratch');\n } else if (fromImage && stageNames.includes(fromImage)) {\n logger.debug(`Skipping alias FROM image:${fromImage}`);\n } else {\n const dep = getDep(fromImage, true, config.registryAliases);\n processDepForAutoReplace(dep, lineNumberRanges, lines, lineFeed);\n logger.trace(\n {\n depName: dep.depName,\n currentValue: dep.currentValue,\n currentDigest: dep.currentDigest,\n },\n 'Dockerfile FROM',\n );\n deps.push(dep);\n }\n }\n\n const copyFromRegex = new RegExp(\n '^[ \\\\t]*COPY(?:' +\n escapeChar +\n '[ \\\\t]*\\\\r?\\\\n| |\\\\t|#.*?\\\\r?\\\\n|--[a-z]+(?:=[a-zA-Z0-9_.:-]+?)?)+--from=(?<image>\\\\S+)',\n 'im',\n ); // TODO #12875 complex for re2 has too many not supported groups\n const copyFromMatch = instruction.match(copyFromRegex);\n if (copyFromMatch?.groups?.image) {\n if (stageNames.includes(copyFromMatch.groups.image)) {\n logger.debug(\n { image: copyFromMatch.groups.image },\n 'Skipping alias COPY --from',\n );\n } else if (Number.isNaN(Number(copyFromMatch.groups.image))) {\n const dep = getDep(\n copyFromMatch.groups.image,\n true,\n config.registryAliases,\n );\n const lineNumberRanges: number[][] = [\n [lineNumberInstrStart, lineNumber],\n ];\n processDepForAutoReplace(dep, lineNumberRanges, lines, lineFeed);\n logger.debug(\n {\n depName: dep.depName,\n currentValue: dep.currentValue,\n currentDigest: dep.currentDigest,\n },\n 'Dockerfile COPY --from',\n );\n deps.push(dep);\n } else {\n logger.debug(\n { image: copyFromMatch.groups.image },\n 'Skipping index reference COPY --from',\n );\n }\n }\n\n const runMountFromRegex = regEx(\n '^[ \\\\t]*RUN(?:' +\n escapeChar +\n '[ \\\\t]*\\\\r?\\\\n| |\\\\t|#.*?\\\\r?\\\\n|--[a-z]+(?:=[a-zA-Z0-9_.:-]+?)?)+--mount=(?:\\\\S*=\\\\S*,)*from=(?<image>[^, ]+)',\n 'im',\n );\n const runMountFromMatch = instruction.match(runMountFromRegex);\n if (runMountFromMatch?.groups?.image) {\n if (stageNames.includes(runMountFromMatch.groups.image)) {\n logger.debug(\n { image: runMountFromMatch.groups.image },\n 'Skipping alias RUN --mount=from',\n );\n } else {\n const dep = getDep(\n runMountFromMatch.groups.image,\n true,\n config.registryAliases,\n );\n const lineNumberRanges: number[][] = [\n [lineNumberInstrStart, lineNumber],\n ];\n processDepForAutoReplace(dep, lineNumberRanges, lines, lineFeed);\n logger.debug(\n {\n depName: dep.depName,\n currentValue: dep.currentValue,\n currentDigest: dep.currentDigest,\n },\n 'Dockerfile RUN --mount=from',\n );\n deps.push(dep);\n }\n }\n\n lineNumber += 1;\n }\n\n if (!deps.length) {\n return null;\n }\n for (const d of deps) {\n d.depType ??= 'stage';\n }\n deps[deps.length - 1].depType = 'final';\n return { deps };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","names":["ubuntuVersioning.id","debianVersioning.id"],"sources":["../../../../lib/modules/manager/dockerfile/extract.ts"],"sourcesContent":["import { isNonEmptyStringAndNotWhitespace, isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { DockerDatasource } from '../../datasource/docker/index.ts';\nimport * as debianVersioning from '../../versioning/debian/index.ts';\nimport * as ubuntuVersioning from '../../versioning/ubuntu/index.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\n\nconst variableMarker = '$';\n\nexport function extractVariables(image: string): Record<string, string> {\n const variables: Record<string, string> = {};\n const variableRegex = regEx(\n /(?<fullvariable>\\\\?\\$(?<simplearg>\\w+)|\\\\?\\${(?<complexarg>\\w+)(?::.+?)?}+)/gi,\n );\n\n let match: RegExpExecArray | null;\n do {\n match = variableRegex.exec(image);\n if (match?.groups?.fullvariable) {\n variables[match.groups.fullvariable] =\n match.groups?.simplearg || match.groups?.complexarg;\n }\n } while (match);\n\n return variables;\n}\n\nfunction getAutoReplaceTemplate(dep: PackageDependency): string | undefined {\n let template = dep.replaceString;\n\n if (dep.currentValue) {\n let placeholder = '{{#if newValue}}{{newValue}}{{/if}}';\n if (!dep.currentDigest) {\n placeholder += '{{#if newDigest}}@{{newDigest}}{{/if}}';\n }\n template = template?.replace(dep.currentValue, placeholder);\n }\n\n if (dep.currentDigest) {\n template = template?.replace(\n dep.currentDigest,\n '{{#if newDigest}}{{newDigest}}{{/if}}',\n );\n }\n\n return template;\n}\n\nfunction processDepForAutoReplace(\n dep: PackageDependency,\n lineNumberRanges: number[][],\n lines: string[],\n linefeed: string,\n): void {\n const lineNumberRangesToReplace: number[][] = [];\n for (const lineNumberRange of lineNumberRanges) {\n for (const lineNumber of lineNumberRange) {\n if (\n (isString(dep.currentValue) &&\n lines[lineNumber].includes(dep.currentValue)) ||\n (isString(dep.currentDigest) &&\n lines[lineNumber].includes(dep.currentDigest))\n ) {\n lineNumberRangesToReplace.push(lineNumberRange);\n }\n }\n }\n\n lineNumberRangesToReplace.sort((a, b) => {\n return a[0] - b[0];\n });\n\n const minLine = lineNumberRangesToReplace[0]?.[0];\n const maxLine =\n lineNumberRangesToReplace[lineNumberRangesToReplace.length - 1]?.[1];\n if (\n lineNumberRanges.length === 1 ||\n minLine === undefined ||\n maxLine === undefined\n ) {\n return;\n }\n\n const unfoldedLineNumbers = Array.from(\n { length: maxLine - minLine + 1 },\n (_v, k) => k + minLine,\n );\n\n dep.replaceString = unfoldedLineNumbers\n .map((lineNumber) => lines[lineNumber])\n .join(linefeed);\n\n if (!dep.currentDigest) {\n dep.replaceString += linefeed;\n }\n\n dep.autoReplaceStringTemplate = getAutoReplaceTemplate(dep);\n}\n\nexport function splitImageParts(currentFrom: string): PackageDependency {\n let isVariable = false;\n let cleanedCurrentFrom = currentFrom;\n\n // Check if we have a variable in format of \"${VARIABLE:-<image>:<defaultVal>@<digest>}\"\n // If so, remove everything except the image, defaultVal and digest.\n if (cleanedCurrentFrom?.includes(variableMarker)) {\n const defaultValueRegex = regEx(/^\\${.+?:-\"?(?<value>.*?)\"?}$/);\n const defaultValueMatch =\n defaultValueRegex.exec(cleanedCurrentFrom)?.groups;\n if (defaultValueMatch?.value) {\n isVariable = true;\n cleanedCurrentFrom = defaultValueMatch.value;\n }\n\n if (cleanedCurrentFrom?.includes(variableMarker)) {\n // If cleanedCurrentFrom contains a variable, after cleaning, e.g. \"$REGISTRY/alpine\", we do not support this.\n return {\n skipReason: 'contains-variable',\n };\n }\n }\n\n const [currentDepTag, currentDigest] = cleanedCurrentFrom.split('@');\n const depTagSplit = currentDepTag.split(':');\n let depName: string;\n let currentValue: string | undefined;\n if (\n depTagSplit.length === 1 ||\n depTagSplit[depTagSplit.length - 1].includes('/')\n ) {\n depName = currentDepTag;\n } else {\n currentValue = depTagSplit.pop();\n depName = depTagSplit.join(':');\n }\n\n const dep: PackageDependency = {\n depName,\n packageName: depName,\n currentValue,\n currentDigest,\n };\n\n if (isVariable) {\n dep.replaceString = cleanedCurrentFrom;\n\n if (!dep.currentValue) {\n delete dep.currentValue;\n }\n\n if (!dep.currentDigest) {\n delete dep.currentDigest;\n }\n }\n\n return dep;\n}\n\nconst quayRegex = regEx(/^quay\\.io(?::[1-9][0-9]{0,4})?/i);\n\nexport function getDep(\n currentFrom: string | null | undefined,\n specifyReplaceString = true,\n registryAliases?: Record<string, string>,\n): PackageDependency {\n if (\n !isString(currentFrom) ||\n !isNonEmptyStringAndNotWhitespace(currentFrom)\n ) {\n return {\n skipReason: 'invalid-value',\n };\n }\n\n // Resolve registry aliases first so that we don't need special casing later on:\n for (const [name, value] of Object.entries(registryAliases ?? {})) {\n if (currentFrom.startsWith(`${name}/`)) {\n const depName = currentFrom.substring(name.length + 1);\n const dep = getDep(`${value}/${depName}`, false);\n // retain depName, not sure if condition is necessary\n if (dep.depName?.startsWith(value)) {\n dep.packageName = dep.depName;\n dep.depName = `${name}/${dep.depName.substring(value.length + 1)}`;\n }\n if (specifyReplaceString) {\n dep.replaceString = currentFrom;\n dep.autoReplaceStringTemplate = getAutoReplaceTemplate(dep);\n }\n return dep;\n }\n }\n\n const dep = splitImageParts(currentFrom);\n if (specifyReplaceString) {\n dep.replaceString ??= currentFrom;\n dep.autoReplaceStringTemplate =\n '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}';\n }\n dep.datasource = DockerDatasource.id;\n\n // Pretty up special prefixes\n if (dep.depName) {\n const specialPrefixes = ['amd64', 'arm64', 'library'];\n for (const prefix of specialPrefixes) {\n if (dep.depName.startsWith(`${prefix}/`)) {\n dep.depName = dep.depName.replace(`${prefix}/`, '');\n if (specifyReplaceString) {\n dep.autoReplaceStringTemplate =\n '{{packageName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}';\n }\n }\n }\n }\n\n if (dep.depName === 'ubuntu' || dep.depName?.endsWith('/ubuntu')) {\n dep.versioning = ubuntuVersioning.id;\n }\n\n if (\n (dep.depName === 'debian' || dep.depName?.endsWith('/debian')) &&\n debianVersioning.api.isVersion(dep.currentValue)\n ) {\n dep.versioning = debianVersioning.id;\n }\n\n // Don't display quay.io ports\n if (dep.depName && quayRegex.test(dep.depName)) {\n const depName = dep.depName.replace(quayRegex, 'quay.io');\n if (depName !== dep.depName) {\n dep.depName = depName;\n dep.autoReplaceStringTemplate =\n '{{packageName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}';\n }\n }\n\n return dep;\n}\n\nexport function extractPackageFile(\n content: string,\n _packageFile: string,\n config: ExtractConfig,\n): PackageFileContent | null {\n const sanitizedContent = content.replace(regEx(/^\\uFEFF/), ''); // remove bom marker\n const deps: PackageDependency[] = [];\n const stageNames: string[] = [];\n const args: Record<string, string> = {};\n const argsLines: Record<string, number[]> = {};\n\n let escapeChar = '\\\\\\\\';\n let lookForEscapeChar = true;\n let lookForSyntaxDirective = true;\n\n const lineFeed = sanitizedContent.includes('\\r\\n') ? '\\r\\n' : '\\n';\n const lines = sanitizedContent.split(newlineRegex);\n for (let lineNumber = 0; lineNumber < lines.length; ) {\n const lineNumberInstrStart = lineNumber;\n let instruction = lines[lineNumber];\n\n if (lookForEscapeChar) {\n const directivesMatch = regEx(\n /^[ \\t]*#[ \\t]*(?<directive>syntax|escape)[ \\t]*=[ \\t]*(?<escapeChar>\\S)/i,\n ).exec(instruction);\n if (!directivesMatch) {\n lookForEscapeChar = false;\n } else if (directivesMatch.groups?.directive.toLowerCase() === 'escape') {\n if (directivesMatch.groups?.escapeChar === '`') {\n escapeChar = '`';\n }\n lookForEscapeChar = false;\n }\n }\n\n if (lookForSyntaxDirective) {\n const syntaxRegex = regEx(\n '^#[ \\\\t]*syntax[ \\\\t]*=[ \\\\t]*(?<image>\\\\S+)',\n 'im',\n );\n const syntaxMatch = instruction.match(syntaxRegex);\n if (syntaxMatch?.groups?.image) {\n const syntaxImage = syntaxMatch.groups.image;\n const lineNumberRanges: number[][] = [\n [lineNumberInstrStart, lineNumber],\n ];\n const dep = getDep(syntaxImage, true, config.registryAliases);\n dep.depType = 'syntax';\n processDepForAutoReplace(dep, lineNumberRanges, lines, lineFeed);\n logger.trace(\n {\n depName: dep.depName,\n currentValue: dep.currentValue,\n currentDigest: dep.currentDigest,\n },\n 'Dockerfile # syntax',\n );\n deps.push(dep);\n }\n lookForSyntaxDirective = false;\n }\n\n const lineContinuationRegex = regEx(escapeChar + '[ \\\\t]*$|^[ \\\\t]*#', 'm');\n let lineLookahead = instruction;\n while (\n !lookForEscapeChar &&\n !instruction.trimStart().startsWith('#') &&\n lineContinuationRegex.test(lineLookahead)\n ) {\n lineLookahead = lines[++lineNumber] || '';\n instruction += '\\n' + lineLookahead;\n }\n\n const argRegex = regEx(\n '^[ \\\\t]*ARG(?:' +\n escapeChar +\n '[ \\\\t]*\\\\r?\\\\n| |\\\\t|#.*?\\\\r?\\\\n)+(?<name>\\\\w+)[ =](?<value>\\\\S*)',\n 'im',\n );\n const argMatch = argRegex.exec(instruction);\n if (argMatch?.groups?.name) {\n argsLines[argMatch.groups.name] = [lineNumberInstrStart, lineNumber];\n let argMatchValue = argMatch.groups?.value;\n\n if (argMatchValue.startsWith('\"') && argMatchValue.endsWith('\"')) {\n argMatchValue = argMatchValue.slice(1, -1);\n }\n\n args[argMatch.groups.name] = argMatchValue || '';\n }\n\n const fromRegex = new RegExp(\n '^[ \\\\t]*FROM(?:' +\n escapeChar +\n '[ \\\\t]*\\\\r?\\\\n| |\\\\t|#.*?\\\\r?\\\\n|--platform=\\\\S+)+(?<image>\\\\S+)(?:(?:' +\n escapeChar +\n '[ \\\\t]*\\\\r?\\\\n| |\\\\t|#.*?\\\\r?\\\\n)+as[ \\\\t]+(?<name>\\\\S+))?',\n 'im',\n ); // TODO #12875 complex for re2 has too many not supported groups\n const fromMatch = instruction.match(fromRegex);\n if (fromMatch?.groups?.image) {\n let fromImage = fromMatch.groups.image;\n const lineNumberRanges: number[][] = [[lineNumberInstrStart, lineNumber]];\n\n if (fromImage.includes(variableMarker)) {\n const variables = extractVariables(fromImage);\n for (const [fullVariable, argName] of Object.entries(variables)) {\n const resolvedArgValue = args[argName];\n if (resolvedArgValue || resolvedArgValue === '') {\n fromImage = fromImage.replaceAll(fullVariable, resolvedArgValue);\n lineNumberRanges.push(argsLines[argName]);\n }\n }\n }\n\n if (fromMatch.groups?.name) {\n logger.debug(\n `Found a multistage build stage name: ${fromMatch.groups.name}`,\n );\n stageNames.push(fromMatch.groups.name);\n }\n if (fromImage === 'scratch') {\n logger.debug('Skipping scratch');\n } else if (fromImage && stageNames.includes(fromImage)) {\n logger.debug(`Skipping alias FROM image:${fromImage}`);\n } else {\n const dep = getDep(fromImage, true, config.registryAliases);\n processDepForAutoReplace(dep, lineNumberRanges, lines, lineFeed);\n logger.trace(\n {\n depName: dep.depName,\n currentValue: dep.currentValue,\n currentDigest: dep.currentDigest,\n },\n 'Dockerfile FROM',\n );\n deps.push(dep);\n }\n }\n\n const copyFromRegex = new RegExp(\n '^[ \\\\t]*COPY(?:' +\n escapeChar +\n '[ \\\\t]*\\\\r?\\\\n| |\\\\t|#.*?\\\\r?\\\\n|--[a-z]+(?:=[a-zA-Z0-9_.:-]+?)?)+--from=(?<image>\\\\S+)',\n 'im',\n ); // TODO #12875 complex for re2 has too many not supported groups\n const copyFromMatch = instruction.match(copyFromRegex);\n if (copyFromMatch?.groups?.image) {\n if (stageNames.includes(copyFromMatch.groups.image)) {\n logger.debug(\n { image: copyFromMatch.groups.image },\n 'Skipping alias COPY --from',\n );\n } else if (Number.isNaN(Number(copyFromMatch.groups.image))) {\n const dep = getDep(\n copyFromMatch.groups.image,\n true,\n config.registryAliases,\n );\n const lineNumberRanges: number[][] = [\n [lineNumberInstrStart, lineNumber],\n ];\n processDepForAutoReplace(dep, lineNumberRanges, lines, lineFeed);\n logger.debug(\n {\n depName: dep.depName,\n currentValue: dep.currentValue,\n currentDigest: dep.currentDigest,\n },\n 'Dockerfile COPY --from',\n );\n deps.push(dep);\n } else {\n logger.debug(\n { image: copyFromMatch.groups.image },\n 'Skipping index reference COPY --from',\n );\n }\n }\n\n const runMountFromRegex = regEx(\n '^[ \\\\t]*RUN(?:' +\n escapeChar +\n '[ \\\\t]*\\\\r?\\\\n| |\\\\t|#.*?\\\\r?\\\\n|--[a-z]+(?:=[a-zA-Z0-9_.:-]+?)?)+--mount=(?:\\\\S*=\\\\S*,)*from=(?<image>[^, ]+)',\n 'im',\n );\n const runMountFromMatch = instruction.match(runMountFromRegex);\n if (runMountFromMatch?.groups?.image) {\n if (stageNames.includes(runMountFromMatch.groups.image)) {\n logger.debug(\n { image: runMountFromMatch.groups.image },\n 'Skipping alias RUN --mount=from',\n );\n } else {\n const dep = getDep(\n runMountFromMatch.groups.image,\n true,\n config.registryAliases,\n );\n const lineNumberRanges: number[][] = [\n [lineNumberInstrStart, lineNumber],\n ];\n processDepForAutoReplace(dep, lineNumberRanges, lines, lineFeed);\n logger.debug(\n {\n depName: dep.depName,\n currentValue: dep.currentValue,\n currentDigest: dep.currentDigest,\n },\n 'Dockerfile RUN --mount=from',\n );\n deps.push(dep);\n }\n }\n\n lineNumber += 1;\n }\n\n if (!deps.length) {\n return null;\n }\n for (const d of deps) {\n d.depType ??= 'stage';\n }\n deps[deps.length - 1].depType = 'final';\n return { deps };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "renovate",
3
3
  "description": "Automated dependency updates. Flexible so you don't need to be.",
4
- "version": "43.124.0",
4
+ "version": "43.125.0",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$id": "https://docs.renovatebot.com/renovate-schema.json",
3
- "title": "JSON schema for Renovate 43.124.0 config files (https://renovatebot.com/)",
3
+ "title": "JSON schema for Renovate 43.125.0 config files (https://renovatebot.com/)",
4
4
  "$schema": "http://json-schema.org/draft-07/schema#",
5
- "x-renovate-version": "43.124.0",
5
+ "x-renovate-version": "43.125.0",
6
6
  "allowComments": true,
7
7
  "type": "object",
8
8
  "properties": {