renovate 44.61.0 → 44.61.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/migration.js +1 -1
- package/dist/config/migration.js.map +1 -1
- package/dist/config/migrations/custom/schedule-migration.js +8 -8
- package/dist/config/migrations/custom/schedule-migration.js.map +1 -1
- package/dist/config/options/env.js +1 -1
- package/dist/config/options/env.js.map +1 -1
- package/dist/config/parse.js +1 -1
- package/dist/config/parse.js.map +1 -1
- package/dist/config/presets/parse.js +1 -1
- package/dist/config/presets/parse.js.map +1 -1
- package/dist/config/validation.js +1 -1
- package/dist/config/validation.js.map +1 -1
- package/dist/logger/utils.js +2 -2
- package/dist/logger/utils.js.map +1 -1
- package/dist/modules/datasource/deno/index.js +1 -1
- package/dist/modules/datasource/deno/index.js.map +1 -1
- package/dist/modules/datasource/docker/ecr.js +1 -1
- package/dist/modules/datasource/docker/ecr.js.map +1 -1
- package/dist/modules/datasource/docker/google.js +1 -1
- package/dist/modules/datasource/docker/google.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/goproxy-parser.js +1 -1
- package/dist/modules/datasource/go/goproxy-parser.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/gradle-version/index.js +1 -1
- package/dist/modules/datasource/gradle-version/index.js.map +1 -1
- package/dist/modules/datasource/helm/schema.js +2 -2
- package/dist/modules/datasource/helm/schema.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/npm/get.js +1 -1
- package/dist/modules/datasource/npm/get.js.map +1 -1
- package/dist/modules/datasource/npm/npmrc.js +1 -1
- package/dist/modules/datasource/npm/npmrc.js.map +1 -1
- package/dist/modules/datasource/pypi/common.js +2 -2
- package/dist/modules/datasource/pypi/common.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/manager/ansible/extract.js +2 -2
- package/dist/modules/manager/ansible/extract.js.map +1 -1
- package/dist/modules/manager/ansible-galaxy/collections.js +2 -2
- package/dist/modules/manager/ansible-galaxy/collections.js.map +1 -1
- package/dist/modules/manager/ansible-galaxy/roles.js +2 -2
- package/dist/modules/manager/ansible-galaxy/roles.js.map +1 -1
- package/dist/modules/manager/ansible-galaxy/util.js +4 -4
- package/dist/modules/manager/ansible-galaxy/util.js.map +1 -1
- package/dist/modules/manager/ant/properties.js +9 -9
- package/dist/modules/manager/ant/properties.js.map +1 -1
- package/dist/modules/manager/asdf/extract.js +1 -1
- package/dist/modules/manager/asdf/extract.js.map +1 -1
- package/dist/modules/manager/asdf/upgradeable-tooling.js +1 -1
- package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
- package/dist/modules/manager/batect-wrapper/extract.js +2 -2
- package/dist/modules/manager/batect-wrapper/extract.js.map +1 -1
- package/dist/modules/manager/bazel/rules/go.js +1 -1
- package/dist/modules/manager/bazel/rules/go.js.map +1 -1
- package/dist/modules/manager/buildkite/extract.js +1 -1
- package/dist/modules/manager/buildkite/extract.js.map +1 -1
- package/dist/modules/manager/buildpacks/extract.js +1 -1
- package/dist/modules/manager/buildpacks/extract.js.map +1 -1
- package/dist/modules/manager/bundler/common.js +7 -7
- package/dist/modules/manager/bundler/common.js.map +1 -1
- package/dist/modules/manager/bundler/extract.js +4 -4
- package/dist/modules/manager/bundler/extract.js.map +1 -1
- package/dist/modules/manager/deno/utils.js +1 -1
- package/dist/modules/manager/deno/utils.js.map +1 -1
- package/dist/modules/manager/dockerfile/extract.js +11 -4
- package/dist/modules/manager/dockerfile/extract.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +4 -4
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/flux/extract.js +2 -1
- package/dist/modules/manager/flux/extract.js.map +1 -1
- package/dist/modules/manager/git-submodules/extract.js +1 -1
- package/dist/modules/manager/git-submodules/extract.js.map +1 -1
- package/dist/modules/manager/github-actions/common.js +3 -3
- package/dist/modules/manager/github-actions/common.js.map +1 -1
- package/dist/modules/manager/github-actions/parse.js +1 -1
- package/dist/modules/manager/github-actions/parse.js.map +1 -1
- package/dist/modules/manager/gomod/artifacts.js +4 -4
- package/dist/modules/manager/gomod/artifacts.js.map +1 -1
- package/dist/modules/manager/gomod/line-parser.js +1 -1
- package/dist/modules/manager/gomod/line-parser.js.map +1 -1
- package/dist/modules/manager/gomod/update.js +1 -1
- package/dist/modules/manager/gomod/update.js.map +1 -1
- package/dist/modules/manager/gradle/parser/handlers.js +1 -1
- package/dist/modules/manager/gradle/parser/handlers.js.map +1 -1
- package/dist/modules/manager/helmv3/utils.js +1 -1
- package/dist/modules/manager/helmv3/utils.js.map +1 -1
- package/dist/modules/manager/html/extract.js +2 -2
- package/dist/modules/manager/html/extract.js.map +1 -1
- package/dist/modules/manager/kustomize/extract.js +3 -3
- package/dist/modules/manager/kustomize/extract.js.map +1 -1
- package/dist/modules/manager/leiningen/extract.js +1 -1
- package/dist/modules/manager/leiningen/extract.js.map +1 -1
- package/dist/modules/manager/maven-wrapper/artifacts.js +6 -6
- package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
- package/dist/modules/manager/meteor/extract.js +2 -2
- package/dist/modules/manager/meteor/extract.js.map +1 -1
- package/dist/modules/manager/mise/upgradeable-tooling.js +2 -2
- package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
- package/dist/modules/manager/mix/extract.js +3 -3
- package/dist/modules/manager/mix/extract.js.map +1 -1
- package/dist/modules/manager/npm/extract/common/dependency.js +4 -4
- package/dist/modules/manager/npm/extract/common/dependency.js.map +1 -1
- package/dist/modules/manager/npm/extract/yarnrc.js +1 -1
- package/dist/modules/manager/npm/extract/yarnrc.js.map +1 -1
- package/dist/modules/manager/npm/npmrc.js +1 -1
- package/dist/modules/manager/npm/npmrc.js.map +1 -1
- package/dist/modules/manager/npm/post-update/yarn.js +1 -1
- package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/package-lock/dep-constraints.js +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/package-lock/dep-constraints.js.map +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js.map +1 -1
- package/dist/modules/manager/nuget/extract.js +1 -1
- package/dist/modules/manager/nuget/extract.js.map +1 -1
- package/dist/modules/manager/pep621/utils.js +1 -1
- package/dist/modules/manager/pep621/utils.js.map +1 -1
- package/dist/modules/manager/pep723/utils.js +1 -1
- package/dist/modules/manager/pep723/utils.js.map +1 -1
- package/dist/modules/manager/pip-compile/common.js +2 -2
- package/dist/modules/manager/pip-compile/common.js.map +1 -1
- package/dist/modules/manager/pip_requirements/common.js +1 -1
- package/dist/modules/manager/pip_requirements/common.js.map +1 -1
- package/dist/modules/manager/pip_requirements/extract.js +1 -1
- package/dist/modules/manager/pip_requirements/extract.js.map +1 -1
- package/dist/modules/manager/poetry/artifacts.js +4 -4
- package/dist/modules/manager/poetry/artifacts.js.map +1 -1
- package/dist/modules/manager/puppet/puppetfile-parser.js +5 -5
- package/dist/modules/manager/puppet/puppetfile-parser.js.map +1 -1
- package/dist/modules/manager/sbt/update.js +1 -1
- package/dist/modules/manager/sbt/update.js.map +1 -1
- package/dist/modules/manager/sbt/util.js +2 -2
- package/dist/modules/manager/sbt/util.js.map +1 -1
- package/dist/modules/manager/setup-cfg/extract.js +2 -2
- package/dist/modules/manager/setup-cfg/extract.js.map +1 -1
- package/dist/modules/manager/swift/artifacts.js +4 -4
- package/dist/modules/manager/swift/artifacts.js.map +1 -1
- package/dist/modules/manager/swift/extract.js +1 -1
- package/dist/modules/manager/swift/extract.js.map +1 -1
- package/dist/modules/manager/tekton/extract.js +1 -1
- package/dist/modules/manager/tekton/extract.js.map +1 -1
- package/dist/modules/manager/terraform/extractors/others/modules.js +5 -5
- package/dist/modules/manager/terraform/extractors/others/modules.js.map +1 -1
- package/dist/modules/manager/terraform/util.js +1 -1
- package/dist/modules/manager/terraform/util.js.map +1 -1
- package/dist/modules/manager/terragrunt/modules.js +3 -3
- package/dist/modules/manager/terragrunt/modules.js.map +1 -1
- package/dist/modules/platform/azure/azure-got-wrapper.js +15 -5
- package/dist/modules/platform/azure/azure-got-wrapper.js.map +1 -1
- package/dist/modules/platform/azure/index.js +28 -8
- package/dist/modules/platform/azure/index.js.map +1 -1
- package/dist/modules/platform/azure/types.js.map +1 -1
- package/dist/modules/platform/bitbucket/index.js +4 -4
- package/dist/modules/platform/bitbucket/index.js.map +1 -1
- package/dist/modules/platform/bitbucket-server/index.js +1 -1
- package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
- package/dist/modules/platform/gerrit/index.js +1 -1
- package/dist/modules/platform/gerrit/index.js.map +1 -1
- package/dist/modules/platform/gerrit/utils.js +3 -3
- package/dist/modules/platform/gerrit/utils.js.map +1 -1
- package/dist/modules/versioning/apk/index.js +3 -3
- package/dist/modules/versioning/apk/index.js.map +1 -1
- package/dist/modules/versioning/composer/index.js +11 -11
- package/dist/modules/versioning/composer/index.js.map +1 -1
- package/dist/modules/versioning/conan/range.js +1 -1
- package/dist/modules/versioning/conan/range.js.map +1 -1
- package/dist/modules/versioning/conda/index.js +1 -1
- package/dist/modules/versioning/conda/index.js.map +1 -1
- package/dist/modules/versioning/devbox/index.js +2 -2
- package/dist/modules/versioning/devbox/index.js.map +1 -1
- package/dist/modules/versioning/distro.js +1 -1
- package/dist/modules/versioning/distro.js.map +1 -1
- package/dist/modules/versioning/github-actions/index.js +2 -2
- package/dist/modules/versioning/github-actions/index.js.map +1 -1
- package/dist/modules/versioning/go-mod-directive/index.js +1 -1
- package/dist/modules/versioning/go-mod-directive/index.js.map +1 -1
- package/dist/modules/versioning/hashicorp/convertor.js +5 -5
- package/dist/modules/versioning/hashicorp/convertor.js.map +1 -1
- package/dist/modules/versioning/hex/index.js +4 -4
- package/dist/modules/versioning/hex/index.js.map +1 -1
- package/dist/modules/versioning/lambda-node/schedule.js +2 -2
- package/dist/modules/versioning/lambda-node/schedule.js.map +1 -1
- package/dist/modules/versioning/loose/index.js +2 -2
- package/dist/modules/versioning/loose/index.js.map +1 -1
- package/dist/modules/versioning/pep440/range.js +1 -1
- package/dist/modules/versioning/pep440/range.js.map +1 -1
- package/dist/modules/versioning/perl/index.js +4 -4
- package/dist/modules/versioning/perl/index.js.map +1 -1
- package/dist/modules/versioning/poetry/patterns.js +1 -1
- package/dist/modules/versioning/poetry/patterns.js.map +1 -1
- package/dist/modules/versioning/poetry/transform.js +3 -3
- package/dist/modules/versioning/poetry/transform.js.map +1 -1
- package/dist/modules/versioning/redhat/index.js +1 -1
- package/dist/modules/versioning/redhat/index.js.map +1 -1
- package/dist/modules/versioning/rpm/index.js +1 -1
- package/dist/modules/versioning/rpm/index.js.map +1 -1
- package/dist/modules/versioning/ruby/index.js +2 -2
- package/dist/modules/versioning/ruby/index.js.map +1 -1
- package/dist/modules/versioning/semver/common.js +1 -1
- package/dist/modules/versioning/semver/common.js.map +1 -1
- package/dist/modules/versioning/swift/range.js +13 -13
- package/dist/modules/versioning/swift/range.js.map +1 -1
- package/dist/modules/versioning/ubuntu/index.js +1 -1
- package/dist/modules/versioning/ubuntu/index.js.map +1 -1
- package/dist/modules/versioning/unity3d-packages/index.js +2 -2
- package/dist/modules/versioning/unity3d-packages/index.js.map +1 -1
- package/dist/util/cache/package/impl/redis.js +1 -1
- package/dist/util/cache/package/impl/redis.js.map +1 -1
- package/dist/util/exec/common.js +3 -3
- package/dist/util/exec/common.js.map +1 -1
- package/dist/util/git/author.js +1 -1
- package/dist/util/git/author.js.map +1 -1
- package/dist/util/git/semantic.js +1 -1
- package/dist/util/git/semantic.js.map +1 -1
- package/dist/util/http/www-authenticate.js +4 -4
- package/dist/util/http/www-authenticate.js.map +1 -1
- package/dist/util/ignore.js +1 -1
- package/dist/util/ignore.js.map +1 -1
- package/dist/util/markdown.js +8 -8
- package/dist/util/markdown.js.map +1 -1
- package/dist/util/pretty-time.js +3 -3
- package/dist/util/pretty-time.js.map +1 -1
- package/dist/util/regex.js +1 -1
- package/dist/util/regex.js.map +1 -1
- package/dist/workers/global/config/parse/cli.js +1 -1
- package/dist/workers/global/config/parse/cli.js.map +1 -1
- package/dist/workers/repository/model/semantic-commit-message.js +1 -1
- package/dist/workers/repository/model/semantic-commit-message.js.map +1 -1
- package/dist/workers/repository/onboarding/pr/pr-list.js +2 -2
- package/dist/workers/repository/onboarding/pr/pr-list.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/release-notes.js +3 -3
- package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
- package/dist/workers/repository/updates/branch-name.js +1 -1
- package/dist/workers/repository/updates/branch-name.js.map +1 -1
- package/dist/workers/repository/updates/flatten.js +1 -1
- package/dist/workers/repository/updates/flatten.js.map +1 -1
- package/dist/workers/repository/updates/generate.js +1 -1
- package/dist/workers/repository/updates/generate.js.map +1 -1
- package/package.json +2 -2
- package/renovate-schema.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","names":["valid","major","isValid"],"sources":["../../../../lib/modules/manager/gomod/artifacts.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport semver from 'semver';\nimport { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { getEnv } from '../../../util/env.ts';\nimport type { ExecOptions } from '../../../util/exec/types.ts';\nimport { filterMap } from '../../../util/filter-map.ts';\nimport {\n ensureCacheDir,\n findLocalSiblingOrParent,\n isValidLocalPath,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { withGitEnvironment } from '../../../util/git/exec.ts';\nimport { getRepoStatus } from '../../../util/git/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { isValid } from '../../versioning/semver/index.ts';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsConfig,\n UpdateArtifactsResult,\n} from '../types.ts';\nimport { getExtraDepsNotice } from './artifacts-extra.ts';\nimport { getGoModulesInTidyOrder } from './package-tree.ts';\n\nconst { major, valid } = semver;\nconst gitExec = withGitEnvironment(['go']);\n\nfunction getUpdateImportPathCmds(\n updatedDeps: PackageDependency[],\n { constraints }: UpdateArtifactsConfig,\n): string[] {\n // Check if we fail to parse any major versions and log that they're skipped\n const invalidMajorDeps = updatedDeps.filter(\n ({ newVersion }) => !valid(newVersion),\n );\n if (invalidMajorDeps.length > 0) {\n invalidMajorDeps.forEach(({ depName }) =>\n logger.warn(\n { depName },\n 'Ignoring dependency: Could not get major version',\n ),\n );\n }\n\n const updateImportCommands = updatedDeps\n .filter(\n ({ newVersion }) =>\n valid(newVersion) && !newVersion!.endsWith('+incompatible'),\n )\n .map(({ depName, newVersion }) => ({\n depName: depName!,\n newMajor: major(newVersion!),\n }))\n // Skip path updates going from v0 to v1\n .filter(\n ({ depName, newMajor }) =>\n depName.startsWith('gopkg.in/') || newMajor > 1,\n )\n\n .map(\n ({ depName, newMajor }) =>\n `mod upgrade --mod-name=${quote(depName)} -t=${newMajor}`,\n );\n\n if (updateImportCommands.length > 0) {\n let installMarwanModArgs =\n 'install github.com/marwan-at-work/mod/cmd/mod@latest';\n const gomodModCompatibility = constraints?.gomodMod;\n if (gomodModCompatibility) {\n if (\n gomodModCompatibility.startsWith('v') &&\n isValid(gomodModCompatibility.replace(regEx(/^v/), ''))\n ) {\n installMarwanModArgs = installMarwanModArgs.replace(\n regEx(/@latest$/),\n `@${gomodModCompatibility}`,\n );\n } else {\n logger.debug(\n { gomodModCompatibility },\n 'marwan-at-work/mod compatibility range is not valid - skipping',\n );\n }\n } else {\n logger.debug(\n 'No marwan-at-work/mod compatibility range found - installing marwan-at-work/mod latest',\n );\n }\n updateImportCommands.unshift(`go ${installMarwanModArgs}`);\n }\n\n return updateImportCommands;\n}\n\nfunction useModcacherw(goVersion: string | undefined): boolean {\n if (!isString(goVersion)) {\n return true;\n }\n\n return semver.intersects(goVersion, `>=1.14`);\n}\n\nexport async function updateArtifacts({\n packageFileName: goModFileName,\n updatedDeps,\n newPackageFileContent: newGoModContent,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`gomod.updateArtifacts(${goModFileName})`);\n\n const sumFileName = goModFileName.replace(regEx(/\\.mod$/), '.sum');\n const existingGoSumContent = await readLocalFile(sumFileName);\n if (!existingGoSumContent) {\n logger.debug('No go.sum found');\n return null;\n }\n const goModDir = upath.dirname(goModFileName);\n const goModFileBaseName = upath.basename(goModFileName);\n const modFileFlag =\n goModFileBaseName === 'go.mod'\n ? ''\n : ` -modfile=${quote(goModFileBaseName)}`;\n\n // The \"vendor\" directory can be next to the go.mod, but also in the parent directory in case\n // the go workspaces are used.\n const vendorDir = await findLocalSiblingOrParent(goModFileName, 'vendor');\n const vendorModulesFileName = upath.join(vendorDir ?? '', 'modules.txt');\n const useVendor =\n !!config.postUpdateOptions?.includes('gomodVendor') ||\n (!config.postUpdateOptions?.includes('gomodSkipVendor') &&\n vendorDir &&\n (await readLocalFile(vendorModulesFileName)) !== null);\n let massagedGoMod = newGoModContent;\n const useGoGenerate = !!config.postUpdateOptions?.includes('goGenerate');\n const allowedUnsafeExecutions = GlobalConfig.get('allowedUnsafeExecutions');\n const goGenerateAllowed = allowedUnsafeExecutions?.includes('goGenerate');\n\n if (config.postUpdateOptions?.includes('gomodMassage')) {\n // Regex match inline replace directive, example:\n // replace golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5\n // https://go.dev/ref/mod#go-mod-file-replace\n\n // replace bracket after comments, so it doesn't break the regex, doing a complex regex causes problems\n // when there's a comment and \")\" after it, the regex will read replace block until comment.. and stop.\n massagedGoMod = massagedGoMod\n .split('\\n')\n .map((line) => {\n if (line.trim().startsWith('//')) {\n return line.replace(')', 'renovate-replace-bracket');\n }\n return line;\n })\n .join('\\n');\n\n const inlineReplaceRegEx = regEx(\n /(\\r?\\n)(replace\\s+[^\\s]+\\s+=>\\s+\\.\\.\\/.*)/g,\n );\n\n // $1 will be matched with the (\\r?n) group\n // $2 will be matched with the inline replace match, example\n // \"// renovate-replace replace golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5\"\n const inlineCommentOut = '$1// renovate-replace $2';\n\n // Regex match replace directive block, example:\n // replace (\n // golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5\n // )\n const blockReplaceRegEx = regEx(/(\\r?\\n)replace\\s*\\([^)]+\\s*\\)/g);\n\n /**\n * replacerFunction for commenting out replace blocks\n * @param match A string representing a golang replace directive block\n * @returns A commented out block with // renovate-replace\n */\n function blockCommentOut(match: string): string {\n return match.replace(regEx(/(\\r?\\n)/g), '$1// renovate-replace ');\n }\n\n // Comment out golang replace directives\n massagedGoMod = massagedGoMod\n .replace(inlineReplaceRegEx, inlineCommentOut)\n .replace(blockReplaceRegEx, blockCommentOut);\n\n if (massagedGoMod !== newGoModContent) {\n logger.debug(\n 'Removed some relative replace statements and comments from go.mod',\n );\n }\n }\n const goConstraints = deriveGoToolchainConstraints(config, newGoModContent);\n\n try {\n await writeLocalFile(goModFileName, massagedGoMod);\n\n const cmd = 'go';\n const env = getEnv();\n const execOptions: ExecOptions = {\n cwdFile: goModFileName,\n extraEnv: {\n GOPATH: await ensureCacheDir('go'),\n GOPROXY: env.GOPROXY,\n GOPRIVATE: env.GOPRIVATE,\n GONOPROXY: env.GONOPROXY,\n GONOSUMDB: env.GONOSUMDB,\n GOSUMDB: env.GOSUMDB,\n GOINSECURE: env.GOINSECURE,\n /* v8 ignore next -- TODO: add test */\n GOFLAGS: useModcacherw(goConstraints) ? '-modcacherw' : null,\n CGO_ENABLED: GlobalConfig.get('binarySource') === 'docker' ? '0' : null,\n },\n docker: {},\n toolConstraints: [\n {\n toolName: 'golang',\n constraint: goConstraints,\n },\n ],\n };\n\n const execCommands: string[] = [];\n\n let goGetDirs: string | undefined;\n if (config.goGetDirs) {\n goGetDirs = config.goGetDirs\n .filter((dir) => {\n const isValid = isValidLocalPath(dir);\n if (!isValid) {\n logger.warn({ dir }, 'Invalid path in goGetDirs');\n }\n return isValid;\n })\n .map(quote)\n .join(' ');\n\n if (goGetDirs === '') {\n throw new Error('Invalid goGetDirs');\n }\n }\n\n let args = `get${modFileFlag} `;\n\n if (goConstraints && !semver.intersects(goConstraints, `>=1.18`)) {\n // For Go versions < 1.18, we need to use the -d flag to avoid builds or installs\n // https://go.dev/doc/go1.18#go-get\n args += `-d `;\n }\n\n args += `-t ${goGetDirs ?? './...'}`;\n logger.trace({ cmd, args }, 'go get command included');\n execCommands.push(`${cmd} ${args}`);\n\n // Update import paths on major updates\n const isImportPathUpdateRequired =\n config.postUpdateOptions?.includes('gomodUpdateImportPaths') &&\n config.updateType === 'major';\n\n if (isImportPathUpdateRequired) {\n const updateImportCmds = getUpdateImportPathCmds(updatedDeps, config);\n if (updateImportCmds.length > 0) {\n logger.debug(updateImportCmds, 'update import path commands included');\n // The updates\n execCommands.push(...updateImportCmds);\n }\n }\n\n const mustSkipGoModTidy =\n !config.postUpdateOptions?.includes('gomodUpdateImportPaths') &&\n config.updateType === 'major';\n if (mustSkipGoModTidy) {\n logger.debug('go mod tidy command skipped');\n }\n\n let tidyOpts = '';\n if (config.postUpdateOptions?.includes('gomodTidy1.17')) {\n tidyOpts += ' -compat=1.17';\n }\n if (config.postUpdateOptions?.includes('gomodTidyE')) {\n tidyOpts += ' -e';\n }\n\n // dependent modules can only be tidied once the updated module is settled\n const isGoModTidyAllRequired =\n config.postUpdateOptions?.includes('gomodTidyAll') === true;\n const isGoModTidyRequired =\n !mustSkipGoModTidy &&\n (config.postUpdateOptions?.includes('gomodTidy') === true ||\n config.postUpdateOptions?.includes('gomodTidy1.17') === true ||\n config.postUpdateOptions?.includes('gomodTidyE') === true ||\n isGoModTidyAllRequired ||\n (config.updateType === 'major' && isImportPathUpdateRequired));\n if (isGoModTidyRequired) {\n args = `mod tidy${modFileFlag}${tidyOpts}`;\n logger.debug('go mod tidy command included');\n execCommands.push(`${cmd} ${args}`);\n }\n\n let goWorkSumFileName = upath.join(goModDir, 'go.work.sum');\n if (useVendor) {\n // If we find a go.work, then use go workspace vendoring.\n const goWorkFile = await findLocalSiblingOrParent(\n goModFileName,\n 'go.work',\n );\n\n if (goWorkFile) {\n goWorkSumFileName = upath.join(\n upath.dirname(goWorkFile),\n 'go.work.sum',\n );\n\n args = 'work vendor';\n logger.debug('using go work vendor');\n execCommands.push(`${cmd} ${args}`);\n\n args = 'work sync';\n logger.debug('using go work sync');\n execCommands.push(`${cmd} ${args}`);\n } else {\n args = `mod vendor${modFileFlag}`;\n logger.debug('using go mod vendor');\n execCommands.push(`${cmd} ${args}`);\n }\n\n if (isGoModTidyRequired) {\n args = `mod tidy${modFileFlag}${tidyOpts}`;\n logger.debug('go mod tidy command included');\n execCommands.push(`${cmd} ${args}`);\n }\n }\n\n // We tidy one more time as a solution for #6795\n if (isGoModTidyRequired) {\n args = `mod tidy${modFileFlag}${tidyOpts}`;\n logger.debug('go mod tidy command included');\n execCommands.push(`${cmd} ${args}`);\n }\n\n let dependentModules: string[] = [];\n if (isGoModTidyAllRequired) {\n try {\n dependentModules = await getGoModulesInTidyOrder(goModFileName);\n for (const dependent of dependentModules) {\n const dir = upath.relative(goModDir, upath.dirname(dependent));\n execCommands.push(`${cmd} -C ${quote(dir)} mod tidy${tidyOpts}`);\n }\n logger.debug({ dependentModules }, 'go mod tidy commands included');\n } catch (err) {\n logger.warn({ err }, 'Failed to find dependent Go modules');\n }\n }\n\n if (useGoGenerate) {\n if (goGenerateAllowed) {\n logger.debug('go generate command included');\n execCommands.push(`${cmd} generate ./...`);\n } else {\n logger.once.warn(\n `go generate command requested as a post update action, but goGenerate is not permitted in the allowedUnsafeExecutions`,\n );\n }\n }\n\n await gitExec(execCommands, execOptions);\n\n const status = await getRepoStatus();\n const dependentFiles = dependentModules.flatMap((f) => [\n f,\n f.replace(regEx(/\\.mod$/), '.sum'),\n ]);\n\n if (\n !status.modified.includes(sumFileName) &&\n !status.modified.includes(goModFileName) &&\n !status.modified.includes(goWorkSumFileName) &&\n !dependentFiles.some((f) => status.modified.includes(f))\n ) {\n return null;\n }\n\n const res: UpdateArtifactsResult[] = [];\n if (status.modified.includes(sumFileName)) {\n logger.debug('Returning updated go.sum');\n res.push({\n file: {\n type: 'addition',\n path: sumFileName,\n contents: await readLocalFile(sumFileName),\n },\n });\n }\n\n if (status.modified.includes(goWorkSumFileName)) {\n logger.debug('Returning updated go.work.sum');\n res.push({\n file: {\n type: 'addition',\n path: goWorkSumFileName,\n contents: await readLocalFile(goWorkSumFileName),\n },\n });\n }\n\n for (const f of dependentFiles) {\n if (status.modified.includes(f)) {\n logger.trace(`Returning updated ${f}`);\n res.push({\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n });\n }\n }\n\n // Include all the .go file import changes\n if (isImportPathUpdateRequired) {\n logger.debug('Returning updated go source files for import path changes');\n for (const f of status.modified) {\n if (f.endsWith('.go')) {\n res.push({\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n });\n }\n }\n }\n\n const alreadyAdded = new Set<string>();\n const alreadyDeleted = new Set<string>();\n if (useVendor) {\n for (const f of status.modified.concat(status.not_added)) {\n if (vendorDir && f.startsWith(vendorDir)) {\n alreadyAdded.add(f);\n res.push({\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n });\n }\n }\n for (const f of coerceArray(status.deleted)) {\n if (vendorDir && f.startsWith(vendorDir)) {\n alreadyDeleted.add(f);\n res.push({\n file: {\n type: 'deletion',\n path: f,\n },\n });\n }\n }\n }\n\n // TODO: throws in tests (#22198)\n const finalGoModContent = (await readLocalFile(goModFileName, 'utf8'))!\n .replace(regEx(/\\/\\/ renovate-replace /g), '')\n .replace(regEx(/renovate-replace-bracket/g), ')');\n if (finalGoModContent !== newGoModContent) {\n const artifactResult: UpdateArtifactsResult = {\n file: {\n type: 'addition',\n path: goModFileName,\n contents: finalGoModContent,\n },\n };\n\n const updatedDepNames = filterMap(updatedDeps, (dep) => dep?.depName);\n const extraDepsNotice = getExtraDepsNotice(\n newGoModContent,\n finalGoModContent,\n updatedDepNames,\n config,\n );\n\n if (extraDepsNotice) {\n artifactResult.notice = {\n file: goModFileName,\n message: extraDepsNotice,\n };\n }\n\n logger.debug('Found updated go.mod after go.sum update');\n res.push(artifactResult);\n alreadyAdded.add(goModFileName);\n }\n\n // add all files added when in `go generate` mode.\n // unfortunately there is not a good way as there is with vendoring or go import path updates to detect this.\n // Do this at the very very end to ensure we only capture files which would have been explicitly\n // modified, added, or deleted from a `go generate` invocation\n if (useGoGenerate && goGenerateAllowed) {\n logger.debug(\n 'Updating all modified files since generated files were added',\n );\n for (const f of status.modified.concat(status.created)) {\n if (!alreadyAdded.has(f)) {\n res.push({\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n });\n }\n }\n for (const f of coerceArray(status.deleted)) {\n if (!alreadyDeleted.has(f)) {\n res.push({\n file: {\n type: 'deletion',\n path: f,\n },\n });\n }\n }\n }\n return res;\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update go.sum');\n return [\n {\n artifactError: {\n fileName: sumFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n\nfunction getGoConstraints(content: string): string | undefined {\n // prefer toolchain directive when go.mod has one\n const toolchainMatch = regEx(/^toolchain\\s*go(?<gover>\\d+\\.\\d+\\.\\d+)$/m).exec(\n content,\n );\n const toolchainVer = toolchainMatch?.groups?.gover;\n if (toolchainVer) {\n logger.debug(\n `Using go version ${toolchainVer} found in toolchain directive`,\n );\n return toolchainVer;\n }\n\n // If go.mod doesn't have toolchain directive and has a full go version spec,\n // for example `go 1.23.6`, pick this version, this doesn't match major.minor version spec.\n //\n // This is because when go.mod have same version defined in go directive and toolchain directive,\n // go will remove toolchain directive from go.mod.\n //\n // For example, go will rewrite `go 1.23.5\\ntoolchain go1.23.5` to `go 1.23.5` by default,\n // in this case, the go directive is the toolchain directive.\n const goFullVersion = regEx(/^go\\s*(?<gover>\\d+\\.\\d+\\.\\d+)$/m).exec(content)\n ?.groups?.gover;\n if (goFullVersion) {\n return goFullVersion;\n }\n\n const re = regEx(/^go\\s*(?<gover>\\d+\\.\\d+)$/m);\n const match = re.exec(content);\n if (!match?.groups?.gover) {\n return undefined;\n }\n return `^${match.groups.gover}`;\n}\n\n/**\n * Derive the version of the Go toolchain needed to run this project.\n *\n * This matches with the `golang` Containerbase tool.\n *\n * In precedence order:\n *\n * 1. config: \\`constraints.go\\`\n * 1. \\`go.mod\\`: \\`toolchain\\` directive\n * 1. \\`go.mod\\`: \\`go\\` directive\n *\n * NOTE that the \\`constraints.golang\\` is not used (TODO #42601)\n */\nexport function deriveGoToolchainConstraints(\n config: UpdateArtifactsConfig,\n newGoModContent: string,\n): string | undefined {\n return config.constraints?.go ?? getGoConstraints(newGoModContent);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artifacts.js","names":["valid","major","isValid"],"sources":["../../../../lib/modules/manager/gomod/artifacts.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport semver from 'semver';\nimport { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { getEnv } from '../../../util/env.ts';\nimport type { ExecOptions } from '../../../util/exec/types.ts';\nimport { filterMap } from '../../../util/filter-map.ts';\nimport {\n ensureCacheDir,\n findLocalSiblingOrParent,\n isValidLocalPath,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { withGitEnvironment } from '../../../util/git/exec.ts';\nimport { getRepoStatus } from '../../../util/git/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { isValid } from '../../versioning/semver/index.ts';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsConfig,\n UpdateArtifactsResult,\n} from '../types.ts';\nimport { getExtraDepsNotice } from './artifacts-extra.ts';\nimport { getGoModulesInTidyOrder } from './package-tree.ts';\n\nconst { major, valid } = semver;\nconst gitExec = withGitEnvironment(['go']);\n\nfunction getUpdateImportPathCmds(\n updatedDeps: PackageDependency[],\n { constraints }: UpdateArtifactsConfig,\n): string[] {\n // Check if we fail to parse any major versions and log that they're skipped\n const invalidMajorDeps = updatedDeps.filter(\n ({ newVersion }) => !valid(newVersion),\n );\n if (invalidMajorDeps.length > 0) {\n invalidMajorDeps.forEach(({ depName }) =>\n logger.warn(\n { depName },\n 'Ignoring dependency: Could not get major version',\n ),\n );\n }\n\n const updateImportCommands = updatedDeps\n .filter(\n ({ newVersion }) =>\n valid(newVersion) && !newVersion!.endsWith('+incompatible'),\n )\n .map(({ depName, newVersion }) => ({\n depName: depName!,\n newMajor: major(newVersion!),\n }))\n // Skip path updates going from v0 to v1\n .filter(\n ({ depName, newMajor }) =>\n depName.startsWith('gopkg.in/') || newMajor > 1,\n )\n\n .map(\n ({ depName, newMajor }) =>\n `mod upgrade --mod-name=${quote(depName)} -t=${newMajor}`,\n );\n\n if (updateImportCommands.length > 0) {\n let installMarwanModArgs =\n 'install github.com/marwan-at-work/mod/cmd/mod@latest';\n const gomodModCompatibility = constraints?.gomodMod;\n if (gomodModCompatibility) {\n if (\n gomodModCompatibility.startsWith('v') &&\n isValid(gomodModCompatibility.replace(regEx(/^v/), ''))\n ) {\n installMarwanModArgs = installMarwanModArgs.replace(\n regEx(/@latest$/),\n `@${gomodModCompatibility}`,\n );\n } else {\n logger.debug(\n { gomodModCompatibility },\n 'marwan-at-work/mod compatibility range is not valid - skipping',\n );\n }\n } else {\n logger.debug(\n 'No marwan-at-work/mod compatibility range found - installing marwan-at-work/mod latest',\n );\n }\n updateImportCommands.unshift(`go ${installMarwanModArgs}`);\n }\n\n return updateImportCommands;\n}\n\nfunction useModcacherw(goVersion: string | undefined): boolean {\n if (!isString(goVersion)) {\n return true;\n }\n\n return semver.intersects(goVersion, `>=1.14`);\n}\n\nexport async function updateArtifacts({\n packageFileName: goModFileName,\n updatedDeps,\n newPackageFileContent: newGoModContent,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`gomod.updateArtifacts(${goModFileName})`);\n\n const sumFileName = goModFileName.replace(regEx(/\\.mod$/), '.sum');\n const existingGoSumContent = await readLocalFile(sumFileName);\n if (!existingGoSumContent) {\n logger.debug('No go.sum found');\n return null;\n }\n const goModDir = upath.dirname(goModFileName);\n const goModFileBaseName = upath.basename(goModFileName);\n const modFileFlag =\n goModFileBaseName === 'go.mod'\n ? ''\n : ` -modfile=${quote(goModFileBaseName)}`;\n\n // The \"vendor\" directory can be next to the go.mod, but also in the parent directory in case\n // the go workspaces are used.\n const vendorDir = await findLocalSiblingOrParent(goModFileName, 'vendor');\n const vendorModulesFileName = upath.join(vendorDir ?? '', 'modules.txt');\n const useVendor =\n !!config.postUpdateOptions?.includes('gomodVendor') ||\n (!config.postUpdateOptions?.includes('gomodSkipVendor') &&\n vendorDir &&\n (await readLocalFile(vendorModulesFileName)) !== null);\n let massagedGoMod = newGoModContent;\n const useGoGenerate = !!config.postUpdateOptions?.includes('goGenerate');\n const allowedUnsafeExecutions = GlobalConfig.get('allowedUnsafeExecutions');\n const goGenerateAllowed = allowedUnsafeExecutions?.includes('goGenerate');\n\n if (config.postUpdateOptions?.includes('gomodMassage')) {\n // Regex match inline replace directive, example:\n // replace golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5\n // https://go.dev/ref/mod#go-mod-file-replace\n\n // replace bracket after comments, so it doesn't break the regex, doing a complex regex causes problems\n // when there's a comment and \")\" after it, the regex will read replace block until comment.. and stop.\n massagedGoMod = massagedGoMod\n .split('\\n')\n .map((line) => {\n if (line.trim().startsWith('//')) {\n return line.replace(')', 'renovate-replace-bracket');\n }\n return line;\n })\n .join('\\n');\n\n const inlineReplaceRegEx = regEx(\n /(?<newline>\\r?\\n)(?<directive>replace\\s+[^\\s]+\\s+=>\\s+\\.\\.\\/.*)/g,\n );\n\n // $<newline> will be matched with the (\\r?\\n) group\n // $<directive> will be matched with the inline replace match, example\n // \"// renovate-replace replace golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5\"\n const inlineCommentOut = '$<newline>// renovate-replace $<directive>';\n\n // Regex match replace directive block, example:\n // replace (\n // golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5\n // )\n const blockReplaceRegEx = regEx(/(?:\\r?\\n)replace\\s*\\([^)]+\\s*\\)/g);\n\n /**\n * replacerFunction for commenting out replace blocks\n * @param match A string representing a golang replace directive block\n * @returns A commented out block with // renovate-replace\n */\n function blockCommentOut(match: string): string {\n return match.replace(\n regEx(/(?<newline>\\r?\\n)/g),\n '$<newline>// renovate-replace ',\n );\n }\n\n // Comment out golang replace directives\n massagedGoMod = massagedGoMod\n .replace(inlineReplaceRegEx, inlineCommentOut)\n .replace(blockReplaceRegEx, blockCommentOut);\n\n if (massagedGoMod !== newGoModContent) {\n logger.debug(\n 'Removed some relative replace statements and comments from go.mod',\n );\n }\n }\n const goConstraints = deriveGoToolchainConstraints(config, newGoModContent);\n\n try {\n await writeLocalFile(goModFileName, massagedGoMod);\n\n const cmd = 'go';\n const env = getEnv();\n const execOptions: ExecOptions = {\n cwdFile: goModFileName,\n extraEnv: {\n GOPATH: await ensureCacheDir('go'),\n GOPROXY: env.GOPROXY,\n GOPRIVATE: env.GOPRIVATE,\n GONOPROXY: env.GONOPROXY,\n GONOSUMDB: env.GONOSUMDB,\n GOSUMDB: env.GOSUMDB,\n GOINSECURE: env.GOINSECURE,\n /* v8 ignore next -- TODO: add test */\n GOFLAGS: useModcacherw(goConstraints) ? '-modcacherw' : null,\n CGO_ENABLED: GlobalConfig.get('binarySource') === 'docker' ? '0' : null,\n },\n docker: {},\n toolConstraints: [\n {\n toolName: 'golang',\n constraint: goConstraints,\n },\n ],\n };\n\n const execCommands: string[] = [];\n\n let goGetDirs: string | undefined;\n if (config.goGetDirs) {\n goGetDirs = config.goGetDirs\n .filter((dir) => {\n const isValid = isValidLocalPath(dir);\n if (!isValid) {\n logger.warn({ dir }, 'Invalid path in goGetDirs');\n }\n return isValid;\n })\n .map(quote)\n .join(' ');\n\n if (goGetDirs === '') {\n throw new Error('Invalid goGetDirs');\n }\n }\n\n let args = `get${modFileFlag} `;\n\n if (goConstraints && !semver.intersects(goConstraints, `>=1.18`)) {\n // For Go versions < 1.18, we need to use the -d flag to avoid builds or installs\n // https://go.dev/doc/go1.18#go-get\n args += `-d `;\n }\n\n args += `-t ${goGetDirs ?? './...'}`;\n logger.trace({ cmd, args }, 'go get command included');\n execCommands.push(`${cmd} ${args}`);\n\n // Update import paths on major updates\n const isImportPathUpdateRequired =\n config.postUpdateOptions?.includes('gomodUpdateImportPaths') &&\n config.updateType === 'major';\n\n if (isImportPathUpdateRequired) {\n const updateImportCmds = getUpdateImportPathCmds(updatedDeps, config);\n if (updateImportCmds.length > 0) {\n logger.debug(updateImportCmds, 'update import path commands included');\n // The updates\n execCommands.push(...updateImportCmds);\n }\n }\n\n const mustSkipGoModTidy =\n !config.postUpdateOptions?.includes('gomodUpdateImportPaths') &&\n config.updateType === 'major';\n if (mustSkipGoModTidy) {\n logger.debug('go mod tidy command skipped');\n }\n\n let tidyOpts = '';\n if (config.postUpdateOptions?.includes('gomodTidy1.17')) {\n tidyOpts += ' -compat=1.17';\n }\n if (config.postUpdateOptions?.includes('gomodTidyE')) {\n tidyOpts += ' -e';\n }\n\n // dependent modules can only be tidied once the updated module is settled\n const isGoModTidyAllRequired =\n config.postUpdateOptions?.includes('gomodTidyAll') === true;\n const isGoModTidyRequired =\n !mustSkipGoModTidy &&\n (config.postUpdateOptions?.includes('gomodTidy') === true ||\n config.postUpdateOptions?.includes('gomodTidy1.17') === true ||\n config.postUpdateOptions?.includes('gomodTidyE') === true ||\n isGoModTidyAllRequired ||\n (config.updateType === 'major' && isImportPathUpdateRequired));\n if (isGoModTidyRequired) {\n args = `mod tidy${modFileFlag}${tidyOpts}`;\n logger.debug('go mod tidy command included');\n execCommands.push(`${cmd} ${args}`);\n }\n\n let goWorkSumFileName = upath.join(goModDir, 'go.work.sum');\n if (useVendor) {\n // If we find a go.work, then use go workspace vendoring.\n const goWorkFile = await findLocalSiblingOrParent(\n goModFileName,\n 'go.work',\n );\n\n if (goWorkFile) {\n goWorkSumFileName = upath.join(\n upath.dirname(goWorkFile),\n 'go.work.sum',\n );\n\n args = 'work vendor';\n logger.debug('using go work vendor');\n execCommands.push(`${cmd} ${args}`);\n\n args = 'work sync';\n logger.debug('using go work sync');\n execCommands.push(`${cmd} ${args}`);\n } else {\n args = `mod vendor${modFileFlag}`;\n logger.debug('using go mod vendor');\n execCommands.push(`${cmd} ${args}`);\n }\n\n if (isGoModTidyRequired) {\n args = `mod tidy${modFileFlag}${tidyOpts}`;\n logger.debug('go mod tidy command included');\n execCommands.push(`${cmd} ${args}`);\n }\n }\n\n // We tidy one more time as a solution for #6795\n if (isGoModTidyRequired) {\n args = `mod tidy${modFileFlag}${tidyOpts}`;\n logger.debug('go mod tidy command included');\n execCommands.push(`${cmd} ${args}`);\n }\n\n let dependentModules: string[] = [];\n if (isGoModTidyAllRequired) {\n try {\n dependentModules = await getGoModulesInTidyOrder(goModFileName);\n for (const dependent of dependentModules) {\n const dir = upath.relative(goModDir, upath.dirname(dependent));\n execCommands.push(`${cmd} -C ${quote(dir)} mod tidy${tidyOpts}`);\n }\n logger.debug({ dependentModules }, 'go mod tidy commands included');\n } catch (err) {\n logger.warn({ err }, 'Failed to find dependent Go modules');\n }\n }\n\n if (useGoGenerate) {\n if (goGenerateAllowed) {\n logger.debug('go generate command included');\n execCommands.push(`${cmd} generate ./...`);\n } else {\n logger.once.warn(\n `go generate command requested as a post update action, but goGenerate is not permitted in the allowedUnsafeExecutions`,\n );\n }\n }\n\n await gitExec(execCommands, execOptions);\n\n const status = await getRepoStatus();\n const dependentFiles = dependentModules.flatMap((f) => [\n f,\n f.replace(regEx(/\\.mod$/), '.sum'),\n ]);\n\n if (\n !status.modified.includes(sumFileName) &&\n !status.modified.includes(goModFileName) &&\n !status.modified.includes(goWorkSumFileName) &&\n !dependentFiles.some((f) => status.modified.includes(f))\n ) {\n return null;\n }\n\n const res: UpdateArtifactsResult[] = [];\n if (status.modified.includes(sumFileName)) {\n logger.debug('Returning updated go.sum');\n res.push({\n file: {\n type: 'addition',\n path: sumFileName,\n contents: await readLocalFile(sumFileName),\n },\n });\n }\n\n if (status.modified.includes(goWorkSumFileName)) {\n logger.debug('Returning updated go.work.sum');\n res.push({\n file: {\n type: 'addition',\n path: goWorkSumFileName,\n contents: await readLocalFile(goWorkSumFileName),\n },\n });\n }\n\n for (const f of dependentFiles) {\n if (status.modified.includes(f)) {\n logger.trace(`Returning updated ${f}`);\n res.push({\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n });\n }\n }\n\n // Include all the .go file import changes\n if (isImportPathUpdateRequired) {\n logger.debug('Returning updated go source files for import path changes');\n for (const f of status.modified) {\n if (f.endsWith('.go')) {\n res.push({\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n });\n }\n }\n }\n\n const alreadyAdded = new Set<string>();\n const alreadyDeleted = new Set<string>();\n if (useVendor) {\n for (const f of status.modified.concat(status.not_added)) {\n if (vendorDir && f.startsWith(vendorDir)) {\n alreadyAdded.add(f);\n res.push({\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n });\n }\n }\n for (const f of coerceArray(status.deleted)) {\n if (vendorDir && f.startsWith(vendorDir)) {\n alreadyDeleted.add(f);\n res.push({\n file: {\n type: 'deletion',\n path: f,\n },\n });\n }\n }\n }\n\n // TODO: throws in tests (#22198)\n const finalGoModContent = (await readLocalFile(goModFileName, 'utf8'))!\n .replace(regEx(/\\/\\/ renovate-replace /g), '')\n .replace(regEx(/renovate-replace-bracket/g), ')');\n if (finalGoModContent !== newGoModContent) {\n const artifactResult: UpdateArtifactsResult = {\n file: {\n type: 'addition',\n path: goModFileName,\n contents: finalGoModContent,\n },\n };\n\n const updatedDepNames = filterMap(updatedDeps, (dep) => dep?.depName);\n const extraDepsNotice = getExtraDepsNotice(\n newGoModContent,\n finalGoModContent,\n updatedDepNames,\n config,\n );\n\n if (extraDepsNotice) {\n artifactResult.notice = {\n file: goModFileName,\n message: extraDepsNotice,\n };\n }\n\n logger.debug('Found updated go.mod after go.sum update');\n res.push(artifactResult);\n alreadyAdded.add(goModFileName);\n }\n\n // add all files added when in `go generate` mode.\n // unfortunately there is not a good way as there is with vendoring or go import path updates to detect this.\n // Do this at the very very end to ensure we only capture files which would have been explicitly\n // modified, added, or deleted from a `go generate` invocation\n if (useGoGenerate && goGenerateAllowed) {\n logger.debug(\n 'Updating all modified files since generated files were added',\n );\n for (const f of status.modified.concat(status.created)) {\n if (!alreadyAdded.has(f)) {\n res.push({\n file: {\n type: 'addition',\n path: f,\n contents: await readLocalFile(f),\n },\n });\n }\n }\n for (const f of coerceArray(status.deleted)) {\n if (!alreadyDeleted.has(f)) {\n res.push({\n file: {\n type: 'deletion',\n path: f,\n },\n });\n }\n }\n }\n return res;\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update go.sum');\n return [\n {\n artifactError: {\n fileName: sumFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n\nfunction getGoConstraints(content: string): string | undefined {\n // prefer toolchain directive when go.mod has one\n const toolchainMatch = regEx(/^toolchain\\s*go(?<gover>\\d+\\.\\d+\\.\\d+)$/m).exec(\n content,\n );\n const toolchainVer = toolchainMatch?.groups?.gover;\n if (toolchainVer) {\n logger.debug(\n `Using go version ${toolchainVer} found in toolchain directive`,\n );\n return toolchainVer;\n }\n\n // If go.mod doesn't have toolchain directive and has a full go version spec,\n // for example `go 1.23.6`, pick this version, this doesn't match major.minor version spec.\n //\n // This is because when go.mod have same version defined in go directive and toolchain directive,\n // go will remove toolchain directive from go.mod.\n //\n // For example, go will rewrite `go 1.23.5\\ntoolchain go1.23.5` to `go 1.23.5` by default,\n // in this case, the go directive is the toolchain directive.\n const goFullVersion = regEx(/^go\\s*(?<gover>\\d+\\.\\d+\\.\\d+)$/m).exec(content)\n ?.groups?.gover;\n if (goFullVersion) {\n return goFullVersion;\n }\n\n const re = regEx(/^go\\s*(?<gover>\\d+\\.\\d+)$/m);\n const match = re.exec(content);\n if (!match?.groups?.gover) {\n return undefined;\n }\n return `^${match.groups.gover}`;\n}\n\n/**\n * Derive the version of the Go toolchain needed to run this project.\n *\n * This matches with the `golang` Containerbase tool.\n *\n * In precedence order:\n *\n * 1. config: \\`constraints.go\\`\n * 1. \\`go.mod\\`: \\`toolchain\\` directive\n * 1. \\`go.mod\\`: \\`go\\` directive\n *\n * NOTE that the \\`constraints.golang\\` is not used (TODO #42601)\n */\nexport function deriveGoToolchainConstraints(\n config: UpdateArtifactsConfig,\n newGoModContent: string,\n): string | undefined {\n return config.constraints?.go ?? getGoConstraints(newGoModContent);\n}\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { GolangVersionDatasource } from "../../datasource/golang-version/index.j
|
|
|
5
5
|
import semver from "semver";
|
|
6
6
|
//#region lib/modules/manager/gomod/line-parser.ts
|
|
7
7
|
function trimQuotes(str) {
|
|
8
|
-
return str.replace(regEx(/^"(
|
|
8
|
+
return str.replace(regEx(/^"(?<value>.*)"$/), "$<value>");
|
|
9
9
|
}
|
|
10
10
|
const requireRegex = regEx(/^(?<keyword>require)?\s+(?<module>[^\s]+\/?[^\s]+)\s+(?<version>[^\s]+)(?:\s*\/\/\s*(?<comment>[^\s]+)\s*)?$/);
|
|
11
11
|
const replaceRegex = regEx(/^(?<keyword>replace)?\s+(?<module>[^\s]+\/?[^\s]+)\s*=>\s*(?<replacement>[^\s]+)(?:\s+(?<version>[^\s]+))?(?:\s*\/\/\s*(?<comment>[^\s]+)\s*)?$/);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line-parser.js","names":[],"sources":["../../../../lib/modules/manager/gomod/line-parser.ts"],"sourcesContent":["import semver from 'semver';\nimport { regEx } from '../../../util/regex.ts';\nimport { GoDatasource } from '../../datasource/go/index.ts';\nimport { GolangVersionDatasource } from '../../datasource/golang-version/index.ts';\nimport { isVersion } from '../../versioning/semver/index.ts';\nimport type { PackageDependency } from '../types.ts';\n\nfunction trimQuotes(str: string): string {\n return str.replace(regEx(/^\"(
|
|
1
|
+
{"version":3,"file":"line-parser.js","names":[],"sources":["../../../../lib/modules/manager/gomod/line-parser.ts"],"sourcesContent":["import semver from 'semver';\nimport { regEx } from '../../../util/regex.ts';\nimport { GoDatasource } from '../../datasource/go/index.ts';\nimport { GolangVersionDatasource } from '../../datasource/golang-version/index.ts';\nimport { isVersion } from '../../versioning/semver/index.ts';\nimport type { PackageDependency } from '../types.ts';\n\nfunction trimQuotes(str: string): string {\n return str.replace(regEx(/^\"(?<value>.*)\"$/), '$<value>');\n}\n\nconst requireRegex = regEx(\n /^(?<keyword>require)?\\s+(?<module>[^\\s]+\\/?[^\\s]+)\\s+(?<version>[^\\s]+)(?:\\s*\\/\\/\\s*(?<comment>[^\\s]+)\\s*)?$/,\n);\n\nconst replaceRegex = regEx(\n /^(?<keyword>replace)?\\s+(?<module>[^\\s]+\\/?[^\\s]+)\\s*=>\\s*(?<replacement>[^\\s]+)(?:\\s+(?<version>[^\\s]+))?(?:\\s*\\/\\/\\s*(?<comment>[^\\s]+)\\s*)?$/,\n);\n\nexport const excludeBlockStartRegex = regEx(/^(?<keyword>exclude)\\s+\\(\\s*$/);\n\nexport const endBlockRegex = regEx(/^\\s+\\)\\s*$/);\n\nconst toolRegex = regEx(/^(?<keyword>tool)?\\s+(?<module>[^\\s]+\\/?[^\\s]+)\\s*$/);\n\nconst goVersionRegex = regEx(/^\\s*go\\s+(?<version>[^\\s]+)\\s*$/);\n\nconst toolchainVersionRegex = regEx(/^\\s*toolchain\\s+go(?<version>[^\\s]+)\\s*$/);\n\nconst pseudoVersionRegex = regEx(GoDatasource.pversionRegexp);\n\nconst placeholderPseudoVersion = 'v0.0.0-00010101000000-000000000000';\n\nfunction extractDigest(input: string): string | undefined {\n const match = pseudoVersionRegex.exec(input);\n return match?.groups?.digest;\n}\n\nfunction isPlaceholderPseudoVersion(version: string): boolean {\n return version === placeholderPseudoVersion;\n}\n\nexport function parseLine(input: string): PackageDependency | null {\n const goVersionMatches = goVersionRegex.exec(input)?.groups;\n if (goVersionMatches) {\n const { version: currentValue } = goVersionMatches;\n\n const dep: PackageDependency = {\n datasource: GolangVersionDatasource.id,\n versioning: 'go-mod-directive',\n depType: 'golang',\n depName: 'go',\n currentValue,\n commitMessageTopic: 'go module directive',\n };\n\n if (!semver.validRange(currentValue)) {\n dep.skipReason = 'invalid-version';\n }\n\n return dep;\n }\n\n const toolchainMatches = toolchainVersionRegex.exec(input)?.groups;\n if (toolchainMatches) {\n const { version: currentValue } = toolchainMatches;\n\n const dep: PackageDependency = {\n datasource: GolangVersionDatasource.id,\n depType: 'toolchain',\n depName: 'go',\n currentValue,\n commitMessageTopic: 'go toolchain directive',\n };\n\n if (!semver.valid(currentValue)) {\n dep.skipReason = 'invalid-version';\n }\n\n return dep;\n }\n\n const requireMatches = requireRegex.exec(input)?.groups;\n if (requireMatches) {\n const { keyword, module, version: currentValue, comment } = requireMatches;\n\n const depName = trimQuotes(module);\n\n const dep: PackageDependency = {\n datasource: GoDatasource.id,\n depType: 'require',\n depName,\n currentValue,\n };\n\n if (isVersion(currentValue)) {\n const digest = extractDigest(currentValue);\n if (digest) {\n dep.currentDigest = digest;\n dep.digestOneAndOnly = true;\n dep.versioning = 'loose';\n if (isPlaceholderPseudoVersion(currentValue)) {\n dep.skipReason = 'invalid-version';\n }\n }\n } else {\n dep.skipReason = 'invalid-version';\n }\n\n if (comment === 'indirect') {\n dep.depType = 'indirect';\n dep.enabled = false;\n }\n\n if (!keyword) {\n dep.managerData = { multiLine: true };\n }\n\n return dep;\n }\n\n const replaceMatches = replaceRegex.exec(input)?.groups;\n if (replaceMatches) {\n const {\n keyword,\n replacement,\n version: currentValue,\n comment,\n } = replaceMatches;\n\n const depName = trimQuotes(replacement);\n\n const dep: PackageDependency = {\n datasource: GoDatasource.id,\n depType: 'replace',\n depName,\n currentValue,\n };\n\n if (isVersion(currentValue)) {\n const digest = extractDigest(currentValue);\n if (digest) {\n dep.currentDigest = digest;\n dep.digestOneAndOnly = true;\n dep.versioning = 'loose';\n if (isPlaceholderPseudoVersion(currentValue)) {\n dep.skipReason = 'invalid-version';\n }\n }\n } else if (currentValue) {\n dep.skipReason = 'invalid-version';\n } else {\n dep.skipReason = 'unspecified-version';\n delete dep.currentValue;\n }\n\n if (comment === 'indirect') {\n dep.depType = 'indirect';\n dep.enabled = false;\n }\n\n if (!keyword) {\n dep.managerData = { multiLine: true };\n }\n\n if (depName.startsWith('/') || depName.startsWith('.')) {\n dep.skipReason = 'local-dependency';\n }\n\n return dep;\n }\n\n const toolMatches = toolRegex.exec(input)?.groups;\n if (toolMatches) {\n const { keyword, module } = toolMatches;\n\n const depName = trimQuotes(module);\n\n const dep: PackageDependency = {\n datasource: GoDatasource.id,\n depType: 'tool',\n depName,\n skipReason: 'unversioned-reference',\n };\n\n if (!keyword) {\n dep.managerData = { multiLine: true };\n }\n\n return dep;\n }\n\n return null;\n}\n"],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ function updateDependency({ fileContent, upgrade }) {
|
|
|
37
37
|
return null;
|
|
38
38
|
}
|
|
39
39
|
let updateLineExp;
|
|
40
|
-
if (depType === "golang" || depType === "toolchain") updateLineExp = regEx(/(?<depPart>(?:toolchain )?go)(?<divider>\s*)([^\s]+|[\w]+)/);
|
|
40
|
+
if (depType === "golang" || depType === "toolchain") updateLineExp = regEx(/(?<depPart>(?:toolchain )?go)(?<divider>\s*)(?:[^\s]+|[\w]+)/);
|
|
41
41
|
if (depType === "replace") {
|
|
42
42
|
if (upgrade.managerData.multiLine) updateLineExp = regEx(/^(?<depPart>\s+[^\s]+[\s]+[=][>]+\s+)(?<divider>[^\s]+\s+)[^\s]+/);
|
|
43
43
|
else updateLineExp = regEx(/^(?<depPart>replace\s+[^\s]+[\s]+[=][>]+\s+)(?<divider>[^\s]+\s+)[^\s]+/);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","names":[],"sources":["../../../../lib/modules/manager/gomod/update.ts"],"sourcesContent":["// TODO: types (#22198)\nimport { logger } from '../../../logger/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport type { UpdateDependencyConfig } from '../types.ts';\n\nfunction getNameWithNoVersion(name: string): string {\n // remove version suffixes like /v1 or /v2\n let nameNoVersion = name.replace(regEx(/\\/v\\d+$/), '');\n // gopkg.in is a special case where the major version is added with a dot rather than a slash\n if (nameNoVersion.startsWith('gopkg.in')) {\n nameNoVersion = nameNoVersion.replace(regEx(/\\.v\\d+$/), '');\n }\n return nameNoVersion;\n}\n\nexport function updateDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n try {\n logger.debug(`gomod.updateDependency: ${upgrade.newValue}`);\n const { depType, updateType } = upgrade;\n const currentName = upgrade.depName;\n if (updateType === 'replacement') {\n logger.warn('gomod manager does not support replacement updates yet');\n return null;\n }\n /* v8 ignore next -- should never happen */\n if (!currentName || !upgrade.managerData) {\n return null;\n }\n const currentNameNoVersion = getNameWithNoVersion(currentName);\n const lines = fileContent.split(newlineRegex);\n /* v8 ignore next -- hard to test */\n if (lines.length <= upgrade.managerData.lineNumber) {\n logger.warn('go.mod current line no longer exists after update');\n return null;\n }\n const lineToChange = lines[upgrade.managerData.lineNumber];\n logger.trace({ upgrade, lineToChange }, 'go.mod current line');\n if (\n !lineToChange.includes(currentNameNoVersion) &&\n !lineToChange.includes('rethinkdb/rethinkdb-go.v5')\n ) {\n logger.debug(\n { lineToChange, depName: currentName },\n \"go.mod current line doesn't contain dependency\",\n );\n return null;\n }\n let updateLineExp: RegExp | undefined;\n\n if (depType === 'golang' || depType === 'toolchain') {\n updateLineExp = regEx(\n /(?<depPart>(?:toolchain )?go)(?<divider>\\s*)([^\\s]+|[\\w]+)/,\n );\n }\n if (depType === 'replace') {\n if (upgrade.managerData.multiLine) {\n updateLineExp = regEx(\n /^(?<depPart>\\s+[^\\s]+[\\s]+[=][>]+\\s+)(?<divider>[^\\s]+\\s+)[^\\s]+/,\n );\n } else {\n updateLineExp = regEx(\n /^(?<depPart>replace\\s+[^\\s]+[\\s]+[=][>]+\\s+)(?<divider>[^\\s]+\\s+)[^\\s]+/,\n );\n }\n } else if (depType === 'require' || depType === 'indirect') {\n if (upgrade.managerData.multiLine) {\n updateLineExp = regEx(/^(?<depPart>\\s+[^\\s]+)(?<divider>\\s+)[^\\s]+/);\n } else {\n updateLineExp = regEx(\n /^(?<depPart>require\\s+[^\\s]+)(?<divider>\\s+)[^\\s]+/,\n );\n }\n }\n if (updateLineExp && !updateLineExp.test(lineToChange)) {\n logger.debug('No line found to update');\n return null;\n }\n let newLine: string;\n if (upgrade.updateType === 'digest') {\n // Since the 2024 goproxy datasource changes, newValue and newDigest are\n // both extracted from the same proxy version string and always reference\n // the same commit, so newValue can be written directly for pseudo-versions.\n // However, for private modules (GONOPROXY / direct datasource), the proxy\n // has no data and newValue may equal currentValue. In that case, fall\n // through to the bare hash path so that gomodTidy can resolve it.\n if (\n upgrade.newValue?.startsWith('v0.0.0-') &&\n upgrade.newValue !== upgrade.currentValue\n ) {\n logger.debug(\n { depName: currentName, lineToChange, newValue: upgrade.newValue },\n 'gomod: updating pseudo-version digest',\n );\n newLine = lineToChange.replace(\n // TODO: can be undefined? (#22198)\n updateLineExp!,\n `$<depPart>$<divider>${upgrade.newValue}`,\n );\n } else {\n // Fallback for private modules where the proxy could not resolve a new\n // pseudo-version, or non-pseudo-version digest updates.\n // Writes the bare hash so that postUpdateOptions like gomodTidy can\n // normalize it into a valid pseudo-version via `go get`.\n const newDigestRightSized = upgrade.newDigest!.substring(\n 0,\n upgrade.currentDigest!.length,\n );\n if (lineToChange.includes(newDigestRightSized)) {\n return fileContent;\n }\n logger.debug(\n { depName: currentName, lineToChange, newDigestRightSized },\n 'gomod: need to update digest',\n );\n newLine = lineToChange.replace(\n // TODO: can be undefined? (#22198)\n updateLineExp!,\n `$<depPart>$<divider>${newDigestRightSized}`,\n );\n }\n } else {\n newLine = lineToChange.replace(\n // TODO: can be undefined? (#22198)\n updateLineExp!,\n `$<depPart>$<divider>${upgrade.newValue}`,\n );\n }\n if (upgrade.updateType === 'major') {\n logger.debug(`gomod: major update for ${currentName}`);\n if (currentName.startsWith('gopkg.in/')) {\n const oldV = currentName.split('.').pop();\n newLine = newLine.replace(`.${oldV}`, `.v${upgrade.newMajor}`);\n // Package renames - I couldn't think of a better place to do this\n newLine = newLine.replace(\n 'gorethink/gorethink.v5',\n 'rethinkdb/rethinkdb-go.v5',\n );\n } else if (\n upgrade.newMajor! > 1 &&\n !newLine.includes(`/v${upgrade.newMajor}`) &&\n !upgrade.newValue!.endsWith('+incompatible')\n ) {\n if (currentName === currentNameNoVersion) {\n // If package currently has no version, pin to latest one.\n newLine = newLine.replaceAll(\n currentName,\n `${currentName}/v${upgrade.newMajor}`,\n );\n } else {\n // Replace version\n const [oldV] = upgrade.currentValue!.split('.');\n newLine = newLine.replace(\n regEx(`/${oldV}(\\\\s+)`, undefined, false),\n `/v${upgrade.newMajor}$1`,\n );\n }\n }\n }\n if (\n lineToChange.endsWith('+incompatible') &&\n !upgrade.newValue?.endsWith('+incompatible')\n ) {\n let toAdd = '+incompatible';\n\n if (upgrade.updateType === 'major' && upgrade.newMajor! >= 2) {\n toAdd = '';\n }\n newLine += toAdd;\n }\n if (newLine === lineToChange) {\n logger.debug('No changes necessary');\n return fileContent;\n }\n\n if (depType === 'indirect') {\n newLine = newLine.replace(\n regEx(/\\s*(?:\\/\\/\\s*indirect(?:\\s*;)?\\s*)*$/),\n ' // indirect',\n );\n }\n\n lines[upgrade.managerData.lineNumber] = newLine;\n return lines.join('\\n');\n } catch (err) {\n logger.debug({ err }, 'Error setting new go.mod version');\n return null;\n }\n}\n"],"mappings":";;;AAKA,SAAS,qBAAqB,MAAsB;CAElD,IAAI,gBAAgB,KAAK,QAAQ,MAAM,SAAS,GAAG,EAAE;CAErD,IAAI,cAAc,WAAW,UAAU,GACrC,gBAAgB,cAAc,QAAQ,MAAM,SAAS,GAAG,EAAE;CAE5D,OAAO;AACT;AAEA,SAAgB,iBAAiB,EAC/B,aACA,WACwC;CACxC,IAAI;EACF,OAAO,MAAM,2BAA2B,QAAQ,UAAU;EAC1D,MAAM,EAAE,SAAS,eAAe;EAChC,MAAM,cAAc,QAAQ;EAC5B,IAAI,eAAe,eAAe;GAChC,OAAO,KAAK,wDAAwD;GACpE,OAAO;EACT;;EAEA,IAAI,CAAC,eAAe,CAAC,QAAQ,aAC3B,OAAO;EAET,MAAM,uBAAuB,qBAAqB,WAAW;EAC7D,MAAM,QAAQ,YAAY,MAAM,YAAY;;EAE5C,IAAI,MAAM,UAAU,QAAQ,YAAY,YAAY;GAClD,OAAO,KAAK,mDAAmD;GAC/D,OAAO;EACT;EACA,MAAM,eAAe,MAAM,QAAQ,YAAY;EAC/C,OAAO,MAAM;GAAE;GAAS;EAAa,GAAG,qBAAqB;EAC7D,IACE,CAAC,aAAa,SAAS,oBAAoB,KAC3C,CAAC,aAAa,SAAS,2BAA2B,GAClD;GACA,OAAO,MACL;IAAE;IAAc,SAAS;GAAY,GACrC,gDACF;GACA,OAAO;EACT;EACA,IAAI;EAEJ,IAAI,YAAY,YAAY,YAAY,aACtC,gBAAgB,MACd,
|
|
1
|
+
{"version":3,"file":"update.js","names":[],"sources":["../../../../lib/modules/manager/gomod/update.ts"],"sourcesContent":["// TODO: types (#22198)\nimport { logger } from '../../../logger/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport type { UpdateDependencyConfig } from '../types.ts';\n\nfunction getNameWithNoVersion(name: string): string {\n // remove version suffixes like /v1 or /v2\n let nameNoVersion = name.replace(regEx(/\\/v\\d+$/), '');\n // gopkg.in is a special case where the major version is added with a dot rather than a slash\n if (nameNoVersion.startsWith('gopkg.in')) {\n nameNoVersion = nameNoVersion.replace(regEx(/\\.v\\d+$/), '');\n }\n return nameNoVersion;\n}\n\nexport function updateDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n try {\n logger.debug(`gomod.updateDependency: ${upgrade.newValue}`);\n const { depType, updateType } = upgrade;\n const currentName = upgrade.depName;\n if (updateType === 'replacement') {\n logger.warn('gomod manager does not support replacement updates yet');\n return null;\n }\n /* v8 ignore next -- should never happen */\n if (!currentName || !upgrade.managerData) {\n return null;\n }\n const currentNameNoVersion = getNameWithNoVersion(currentName);\n const lines = fileContent.split(newlineRegex);\n /* v8 ignore next -- hard to test */\n if (lines.length <= upgrade.managerData.lineNumber) {\n logger.warn('go.mod current line no longer exists after update');\n return null;\n }\n const lineToChange = lines[upgrade.managerData.lineNumber];\n logger.trace({ upgrade, lineToChange }, 'go.mod current line');\n if (\n !lineToChange.includes(currentNameNoVersion) &&\n !lineToChange.includes('rethinkdb/rethinkdb-go.v5')\n ) {\n logger.debug(\n { lineToChange, depName: currentName },\n \"go.mod current line doesn't contain dependency\",\n );\n return null;\n }\n let updateLineExp: RegExp | undefined;\n\n if (depType === 'golang' || depType === 'toolchain') {\n updateLineExp = regEx(\n /(?<depPart>(?:toolchain )?go)(?<divider>\\s*)(?:[^\\s]+|[\\w]+)/,\n );\n }\n if (depType === 'replace') {\n if (upgrade.managerData.multiLine) {\n updateLineExp = regEx(\n /^(?<depPart>\\s+[^\\s]+[\\s]+[=][>]+\\s+)(?<divider>[^\\s]+\\s+)[^\\s]+/,\n );\n } else {\n updateLineExp = regEx(\n /^(?<depPart>replace\\s+[^\\s]+[\\s]+[=][>]+\\s+)(?<divider>[^\\s]+\\s+)[^\\s]+/,\n );\n }\n } else if (depType === 'require' || depType === 'indirect') {\n if (upgrade.managerData.multiLine) {\n updateLineExp = regEx(/^(?<depPart>\\s+[^\\s]+)(?<divider>\\s+)[^\\s]+/);\n } else {\n updateLineExp = regEx(\n /^(?<depPart>require\\s+[^\\s]+)(?<divider>\\s+)[^\\s]+/,\n );\n }\n }\n if (updateLineExp && !updateLineExp.test(lineToChange)) {\n logger.debug('No line found to update');\n return null;\n }\n let newLine: string;\n if (upgrade.updateType === 'digest') {\n // Since the 2024 goproxy datasource changes, newValue and newDigest are\n // both extracted from the same proxy version string and always reference\n // the same commit, so newValue can be written directly for pseudo-versions.\n // However, for private modules (GONOPROXY / direct datasource), the proxy\n // has no data and newValue may equal currentValue. In that case, fall\n // through to the bare hash path so that gomodTidy can resolve it.\n if (\n upgrade.newValue?.startsWith('v0.0.0-') &&\n upgrade.newValue !== upgrade.currentValue\n ) {\n logger.debug(\n { depName: currentName, lineToChange, newValue: upgrade.newValue },\n 'gomod: updating pseudo-version digest',\n );\n newLine = lineToChange.replace(\n // TODO: can be undefined? (#22198)\n updateLineExp!,\n `$<depPart>$<divider>${upgrade.newValue}`,\n );\n } else {\n // Fallback for private modules where the proxy could not resolve a new\n // pseudo-version, or non-pseudo-version digest updates.\n // Writes the bare hash so that postUpdateOptions like gomodTidy can\n // normalize it into a valid pseudo-version via `go get`.\n const newDigestRightSized = upgrade.newDigest!.substring(\n 0,\n upgrade.currentDigest!.length,\n );\n if (lineToChange.includes(newDigestRightSized)) {\n return fileContent;\n }\n logger.debug(\n { depName: currentName, lineToChange, newDigestRightSized },\n 'gomod: need to update digest',\n );\n newLine = lineToChange.replace(\n // TODO: can be undefined? (#22198)\n updateLineExp!,\n `$<depPart>$<divider>${newDigestRightSized}`,\n );\n }\n } else {\n newLine = lineToChange.replace(\n // TODO: can be undefined? (#22198)\n updateLineExp!,\n `$<depPart>$<divider>${upgrade.newValue}`,\n );\n }\n if (upgrade.updateType === 'major') {\n logger.debug(`gomod: major update for ${currentName}`);\n if (currentName.startsWith('gopkg.in/')) {\n const oldV = currentName.split('.').pop();\n newLine = newLine.replace(`.${oldV}`, `.v${upgrade.newMajor}`);\n // Package renames - I couldn't think of a better place to do this\n newLine = newLine.replace(\n 'gorethink/gorethink.v5',\n 'rethinkdb/rethinkdb-go.v5',\n );\n } else if (\n upgrade.newMajor! > 1 &&\n !newLine.includes(`/v${upgrade.newMajor}`) &&\n !upgrade.newValue!.endsWith('+incompatible')\n ) {\n if (currentName === currentNameNoVersion) {\n // If package currently has no version, pin to latest one.\n newLine = newLine.replaceAll(\n currentName,\n `${currentName}/v${upgrade.newMajor}`,\n );\n } else {\n // Replace version\n const [oldV] = upgrade.currentValue!.split('.');\n newLine = newLine.replace(\n regEx(`/${oldV}(\\\\s+)`, undefined, false),\n `/v${upgrade.newMajor}$1`,\n );\n }\n }\n }\n if (\n lineToChange.endsWith('+incompatible') &&\n !upgrade.newValue?.endsWith('+incompatible')\n ) {\n let toAdd = '+incompatible';\n\n if (upgrade.updateType === 'major' && upgrade.newMajor! >= 2) {\n toAdd = '';\n }\n newLine += toAdd;\n }\n if (newLine === lineToChange) {\n logger.debug('No changes necessary');\n return fileContent;\n }\n\n if (depType === 'indirect') {\n newLine = newLine.replace(\n regEx(/\\s*(?:\\/\\/\\s*indirect(?:\\s*;)?\\s*)*$/),\n ' // indirect',\n );\n }\n\n lines[upgrade.managerData.lineNumber] = newLine;\n return lines.join('\\n');\n } catch (err) {\n logger.debug({ err }, 'Error setting new go.mod version');\n return null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -310,7 +310,7 @@ function handleApplyFrom(ctx) {
|
|
|
310
310
|
logger.debug(`Max recursion depth reached in script file: ${scriptFile}`);
|
|
311
311
|
return ctx;
|
|
312
312
|
}
|
|
313
|
-
if (!regEx(/\.gradle(
|
|
313
|
+
if (!regEx(/\.gradle(?:\.kts)?$/).test(scriptFile)) {
|
|
314
314
|
logger.debug({ scriptFile }, `Only Gradle files can be included`);
|
|
315
315
|
return ctx;
|
|
316
316
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","names":[],"sources":["../../../../../lib/modules/manager/gradle/parser/handlers.ts"],"sourcesContent":["import upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport { getSiblingFileName } from '../../../../util/fs/index.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { parseUrl } from '../../../../util/url.ts';\nimport type { PackageDependency } from '../../types.ts';\nimport type { parseGradle as parseGradleCallback } from '../parser.ts';\nimport type {\n ContentDescriptorMatcher,\n ContentDescriptorSpec,\n Ctx,\n GradleManagerData,\n} from '../types.ts';\nimport { isDependencyString, parseDependencyString } from '../utils.ts';\nimport {\n GRADLE_PLUGINS,\n GRADLE_TEST_SUITES,\n findVariable,\n interpolateString,\n loadFromTokenMap,\n} from './common.ts';\n\n// needed to break circular dependency\nlet parseGradle: typeof parseGradleCallback;\nexport function setParseGradleFunc(func: typeof parseGradleCallback): void {\n parseGradle = func;\n}\n\nexport function handleAssignment(ctx: Ctx): Ctx {\n const key = loadFromTokenMap(ctx, 'keyToken')[0].value;\n const valTokens = loadFromTokenMap(ctx, 'valToken');\n\n if (valTokens.length > 1) {\n // = template string with multiple variables\n ctx.tokenMap.templateStringTokens = valTokens;\n handleDepString(ctx);\n delete ctx.tokenMap.templateStringTokens;\n } else if (valTokens[0].type === 'symbol') {\n // foo = bar || foo = \"${bar}\"\n const varData = findVariable(valTokens[0].value, ctx);\n if (varData) {\n ctx.globalVars[key] = { ...varData };\n }\n } else {\n // = string value\n const dep = parseDependencyString(valTokens[0].value);\n if (dep) {\n dep.sharedVariableName = key;\n dep.managerData = {\n fileReplacePosition: valTokens[0].offset + dep.depName!.length + 1,\n packageFile: ctx.packageFile,\n };\n ctx.deps.push(dep);\n }\n\n ctx.globalVars[key] = {\n key,\n value: valTokens[0].value,\n fileReplacePosition: valTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n }\n\n return ctx;\n}\n\nexport function handleDepString(ctx: Ctx): Ctx {\n const stringTokens = loadFromTokenMap(ctx, 'templateStringTokens');\n\n const templateString = interpolateString(stringTokens, ctx);\n if (!templateString) {\n return ctx;\n }\n\n const dep = parseDependencyString(templateString);\n if (!dep) {\n return ctx;\n }\n\n let packageFile: string | undefined;\n let fileReplacePosition: number | undefined;\n for (const token of stringTokens) {\n if (token.type === 'symbol') {\n const varData = findVariable(token.value, ctx);\n if (varData) {\n packageFile = varData.packageFile;\n fileReplacePosition = varData.fileReplacePosition;\n if (varData.value === dep.currentValue) {\n dep.managerData = { fileReplacePosition, packageFile };\n dep.sharedVariableName = varData.key;\n }\n }\n }\n }\n\n if (!dep.managerData) {\n const lastToken = stringTokens.at(-1);\n if (\n lastToken?.type === 'string-value' &&\n dep.currentValue &&\n lastToken.value.includes(dep.currentValue)\n ) {\n packageFile = ctx.packageFile;\n if (stringTokens.length === 1) {\n fileReplacePosition = lastToken.offset + dep.depName!.length + 1;\n } else {\n fileReplacePosition =\n lastToken.offset + lastToken.value.lastIndexOf(dep.currentValue);\n }\n delete dep.sharedVariableName;\n } else {\n dep.skipReason = 'contains-variable';\n }\n dep.managerData = { fileReplacePosition, packageFile };\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handleKotlinShortNotationDep(ctx: Ctx): Ctx {\n const moduleNameTokens = loadFromTokenMap(ctx, 'artifactId');\n const versionTokens = loadFromTokenMap(ctx, 'version');\n\n const moduleName = interpolateString(moduleNameTokens, ctx);\n const versionValue = interpolateString(versionTokens, ctx);\n if (!moduleName || !versionValue) {\n return ctx;\n }\n\n const groupIdArtifactId = `org.jetbrains.kotlin:kotlin-${moduleName}`;\n const dep = parseDependencyString(`${groupIdArtifactId}:${versionValue}`);\n if (!dep) {\n return ctx;\n }\n\n dep.depName = moduleName;\n dep.packageName = groupIdArtifactId;\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handleLongFormDep(ctx: Ctx): Ctx {\n const groupIdTokens = loadFromTokenMap(ctx, 'groupId');\n const artifactIdTokens = loadFromTokenMap(ctx, 'artifactId');\n const versionTokens = loadFromTokenMap(ctx, 'version');\n\n const groupId = interpolateString(groupIdTokens, ctx);\n const artifactId = interpolateString(artifactIdTokens, ctx);\n const version = interpolateString(versionTokens, ctx);\n if (!groupId || !artifactId || !version) {\n return ctx;\n }\n\n // Special handling: 3 independent dependencies mismatched as groupId, artifactId, version\n if (\n isDependencyString(groupId) &&\n isDependencyString(artifactId) &&\n isDependencyString(version)\n ) {\n ctx.tokenMap.templateStringTokens = groupIdTokens;\n handleDepString(ctx);\n ctx.tokenMap.templateStringTokens = artifactIdTokens;\n handleDepString(ctx);\n ctx.tokenMap.templateStringTokens = versionTokens;\n handleDepString(ctx);\n\n return ctx;\n }\n\n const dep = parseDependencyString([groupId, artifactId, version].join(':'));\n if (!dep) {\n return ctx;\n }\n\n const methodName = ctx.tokenMap.methodName ?? null;\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n } else {\n // = string value\n if (methodName?.[0]?.value === 'dependencySet') {\n dep.sharedVariableName = `${groupId}:${version}`;\n }\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handlePlugin(ctx: Ctx): Ctx {\n const methodName = loadFromTokenMap(ctx, 'methodName')[0];\n const pluginNameTokens = loadFromTokenMap(ctx, 'pluginName');\n const pluginVersion = loadFromTokenMap(ctx, 'version');\n\n const plugin = interpolateString(pluginNameTokens, ctx);\n if (!plugin) {\n return ctx;\n }\n\n const depName =\n methodName.value === 'kotlin' ? `org.jetbrains.kotlin.${plugin}` : plugin;\n const packageName = `${depName}:${depName}.gradle.plugin`;\n\n const dep: PackageDependency<GradleManagerData> = {\n depType: 'plugin',\n depName,\n packageName,\n commitMessageTopic: `plugin ${depName}`,\n currentValue: pluginVersion[0].value,\n managerData: {\n fileReplacePosition: pluginVersion[0].offset,\n packageFile: ctx.packageFile,\n },\n };\n\n if (pluginVersion.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (pluginVersion[0].type === 'symbol') {\n const varData = findVariable(pluginVersion[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n } else {\n dep.skipReason = 'unspecified-version';\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nfunction isValidContentDescriptorRegex(\n fieldName: string,\n pattern: string,\n): boolean {\n try {\n regEx(pattern);\n } catch {\n logger.debug(\n `Skipping content descriptor with unsupported regExp pattern for ${fieldName}: ${pattern}`,\n );\n return false;\n }\n\n return true;\n}\n\nexport function handleRegistryContent(ctx: Ctx): Ctx {\n const methodName = loadFromTokenMap(ctx, 'methodName')[0].value;\n let groupId = loadFromTokenMap(ctx, 'groupId')[0].value;\n\n let matcher: ContentDescriptorMatcher = 'simple';\n if (methodName.includes('Regex')) {\n matcher = 'regex';\n groupId = `^${groupId}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('group', groupId)) {\n return ctx;\n }\n } else if (methodName.includes('AndSubgroups')) {\n matcher = 'subgroup';\n }\n\n const mode = methodName.startsWith('include') ? 'include' : 'exclude';\n const spec: ContentDescriptorSpec = { mode, matcher, groupId };\n\n if (methodName.includes('Module') || methodName.includes('Version')) {\n spec.artifactId = loadFromTokenMap(ctx, 'artifactId')[0].value;\n if (matcher === 'regex') {\n spec.artifactId = `^${spec.artifactId}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('module', spec.artifactId)) {\n return ctx;\n }\n }\n }\n\n if (methodName.includes('Version')) {\n spec.version = loadFromTokenMap(ctx, 'version')[0].value;\n if (matcher === 'regex') {\n spec.version = `^${spec.version}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('version', spec.version)) {\n return ctx;\n }\n }\n }\n\n ctx.tmpRegistryContent.push(spec);\n\n return ctx;\n}\n\nfunction isPluginRegistry(ctx: Ctx): boolean {\n if (ctx.tokenMap.registryScope) {\n const registryScope = loadFromTokenMap(ctx, 'registryScope')[0].value;\n return registryScope === 'pluginManagement';\n }\n\n return false;\n}\n\nfunction isExclusiveRegistry(ctx: Ctx): boolean {\n if (ctx.tokenMap.registryType) {\n const registryType = loadFromTokenMap(ctx, 'registryType')[0].value;\n return registryType === 'exclusiveContent';\n }\n\n return false;\n}\n\nexport function handleRegistryUrl(ctx: Ctx): Ctx {\n let localVariables = ctx.globalVars;\n\n if (!ctx.tokenMap.registryUrl) {\n return ctx;\n }\n\n if (ctx.tokenMap.name) {\n const nameTokens = loadFromTokenMap(ctx, 'name');\n const nameValue = interpolateString(nameTokens, ctx, localVariables);\n if (nameValue) {\n localVariables = {\n ...localVariables,\n name: {\n key: 'name',\n value: nameValue,\n },\n };\n }\n }\n\n let registryUrl = interpolateString(\n loadFromTokenMap(ctx, 'registryUrl'),\n ctx,\n localVariables,\n );\n if (registryUrl) {\n registryUrl = registryUrl.replace(regEx(/\\\\/g), '');\n const url = parseUrl(registryUrl);\n if (url?.host && url.protocol) {\n const registryType = isExclusiveRegistry(ctx) ? 'exclusive' : 'regular';\n if (registryType === 'exclusive' && !ctx.tmpRegistryContent.length) {\n logger.debug(\n `Skipping exclusive registry ${registryUrl} with unsupported content descriptors`,\n );\n return ctx;\n }\n\n ctx.registryUrls.push({\n registryUrl,\n registryType,\n scope: isPluginRegistry(ctx) ? 'plugin' : 'dep',\n content: ctx.tmpRegistryContent,\n });\n }\n }\n\n return ctx;\n}\n\nexport function handleCatalogLongFormDep(ctx: Ctx): Ctx {\n const groupIdTokens = loadFromTokenMap(ctx, 'groupId');\n const artifactIdTokens = loadFromTokenMap(ctx, 'artifactId');\n\n const groupId = interpolateString(groupIdTokens, ctx);\n const artifactId = interpolateString(artifactIdTokens, ctx);\n if (!groupId || !artifactId) {\n return ctx;\n }\n\n const aliasToken = loadFromTokenMap(ctx, 'alias')[0];\n const key = `libs.${aliasToken.value.replace(regEx(/[-_]/g), '.')}`;\n\n ctx.globalVars[key] = {\n key,\n value: `${groupId}:${artifactId}`,\n fileReplacePosition: aliasToken.offset,\n packageFile: ctx.packageFile,\n };\n\n if (ctx.tokenMap.version) {\n const version = interpolateString(loadFromTokenMap(ctx, 'version'), ctx);\n if (version) {\n handleLongFormDep(ctx);\n }\n }\n\n return ctx;\n}\n\nexport function handleCatalogDepString(ctx: Ctx): Ctx {\n const templateStringTokens = loadFromTokenMap(ctx, 'templateStringTokens');\n const templateString = interpolateString(templateStringTokens, ctx);\n if (!templateString) {\n return ctx;\n }\n\n const aliasToken = loadFromTokenMap(ctx, 'alias')[0];\n const key = `libs.${aliasToken.value.replace(regEx(/[-_]/g), '.')}`;\n\n ctx.globalVars[key] = {\n key,\n value: templateString,\n fileReplacePosition: aliasToken.offset,\n packageFile: ctx.packageFile,\n };\n\n return handleDepString(ctx);\n}\n\nexport function handleApplyFrom(ctx: Ctx): Ctx {\n let scriptFile = interpolateString(loadFromTokenMap(ctx, 'scriptFile'), ctx);\n if (!scriptFile) {\n return ctx;\n }\n\n if (ctx.tokenMap.parentPath) {\n const parentPath = interpolateString(\n loadFromTokenMap(ctx, 'parentPath'),\n ctx,\n );\n if (parentPath && scriptFile) {\n scriptFile = upath.join(parentPath, scriptFile);\n }\n }\n\n if (ctx.recursionDepth > 2) {\n logger.debug(`Max recursion depth reached in script file: ${scriptFile}`);\n return ctx;\n }\n\n if (!regEx(/\\.gradle(\\.kts)?$/).test(scriptFile)) {\n logger.debug({ scriptFile }, `Only Gradle files can be included`);\n return ctx;\n }\n\n const scriptFilePath = getSiblingFileName(ctx.packageFile, scriptFile);\n if (!ctx.fileContents[scriptFilePath]) {\n logger.debug(`Failed to process included Gradle file ${scriptFilePath}`);\n return ctx;\n }\n\n const matchResult = parseGradle(\n // TODO #22198\n ctx.fileContents[scriptFilePath],\n ctx.globalVars,\n scriptFilePath,\n ctx.fileContents,\n ctx.recursionDepth + 1,\n );\n\n ctx.deps.push(...matchResult.deps);\n ctx.globalVars = { ...ctx.globalVars, ...matchResult.vars };\n ctx.registryUrls.push(...matchResult.urls);\n\n return ctx;\n}\n\nexport function handleImplicitDep(ctx: Ctx): Ctx {\n const implicitDepName = loadFromTokenMap(ctx, 'implicitDepName')[0].value;\n const versionTokens = loadFromTokenMap(ctx, 'version');\n const versionValue = interpolateString(versionTokens, ctx);\n if (!versionValue) {\n return ctx;\n }\n\n const isImplicitGradlePlugin = implicitDepName in GRADLE_PLUGINS;\n const groupIdArtifactId = isImplicitGradlePlugin\n ? GRADLE_PLUGINS[implicitDepName as keyof typeof GRADLE_PLUGINS][1]\n : GRADLE_TEST_SUITES[implicitDepName as keyof typeof GRADLE_TEST_SUITES];\n\n const dep = parseDependencyString(`${groupIdArtifactId}:${versionValue}`);\n if (!dep) {\n return ctx;\n }\n\n dep.depName = implicitDepName;\n dep.packageName = groupIdArtifactId;\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handlers.js","names":[],"sources":["../../../../../lib/modules/manager/gradle/parser/handlers.ts"],"sourcesContent":["import upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport { getSiblingFileName } from '../../../../util/fs/index.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { parseUrl } from '../../../../util/url.ts';\nimport type { PackageDependency } from '../../types.ts';\nimport type { parseGradle as parseGradleCallback } from '../parser.ts';\nimport type {\n ContentDescriptorMatcher,\n ContentDescriptorSpec,\n Ctx,\n GradleManagerData,\n} from '../types.ts';\nimport { isDependencyString, parseDependencyString } from '../utils.ts';\nimport {\n GRADLE_PLUGINS,\n GRADLE_TEST_SUITES,\n findVariable,\n interpolateString,\n loadFromTokenMap,\n} from './common.ts';\n\n// needed to break circular dependency\nlet parseGradle: typeof parseGradleCallback;\nexport function setParseGradleFunc(func: typeof parseGradleCallback): void {\n parseGradle = func;\n}\n\nexport function handleAssignment(ctx: Ctx): Ctx {\n const key = loadFromTokenMap(ctx, 'keyToken')[0].value;\n const valTokens = loadFromTokenMap(ctx, 'valToken');\n\n if (valTokens.length > 1) {\n // = template string with multiple variables\n ctx.tokenMap.templateStringTokens = valTokens;\n handleDepString(ctx);\n delete ctx.tokenMap.templateStringTokens;\n } else if (valTokens[0].type === 'symbol') {\n // foo = bar || foo = \"${bar}\"\n const varData = findVariable(valTokens[0].value, ctx);\n if (varData) {\n ctx.globalVars[key] = { ...varData };\n }\n } else {\n // = string value\n const dep = parseDependencyString(valTokens[0].value);\n if (dep) {\n dep.sharedVariableName = key;\n dep.managerData = {\n fileReplacePosition: valTokens[0].offset + dep.depName!.length + 1,\n packageFile: ctx.packageFile,\n };\n ctx.deps.push(dep);\n }\n\n ctx.globalVars[key] = {\n key,\n value: valTokens[0].value,\n fileReplacePosition: valTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n }\n\n return ctx;\n}\n\nexport function handleDepString(ctx: Ctx): Ctx {\n const stringTokens = loadFromTokenMap(ctx, 'templateStringTokens');\n\n const templateString = interpolateString(stringTokens, ctx);\n if (!templateString) {\n return ctx;\n }\n\n const dep = parseDependencyString(templateString);\n if (!dep) {\n return ctx;\n }\n\n let packageFile: string | undefined;\n let fileReplacePosition: number | undefined;\n for (const token of stringTokens) {\n if (token.type === 'symbol') {\n const varData = findVariable(token.value, ctx);\n if (varData) {\n packageFile = varData.packageFile;\n fileReplacePosition = varData.fileReplacePosition;\n if (varData.value === dep.currentValue) {\n dep.managerData = { fileReplacePosition, packageFile };\n dep.sharedVariableName = varData.key;\n }\n }\n }\n }\n\n if (!dep.managerData) {\n const lastToken = stringTokens.at(-1);\n if (\n lastToken?.type === 'string-value' &&\n dep.currentValue &&\n lastToken.value.includes(dep.currentValue)\n ) {\n packageFile = ctx.packageFile;\n if (stringTokens.length === 1) {\n fileReplacePosition = lastToken.offset + dep.depName!.length + 1;\n } else {\n fileReplacePosition =\n lastToken.offset + lastToken.value.lastIndexOf(dep.currentValue);\n }\n delete dep.sharedVariableName;\n } else {\n dep.skipReason = 'contains-variable';\n }\n dep.managerData = { fileReplacePosition, packageFile };\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handleKotlinShortNotationDep(ctx: Ctx): Ctx {\n const moduleNameTokens = loadFromTokenMap(ctx, 'artifactId');\n const versionTokens = loadFromTokenMap(ctx, 'version');\n\n const moduleName = interpolateString(moduleNameTokens, ctx);\n const versionValue = interpolateString(versionTokens, ctx);\n if (!moduleName || !versionValue) {\n return ctx;\n }\n\n const groupIdArtifactId = `org.jetbrains.kotlin:kotlin-${moduleName}`;\n const dep = parseDependencyString(`${groupIdArtifactId}:${versionValue}`);\n if (!dep) {\n return ctx;\n }\n\n dep.depName = moduleName;\n dep.packageName = groupIdArtifactId;\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handleLongFormDep(ctx: Ctx): Ctx {\n const groupIdTokens = loadFromTokenMap(ctx, 'groupId');\n const artifactIdTokens = loadFromTokenMap(ctx, 'artifactId');\n const versionTokens = loadFromTokenMap(ctx, 'version');\n\n const groupId = interpolateString(groupIdTokens, ctx);\n const artifactId = interpolateString(artifactIdTokens, ctx);\n const version = interpolateString(versionTokens, ctx);\n if (!groupId || !artifactId || !version) {\n return ctx;\n }\n\n // Special handling: 3 independent dependencies mismatched as groupId, artifactId, version\n if (\n isDependencyString(groupId) &&\n isDependencyString(artifactId) &&\n isDependencyString(version)\n ) {\n ctx.tokenMap.templateStringTokens = groupIdTokens;\n handleDepString(ctx);\n ctx.tokenMap.templateStringTokens = artifactIdTokens;\n handleDepString(ctx);\n ctx.tokenMap.templateStringTokens = versionTokens;\n handleDepString(ctx);\n\n return ctx;\n }\n\n const dep = parseDependencyString([groupId, artifactId, version].join(':'));\n if (!dep) {\n return ctx;\n }\n\n const methodName = ctx.tokenMap.methodName ?? null;\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n } else {\n // = string value\n if (methodName?.[0]?.value === 'dependencySet') {\n dep.sharedVariableName = `${groupId}:${version}`;\n }\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nexport function handlePlugin(ctx: Ctx): Ctx {\n const methodName = loadFromTokenMap(ctx, 'methodName')[0];\n const pluginNameTokens = loadFromTokenMap(ctx, 'pluginName');\n const pluginVersion = loadFromTokenMap(ctx, 'version');\n\n const plugin = interpolateString(pluginNameTokens, ctx);\n if (!plugin) {\n return ctx;\n }\n\n const depName =\n methodName.value === 'kotlin' ? `org.jetbrains.kotlin.${plugin}` : plugin;\n const packageName = `${depName}:${depName}.gradle.plugin`;\n\n const dep: PackageDependency<GradleManagerData> = {\n depType: 'plugin',\n depName,\n packageName,\n commitMessageTopic: `plugin ${depName}`,\n currentValue: pluginVersion[0].value,\n managerData: {\n fileReplacePosition: pluginVersion[0].offset,\n packageFile: ctx.packageFile,\n },\n };\n\n if (pluginVersion.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (pluginVersion[0].type === 'symbol') {\n const varData = findVariable(pluginVersion[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n } else {\n dep.skipReason = 'unspecified-version';\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nfunction isValidContentDescriptorRegex(\n fieldName: string,\n pattern: string,\n): boolean {\n try {\n regEx(pattern);\n } catch {\n logger.debug(\n `Skipping content descriptor with unsupported regExp pattern for ${fieldName}: ${pattern}`,\n );\n return false;\n }\n\n return true;\n}\n\nexport function handleRegistryContent(ctx: Ctx): Ctx {\n const methodName = loadFromTokenMap(ctx, 'methodName')[0].value;\n let groupId = loadFromTokenMap(ctx, 'groupId')[0].value;\n\n let matcher: ContentDescriptorMatcher = 'simple';\n if (methodName.includes('Regex')) {\n matcher = 'regex';\n groupId = `^${groupId}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('group', groupId)) {\n return ctx;\n }\n } else if (methodName.includes('AndSubgroups')) {\n matcher = 'subgroup';\n }\n\n const mode = methodName.startsWith('include') ? 'include' : 'exclude';\n const spec: ContentDescriptorSpec = { mode, matcher, groupId };\n\n if (methodName.includes('Module') || methodName.includes('Version')) {\n spec.artifactId = loadFromTokenMap(ctx, 'artifactId')[0].value;\n if (matcher === 'regex') {\n spec.artifactId = `^${spec.artifactId}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('module', spec.artifactId)) {\n return ctx;\n }\n }\n }\n\n if (methodName.includes('Version')) {\n spec.version = loadFromTokenMap(ctx, 'version')[0].value;\n if (matcher === 'regex') {\n spec.version = `^${spec.version}$`.replaceAll('\\\\\\\\', '\\\\');\n if (!isValidContentDescriptorRegex('version', spec.version)) {\n return ctx;\n }\n }\n }\n\n ctx.tmpRegistryContent.push(spec);\n\n return ctx;\n}\n\nfunction isPluginRegistry(ctx: Ctx): boolean {\n if (ctx.tokenMap.registryScope) {\n const registryScope = loadFromTokenMap(ctx, 'registryScope')[0].value;\n return registryScope === 'pluginManagement';\n }\n\n return false;\n}\n\nfunction isExclusiveRegistry(ctx: Ctx): boolean {\n if (ctx.tokenMap.registryType) {\n const registryType = loadFromTokenMap(ctx, 'registryType')[0].value;\n return registryType === 'exclusiveContent';\n }\n\n return false;\n}\n\nexport function handleRegistryUrl(ctx: Ctx): Ctx {\n let localVariables = ctx.globalVars;\n\n if (!ctx.tokenMap.registryUrl) {\n return ctx;\n }\n\n if (ctx.tokenMap.name) {\n const nameTokens = loadFromTokenMap(ctx, 'name');\n const nameValue = interpolateString(nameTokens, ctx, localVariables);\n if (nameValue) {\n localVariables = {\n ...localVariables,\n name: {\n key: 'name',\n value: nameValue,\n },\n };\n }\n }\n\n let registryUrl = interpolateString(\n loadFromTokenMap(ctx, 'registryUrl'),\n ctx,\n localVariables,\n );\n if (registryUrl) {\n registryUrl = registryUrl.replace(regEx(/\\\\/g), '');\n const url = parseUrl(registryUrl);\n if (url?.host && url.protocol) {\n const registryType = isExclusiveRegistry(ctx) ? 'exclusive' : 'regular';\n if (registryType === 'exclusive' && !ctx.tmpRegistryContent.length) {\n logger.debug(\n `Skipping exclusive registry ${registryUrl} with unsupported content descriptors`,\n );\n return ctx;\n }\n\n ctx.registryUrls.push({\n registryUrl,\n registryType,\n scope: isPluginRegistry(ctx) ? 'plugin' : 'dep',\n content: ctx.tmpRegistryContent,\n });\n }\n }\n\n return ctx;\n}\n\nexport function handleCatalogLongFormDep(ctx: Ctx): Ctx {\n const groupIdTokens = loadFromTokenMap(ctx, 'groupId');\n const artifactIdTokens = loadFromTokenMap(ctx, 'artifactId');\n\n const groupId = interpolateString(groupIdTokens, ctx);\n const artifactId = interpolateString(artifactIdTokens, ctx);\n if (!groupId || !artifactId) {\n return ctx;\n }\n\n const aliasToken = loadFromTokenMap(ctx, 'alias')[0];\n const key = `libs.${aliasToken.value.replace(regEx(/[-_]/g), '.')}`;\n\n ctx.globalVars[key] = {\n key,\n value: `${groupId}:${artifactId}`,\n fileReplacePosition: aliasToken.offset,\n packageFile: ctx.packageFile,\n };\n\n if (ctx.tokenMap.version) {\n const version = interpolateString(loadFromTokenMap(ctx, 'version'), ctx);\n if (version) {\n handleLongFormDep(ctx);\n }\n }\n\n return ctx;\n}\n\nexport function handleCatalogDepString(ctx: Ctx): Ctx {\n const templateStringTokens = loadFromTokenMap(ctx, 'templateStringTokens');\n const templateString = interpolateString(templateStringTokens, ctx);\n if (!templateString) {\n return ctx;\n }\n\n const aliasToken = loadFromTokenMap(ctx, 'alias')[0];\n const key = `libs.${aliasToken.value.replace(regEx(/[-_]/g), '.')}`;\n\n ctx.globalVars[key] = {\n key,\n value: templateString,\n fileReplacePosition: aliasToken.offset,\n packageFile: ctx.packageFile,\n };\n\n return handleDepString(ctx);\n}\n\nexport function handleApplyFrom(ctx: Ctx): Ctx {\n let scriptFile = interpolateString(loadFromTokenMap(ctx, 'scriptFile'), ctx);\n if (!scriptFile) {\n return ctx;\n }\n\n if (ctx.tokenMap.parentPath) {\n const parentPath = interpolateString(\n loadFromTokenMap(ctx, 'parentPath'),\n ctx,\n );\n if (parentPath && scriptFile) {\n scriptFile = upath.join(parentPath, scriptFile);\n }\n }\n\n if (ctx.recursionDepth > 2) {\n logger.debug(`Max recursion depth reached in script file: ${scriptFile}`);\n return ctx;\n }\n\n if (!regEx(/\\.gradle(?:\\.kts)?$/).test(scriptFile)) {\n logger.debug({ scriptFile }, `Only Gradle files can be included`);\n return ctx;\n }\n\n const scriptFilePath = getSiblingFileName(ctx.packageFile, scriptFile);\n if (!ctx.fileContents[scriptFilePath]) {\n logger.debug(`Failed to process included Gradle file ${scriptFilePath}`);\n return ctx;\n }\n\n const matchResult = parseGradle(\n // TODO #22198\n ctx.fileContents[scriptFilePath],\n ctx.globalVars,\n scriptFilePath,\n ctx.fileContents,\n ctx.recursionDepth + 1,\n );\n\n ctx.deps.push(...matchResult.deps);\n ctx.globalVars = { ...ctx.globalVars, ...matchResult.vars };\n ctx.registryUrls.push(...matchResult.urls);\n\n return ctx;\n}\n\nexport function handleImplicitDep(ctx: Ctx): Ctx {\n const implicitDepName = loadFromTokenMap(ctx, 'implicitDepName')[0].value;\n const versionTokens = loadFromTokenMap(ctx, 'version');\n const versionValue = interpolateString(versionTokens, ctx);\n if (!versionValue) {\n return ctx;\n }\n\n const isImplicitGradlePlugin = implicitDepName in GRADLE_PLUGINS;\n const groupIdArtifactId = isImplicitGradlePlugin\n ? GRADLE_PLUGINS[implicitDepName as keyof typeof GRADLE_PLUGINS][1]\n : GRADLE_TEST_SUITES[implicitDepName as keyof typeof GRADLE_TEST_SUITES];\n\n const dep = parseDependencyString(`${groupIdArtifactId}:${versionValue}`);\n if (!dep) {\n return ctx;\n }\n\n dep.depName = implicitDepName;\n dep.packageName = groupIdArtifactId;\n dep.managerData = {\n fileReplacePosition: versionTokens[0].offset,\n packageFile: ctx.packageFile,\n };\n\n if (versionTokens.length > 1) {\n // = template string with multiple variables\n dep.skipReason = 'unspecified-version';\n } else if (versionTokens[0].type === 'symbol') {\n const varData = findVariable(versionTokens[0].value, ctx);\n if (varData) {\n dep.sharedVariableName = varData.key;\n dep.currentValue = varData.value;\n dep.managerData = {\n fileReplacePosition: varData.fileReplacePosition,\n packageFile: varData.packageFile,\n };\n }\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n"],"mappings":"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"}
|
|
@@ -59,7 +59,7 @@ function isAlias(repository) {
|
|
|
59
59
|
return repository.startsWith("@") || repository.startsWith("alias:");
|
|
60
60
|
}
|
|
61
61
|
function aliasRecordToRepositories(registryAliases) {
|
|
62
|
-
return Object.entries(registryAliases).filter(([, url]) => regEx(/^(https?|oci):\/\/.+/).exec(url)).map(([alias, url]) => {
|
|
62
|
+
return Object.entries(registryAliases).filter(([, url]) => regEx(/^(?:https?|oci):\/\/.+/).exec(url)).map(([alias, url]) => {
|
|
63
63
|
return {
|
|
64
64
|
name: alias,
|
|
65
65
|
repository: url
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../../lib/modules/manager/helmv3/utils.ts"],"sourcesContent":["import upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport { DockerDatasource } from '../../datasource/docker/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport { removeOCIPrefix } from './oci.ts';\nimport type { ChartDefinition, Repository } from './types.ts';\n\nexport function parseRepository(\n depName: string,\n repositoryURL: string,\n): PackageDependency {\n const res: PackageDependency = {};\n\n const url = parseUrl(repositoryURL);\n if (!url) {\n logger.debug({ repositoryURL }, 'Error parsing url');\n res.skipReason = 'invalid-url';\n return res;\n }\n switch (url.protocol) {\n case 'oci:':\n res.datasource = DockerDatasource.id;\n res.packageName = `${removeOCIPrefix(repositoryURL)}/${depName}`;\n // https://github.com/helm/helm/issues/10312\n // https://github.com/helm/helm/issues/10678\n res.pinDigests = false;\n break;\n case 'file:':\n res.skipReason = 'local-dependency';\n break;\n default:\n res.registryUrls = [repositoryURL];\n }\n return res;\n}\n\n/**\n * Resolves alias in repository string.\n *\n * @param repository to be resolved string\n * @param registryAliases Records containing registryAliases as key and to be resolved URLs as values\n *\n * @returns resolved alias. If repository does not contain an alias the repository string will be returned. Should it contain an alias which can not be resolved using `registryAliases`, null will be returned\n */\nexport function resolveAlias(\n repository: string,\n registryAliases: Record<string, string>,\n): string | null {\n if (!isAlias(repository)) {\n return repository;\n }\n\n const repoWithPrefixRemoved = repository.slice(\n repository.startsWith('@') ? 1 : 6,\n );\n const alias = registryAliases[repoWithPrefixRemoved];\n if (alias) {\n return alias;\n }\n return null;\n}\n\nexport function getRepositories(definitions: ChartDefinition[]): Repository[] {\n const repositoryList = definitions\n .flatMap((value) => value.dependencies)\n .filter((dependency) => dependency.repository) // only keep non-local references --> if no repository is defined the chart will be searched in charts/<name>\n .filter((dependency) => !isAlias(dependency.repository)) // do not add registryAliases\n .filter((dependency) => !dependency.repository.startsWith('file:')) // skip repositories which are locally referenced\n .map((dependency) => {\n // remove additional keys to prevent interference at deduplication\n return {\n name: dependency.name,\n repository: dependency.repository,\n };\n });\n const dedup = new Set();\n return repositoryList.filter((el) => {\n const duplicate = dedup.has(el.repository);\n dedup.add(el.repository);\n return !duplicate;\n });\n}\n\nexport function isAlias(repository: string): boolean {\n if (!repository) {\n return false;\n }\n return repository.startsWith('@') || repository.startsWith('alias:');\n}\n\nexport function aliasRecordToRepositories(\n registryAliases: Record<string, string>,\n): Repository[] {\n return Object.entries(registryAliases)\n .filter(([, url]) => regEx(/^(https?|oci):\\/\\/.+/).exec(url))\n .map(([alias, url]) => {\n return {\n name: alias,\n repository: url,\n };\n });\n}\n\nexport function isFileInDir(dir: string, file: string): boolean {\n return upath.dirname(file) === dir;\n}\n"],"mappings":";;;;;;;AASA,SAAgB,gBACd,SACA,eACmB;CACnB,MAAM,MAAyB,CAAC;CAEhC,MAAM,MAAM,SAAS,aAAa;CAClC,IAAI,CAAC,KAAK;EACR,OAAO,MAAM,EAAE,cAAc,GAAG,mBAAmB;EACnD,IAAI,aAAa;EACjB,OAAO;CACT;CACA,QAAQ,IAAI,UAAZ;EACE,KAAK;GACH,IAAI,aAAa,iBAAiB;GAClC,IAAI,cAAc,GAAG,gBAAgB,aAAa,EAAE,GAAG;GAGvD,IAAI,aAAa;GACjB;EACF,KAAK;GACH,IAAI,aAAa;GACjB;EACF,SACE,IAAI,eAAe,CAAC,aAAa;CACrC;CACA,OAAO;AACT;;;;;;;;;AAUA,SAAgB,aACd,YACA,iBACe;CACf,IAAI,CAAC,QAAQ,UAAU,GACrB,OAAO;CAMT,MAAM,QAAQ,gBAHgB,WAAW,MACvC,WAAW,WAAW,GAAG,IAAI,IAAI,CAEe;CAClD,IAAI,OACF,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,gBAAgB,aAA8C;CAC5E,MAAM,iBAAiB,YACpB,SAAS,UAAU,MAAM,YAAY,CAAC,CACtC,QAAQ,eAAe,WAAW,UAAU,CAAC,CAC7C,QAAQ,eAAe,CAAC,QAAQ,WAAW,UAAU,CAAC,CAAC,CACvD,QAAQ,eAAe,CAAC,WAAW,WAAW,WAAW,OAAO,CAAC,CAAC,CAClE,KAAK,eAAe;EAEnB,OAAO;GACL,MAAM,WAAW;GACjB,YAAY,WAAW;EACzB;CACF,CAAC;CACH,MAAM,wBAAQ,IAAI,IAAI;CACtB,OAAO,eAAe,QAAQ,OAAO;EACnC,MAAM,YAAY,MAAM,IAAI,GAAG,UAAU;EACzC,MAAM,IAAI,GAAG,UAAU;EACvB,OAAO,CAAC;CACV,CAAC;AACH;AAEA,SAAgB,QAAQ,YAA6B;CACnD,IAAI,CAAC,YACH,OAAO;CAET,OAAO,WAAW,WAAW,GAAG,KAAK,WAAW,WAAW,QAAQ;AACrE;AAEA,SAAgB,0BACd,iBACc;CACd,OAAO,OAAO,QAAQ,eAAe,CAAC,CACnC,QAAQ,GAAG,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../../lib/modules/manager/helmv3/utils.ts"],"sourcesContent":["import upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport { DockerDatasource } from '../../datasource/docker/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport { removeOCIPrefix } from './oci.ts';\nimport type { ChartDefinition, Repository } from './types.ts';\n\nexport function parseRepository(\n depName: string,\n repositoryURL: string,\n): PackageDependency {\n const res: PackageDependency = {};\n\n const url = parseUrl(repositoryURL);\n if (!url) {\n logger.debug({ repositoryURL }, 'Error parsing url');\n res.skipReason = 'invalid-url';\n return res;\n }\n switch (url.protocol) {\n case 'oci:':\n res.datasource = DockerDatasource.id;\n res.packageName = `${removeOCIPrefix(repositoryURL)}/${depName}`;\n // https://github.com/helm/helm/issues/10312\n // https://github.com/helm/helm/issues/10678\n res.pinDigests = false;\n break;\n case 'file:':\n res.skipReason = 'local-dependency';\n break;\n default:\n res.registryUrls = [repositoryURL];\n }\n return res;\n}\n\n/**\n * Resolves alias in repository string.\n *\n * @param repository to be resolved string\n * @param registryAliases Records containing registryAliases as key and to be resolved URLs as values\n *\n * @returns resolved alias. If repository does not contain an alias the repository string will be returned. Should it contain an alias which can not be resolved using `registryAliases`, null will be returned\n */\nexport function resolveAlias(\n repository: string,\n registryAliases: Record<string, string>,\n): string | null {\n if (!isAlias(repository)) {\n return repository;\n }\n\n const repoWithPrefixRemoved = repository.slice(\n repository.startsWith('@') ? 1 : 6,\n );\n const alias = registryAliases[repoWithPrefixRemoved];\n if (alias) {\n return alias;\n }\n return null;\n}\n\nexport function getRepositories(definitions: ChartDefinition[]): Repository[] {\n const repositoryList = definitions\n .flatMap((value) => value.dependencies)\n .filter((dependency) => dependency.repository) // only keep non-local references --> if no repository is defined the chart will be searched in charts/<name>\n .filter((dependency) => !isAlias(dependency.repository)) // do not add registryAliases\n .filter((dependency) => !dependency.repository.startsWith('file:')) // skip repositories which are locally referenced\n .map((dependency) => {\n // remove additional keys to prevent interference at deduplication\n return {\n name: dependency.name,\n repository: dependency.repository,\n };\n });\n const dedup = new Set();\n return repositoryList.filter((el) => {\n const duplicate = dedup.has(el.repository);\n dedup.add(el.repository);\n return !duplicate;\n });\n}\n\nexport function isAlias(repository: string): boolean {\n if (!repository) {\n return false;\n }\n return repository.startsWith('@') || repository.startsWith('alias:');\n}\n\nexport function aliasRecordToRepositories(\n registryAliases: Record<string, string>,\n): Repository[] {\n return Object.entries(registryAliases)\n .filter(([, url]) => regEx(/^(?:https?|oci):\\/\\/.+/).exec(url))\n .map(([alias, url]) => {\n return {\n name: alias,\n repository: url,\n };\n });\n}\n\nexport function isFileInDir(dir: string, file: string): boolean {\n return upath.dirname(file) === dir;\n}\n"],"mappings":";;;;;;;AASA,SAAgB,gBACd,SACA,eACmB;CACnB,MAAM,MAAyB,CAAC;CAEhC,MAAM,MAAM,SAAS,aAAa;CAClC,IAAI,CAAC,KAAK;EACR,OAAO,MAAM,EAAE,cAAc,GAAG,mBAAmB;EACnD,IAAI,aAAa;EACjB,OAAO;CACT;CACA,QAAQ,IAAI,UAAZ;EACE,KAAK;GACH,IAAI,aAAa,iBAAiB;GAClC,IAAI,cAAc,GAAG,gBAAgB,aAAa,EAAE,GAAG;GAGvD,IAAI,aAAa;GACjB;EACF,KAAK;GACH,IAAI,aAAa;GACjB;EACF,SACE,IAAI,eAAe,CAAC,aAAa;CACrC;CACA,OAAO;AACT;;;;;;;;;AAUA,SAAgB,aACd,YACA,iBACe;CACf,IAAI,CAAC,QAAQ,UAAU,GACrB,OAAO;CAMT,MAAM,QAAQ,gBAHgB,WAAW,MACvC,WAAW,WAAW,GAAG,IAAI,IAAI,CAEe;CAClD,IAAI,OACF,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,gBAAgB,aAA8C;CAC5E,MAAM,iBAAiB,YACpB,SAAS,UAAU,MAAM,YAAY,CAAC,CACtC,QAAQ,eAAe,WAAW,UAAU,CAAC,CAC7C,QAAQ,eAAe,CAAC,QAAQ,WAAW,UAAU,CAAC,CAAC,CACvD,QAAQ,eAAe,CAAC,WAAW,WAAW,WAAW,OAAO,CAAC,CAAC,CAClE,KAAK,eAAe;EAEnB,OAAO;GACL,MAAM,WAAW;GACjB,YAAY,WAAW;EACzB;CACF,CAAC;CACH,MAAM,wBAAQ,IAAI,IAAI;CACtB,OAAO,eAAe,QAAQ,OAAO;EACnC,MAAM,YAAY,MAAM,IAAI,GAAG,UAAU;EACzC,MAAM,IAAI,GAAG,UAAU;EACvB,OAAO,CAAC;CACV,CAAC;AACH;AAEA,SAAgB,QAAQ,YAA6B;CACnD,IAAI,CAAC,YACH,OAAO;CAET,OAAO,WAAW,WAAW,GAAG,KAAK,WAAW,WAAW,QAAQ;AACrE;AAEA,SAAgB,0BACd,iBACc;CACd,OAAO,OAAO,QAAQ,eAAe,CAAC,CACnC,QAAQ,GAAG,SAAS,MAAM,wBAAwB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAC9D,KAAK,CAAC,OAAO,SAAS;EACrB,OAAO;GACL,MAAM;GACN,YAAY;EACd;CACF,CAAC;AACL;AAEA,SAAgB,YAAY,KAAa,MAAuB;CAC9D,OAAO,MAAM,QAAQ,IAAI,MAAM;AACjC"}
|
|
@@ -2,8 +2,8 @@ import { regEx } from "../../../util/regex.js";
|
|
|
2
2
|
import { CdnjsDatasource } from "../../datasource/cdnjs/index.js";
|
|
3
3
|
import { cloudflareUrlRegex } from "../cdnurl/extract.js";
|
|
4
4
|
//#region lib/modules/manager/html/extract.ts
|
|
5
|
-
const regex = regEx(/<\s*(script|link)\s+[^>]*?\/?>/i);
|
|
6
|
-
const integrityRegex = regEx(/\s+integrity\s*=\s*("|')(?<currentDigest>[^"']+)/);
|
|
5
|
+
const regex = regEx(/<\s*(?:script|link)\s+[^>]*?\/?>/i);
|
|
6
|
+
const integrityRegex = regEx(/\s+integrity\s*=\s*(?:"|')(?<currentDigest>[^"']+)/);
|
|
7
7
|
function extractDep(tag) {
|
|
8
8
|
const match = cloudflareUrlRegex.exec(tag);
|
|
9
9
|
if (!match?.groups) return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/html/extract.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport { CdnjsDatasource } from '../../datasource/cdnjs/index.ts';\nimport { cloudflareUrlRegex } from '../cdnurl/extract.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\n\nconst regex = regEx(/<\\s*(script|link)\\s+[^>]*?\\/?>/i);\n\nconst integrityRegex = regEx(\n /\\s+integrity\\s*=\\s*(
|
|
1
|
+
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/html/extract.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport { CdnjsDatasource } from '../../datasource/cdnjs/index.ts';\nimport { cloudflareUrlRegex } from '../cdnurl/extract.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\n\nconst regex = regEx(/<\\s*(?:script|link)\\s+[^>]*?\\/?>/i);\n\nconst integrityRegex = regEx(\n /\\s+integrity\\s*=\\s*(?:\"|')(?<currentDigest>[^\"']+)/,\n);\n\nexport function extractDep(tag: string): PackageDependency | null {\n const match = cloudflareUrlRegex.exec(tag);\n if (!match?.groups) {\n return null;\n }\n const { depName, currentValue, asset } = match.groups;\n const dep: PackageDependency = {\n datasource: CdnjsDatasource.id,\n depName,\n packageName: `${depName}/${asset}`,\n currentValue,\n replaceString: tag,\n };\n const integrityMatch = integrityRegex.exec(tag);\n if (integrityMatch?.groups) {\n dep.currentDigest = integrityMatch.groups.currentDigest;\n }\n return dep;\n}\n\nexport function extractPackageFile(content: string): PackageFileContent | null {\n const deps: PackageDependency[] = [];\n let rest = content;\n let match = regex.exec(rest);\n let offset = 0;\n while (match) {\n const [replaceString] = match;\n offset += match.index + replaceString.length;\n rest = content.slice(offset);\n match = regex.exec(rest);\n const dep = extractDep(replaceString);\n if (dep) {\n deps.push(dep);\n }\n }\n if (!deps.length) {\n return null;\n }\n return { deps };\n}\n"],"mappings":";;;;AAKA,MAAM,QAAQ,MAAM,mCAAmC;AAEvD,MAAM,iBAAiB,MACrB,oDACF;AAEA,SAAgB,WAAW,KAAuC;CAChE,MAAM,QAAQ,mBAAmB,KAAK,GAAG;CACzC,IAAI,CAAC,OAAO,QACV,OAAO;CAET,MAAM,EAAE,SAAS,cAAc,UAAU,MAAM;CAC/C,MAAM,MAAyB;EAC7B,YAAY,gBAAgB;EAC5B;EACA,aAAa,GAAG,QAAQ,GAAG;EAC3B;EACA,eAAe;CACjB;CACA,MAAM,iBAAiB,eAAe,KAAK,GAAG;CAC9C,IAAI,gBAAgB,QAClB,IAAI,gBAAgB,eAAe,OAAO;CAE5C,OAAO;AACT;AAEA,SAAgB,mBAAmB,SAA4C;CAC7E,MAAM,OAA4B,CAAC;CACnC,IAAI,OAAO;CACX,IAAI,QAAQ,MAAM,KAAK,IAAI;CAC3B,IAAI,SAAS;CACb,OAAO,OAAO;EACZ,MAAM,CAAC,iBAAiB;EACxB,UAAU,MAAM,QAAQ,cAAc;EACtC,OAAO,QAAQ,MAAM,MAAM;EAC3B,QAAQ,MAAM,KAAK,IAAI;EACvB,MAAM,MAAM,WAAW,aAAa;EACpC,IAAI,KACF,KAAK,KAAK,GAAG;CAEjB;CACA,IAAI,CAAC,KAAK,QACR,OAAO;CAET,OAAO,EAAE,KAAK;AAChB"}
|
|
@@ -11,8 +11,8 @@ import { isString } from "@sindresorhus/is";
|
|
|
11
11
|
import querystring from "node:querystring";
|
|
12
12
|
//#region lib/modules/manager/kustomize/extract.ts
|
|
13
13
|
const gitUrl = regEx(/^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\/\/)?(?:.*@)?)?(?<path>(?:[^:/\s]+(?::[0-9]+)?[:/])?(?<project>[^/\s]+\/[^/\s]+)))(?<subdir>[^?\s]*)\?(?<queryString>.+)$/);
|
|
14
|
-
const dotGitRegex = regEx(/^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\/\/)?(?:.*@)?)?(?<path>(?:[^:/\s]+(?::[0-9]+)?[:/])?(?<project>[^?\s]*(
|
|
15
|
-
const underscoreGitRegex = regEx(/^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\/\/)?(?:.*@)?)?(?<path>(?:[^:/\s]+(?::[0-9]+)?[:/])?(?<project>[^?\s]*)(_git\/[^/\s]+)))(?<subdir>[^?\s]*)\?(?<queryString>.+)$/);
|
|
14
|
+
const dotGitRegex = regEx(/^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\/\/)?(?:.*@)?)?(?<path>(?:[^:/\s]+(?::[0-9]+)?[:/])?(?<project>[^?\s]*(?:\.git))))(?<subdir>[^?\s]*)\?(?<queryString>.+)$/);
|
|
15
|
+
const underscoreGitRegex = regEx(/^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\/\/)?(?:.*@)?)?(?<path>(?:[^:/\s]+(?::[0-9]+)?[:/])?(?<project>[^?\s]*)(?:_git\/[^/\s]+)))(?<subdir>[^?\s]*)\?(?<queryString>.+)$/);
|
|
16
16
|
const gitUrlWithPath = regEx(/^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\/\/)?(?:.*@)?)?(?<path>(?:[^:/\s]+(?::[0-9]+)?[:/])(?<project>[^?\s]+)))(?:\/\/)(?<subdir>[^?\s]+)\?(?<queryString>.+)$/);
|
|
17
17
|
function extractResource(base) {
|
|
18
18
|
let match;
|
|
@@ -27,7 +27,7 @@ function extractResource(base) {
|
|
|
27
27
|
const versionParam = Array.isArray(params.version) ? params.version[0] : params.version;
|
|
28
28
|
const currentValue = refParam ?? versionParam;
|
|
29
29
|
if (!currentValue) return null;
|
|
30
|
-
if (regEx(/(?:github\.com)(
|
|
30
|
+
if (regEx(/(?:github\.com)(?::|\/)/).test(path)) return {
|
|
31
31
|
currentValue,
|
|
32
32
|
datasource: GithubTagsDatasource.id,
|
|
33
33
|
depName: match.groups.project.replace(".git", "")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/kustomize/extract.ts"],"sourcesContent":["import querystring from 'node:querystring';\nimport { isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseSingleYaml } from '../../../util/yaml.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { HelmDatasource } from '../../datasource/helm/index.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport { isOCIRegistry, removeOCIPrefix } from '../helmv3/oci.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport type { HelmChart, Image, Kustomize } from './types.ts';\n\n// URL specifications should follow the hashicorp URL format\n// https://github.com/hashicorp/go-getter#url-format\nconst gitUrl = regEx(\n /^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\\/\\/)?(?:.*@)?)?(?<path>(?:[^:/\\s]+(?::[0-9]+)?[:/])?(?<project>[^/\\s]+\\/[^/\\s]+)))(?<subdir>[^?\\s]*)\\?(?<queryString>.+)$/,\n);\n// regex to match URLs with \".git\" delimiter\nconst dotGitRegex = regEx(\n /^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\\/\\/)?(?:.*@)?)?(?<path>(?:[^:/\\s]+(?::[0-9]+)?[:/])?(?<project>[^?\\s]*(\\.git))))(?<subdir>[^?\\s]*)\\?(?<queryString>.+)$/,\n);\n// regex to match URLs with \"_git\" delimiter\nconst underscoreGitRegex = regEx(\n /^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\\/\\/)?(?:.*@)?)?(?<path>(?:[^:/\\s]+(?::[0-9]+)?[:/])?(?<project>[^?\\s]*)(_git\\/[^/\\s]+)))(?<subdir>[^?\\s]*)\\?(?<queryString>.+)$/,\n);\n// regex to match URLs having an extra \"//\"\nconst gitUrlWithPath = regEx(\n /^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\\/\\/)?(?:.*@)?)?(?<path>(?:[^:/\\s]+(?::[0-9]+)?[:/])(?<project>[^?\\s]+)))(?:\\/\\/)(?<subdir>[^?\\s]+)\\?(?<queryString>.+)$/,\n);\n\nexport function extractResource(base: string): PackageDependency | null {\n let match: RegExpExecArray | null;\n\n if (base.includes('_git')) {\n match = underscoreGitRegex.exec(base);\n } else if (base.includes('.git')) {\n match = dotGitRegex.exec(base);\n } else if (gitUrlWithPath.test(base)) {\n match = gitUrlWithPath.exec(base);\n } else {\n match = gitUrl.exec(base);\n }\n\n if (!match?.groups) {\n return null;\n }\n\n const { path, queryString } = match.groups;\n const params = querystring.parse(queryString);\n const refParam = Array.isArray(params.ref) ? params.ref[0] : params.ref;\n const versionParam = Array.isArray(params.version)\n ? params.version[0]\n : params.version;\n const currentValue = refParam ?? versionParam;\n if (!currentValue) {\n return null;\n }\n\n if (regEx(/(?:github\\.com)(:|\\/)/).test(path)) {\n return {\n currentValue,\n datasource: GithubTagsDatasource.id,\n depName: match.groups.project.replace('.git', ''),\n };\n }\n\n return {\n datasource: GitTagsDatasource.id,\n depName: path.replace('.git', ''),\n packageName: match.groups.url,\n currentValue,\n };\n}\n\nexport function extractImage(\n image: Image,\n aliases?: Record<string, string>,\n): PackageDependency | null {\n if (!image.name) {\n return null;\n }\n const nameToSplit = image.newName ?? image.name;\n if (!isString(nameToSplit)) {\n logger.debug({ image }, 'Invalid image name');\n return null;\n }\n const nameDep = getDep(nameToSplit, false, aliases);\n const { depName } = nameDep;\n const { digest, newTag } = image;\n if (digest && newTag) {\n logger.debug(\n { newTag, digest },\n 'Kustomize ignores newTag when digest is provided. Pick one, or use `newTag: tag@digest`',\n );\n return {\n depName,\n currentValue: newTag,\n currentDigest: digest,\n skipReason: 'invalid-dependency-specification',\n };\n }\n\n if (digest) {\n if (!isString(digest) || !digest.startsWith('sha256:')) {\n return {\n depName,\n currentValue: digest,\n skipReason: 'invalid-value',\n };\n }\n\n return {\n ...nameDep,\n currentDigest: digest,\n replaceString: digest,\n };\n }\n\n if (newTag) {\n if (!isString(newTag) || newTag.startsWith('sha256:')) {\n return {\n depName,\n currentValue: newTag,\n skipReason: 'invalid-value',\n };\n }\n\n const dep = getDep(`${depName}:${newTag}`, false, aliases);\n return {\n ...dep,\n replaceString: newTag,\n autoReplaceStringTemplate:\n '{{newValue}}{{#if newDigest}}@{{newDigest}}{{/if}}',\n };\n }\n\n if (image.newName) {\n return {\n ...nameDep,\n replaceString: image.newName,\n };\n }\n\n return null;\n}\n\nexport function extractHelmChart(\n helmChart: HelmChart,\n aliases?: Record<string, string>,\n): PackageDependency | null {\n if (!helmChart.name) {\n return null;\n }\n\n if (isOCIRegistry(helmChart.repo)) {\n const dep = getDep(\n `${removeOCIPrefix(helmChart.repo)}/${helmChart.name}:${helmChart.version}`,\n false,\n aliases,\n );\n delete dep.replaceString;\n return {\n ...dep,\n depName: helmChart.name,\n // https://github.com/helm/helm/issues/10312\n // https://github.com/helm/helm/issues/10678\n pinDigests: false,\n };\n }\n\n return {\n depName: helmChart.name,\n currentValue: helmChart.version,\n registryUrls: [helmChart.repo],\n datasource: HelmDatasource.id,\n };\n}\n\nexport function parseKustomize(\n content: string,\n packageFile?: string,\n): Kustomize | null {\n let pkg: Kustomize | null = null;\n try {\n // TODO: use schema (#9610)\n pkg = parseSingleYaml(content);\n } catch /* istanbul ignore next */ {\n logger.debug({ packageFile }, 'Error parsing kustomize file');\n return null;\n }\n\n if (!pkg || isString(pkg)) {\n return null;\n }\n\n pkg.kind ??= 'Kustomization';\n\n if (!['Kustomization', 'Component'].includes(pkg.kind)) {\n return null;\n }\n\n return pkg;\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): PackageFileContent | null {\n logger.trace(`kustomize.extractPackageFile(${packageFile})`);\n const deps: PackageDependency[] = [];\n\n const pkg = parseKustomize(content, packageFile);\n if (!pkg) {\n return null;\n }\n\n // grab the remote bases\n for (const base of coerceArray(pkg.bases).filter(isString)) {\n const dep = extractResource(base);\n if (dep) {\n deps.push({\n ...dep,\n depType: pkg.kind,\n });\n }\n }\n\n // grab the remote resources\n for (const resource of coerceArray(pkg.resources).filter(isString)) {\n const dep = extractResource(resource);\n if (dep) {\n deps.push({\n ...dep,\n depType: pkg.kind,\n });\n }\n }\n\n // grab the remote components\n for (const component of coerceArray(pkg.components).filter(isString)) {\n const dep = extractResource(component);\n if (dep) {\n deps.push({\n ...dep,\n depType: pkg.kind,\n });\n }\n }\n\n // grab the image tags\n for (const image of coerceArray(pkg.images)) {\n const dep = extractImage(image, config.registryAliases);\n if (dep) {\n deps.push({\n ...dep,\n depType: pkg.kind,\n });\n }\n }\n\n // grab the helm charts\n for (const helmChart of coerceArray(pkg.helmCharts)) {\n const dep = extractHelmChart(helmChart, config.registryAliases);\n if (dep) {\n deps.push({\n ...dep,\n depType: 'HelmChart',\n });\n }\n }\n\n if (!deps.length) {\n return null;\n }\n return { deps };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/kustomize/extract.ts"],"sourcesContent":["import querystring from 'node:querystring';\nimport { isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseSingleYaml } from '../../../util/yaml.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { HelmDatasource } from '../../datasource/helm/index.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport { isOCIRegistry, removeOCIPrefix } from '../helmv3/oci.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport type { HelmChart, Image, Kustomize } from './types.ts';\n\n// URL specifications should follow the hashicorp URL format\n// https://github.com/hashicorp/go-getter#url-format\nconst gitUrl = regEx(\n /^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\\/\\/)?(?:.*@)?)?(?<path>(?:[^:/\\s]+(?::[0-9]+)?[:/])?(?<project>[^/\\s]+\\/[^/\\s]+)))(?<subdir>[^?\\s]*)\\?(?<queryString>.+)$/,\n);\n// regex to match URLs with \".git\" delimiter\nconst dotGitRegex = regEx(\n /^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\\/\\/)?(?:.*@)?)?(?<path>(?:[^:/\\s]+(?::[0-9]+)?[:/])?(?<project>[^?\\s]*(?:\\.git))))(?<subdir>[^?\\s]*)\\?(?<queryString>.+)$/,\n);\n// regex to match URLs with \"_git\" delimiter\nconst underscoreGitRegex = regEx(\n /^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\\/\\/)?(?:.*@)?)?(?<path>(?:[^:/\\s]+(?::[0-9]+)?[:/])?(?<project>[^?\\s]*)(?:_git\\/[^/\\s]+)))(?<subdir>[^?\\s]*)\\?(?<queryString>.+)$/,\n);\n// regex to match URLs having an extra \"//\"\nconst gitUrlWithPath = regEx(\n /^(?:git::)?(?<url>(?:(?:(?:http|https|ssh):\\/\\/)?(?:.*@)?)?(?<path>(?:[^:/\\s]+(?::[0-9]+)?[:/])(?<project>[^?\\s]+)))(?:\\/\\/)(?<subdir>[^?\\s]+)\\?(?<queryString>.+)$/,\n);\n\nexport function extractResource(base: string): PackageDependency | null {\n let match: RegExpExecArray | null;\n\n if (base.includes('_git')) {\n match = underscoreGitRegex.exec(base);\n } else if (base.includes('.git')) {\n match = dotGitRegex.exec(base);\n } else if (gitUrlWithPath.test(base)) {\n match = gitUrlWithPath.exec(base);\n } else {\n match = gitUrl.exec(base);\n }\n\n if (!match?.groups) {\n return null;\n }\n\n const { path, queryString } = match.groups;\n const params = querystring.parse(queryString);\n const refParam = Array.isArray(params.ref) ? params.ref[0] : params.ref;\n const versionParam = Array.isArray(params.version)\n ? params.version[0]\n : params.version;\n const currentValue = refParam ?? versionParam;\n if (!currentValue) {\n return null;\n }\n\n if (regEx(/(?:github\\.com)(?::|\\/)/).test(path)) {\n return {\n currentValue,\n datasource: GithubTagsDatasource.id,\n depName: match.groups.project.replace('.git', ''),\n };\n }\n\n return {\n datasource: GitTagsDatasource.id,\n depName: path.replace('.git', ''),\n packageName: match.groups.url,\n currentValue,\n };\n}\n\nexport function extractImage(\n image: Image,\n aliases?: Record<string, string>,\n): PackageDependency | null {\n if (!image.name) {\n return null;\n }\n const nameToSplit = image.newName ?? image.name;\n if (!isString(nameToSplit)) {\n logger.debug({ image }, 'Invalid image name');\n return null;\n }\n const nameDep = getDep(nameToSplit, false, aliases);\n const { depName } = nameDep;\n const { digest, newTag } = image;\n if (digest && newTag) {\n logger.debug(\n { newTag, digest },\n 'Kustomize ignores newTag when digest is provided. Pick one, or use `newTag: tag@digest`',\n );\n return {\n depName,\n currentValue: newTag,\n currentDigest: digest,\n skipReason: 'invalid-dependency-specification',\n };\n }\n\n if (digest) {\n if (!isString(digest) || !digest.startsWith('sha256:')) {\n return {\n depName,\n currentValue: digest,\n skipReason: 'invalid-value',\n };\n }\n\n return {\n ...nameDep,\n currentDigest: digest,\n replaceString: digest,\n };\n }\n\n if (newTag) {\n if (!isString(newTag) || newTag.startsWith('sha256:')) {\n return {\n depName,\n currentValue: newTag,\n skipReason: 'invalid-value',\n };\n }\n\n const dep = getDep(`${depName}:${newTag}`, false, aliases);\n return {\n ...dep,\n replaceString: newTag,\n autoReplaceStringTemplate:\n '{{newValue}}{{#if newDigest}}@{{newDigest}}{{/if}}',\n };\n }\n\n if (image.newName) {\n return {\n ...nameDep,\n replaceString: image.newName,\n };\n }\n\n return null;\n}\n\nexport function extractHelmChart(\n helmChart: HelmChart,\n aliases?: Record<string, string>,\n): PackageDependency | null {\n if (!helmChart.name) {\n return null;\n }\n\n if (isOCIRegistry(helmChart.repo)) {\n const dep = getDep(\n `${removeOCIPrefix(helmChart.repo)}/${helmChart.name}:${helmChart.version}`,\n false,\n aliases,\n );\n delete dep.replaceString;\n return {\n ...dep,\n depName: helmChart.name,\n // https://github.com/helm/helm/issues/10312\n // https://github.com/helm/helm/issues/10678\n pinDigests: false,\n };\n }\n\n return {\n depName: helmChart.name,\n currentValue: helmChart.version,\n registryUrls: [helmChart.repo],\n datasource: HelmDatasource.id,\n };\n}\n\nexport function parseKustomize(\n content: string,\n packageFile?: string,\n): Kustomize | null {\n let pkg: Kustomize | null = null;\n try {\n // TODO: use schema (#9610)\n pkg = parseSingleYaml(content);\n } catch /* istanbul ignore next */ {\n logger.debug({ packageFile }, 'Error parsing kustomize file');\n return null;\n }\n\n if (!pkg || isString(pkg)) {\n return null;\n }\n\n pkg.kind ??= 'Kustomization';\n\n if (!['Kustomization', 'Component'].includes(pkg.kind)) {\n return null;\n }\n\n return pkg;\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): PackageFileContent | null {\n logger.trace(`kustomize.extractPackageFile(${packageFile})`);\n const deps: PackageDependency[] = [];\n\n const pkg = parseKustomize(content, packageFile);\n if (!pkg) {\n return null;\n }\n\n // grab the remote bases\n for (const base of coerceArray(pkg.bases).filter(isString)) {\n const dep = extractResource(base);\n if (dep) {\n deps.push({\n ...dep,\n depType: pkg.kind,\n });\n }\n }\n\n // grab the remote resources\n for (const resource of coerceArray(pkg.resources).filter(isString)) {\n const dep = extractResource(resource);\n if (dep) {\n deps.push({\n ...dep,\n depType: pkg.kind,\n });\n }\n }\n\n // grab the remote components\n for (const component of coerceArray(pkg.components).filter(isString)) {\n const dep = extractResource(component);\n if (dep) {\n deps.push({\n ...dep,\n depType: pkg.kind,\n });\n }\n }\n\n // grab the image tags\n for (const image of coerceArray(pkg.images)) {\n const dep = extractImage(image, config.registryAliases);\n if (dep) {\n deps.push({\n ...dep,\n depType: pkg.kind,\n });\n }\n }\n\n // grab the helm charts\n for (const helmChart of coerceArray(pkg.helmCharts)) {\n const dep = extractHelmChart(helmChart, config.registryAliases);\n if (dep) {\n deps.push({\n ...dep,\n depType: 'HelmChart',\n });\n }\n }\n\n if (!deps.length) {\n return null;\n }\n return { deps };\n}\n"],"mappings":"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"}
|
|
@@ -81,7 +81,7 @@ function extractFromVectors(str, ctx = {}, vars = {}, dimensions = 2) {
|
|
|
81
81
|
}
|
|
82
82
|
function extractLeinRepos(content) {
|
|
83
83
|
const result = [];
|
|
84
|
-
const repoContent = trimAtKey(content.replace(regEx(/;;.*([\r\n])/g), "
|
|
84
|
+
const repoContent = trimAtKey(content.replace(regEx(/;;.*(?<newline>[\r\n])/g), "$<newline>"), "repositories");
|
|
85
85
|
if (repoContent) {
|
|
86
86
|
let balance = 0;
|
|
87
87
|
let endIdx = 0;
|