renovate 44.179.2 → 44.180.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.
@@ -132,8 +132,8 @@ const allToolConfig = {
132
132
  },
133
133
  jb: {
134
134
  datasource: "github-releases",
135
- packageName: "jsonnet-bundler/jsonnet-bundler",
136
- versioning: "semver"
135
+ packageName: "containerbase/jb-prebuild",
136
+ versioning: "loose"
137
137
  },
138
138
  kustomize: {
139
139
  datasource: "github-releases",
@@ -1 +1 @@
1
- {"version":3,"file":"containerbase.js","names":["memCache.get"],"sources":["../../../lib/util/exec/containerbase.ts"],"sourcesContent":["import {\n type ToolMetadata,\n isContainerbase,\n tools,\n} from '@renovatebot/base-image';\nimport { isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { GlobalConfig } from '../../config/global.ts';\nimport { logger } from '../../logger/index.ts';\nimport type { ReleaseResult } from '../../modules/datasource/index.ts';\nimport type { VersioningApi } from '../../modules/versioning/types.ts';\nimport { coerceArray } from '../array.ts';\nimport * as memCache from '../cache/memory/index.ts';\nimport { buildCacheKey } from '../cache/package/key.ts';\nimport { regEx } from '../regex.ts';\nimport {\n type ConstraintName,\n type Opt,\n type ToolConfig,\n type ToolConstraint,\n type ToolName,\n isToolName,\n} from './types.ts';\n\n/**\n * A subset of Containerbase tools that are supported by Renovate to look up version numbers for.\n */\nexport const allToolConfig: Partial<Record<ToolName, ToolConfig>> = {\n apm: {\n datasource: 'github-releases',\n packageName: 'microsoft/apm',\n versioning: 'semver',\n extractVersion: '^v(?<version>.*)$',\n },\n bazelisk: {\n datasource: 'github-releases',\n packageName: 'bazelbuild/bazelisk',\n versioning: 'semver',\n },\n bun: {\n datasource: 'github-releases',\n packageName: 'oven-sh/bun',\n extractVersion: '^bun-v(?<version>.*)$',\n versioning: 'npm',\n },\n bundler: {\n datasource: 'rubygems',\n packageName: 'bundler',\n versioning: 'ruby',\n },\n cocoapods: {\n datasource: 'rubygems',\n packageName: 'cocoapods',\n versioning: 'ruby',\n },\n composer: {\n datasource: 'github-releases',\n packageName: 'containerbase/composer-prebuild',\n versioning: 'composer',\n },\n conan: {\n datasource: 'pypi',\n packageName: 'conan',\n versioning: 'pep440',\n },\n copier: {\n datasource: 'pypi',\n packageName: 'copier',\n versioning: 'pep440',\n },\n corepack: {\n datasource: 'npm',\n packageName: 'corepack',\n versioning: 'npm',\n },\n deno: {\n datasource: 'github-releases',\n packageName: 'denoland/deno',\n versioning: 'deno',\n },\n devbox: {\n datasource: 'github-releases',\n packageName: 'jetify-com/devbox',\n versioning: 'semver',\n },\n dotnet: {\n datasource: 'dotnet-version',\n packageName: 'dotnet-sdk',\n versioning: 'semver',\n },\n erlang: {\n datasource: 'github-releases',\n packageName: 'containerbase/erlang-prebuild',\n versioning: 'semver-coerced',\n },\n elixir: {\n datasource: 'github-releases',\n packageName: 'elixir-lang/elixir',\n versioning: 'semver',\n },\n flux: {\n datasource: 'github-releases',\n packageName: 'fluxcd/flux2',\n versioning: 'semver',\n },\n gh: {\n datasource: 'github-releases',\n packageName: 'cli/cli',\n versioning: 'semver',\n },\n gleam: {\n datasource: 'github-releases',\n packageName: 'gleam-lang/gleam',\n versioning: 'semver',\n },\n golang: {\n datasource: 'github-releases',\n packageName: 'containerbase/golang-prebuild',\n versioning: 'npm',\n },\n gradle: {\n datasource: 'gradle-version',\n packageName: 'gradle',\n versioning: 'gradle',\n },\n hashin: {\n datasource: 'pypi',\n packageName: 'hashin',\n versioning: 'pep440',\n },\n helm: {\n datasource: 'github-releases',\n packageName: 'helm/helm',\n versioning: 'semver',\n },\n helmfile: {\n datasource: 'github-releases',\n packageName: 'helmfile/helmfile',\n versioning: 'semver',\n },\n java: {\n datasource: 'java-version',\n packageName: 'java?system=true',\n versioning: 'npm',\n },\n jb: {\n datasource: 'github-releases',\n packageName: 'jsonnet-bundler/jsonnet-bundler',\n versioning: 'semver',\n },\n kustomize: {\n datasource: 'github-releases',\n packageName: 'kubernetes-sigs/kustomize',\n extractVersion: '^kustomize/v(?<version>.*)$',\n versioning: 'semver',\n },\n maven: {\n datasource: 'github-releases',\n packageName: 'containerbase/maven-prebuild',\n versioning: 'maven',\n },\n mise: {\n datasource: 'github-releases',\n packageName: 'jdx/mise',\n versioning: 'npm',\n },\n nix: {\n datasource: 'github-releases',\n packageName: 'containerbase/nix-prebuild',\n versioning: 'semver',\n },\n node: {\n datasource: 'github-releases',\n packageName: 'containerbase/node-prebuild',\n versioning: 'node',\n },\n npm: {\n datasource: 'npm',\n packageName: 'npm',\n versioning: 'npm',\n },\n pdm: {\n datasource: 'github-releases',\n packageName: 'pdm-project/pdm',\n versioning: 'semver',\n },\n php: {\n datasource: 'github-releases',\n packageName: 'containerbase/php-prebuild',\n versioning: 'composer',\n },\n 'pip-tools': {\n datasource: 'pypi',\n packageName: 'pip-tools',\n versioning: 'pep440',\n },\n pipenv: {\n datasource: 'pypi',\n packageName: 'pipenv',\n versioning: 'pep440',\n },\n pnpm: {\n datasource: 'npm',\n packageName: 'pnpm',\n versioning: 'npm',\n },\n pixi: {\n datasource: 'github-releases',\n packageName: 'prefix-dev/pixi',\n versioning: 'conda',\n extractVersion: '^v(?<version>.*)$',\n },\n poetry: {\n datasource: 'pypi',\n packageName: 'poetry',\n versioning: 'pep440',\n },\n python: {\n datasource: 'github-releases',\n packageName: 'containerbase/python-prebuild',\n versioning: 'python',\n },\n ruby: {\n datasource: 'github-releases',\n packageName: 'containerbase/ruby-prebuild',\n versioning: 'ruby',\n },\n rust: {\n datasource: 'rust-version',\n packageName: 'rust',\n versioning: 'rust-release-channel',\n },\n uv: {\n datasource: 'pypi',\n packageName: 'uv',\n versioning: 'pep440',\n },\n yarn: {\n datasource: 'npm',\n packageName: 'yarn',\n versioning: 'npm',\n },\n 'yarn-slim': {\n datasource: 'npm',\n packageName: 'yarn',\n versioning: 'npm',\n },\n dart: {\n datasource: 'dart-version',\n packageName: 'dart',\n versioning: 'npm',\n },\n flutter: {\n datasource: 'github-releases',\n packageName: 'containerbase/flutter-prebuild',\n versioning: 'npm',\n },\n vendir: {\n datasource: 'github-releases',\n packageName: 'carvel-dev/vendir',\n versioning: 'semver',\n },\n} as const;\n\n/**\n * All Containerbase `tool`s that Renovate supports configuring the version of.\n */\nexport function getSupportedToolNames(): readonly ToolName[] {\n return Object.keys(allToolConfig) as readonly ToolName[];\n}\n\nlet _getPkgReleases: Promise<\n typeof import('../../modules/datasource/index.ts')\n> | null = null;\n\nasync function getPkgReleases(\n toolConfig: ToolConfig,\n resolvedTools: Partial<Record<ConstraintName, string>> = {},\n): Promise<ReleaseResult | null> {\n _getPkgReleases ??= import('../../modules/datasource/index.ts');\n const { getPkgReleases } = await _getPkgReleases;\n if (Object.keys(resolvedTools).length) {\n // drop releases whose runtime constraints (e.g. `engines.node`) exclude the runtime versions we install\n const compatible = await getPkgReleases({\n ...toolConfig,\n constraintsFiltering: 'strict',\n constraints: { ...resolvedTools },\n });\n if (compatible?.releases.length) {\n return compatible;\n }\n logger.debug(\n { toolConfig, resolvedTools },\n 'No tool releases compatible with resolved tools - ignoring their constraints',\n );\n }\n return getPkgReleases(toolConfig);\n}\n\nexport function getToolConfig(toolName: ToolName): ToolConfig | undefined {\n return allToolConfig[toolName];\n}\n\nexport function supportsDynamicInstall(toolName: ToolName): boolean {\n return !!allToolConfig[toolName];\n}\n\nexport function isDynamicInstall(\n toolConstraints?: Opt<ToolConstraint[]>,\n): boolean {\n if (GlobalConfig.get('binarySource') !== 'install') {\n return false;\n }\n if (!isContainerbase()) {\n logger.debug('Falling back to binarySource=global');\n return false;\n }\n return (\n !toolConstraints ||\n toolConstraints.every((toolConstraint) =>\n supportsDynamicInstall(toolConstraint.toolName),\n )\n );\n}\n\nfunction isStable(\n version: string,\n versioningApi: VersioningApi,\n latest?: string,\n): boolean {\n if (!versioningApi.isStable(version)) {\n return false;\n }\n if (isString(latest) && versioningApi.isGreaterThan(version, latest)) {\n return false;\n }\n return true;\n}\n\nexport async function resolveConstraint(\n toolConstraint: ToolConstraint,\n resolvedTools: Partial<Record<ConstraintName, string>> = {},\n): Promise<string> {\n const { toolName } = toolConstraint;\n const toolConfig = allToolConfig[toolName];\n if (!toolConfig) {\n throw new Error(`Invalid tool to install: ${toolName}`);\n }\n\n const { get: getVersioning } =\n await import('../../modules/versioning/index.ts');\n const versioning = getVersioning(toolConfig.versioning);\n let constraint = toolConstraint.constraint;\n if (constraint) {\n if (versioning.isValid(constraint)) {\n if (versioning.isSingleVersion(constraint)) {\n return constraint.replace(regEx(/^=+/), '').trim();\n }\n } else {\n logger.warn(\n { toolName, constraint, versioning: toolConfig.versioning },\n 'Invalid tool constraint',\n );\n constraint = undefined;\n }\n }\n\n const pkgReleases = await getPkgReleases(toolConfig, resolvedTools);\n const releases = coerceArray(pkgReleases?.releases);\n\n if (!releases?.length) {\n logger.warn({ toolConfig }, 'No tool releases found.');\n throw new Error('No tool releases found.');\n }\n\n const matchingReleases = releases.filter(\n (r) => !constraint || versioning.matches(r.version, constraint),\n );\n\n const stableMatchingVersion = matchingReleases\n .filter((r) => isStable(r.version, versioning, pkgReleases?.tags?.latest))\n .pop()?.version;\n if (stableMatchingVersion) {\n logger.debug(\n { toolName, constraint, resolvedVersion: stableMatchingVersion },\n 'Resolved stable matching version',\n );\n return stableMatchingVersion;\n }\n\n const unstableMatchingVersion = matchingReleases.pop()?.version;\n if (unstableMatchingVersion) {\n logger.debug(\n { toolName, constraint, resolvedVersion: unstableMatchingVersion },\n 'Resolved unstable matching version',\n );\n return unstableMatchingVersion;\n }\n\n const stableVersion = releases\n .filter((r) => isStable(r.version, versioning, pkgReleases?.tags?.latest))\n .pop()?.version;\n if (stableVersion) {\n logger.warn(\n { toolName, constraint, stableVersion },\n 'No matching tool versions found for constraint - using latest stable version',\n );\n }\n\n const highestVersion = releases.pop()!.version;\n logger.warn(\n { toolName, constraint, highestVersion },\n 'No matching or stable tool versions found - using an unstable version',\n );\n return highestVersion;\n}\n\n// Docker execs run in a fresh `--rm` container each time, so `memoize` must\n// stay false there - only the persistent-host (binarySource=install) path\n// can safely skip a tool whose requested version is already active.\n// `install-tool` also activates the version it installs, so the memo tracks\n// the active version per tool, not every installed version.\nexport async function generateInstallCommands(\n toolConstraints: Opt<ToolConstraint[]>,\n memoize = false,\n): Promise<string[]> {\n const installCommands: string[] = [];\n if (toolConstraints?.length) {\n // Parents are listed before their tools (e.g. node before npm),\n // so a tool is matched against its parent's already resolved version.\n const resolvedTools: Partial<Record<ToolName, string>> = {};\n for (const toolConstraint of toolConstraints) {\n const { toolName } = toolConstraint;\n const { parent }: ToolMetadata = tools[toolName];\n const parentConstraint: Partial<Record<ConstraintName, string>> = {};\n if (isToolName(parent) && resolvedTools[parent]) {\n parentConstraint[parent] = resolvedTools[parent];\n }\n const toolVersion = await resolveConstraint(\n toolConstraint,\n parentConstraint,\n );\n resolvedTools[toolName] = toolVersion;\n if (memoize) {\n const cacheKey = buildCacheKey('containerbase-active', toolName);\n if (memCache.get<string | undefined>(cacheKey) === toolVersion) {\n continue;\n }\n memCache.set(cacheKey, toolVersion);\n }\n const installCommand = `install-tool ${toolName} ${quote(toolVersion)}`;\n installCommands.push(installCommand);\n }\n }\n return installCommands;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"containerbase.js","names":["memCache.get"],"sources":["../../../lib/util/exec/containerbase.ts"],"sourcesContent":["import {\n type ToolMetadata,\n isContainerbase,\n tools,\n} from '@renovatebot/base-image';\nimport { isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { GlobalConfig } from '../../config/global.ts';\nimport { logger } from '../../logger/index.ts';\nimport type { ReleaseResult } from '../../modules/datasource/index.ts';\nimport type { VersioningApi } from '../../modules/versioning/types.ts';\nimport { coerceArray } from '../array.ts';\nimport * as memCache from '../cache/memory/index.ts';\nimport { buildCacheKey } from '../cache/package/key.ts';\nimport { regEx } from '../regex.ts';\nimport {\n type ConstraintName,\n type Opt,\n type ToolConfig,\n type ToolConstraint,\n type ToolName,\n isToolName,\n} from './types.ts';\n\n/**\n * A subset of Containerbase tools that are supported by Renovate to look up version numbers for.\n */\nexport const allToolConfig: Partial<Record<ToolName, ToolConfig>> = {\n apm: {\n datasource: 'github-releases',\n packageName: 'microsoft/apm',\n versioning: 'semver',\n extractVersion: '^v(?<version>.*)$',\n },\n bazelisk: {\n datasource: 'github-releases',\n packageName: 'bazelbuild/bazelisk',\n versioning: 'semver',\n },\n bun: {\n datasource: 'github-releases',\n packageName: 'oven-sh/bun',\n extractVersion: '^bun-v(?<version>.*)$',\n versioning: 'npm',\n },\n bundler: {\n datasource: 'rubygems',\n packageName: 'bundler',\n versioning: 'ruby',\n },\n cocoapods: {\n datasource: 'rubygems',\n packageName: 'cocoapods',\n versioning: 'ruby',\n },\n composer: {\n datasource: 'github-releases',\n packageName: 'containerbase/composer-prebuild',\n versioning: 'composer',\n },\n conan: {\n datasource: 'pypi',\n packageName: 'conan',\n versioning: 'pep440',\n },\n copier: {\n datasource: 'pypi',\n packageName: 'copier',\n versioning: 'pep440',\n },\n corepack: {\n datasource: 'npm',\n packageName: 'corepack',\n versioning: 'npm',\n },\n deno: {\n datasource: 'github-releases',\n packageName: 'denoland/deno',\n versioning: 'deno',\n },\n devbox: {\n datasource: 'github-releases',\n packageName: 'jetify-com/devbox',\n versioning: 'semver',\n },\n dotnet: {\n datasource: 'dotnet-version',\n packageName: 'dotnet-sdk',\n versioning: 'semver',\n },\n erlang: {\n datasource: 'github-releases',\n packageName: 'containerbase/erlang-prebuild',\n versioning: 'semver-coerced',\n },\n elixir: {\n datasource: 'github-releases',\n packageName: 'elixir-lang/elixir',\n versioning: 'semver',\n },\n flux: {\n datasource: 'github-releases',\n packageName: 'fluxcd/flux2',\n versioning: 'semver',\n },\n gh: {\n datasource: 'github-releases',\n packageName: 'cli/cli',\n versioning: 'semver',\n },\n gleam: {\n datasource: 'github-releases',\n packageName: 'gleam-lang/gleam',\n versioning: 'semver',\n },\n golang: {\n datasource: 'github-releases',\n packageName: 'containerbase/golang-prebuild',\n versioning: 'npm',\n },\n gradle: {\n datasource: 'gradle-version',\n packageName: 'gradle',\n versioning: 'gradle',\n },\n hashin: {\n datasource: 'pypi',\n packageName: 'hashin',\n versioning: 'pep440',\n },\n helm: {\n datasource: 'github-releases',\n packageName: 'helm/helm',\n versioning: 'semver',\n },\n helmfile: {\n datasource: 'github-releases',\n packageName: 'helmfile/helmfile',\n versioning: 'semver',\n },\n java: {\n datasource: 'java-version',\n packageName: 'java?system=true',\n versioning: 'npm',\n },\n jb: {\n datasource: 'github-releases',\n packageName: 'containerbase/jb-prebuild',\n versioning: 'loose',\n },\n kustomize: {\n datasource: 'github-releases',\n packageName: 'kubernetes-sigs/kustomize',\n extractVersion: '^kustomize/v(?<version>.*)$',\n versioning: 'semver',\n },\n maven: {\n datasource: 'github-releases',\n packageName: 'containerbase/maven-prebuild',\n versioning: 'maven',\n },\n mise: {\n datasource: 'github-releases',\n packageName: 'jdx/mise',\n versioning: 'npm',\n },\n nix: {\n datasource: 'github-releases',\n packageName: 'containerbase/nix-prebuild',\n versioning: 'semver',\n },\n node: {\n datasource: 'github-releases',\n packageName: 'containerbase/node-prebuild',\n versioning: 'node',\n },\n npm: {\n datasource: 'npm',\n packageName: 'npm',\n versioning: 'npm',\n },\n pdm: {\n datasource: 'github-releases',\n packageName: 'pdm-project/pdm',\n versioning: 'semver',\n },\n php: {\n datasource: 'github-releases',\n packageName: 'containerbase/php-prebuild',\n versioning: 'composer',\n },\n 'pip-tools': {\n datasource: 'pypi',\n packageName: 'pip-tools',\n versioning: 'pep440',\n },\n pipenv: {\n datasource: 'pypi',\n packageName: 'pipenv',\n versioning: 'pep440',\n },\n pnpm: {\n datasource: 'npm',\n packageName: 'pnpm',\n versioning: 'npm',\n },\n pixi: {\n datasource: 'github-releases',\n packageName: 'prefix-dev/pixi',\n versioning: 'conda',\n extractVersion: '^v(?<version>.*)$',\n },\n poetry: {\n datasource: 'pypi',\n packageName: 'poetry',\n versioning: 'pep440',\n },\n python: {\n datasource: 'github-releases',\n packageName: 'containerbase/python-prebuild',\n versioning: 'python',\n },\n ruby: {\n datasource: 'github-releases',\n packageName: 'containerbase/ruby-prebuild',\n versioning: 'ruby',\n },\n rust: {\n datasource: 'rust-version',\n packageName: 'rust',\n versioning: 'rust-release-channel',\n },\n uv: {\n datasource: 'pypi',\n packageName: 'uv',\n versioning: 'pep440',\n },\n yarn: {\n datasource: 'npm',\n packageName: 'yarn',\n versioning: 'npm',\n },\n 'yarn-slim': {\n datasource: 'npm',\n packageName: 'yarn',\n versioning: 'npm',\n },\n dart: {\n datasource: 'dart-version',\n packageName: 'dart',\n versioning: 'npm',\n },\n flutter: {\n datasource: 'github-releases',\n packageName: 'containerbase/flutter-prebuild',\n versioning: 'npm',\n },\n vendir: {\n datasource: 'github-releases',\n packageName: 'carvel-dev/vendir',\n versioning: 'semver',\n },\n} as const;\n\n/**\n * All Containerbase `tool`s that Renovate supports configuring the version of.\n */\nexport function getSupportedToolNames(): readonly ToolName[] {\n return Object.keys(allToolConfig) as readonly ToolName[];\n}\n\nlet _getPkgReleases: Promise<\n typeof import('../../modules/datasource/index.ts')\n> | null = null;\n\nasync function getPkgReleases(\n toolConfig: ToolConfig,\n resolvedTools: Partial<Record<ConstraintName, string>> = {},\n): Promise<ReleaseResult | null> {\n _getPkgReleases ??= import('../../modules/datasource/index.ts');\n const { getPkgReleases } = await _getPkgReleases;\n if (Object.keys(resolvedTools).length) {\n // drop releases whose runtime constraints (e.g. `engines.node`) exclude the runtime versions we install\n const compatible = await getPkgReleases({\n ...toolConfig,\n constraintsFiltering: 'strict',\n constraints: { ...resolvedTools },\n });\n if (compatible?.releases.length) {\n return compatible;\n }\n logger.debug(\n { toolConfig, resolvedTools },\n 'No tool releases compatible with resolved tools - ignoring their constraints',\n );\n }\n return getPkgReleases(toolConfig);\n}\n\nexport function getToolConfig(toolName: ToolName): ToolConfig | undefined {\n return allToolConfig[toolName];\n}\n\nexport function supportsDynamicInstall(toolName: ToolName): boolean {\n return !!allToolConfig[toolName];\n}\n\nexport function isDynamicInstall(\n toolConstraints?: Opt<ToolConstraint[]>,\n): boolean {\n if (GlobalConfig.get('binarySource') !== 'install') {\n return false;\n }\n if (!isContainerbase()) {\n logger.debug('Falling back to binarySource=global');\n return false;\n }\n return (\n !toolConstraints ||\n toolConstraints.every((toolConstraint) =>\n supportsDynamicInstall(toolConstraint.toolName),\n )\n );\n}\n\nfunction isStable(\n version: string,\n versioningApi: VersioningApi,\n latest?: string,\n): boolean {\n if (!versioningApi.isStable(version)) {\n return false;\n }\n if (isString(latest) && versioningApi.isGreaterThan(version, latest)) {\n return false;\n }\n return true;\n}\n\nexport async function resolveConstraint(\n toolConstraint: ToolConstraint,\n resolvedTools: Partial<Record<ConstraintName, string>> = {},\n): Promise<string> {\n const { toolName } = toolConstraint;\n const toolConfig = allToolConfig[toolName];\n if (!toolConfig) {\n throw new Error(`Invalid tool to install: ${toolName}`);\n }\n\n const { get: getVersioning } =\n await import('../../modules/versioning/index.ts');\n const versioning = getVersioning(toolConfig.versioning);\n let constraint = toolConstraint.constraint;\n if (constraint) {\n if (versioning.isValid(constraint)) {\n if (versioning.isSingleVersion(constraint)) {\n return constraint.replace(regEx(/^=+/), '').trim();\n }\n } else {\n logger.warn(\n { toolName, constraint, versioning: toolConfig.versioning },\n 'Invalid tool constraint',\n );\n constraint = undefined;\n }\n }\n\n const pkgReleases = await getPkgReleases(toolConfig, resolvedTools);\n const releases = coerceArray(pkgReleases?.releases);\n\n if (!releases?.length) {\n logger.warn({ toolConfig }, 'No tool releases found.');\n throw new Error('No tool releases found.');\n }\n\n const matchingReleases = releases.filter(\n (r) => !constraint || versioning.matches(r.version, constraint),\n );\n\n const stableMatchingVersion = matchingReleases\n .filter((r) => isStable(r.version, versioning, pkgReleases?.tags?.latest))\n .pop()?.version;\n if (stableMatchingVersion) {\n logger.debug(\n { toolName, constraint, resolvedVersion: stableMatchingVersion },\n 'Resolved stable matching version',\n );\n return stableMatchingVersion;\n }\n\n const unstableMatchingVersion = matchingReleases.pop()?.version;\n if (unstableMatchingVersion) {\n logger.debug(\n { toolName, constraint, resolvedVersion: unstableMatchingVersion },\n 'Resolved unstable matching version',\n );\n return unstableMatchingVersion;\n }\n\n const stableVersion = releases\n .filter((r) => isStable(r.version, versioning, pkgReleases?.tags?.latest))\n .pop()?.version;\n if (stableVersion) {\n logger.warn(\n { toolName, constraint, stableVersion },\n 'No matching tool versions found for constraint - using latest stable version',\n );\n }\n\n const highestVersion = releases.pop()!.version;\n logger.warn(\n { toolName, constraint, highestVersion },\n 'No matching or stable tool versions found - using an unstable version',\n );\n return highestVersion;\n}\n\n// Docker execs run in a fresh `--rm` container each time, so `memoize` must\n// stay false there - only the persistent-host (binarySource=install) path\n// can safely skip a tool whose requested version is already active.\n// `install-tool` also activates the version it installs, so the memo tracks\n// the active version per tool, not every installed version.\nexport async function generateInstallCommands(\n toolConstraints: Opt<ToolConstraint[]>,\n memoize = false,\n): Promise<string[]> {\n const installCommands: string[] = [];\n if (toolConstraints?.length) {\n // Parents are listed before their tools (e.g. node before npm),\n // so a tool is matched against its parent's already resolved version.\n const resolvedTools: Partial<Record<ToolName, string>> = {};\n for (const toolConstraint of toolConstraints) {\n const { toolName } = toolConstraint;\n const { parent }: ToolMetadata = tools[toolName];\n const parentConstraint: Partial<Record<ConstraintName, string>> = {};\n if (isToolName(parent) && resolvedTools[parent]) {\n parentConstraint[parent] = resolvedTools[parent];\n }\n const toolVersion = await resolveConstraint(\n toolConstraint,\n parentConstraint,\n );\n resolvedTools[toolName] = toolVersion;\n if (memoize) {\n const cacheKey = buildCacheKey('containerbase-active', toolName);\n if (memCache.get<string | undefined>(cacheKey) === toolVersion) {\n continue;\n }\n memCache.set(cacheKey, toolVersion);\n }\n const installCommand = `install-tool ${toolName} ${quote(toolVersion)}`;\n installCommands.push(installCommand);\n }\n }\n return installCommands;\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": "44.179.2",
4
+ "version": "44.180.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 44.179.2 config files (https://renovatebot.com/)",
3
+ "title": "JSON schema for Renovate 44.180.0 config files (https://renovatebot.com/)",
4
4
  "$schema": "http://json-schema.org/draft-07/schema#",
5
- "x-renovate-version": "44.179.2",
5
+ "x-renovate-version": "44.180.0",
6
6
  "allowComments": true,
7
7
  "type": "object",
8
8
  "definitions": {