renovate 43.263.0 → 43.263.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/app-strings.js +1 -1
- package/dist/config/app-strings.js.map +1 -1
- package/dist/config/decrypt/bcpgp.js +7 -4
- package/dist/config/decrypt/bcpgp.js.map +1 -1
- package/dist/config/migration.js +4 -6
- package/dist/config/migration.js.map +1 -1
- package/dist/config/options/index.js +1 -1
- package/dist/config/options/index.js.map +1 -1
- package/dist/config/validation-helpers/match-base-branches.js +4 -6
- package/dist/config/validation-helpers/match-base-branches.js.map +1 -1
- package/dist/config/validation-helpers/regex-glob-matchers.js +4 -6
- package/dist/config/validation-helpers/regex-glob-matchers.js.map +1 -1
- package/dist/config/validation-helpers/utils.js +2 -4
- package/dist/config/validation-helpers/utils.js.map +1 -1
- package/dist/config/validation.js +4 -6
- package/dist/config/validation.js.map +1 -1
- package/dist/config-validator.js +1 -3
- package/dist/config-validator.js.map +1 -1
- package/dist/global-config-option-defaults.generated.js +1 -1
- package/dist/global-config-option-defaults.generated.js.map +1 -1
- package/dist/modules/datasource/artifactory/index.js +6 -8
- package/dist/modules/datasource/artifactory/index.js.map +1 -1
- package/dist/modules/datasource/aws-machine-image/index.js +1 -2
- package/dist/modules/datasource/aws-machine-image/index.js.map +1 -1
- package/dist/modules/datasource/azure-pipelines-tasks/index.js +2 -3
- package/dist/modules/datasource/azure-pipelines-tasks/index.js.map +1 -1
- package/dist/modules/datasource/conda/index.js +1 -3
- package/dist/modules/datasource/conda/index.js.map +1 -1
- package/dist/modules/datasource/dart-version/index.js +1 -2
- package/dist/modules/datasource/dart-version/index.js.map +1 -1
- package/dist/modules/datasource/datasource.js +1 -3
- package/dist/modules/datasource/datasource.js.map +1 -1
- package/dist/modules/datasource/devbox/index.js +1 -3
- package/dist/modules/datasource/devbox/index.js.map +1 -1
- package/dist/modules/datasource/docker/ecr.js +2 -1
- package/dist/modules/datasource/docker/ecr.js.map +1 -1
- package/dist/modules/datasource/docker/index.js +1 -1
- package/dist/modules/datasource/docker/index.js.map +1 -1
- package/dist/modules/datasource/galaxy-collection/index.js +1 -1
- package/dist/modules/datasource/galaxy-collection/index.js.map +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js +2 -2
- package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
- package/dist/modules/datasource/java-version/index.js +1 -3
- package/dist/modules/datasource/java-version/index.js.map +1 -1
- package/dist/modules/datasource/maven/util.js +2 -1
- package/dist/modules/datasource/maven/util.js.map +1 -1
- package/dist/modules/datasource/nuget/common.js +6 -4
- package/dist/modules/datasource/nuget/common.js.map +1 -1
- package/dist/modules/datasource/util.js +3 -2
- package/dist/modules/datasource/util.js.map +1 -1
- package/dist/modules/manager/azure-pipelines/extract.js +1 -1
- package/dist/modules/manager/azure-pipelines/extract.js.map +1 -1
- package/dist/modules/manager/bazel/extract.js +1 -3
- package/dist/modules/manager/bazel/extract.js.map +1 -1
- package/dist/modules/manager/bazel/parser.js +1 -1
- package/dist/modules/manager/bazel/parser.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 +23 -25
- package/dist/modules/manager/bundler/common.js.map +1 -1
- package/dist/modules/manager/bundler/extract.js +2 -6
- package/dist/modules/manager/bundler/extract.js.map +1 -1
- package/dist/modules/manager/cargo/extract.js +4 -6
- package/dist/modules/manager/cargo/extract.js.map +1 -1
- package/dist/modules/manager/dockerfile/extract.js +3 -3
- package/dist/modules/manager/dockerfile/extract.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +13 -13
- 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/github-actions/parse.js +1 -1
- package/dist/modules/manager/github-actions/parse.js.map +1 -1
- package/dist/modules/manager/gradle/extract/catalog.js +4 -3
- package/dist/modules/manager/gradle/extract/catalog.js.map +1 -1
- package/dist/modules/manager/gradle/extract.js +2 -2
- package/dist/modules/manager/gradle/extract.js.map +1 -1
- package/dist/modules/manager/gradle/parser/common.js +1 -1
- package/dist/modules/manager/gradle/parser/common.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/helm-values/extract.js.map +1 -1
- package/dist/modules/manager/helmfile/extract.js +1 -1
- package/dist/modules/manager/helmfile/extract.js.map +1 -1
- package/dist/modules/manager/maven/extract.js.map +1 -1
- package/dist/modules/manager/maven/update.js +2 -1
- package/dist/modules/manager/maven/update.js.map +1 -1
- package/dist/modules/manager/mise/utils.js +5 -7
- package/dist/modules/manager/mise/utils.js.map +1 -1
- package/dist/modules/manager/mix/extract.js +3 -6
- package/dist/modules/manager/mix/extract.js.map +1 -1
- package/dist/modules/manager/npm/extract/common/overrides.js +1 -1
- package/dist/modules/manager/npm/extract/common/overrides.js.map +1 -1
- package/dist/modules/manager/npm/extract/yarn.js +1 -1
- package/dist/modules/manager/npm/extract/yarn.js.map +1 -1
- package/dist/modules/manager/npm/npmrc.js +1 -3
- package/dist/modules/manager/npm/npmrc.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/common.js +2 -3
- package/dist/modules/manager/npm/update/dependency/common.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/index.js +1 -1
- package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/pnpm.js +1 -1
- package/dist/modules/manager/npm/update/dependency/pnpm.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/yarn.js +1 -1
- package/dist/modules/manager/npm/update/dependency/yarn.js.map +1 -1
- package/dist/modules/manager/osgi/extract.js +1 -1
- package/dist/modules/manager/osgi/extract.js.map +1 -1
- package/dist/modules/manager/pep621/processors/uv.js +1 -1
- package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
- package/dist/modules/manager/pep621/schema.js.map +1 -1
- package/dist/modules/manager/pip_setup/extract.js +1 -1
- package/dist/modules/manager/pip_setup/extract.js.map +1 -1
- package/dist/modules/manager/pipenv/artifacts.js.map +1 -1
- package/dist/modules/manager/poetry/schema.js +2 -2
- package/dist/modules/manager/poetry/schema.js.map +1 -1
- package/dist/modules/manager/pub/artifacts.js +4 -6
- package/dist/modules/manager/pub/artifacts.js.map +1 -1
- package/dist/modules/manager/pub/utils.js +2 -2
- package/dist/modules/manager/pub/utils.js.map +1 -1
- package/dist/modules/manager/puppet/common.js +4 -6
- package/dist/modules/manager/puppet/common.js.map +1 -1
- package/dist/modules/manager/sbt/extract.js +1 -1
- package/dist/modules/manager/sbt/extract.js.map +1 -1
- package/dist/modules/manager/sbt/util.js +4 -2
- package/dist/modules/manager/sbt/util.js.map +1 -1
- package/dist/modules/manager/terraform/lockfile/util.js +1 -1
- package/dist/modules/manager/terraform/lockfile/util.js.map +1 -1
- package/dist/modules/platform/azure/index.js +15 -19
- package/dist/modules/platform/azure/index.js.map +1 -1
- package/dist/modules/platform/azure/issue.js +67 -17
- package/dist/modules/platform/azure/issue.js.map +1 -1
- package/dist/modules/platform/bitbucket/index.js +1 -3
- package/dist/modules/platform/bitbucket/index.js.map +1 -1
- package/dist/modules/platform/forgejo/index.js +5 -3
- package/dist/modules/platform/forgejo/index.js.map +1 -1
- package/dist/modules/platform/forgejo/utils.js +1 -1
- package/dist/modules/platform/forgejo/utils.js.map +1 -1
- package/dist/modules/platform/gerrit/scm.js +5 -7
- package/dist/modules/platform/gerrit/scm.js.map +1 -1
- package/dist/modules/platform/gitea/index.js +5 -3
- package/dist/modules/platform/gitea/index.js.map +1 -1
- package/dist/modules/platform/gitea/utils.js +1 -1
- package/dist/modules/platform/gitea/utils.js.map +1 -1
- package/dist/modules/platform/github/index.js +5 -7
- package/dist/modules/platform/github/index.js.map +1 -1
- package/dist/modules/platform/github/pr.js +1 -1
- package/dist/modules/platform/github/pr.js.map +1 -1
- package/dist/modules/platform/gitlab/index.js +2 -1
- package/dist/modules/platform/gitlab/index.js.map +1 -1
- package/dist/modules/platform/utils/pr-body.js +2 -1
- package/dist/modules/platform/utils/pr-body.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 +4 -7
- package/dist/modules/versioning/composer/index.js.map +1 -1
- package/dist/modules/versioning/conan/common.js +4 -6
- package/dist/modules/versioning/conan/common.js.map +1 -1
- package/dist/modules/versioning/conan/index.js +1 -3
- package/dist/modules/versioning/conan/index.js.map +1 -1
- package/dist/modules/versioning/conan/range.js +4 -5
- 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/gradle/index.js +7 -3
- package/dist/modules/versioning/gradle/index.js.map +1 -1
- package/dist/modules/versioning/hermit/index.js +2 -2
- package/dist/modules/versioning/hermit/index.js.map +1 -1
- package/dist/modules/versioning/ivy/index.js +1 -1
- package/dist/modules/versioning/ivy/index.js.map +1 -1
- package/dist/modules/versioning/maven/compare.js +4 -6
- package/dist/modules/versioning/maven/compare.js.map +1 -1
- package/dist/modules/versioning/npm/range.js +5 -7
- package/dist/modules/versioning/npm/range.js.map +1 -1
- package/dist/modules/versioning/nuget/version.js +6 -6
- package/dist/modules/versioning/nuget/version.js.map +1 -1
- package/dist/modules/versioning/pep440/index.js +1 -1
- package/dist/modules/versioning/pep440/index.js.map +1 -1
- package/dist/modules/versioning/pep440/range.js +2 -6
- package/dist/modules/versioning/pep440/range.js.map +1 -1
- package/dist/modules/versioning/poetry/index.js +1 -1
- package/dist/modules/versioning/poetry/index.js.map +1 -1
- package/dist/modules/versioning/pvp/index.js +2 -2
- package/dist/modules/versioning/pvp/index.js.map +1 -1
- package/dist/modules/versioning/rpm/index.js +4 -3
- package/dist/modules/versioning/rpm/index.js.map +1 -1
- package/dist/modules/versioning/ruby/range.js +2 -2
- package/dist/modules/versioning/ruby/range.js.map +1 -1
- package/dist/modules/versioning/ruby/strategies/bump.js +1 -1
- package/dist/modules/versioning/ruby/strategies/bump.js.map +1 -1
- package/dist/modules/versioning/ruby/strategies/replace.js +13 -12
- package/dist/modules/versioning/ruby/strategies/replace.js.map +1 -1
- package/dist/modules/versioning/ruby/version.js +1 -1
- package/dist/modules/versioning/ruby/version.js.map +1 -1
- package/dist/modules/versioning/rust-release-channel/index.js +1 -1
- package/dist/modules/versioning/rust-release-channel/index.js.map +1 -1
- package/dist/modules/versioning/rust-release-channel/util.js +4 -4
- package/dist/modules/versioning/rust-release-channel/util.js.map +1 -1
- package/dist/util/common.js +1 -3
- package/dist/util/common.js.map +1 -1
- package/dist/util/exec/common.js +4 -6
- package/dist/util/exec/common.js.map +1 -1
- package/dist/util/exec/containerbase.js +1 -3
- package/dist/util/exec/containerbase.js.map +1 -1
- package/dist/util/git/instrument.js +3 -3
- package/dist/util/git/instrument.js.map +1 -1
- package/dist/util/github/graphql/datasource-fetcher.js +5 -4
- package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
- package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
- package/dist/util/http/github.js +3 -2
- package/dist/util/http/github.js.map +1 -1
- package/dist/util/http/http.d.ts +1 -1
- package/dist/util/http/http.js.map +1 -1
- package/dist/util/result.d.ts +8 -8
- package/dist/util/result.js +1 -1
- package/dist/util/result.js.map +1 -1
- package/dist/util/url.js +2 -2
- package/dist/util/url.js.map +1 -1
- package/dist/workers/global/config/parse/cli.js +18 -20
- package/dist/workers/global/config/parse/cli.js.map +1 -1
- package/dist/workers/global/config/parse/env.js +3 -5
- package/dist/workers/global/config/parse/env.js.map +1 -1
- package/dist/workers/repository/config-migration/branch/index.js +3 -5
- package/dist/workers/repository/config-migration/branch/index.js.map +1 -1
- package/dist/workers/repository/init/merge.js +2 -3
- package/dist/workers/repository/init/merge.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/check.js +7 -9
- package/dist/workers/repository/onboarding/branch/check.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/index.js +4 -8
- package/dist/workers/repository/onboarding/branch/index.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/onboarding-branch-cache.js +2 -2
- package/dist/workers/repository/onboarding/branch/onboarding-branch-cache.js.map +1 -1
- package/dist/workers/repository/process/extract-update.js.map +1 -1
- package/dist/workers/repository/process/fetch.js.map +1 -1
- package/dist/workers/repository/process/libyear.js +1 -3
- package/dist/workers/repository/process/libyear.js.map +1 -1
- package/dist/workers/repository/process/lookup/filter-checks.js +9 -11
- package/dist/workers/repository/process/lookup/filter-checks.js.map +1 -1
- package/dist/workers/repository/process/lookup/index.js +5 -8
- package/dist/workers/repository/process/lookup/index.js.map +1 -1
- package/dist/workers/repository/process/vulnerabilities.js +3 -3
- package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
- package/dist/workers/repository/reconfigure/index.js +3 -5
- package/dist/workers/repository/reconfigure/index.js.map +1 -1
- package/dist/workers/repository/update/branch/bump-versions.js +1 -1
- package/dist/workers/repository/update/branch/bump-versions.js.map +1 -1
- package/dist/workers/repository/update/branch/get-updated.js +3 -5
- package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
- package/dist/workers/repository/update/pr/body/updates-table.js +1 -3
- package/dist/workers/repository/update/pr/body/updates-table.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/common.js +1 -1
- package/dist/workers/repository/update/pr/changelog/common.js.map +1 -1
- package/dist/workers/repository/update/pr/index.js +6 -7
- package/dist/workers/repository/update/pr/index.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":"bump.js","names":[],"sources":["../../../../../lib/modules/versioning/ruby/strategies/bump.ts"],"sourcesContent":["import { gt, gte, lt } from '@renovatebot/ruby-semver';\nimport { GTE, LT, LTE, NOT_EQUAL, PGTE } from '../operator.ts';\nimport type { Range } from '../range.ts';\nimport { parseRanges, stringifyRanges } from '../range.ts';\nimport { adapt, trimZeroes } from '../version.ts';\nimport { replacePart } from './replace.ts';\n\nexport default ({ range, to }: { range: string; to: string }): string => {\n const parts = parseRanges(range).map((part): Range => {\n const { operator, version: ver } = part;\n switch (operator) {\n // Update upper bound (`<` and `<=`) ranges only if the new version violates them\n case LT:\n return gte(to, ver) ? replacePart(part, to) : part;\n case LTE:\n return gt(to, ver) ? replacePart(part, to) : part;\n // `~>` ranges.\n case PGTE: {\n // Try to add / remove extra `>=` constraint.\n const trimmed = adapt(to, ver);\n if (trimZeroes(trimmed) === trimZeroes(to)) {\n // E.g. `'~> 5.2', '>= 5.2.0'`. In this case the latter is redundant.\n return { ...part, version: trimmed, companion: undefined };\n }
|
|
1
|
+
{"version":3,"file":"bump.js","names":[],"sources":["../../../../../lib/modules/versioning/ruby/strategies/bump.ts"],"sourcesContent":["import { gt, gte, lt } from '@renovatebot/ruby-semver';\nimport { GTE, LT, LTE, NOT_EQUAL, PGTE } from '../operator.ts';\nimport type { Range } from '../range.ts';\nimport { parseRanges, stringifyRanges } from '../range.ts';\nimport { adapt, trimZeroes } from '../version.ts';\nimport { replacePart } from './replace.ts';\n\nexport default ({ range, to }: { range: string; to: string }): string => {\n const parts = parseRanges(range).map((part): Range => {\n const { operator, version: ver } = part;\n switch (operator) {\n // Update upper bound (`<` and `<=`) ranges only if the new version violates them\n case LT:\n return gte(to, ver) ? replacePart(part, to) : part;\n case LTE:\n return gt(to, ver) ? replacePart(part, to) : part;\n // `~>` ranges.\n case PGTE: {\n // Try to add / remove extra `>=` constraint.\n const trimmed = adapt(to, ver);\n if (trimZeroes(trimmed) === trimZeroes(to)) {\n // E.g. `'~> 5.2', '>= 5.2.0'`. In this case the latter is redundant.\n return { ...part, version: trimmed, companion: undefined };\n }\n // E.g. `'~> 5.2', '>= 5.2.1'`.\n return {\n ...part,\n version: trimmed,\n companion: { operator: GTE, delimiter: ' ', version: to },\n };\n }\n case NOT_EQUAL:\n if (lt(ver, to)) {\n // The version to exclude is now out of range.\n return { ...part, operator: GTE, version: to };\n }\n return part;\n default:\n // For `=` and lower bound ranges, always keep it stick to the new version.\n return replacePart(part, to);\n }\n });\n\n return stringifyRanges(parts);\n};\n"],"mappings":";;;;;AAOA,IAAA,gBAAgB,EAAE,OAAO,SAAgD;CAoCvE,OAAO,gBAnCO,YAAY,KAAK,CAAC,CAAC,KAAK,SAAgB;EACpD,MAAM,EAAE,UAAU,SAAS,QAAQ;EACnC,QAAQ,UAAR;GAEE,KAAA,KACE,OAAO,IAAI,IAAI,GAAG,IAAI,YAAY,MAAM,EAAE,IAAI;GAChD,KAAA,MACE,OAAO,GAAG,IAAI,GAAG,IAAI,YAAY,MAAM,EAAE,IAAI;GAE/C,KAAA,MAAW;IAET,MAAM,UAAU,MAAM,IAAI,GAAG;IAC7B,IAAI,WAAW,OAAO,MAAM,WAAW,EAAE,GAEvC,OAAO;KAAE,GAAG;KAAM,SAAS;KAAS,WAAW,KAAA;IAAU;IAG3D,OAAO;KACL,GAAG;KACH,SAAS;KACT,WAAW;MAAE,UAAA;MAAe,WAAW;MAAK,SAAS;KAAG;IAC1D;GACF;GACA,KAAA;IACE,IAAI,GAAG,KAAK,EAAE,GAEZ,OAAO;KAAE,GAAG;KAAM,UAAA;KAAe,SAAS;IAAG;IAE/C,OAAO;GACT,SAEE,OAAO,YAAY,MAAM,EAAE;EAC/B;CACF,CAE2B,CAAC;AAC9B"}
|
|
@@ -13,18 +13,19 @@ function replacePart(part, to) {
|
|
|
13
13
|
...part,
|
|
14
14
|
version: to
|
|
15
15
|
};
|
|
16
|
-
case "~>":
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
case "~>":
|
|
17
|
+
if (companion) return {
|
|
18
|
+
...part,
|
|
19
|
+
version: floor(adapt(to, ver)),
|
|
20
|
+
companion: {
|
|
21
|
+
...companion,
|
|
22
|
+
version: to
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
...part,
|
|
27
|
+
version: floor(adapt(to, ver))
|
|
28
|
+
};
|
|
28
29
|
case ">": return {
|
|
29
30
|
...part,
|
|
30
31
|
version: decrement(to)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replace.js","names":[],"sources":["../../../../../lib/modules/versioning/ruby/strategies/replace.ts"],"sourcesContent":["import { logger } from '../../../../logger/index.ts';\nimport { EQUAL, GT, GTE, LT, LTE, NOT_EQUAL, PGTE } from '../operator.ts';\nimport type { Range } from '../range.ts';\nimport { parseRanges, satisfiesRange, stringifyRanges } from '../range.ts';\nimport { adapt, decrement, floor, increment } from '../version.ts';\n\n// Common logic for replace, widen, and bump strategies\n// It basically makes the range stick to the new version.\nexport function replacePart(part: Range, to: string): Range {\n const { operator, version: ver, companion } = part;\n switch (operator) {\n case LT:\n return { ...part, version: increment(ver, to) };\n case LTE:\n return { ...part, version: to };\n case PGTE:\n if (companion) {\n return {\n ...part,\n version: floor(adapt(to, ver)),\n companion: { ...companion, version: to },\n };\n }
|
|
1
|
+
{"version":3,"file":"replace.js","names":[],"sources":["../../../../../lib/modules/versioning/ruby/strategies/replace.ts"],"sourcesContent":["import { logger } from '../../../../logger/index.ts';\nimport { EQUAL, GT, GTE, LT, LTE, NOT_EQUAL, PGTE } from '../operator.ts';\nimport type { Range } from '../range.ts';\nimport { parseRanges, satisfiesRange, stringifyRanges } from '../range.ts';\nimport { adapt, decrement, floor, increment } from '../version.ts';\n\n// Common logic for replace, widen, and bump strategies\n// It basically makes the range stick to the new version.\nexport function replacePart(part: Range, to: string): Range {\n const { operator, version: ver, companion } = part;\n switch (operator) {\n case LT:\n return { ...part, version: increment(ver, to) };\n case LTE:\n return { ...part, version: to };\n case PGTE:\n if (companion) {\n return {\n ...part,\n version: floor(adapt(to, ver)),\n companion: { ...companion, version: to },\n };\n }\n return { ...part, version: floor(adapt(to, ver)) };\n\n case GT:\n return { ...part, version: decrement(to) };\n case GTE:\n case EQUAL:\n return { ...part, version: to };\n case NOT_EQUAL:\n return part;\n // istanbul ignore next\n default:\n logger.warn({ operator }, `Unsupported ruby versioning operator`);\n return { operator: '', delimiter: ' ', version: '' };\n }\n}\n\nexport default ({ range, to }: { range: string; to: string }): string => {\n const parts = parseRanges(range).map((part): Range => {\n if (satisfiesRange(to, part)) {\n // The new version satisfies the range. Keep it as-is.\n // Note that consecutive `~>` and `>=` parts are combined into one Range object,\n // therefore both parts are updated if the new version violates one of them.\n return part;\n }\n\n if (part.version.split('.').length > to.split('.').length) {\n const diff = part.version.split('.').length - to.split('.').length;\n const versionToReplace = [to, ...Array(diff).fill('0')].join('.');\n const replacement = replacePart(part, versionToReplace);\n return {\n ...replacement,\n version: replacement.version.split('.').slice(0, -diff).join('.'),\n };\n }\n\n return replacePart(part, to);\n });\n\n return stringifyRanges(parts);\n};\n"],"mappings":";;;;AAQA,SAAgB,YAAY,MAAa,IAAmB;CAC1D,MAAM,EAAE,UAAU,SAAS,KAAK,cAAc;CAC9C,QAAQ,UAAR;EACE,KAAA,KACE,OAAO;GAAE,GAAG;GAAM,SAAS,UAAU,KAAK,EAAE;EAAE;EAChD,KAAA,MACE,OAAO;GAAE,GAAG;GAAM,SAAS;EAAG;EAChC,KAAA;GACE,IAAI,WACF,OAAO;IACL,GAAG;IACH,SAAS,MAAM,MAAM,IAAI,GAAG,CAAC;IAC7B,WAAW;KAAE,GAAG;KAAW,SAAS;IAAG;GACzC;GAEF,OAAO;IAAE,GAAG;IAAM,SAAS,MAAM,MAAM,IAAI,GAAG,CAAC;GAAE;EAEnD,KAAA,KACE,OAAO;GAAE,GAAG;GAAM,SAAS,UAAU,EAAE;EAAE;EAC3C,KAAA;EACA,KAAA,KACE,OAAO;GAAE,GAAG;GAAM,SAAS;EAAG;EAChC,KAAA,MACE,OAAO;;EAET;GACE,OAAO,KAAK,EAAE,SAAS,GAAG,sCAAsC;GAChE,OAAO;IAAE,UAAU;IAAI,WAAW;IAAK,SAAS;GAAG;CACvD;AACF;AAEA,IAAA,mBAAgB,EAAE,OAAO,SAAgD;CAsBvE,OAAO,gBArBO,YAAY,KAAK,CAAC,CAAC,KAAK,SAAgB;EACpD,IAAI,eAAe,IAAI,IAAI,GAIzB,OAAO;EAGT,IAAI,KAAK,QAAQ,MAAM,GAAG,CAAC,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,QAAQ;GACzD,MAAM,OAAO,KAAK,QAAQ,MAAM,GAAG,CAAC,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;GAE5D,MAAM,cAAc,YAAY,MADP,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GACR,CAAC;GACtD,OAAO;IACL,GAAG;IACH,SAAS,YAAY,QAAQ,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG;GAClE;EACF;EAEA,OAAO,YAAY,MAAM,EAAE;CAC7B,CAE2B,CAAC;AAC9B"}
|
|
@@ -22,7 +22,7 @@ const floor = (version) => {
|
|
|
22
22
|
const adapt = (left, right) => left.split(".").slice(0, right.split(".").length).join(".");
|
|
23
23
|
const trimZeroes = (version) => {
|
|
24
24
|
const segments = version.split(".");
|
|
25
|
-
while (segments.length > 0 && segments
|
|
25
|
+
while (segments.length > 0 && segments.at(-1) === "0") segments.pop();
|
|
26
26
|
return segments.join(".");
|
|
27
27
|
};
|
|
28
28
|
const pgteUpperBound = (version) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","names":[],"sources":["../../../../lib/modules/versioning/ruby/version.ts"],"sourcesContent":["import { eq, major, minor, patch, prerelease } from '@renovatebot/ruby-semver';\nimport type { SegmentElement } from '@renovatebot/ruby-semver/dist/ruby/version.js';\nimport { create } from '@renovatebot/ruby-semver/dist/ruby/version.js';\nimport { regEx } from '../../../util/regex.ts';\n\ninterface RubyVersion {\n major: number;\n minor: number;\n patch: number;\n prerelease: string[] | null;\n}\n\nfunction releaseSegments(version: string): SegmentElement[] {\n const v = create(version);\n if (v) {\n return v.release().getSegments();\n }\n /* istanbul ignore next */\n return [];\n}\n\nconst parse = (version: string): RubyVersion => ({\n major: major(version),\n minor: minor(version),\n patch: patch(version),\n prerelease: prerelease(version),\n});\n\nconst floor = (version: string): string => {\n const segments = releaseSegments(version);\n if (segments.length <= 1) {\n // '~> 2' is equivalent to '~> 2.0', thus no need to floor\n return segments.join('.');\n }\n return [...segments.slice(0, -1), 0].join('.');\n};\n\nconst adapt = (left: string, right: string): string =>\n left.split('.').slice(0, right.split('.').length).join('.');\n\nconst trimZeroes = (version: string): string => {\n const segments = version.split('.');\n while (segments.length > 0 && segments
|
|
1
|
+
{"version":3,"file":"version.js","names":[],"sources":["../../../../lib/modules/versioning/ruby/version.ts"],"sourcesContent":["import { eq, major, minor, patch, prerelease } from '@renovatebot/ruby-semver';\nimport type { SegmentElement } from '@renovatebot/ruby-semver/dist/ruby/version.js';\nimport { create } from '@renovatebot/ruby-semver/dist/ruby/version.js';\nimport { regEx } from '../../../util/regex.ts';\n\ninterface RubyVersion {\n major: number;\n minor: number;\n patch: number;\n prerelease: string[] | null;\n}\n\nfunction releaseSegments(version: string): SegmentElement[] {\n const v = create(version);\n if (v) {\n return v.release().getSegments();\n }\n /* istanbul ignore next */\n return [];\n}\n\nconst parse = (version: string): RubyVersion => ({\n major: major(version),\n minor: minor(version),\n patch: patch(version),\n prerelease: prerelease(version),\n});\n\nconst floor = (version: string): string => {\n const segments = releaseSegments(version);\n if (segments.length <= 1) {\n // '~> 2' is equivalent to '~> 2.0', thus no need to floor\n return segments.join('.');\n }\n return [...segments.slice(0, -1), 0].join('.');\n};\n\nconst adapt = (left: string, right: string): string =>\n left.split('.').slice(0, right.split('.').length).join('.');\n\nconst trimZeroes = (version: string): string => {\n const segments = version.split('.');\n while (segments.length > 0 && segments.at(-1) === '0') {\n segments.pop();\n }\n return segments.join('.');\n};\n\n// Returns the upper bound of `~>` operator.\nconst pgteUpperBound = (version: string): string => {\n const segments = releaseSegments(version);\n if (segments.length > 1) {\n segments.pop();\n }\n return incrementLastSegment(segments.join('.'));\n};\n\n// istanbul ignore next\nconst incrementLastSegment = (version: string): string => {\n const segments = releaseSegments(version);\n const nextLast = parseInt(segments.pop() as string, 10) + 1;\n\n return [...segments, nextLast].join('.');\n};\n\n// istanbul ignore next\nconst incrementMajor = (\n maj: number,\n min: number,\n ptch: number,\n pre: string[],\n): number => (min === 0 || ptch === 0 || pre.length === 0 ? maj + 1 : maj);\n\n// istanbul ignore next\nconst incrementMinor = (min: number, ptch: number, pre: string[]): number =>\n ptch === 0 || pre.length === 0 ? min + 1 : min;\n\n// istanbul ignore next\nconst incrementPatch = (ptch: number, pre: string[]): number =>\n pre.length === 0 ? ptch + 1 : ptch;\n\n// istanbul ignore next\nconst increment = (from: string, to: string): string => {\n const parsed = parse(from);\n const { major: maj, prerelease: pre } = parsed;\n let { minor: min, patch: ptch } = parsed;\n min = min || 0;\n ptch = ptch || 0;\n\n let nextVersion: string;\n const adapted = adapt(to, from);\n if (eq(from, adapted)) {\n return incrementLastSegment(from);\n }\n\n const isStable = (x: string): boolean => regEx(/^[0-9.-/]+$/).test(x);\n if (major(from) !== major(adapted)) {\n nextVersion = [incrementMajor(maj, min, ptch, pre ?? []), 0, 0].join('.');\n } else if (minor(from) !== minor(adapted)) {\n nextVersion = [maj, incrementMinor(min, ptch, pre ?? []), 0].join('.');\n } else if (patch(from) !== patch(adapted)) {\n nextVersion = [maj, min, incrementPatch(ptch, pre ?? [])].join('.');\n } else if (isStable(from) && isStable(adapted)) {\n nextVersion = [maj, min, incrementPatch(ptch, pre ?? [])].join('.');\n } else {\n nextVersion = [maj, min, ptch].join('.');\n }\n\n return increment(nextVersion, to);\n};\n\n// istanbul ignore next\nconst decrement = (version: string): string => {\n const segments = releaseSegments(version);\n const nextSegments = segments\n .reverse()\n .reduce(\n (\n accumulator: number[],\n segment: SegmentElement,\n index: number,\n ): number[] => {\n if (index === 0) {\n return [(segment as number) - 1];\n }\n\n if (accumulator[index - 1] === -1) {\n return [\n ...accumulator.slice(0, index - 1),\n 0,\n (segment as number) - 1,\n ];\n }\n\n return [...accumulator, segment as number];\n },\n [],\n );\n\n return nextSegments.reverse().join('.');\n};\n\nexport {\n adapt,\n decrement,\n floor,\n increment,\n parse,\n pgteUpperBound,\n trimZeroes,\n};\n"],"mappings":"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"}
|
|
@@ -83,7 +83,7 @@ var RustReleaseChannelVersioning = class {
|
|
|
83
83
|
const matching = versions.filter((version) => this.matches(version, range));
|
|
84
84
|
if (matching.length === 0) return null;
|
|
85
85
|
matching.sort((a, b) => this.sortVersions(a, b));
|
|
86
|
-
return matching.
|
|
86
|
+
return matching.at(-1);
|
|
87
87
|
}
|
|
88
88
|
minSatisfyingVersion(versions, range) {
|
|
89
89
|
const matching = versions.filter((version) => this.matches(version, range));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/rust-release-channel/index.ts"],"sourcesContent":["import { isNonEmptyString, isObject } from '@sindresorhus/is';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport { parse } from './parse.ts';\nimport { sortParsed } from './util.ts';\n\nexport const id = 'rust-release-channel';\nexport const displayName = 'Rust Release Channel';\nexport const urls = [\n '[Rustup - Toolchains](https://rust-lang.github.io/rustup/concepts/toolchains.html)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies = ['pin', 'replace'];\n\n/** Rust 1.0.0 release date for major version calculation */\nconst rust1Date = new Date('2015-05-15');\n\nclass RustReleaseChannelVersioning implements VersioningApi {\n isValid(input: string): boolean {\n return parse(input) !== null;\n }\n\n isVersion(input: string | undefined | null): boolean {\n if (!isNonEmptyString(input)) {\n return false;\n }\n\n const parsed = parse(input);\n if (!parsed) {\n return false;\n }\n\n const { channel, date } = parsed;\n\n // Support dated nightly versions like `nightly-2025-11-24`\n if (channel === 'nightly') {\n return date !== undefined;\n }\n\n // Support versioned channels like `1.82.0` or `1.83.0-beta.5`\n if (isObject(channel)) {\n // Without patch, it's a range\n if (channel.patch === undefined) {\n return false;\n }\n\n // With beta without number, it's a range\n return !channel.prerelease || channel.prerelease.number !== undefined;\n }\n\n return false;\n }\n\n isSingleVersion(input: string): boolean {\n return this.isVersion(input);\n }\n\n isStable(version: string): boolean {\n const parsed = parse(version);\n if (!parsed) {\n return false;\n }\n\n const { channel } = parsed;\n\n // Channel names and ranges are not stable\n if (!isObject(channel)) {\n return false;\n }\n\n // Version without patch is a range\n if (channel.patch === undefined) {\n return false;\n }\n\n // Version with prerelease is not stable\n return !channel.prerelease;\n }\n\n isCompatible(version: string, current?: string): boolean {\n if (!current) {\n return true;\n }\n\n const parsedVersion = parse(version);\n const parsedCurrent = parse(current);\n if (!parsedVersion || !parsedCurrent) {\n return false;\n }\n\n // Host triples must match (both undefined, or both the same value)\n if (parsedVersion.host !== parsedCurrent.host) {\n return false;\n }\n\n const channelVersion = parsedVersion.channel;\n const channelCurrent = parsedCurrent.channel;\n\n // Nightly versions are compatible only with other nightlies\n // Stable and beta versions are compatible with each other\n\n const isVersionNightly = channelVersion === 'nightly';\n const isCurrentNightly = channelCurrent === 'nightly';\n\n return isVersionNightly === isCurrentNightly;\n }\n\n getMajor(version: string): number | null {\n const parsed = parse(version);\n if (!parsed) {\n return null;\n }\n\n const { channel, date } = parsed;\n\n // Nightly with date\n if (channel === 'nightly' && date) {\n const versionDate = new Date(date.year, date.month - 1, date.day);\n return versionDate >= rust1Date ? 1 : 0;\n }\n\n // Version object\n if (isObject(channel)) {\n return channel.major;\n }\n\n // Default to major version 1 otherwise\n return 1;\n }\n\n getMinor(version: string): number | null {\n const parsed = parse(version);\n if (!parsed) {\n return null;\n }\n\n const { channel } = parsed;\n\n // Only version objects have minor\n if (isObject(channel)) {\n return channel.minor;\n }\n\n return null;\n }\n\n getPatch(version: string): number | null {\n const parsed = parse(version);\n if (!parsed) {\n return null;\n }\n\n const { channel } = parsed;\n\n // Only version objects have patch\n if (isObject(channel)) {\n return channel.patch ?? null;\n }\n\n return null;\n }\n\n sortVersions(version: string, other: string): number {\n const parsedA = parse(version);\n const parsedB = parse(other);\n\n if (!parsedA || !parsedB) {\n return version.localeCompare(other);\n }\n\n return sortParsed(parsedA, parsedB);\n }\n\n equals(version: string, other: string): boolean {\n const parsedA = parse(version);\n const parsedB = parse(other);\n\n if (!parsedA || !parsedB) {\n return false;\n }\n\n return sortParsed(parsedA, parsedB) === 0;\n }\n\n isGreaterThan(version: string, other: string): boolean {\n return this.sortVersions(version, other) > 0;\n }\n\n getSatisfyingVersion(versions: string[], range: string): string | null {\n const matching = versions.filter((version) => this.matches(version, range));\n if (matching.length === 0) {\n return null;\n }\n\n // Sort and return the highest (last in sorted array)\n matching.sort((a, b) => this.sortVersions(a, b));\n return matching.slice(-1)[0];\n }\n\n minSatisfyingVersion(versions: string[], range: string): string | null {\n const matching = versions.filter((version) => this.matches(version, range));\n if (matching.length === 0) {\n return null;\n }\n\n // Sort and return the lowest (first in sorted array)\n matching.sort((a, b) => this.sortVersions(a, b));\n return matching[0];\n }\n\n getNewValue({\n currentValue,\n rangeStrategy,\n newVersion,\n }: NewValueConfig): string | null {\n const parsedCurrent = parse(currentValue);\n const parsedNew = parse(newVersion);\n\n if (!parsedCurrent || !parsedNew) {\n return null;\n }\n\n const currentChannel = parsedCurrent.channel;\n const newChannel = parsedNew.channel;\n\n // Pin strategy: always return exact newVersion\n if (rangeStrategy === 'pin') {\n return newVersion;\n }\n\n // Dated nightlies should be replaced with new dated nightly\n if (currentChannel === 'nightly' && parsedCurrent.date) {\n return newVersion;\n }\n\n // Channel names (without dates) stay as channel names\n if (!isObject(currentChannel)) {\n return currentValue;\n }\n\n if (isObject(newChannel)) {\n // If current had no patch, new shouldn't either (range style)\n if (currentChannel.patch === undefined) {\n return `${newChannel.major}.${newChannel.minor}`;\n }\n\n // If current had prerelease without number (beta range), create beta range\n if (\n currentChannel.prerelease &&\n currentChannel.prerelease.number === undefined\n ) {\n return `${newChannel.major}.${newChannel.minor}.${newChannel.patch ?? 0}-beta`;\n }\n }\n\n return newVersion;\n }\n\n matches(version: string, range: string): boolean {\n const parsedVersion = parse(version);\n const parsedRange = parse(range);\n\n if (!parsedVersion || !parsedRange) {\n return false;\n }\n\n const versionChannel = parsedVersion.channel;\n const rangeChannel = parsedRange.channel;\n\n // For 'nightly' range, version must be a dated nightly\n if (rangeChannel === 'nightly') {\n return versionChannel === 'nightly' && parsedVersion.date !== undefined;\n }\n\n // For 'beta' range, version must be a beta version\n if (rangeChannel === 'beta') {\n return (\n isObject(versionChannel) && versionChannel.prerelease?.name === 'beta'\n );\n }\n\n // For 'stable' range, version must be a final release\n if (rangeChannel === 'stable') {\n return (\n isObject(versionChannel) &&\n versionChannel.patch !== undefined &&\n !versionChannel.prerelease\n );\n }\n\n // Handle version range matching\n if (isObject(rangeChannel) && isObject(versionChannel)) {\n // Major and minor must match\n if (\n versionChannel.major !== rangeChannel.major ||\n versionChannel.minor !== rangeChannel.minor\n ) {\n return false;\n }\n\n // If range has no patch, it's a range (e.g., \"1.82\" matches \"1.82.0\", \"1.82.1\", etc.)\n if (rangeChannel.patch === undefined) {\n return true;\n }\n\n // Patch must match\n if (versionChannel.patch !== rangeChannel.patch) {\n return false;\n }\n\n // If range has no prerelease, version must also have no prerelease\n if (!rangeChannel.prerelease) {\n return !versionChannel.prerelease;\n }\n\n // If range has prerelease but no number, it's a range (e.g., \"1.83.0-beta\" matches all beta versions)\n if (rangeChannel.prerelease.number === undefined) {\n return !!versionChannel.prerelease;\n }\n\n // Both have prerelease with numbers, they must match exactly\n return (\n !!versionChannel.prerelease &&\n versionChannel.prerelease?.number === rangeChannel.prerelease.number\n );\n }\n\n return false;\n }\n}\n\nexport const api = new RustReleaseChannelVersioning();\n\nexport default api;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/rust-release-channel/index.ts"],"sourcesContent":["import { isNonEmptyString, isObject } from '@sindresorhus/is';\nimport type { NewValueConfig, VersioningApi } from '../types.ts';\nimport { parse } from './parse.ts';\nimport { sortParsed } from './util.ts';\n\nexport const id = 'rust-release-channel';\nexport const displayName = 'Rust Release Channel';\nexport const urls = [\n '[Rustup - Toolchains](https://rust-lang.github.io/rustup/concepts/toolchains.html)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies = ['pin', 'replace'];\n\n/** Rust 1.0.0 release date for major version calculation */\nconst rust1Date = new Date('2015-05-15');\n\nclass RustReleaseChannelVersioning implements VersioningApi {\n isValid(input: string): boolean {\n return parse(input) !== null;\n }\n\n isVersion(input: string | undefined | null): boolean {\n if (!isNonEmptyString(input)) {\n return false;\n }\n\n const parsed = parse(input);\n if (!parsed) {\n return false;\n }\n\n const { channel, date } = parsed;\n\n // Support dated nightly versions like `nightly-2025-11-24`\n if (channel === 'nightly') {\n return date !== undefined;\n }\n\n // Support versioned channels like `1.82.0` or `1.83.0-beta.5`\n if (isObject(channel)) {\n // Without patch, it's a range\n if (channel.patch === undefined) {\n return false;\n }\n\n // With beta without number, it's a range\n return !channel.prerelease || channel.prerelease.number !== undefined;\n }\n\n return false;\n }\n\n isSingleVersion(input: string): boolean {\n return this.isVersion(input);\n }\n\n isStable(version: string): boolean {\n const parsed = parse(version);\n if (!parsed) {\n return false;\n }\n\n const { channel } = parsed;\n\n // Channel names and ranges are not stable\n if (!isObject(channel)) {\n return false;\n }\n\n // Version without patch is a range\n if (channel.patch === undefined) {\n return false;\n }\n\n // Version with prerelease is not stable\n return !channel.prerelease;\n }\n\n isCompatible(version: string, current?: string): boolean {\n if (!current) {\n return true;\n }\n\n const parsedVersion = parse(version);\n const parsedCurrent = parse(current);\n if (!parsedVersion || !parsedCurrent) {\n return false;\n }\n\n // Host triples must match (both undefined, or both the same value)\n if (parsedVersion.host !== parsedCurrent.host) {\n return false;\n }\n\n const channelVersion = parsedVersion.channel;\n const channelCurrent = parsedCurrent.channel;\n\n // Nightly versions are compatible only with other nightlies\n // Stable and beta versions are compatible with each other\n\n const isVersionNightly = channelVersion === 'nightly';\n const isCurrentNightly = channelCurrent === 'nightly';\n\n return isVersionNightly === isCurrentNightly;\n }\n\n getMajor(version: string): number | null {\n const parsed = parse(version);\n if (!parsed) {\n return null;\n }\n\n const { channel, date } = parsed;\n\n // Nightly with date\n if (channel === 'nightly' && date) {\n const versionDate = new Date(date.year, date.month - 1, date.day);\n return versionDate >= rust1Date ? 1 : 0;\n }\n\n // Version object\n if (isObject(channel)) {\n return channel.major;\n }\n\n // Default to major version 1 otherwise\n return 1;\n }\n\n getMinor(version: string): number | null {\n const parsed = parse(version);\n if (!parsed) {\n return null;\n }\n\n const { channel } = parsed;\n\n // Only version objects have minor\n if (isObject(channel)) {\n return channel.minor;\n }\n\n return null;\n }\n\n getPatch(version: string): number | null {\n const parsed = parse(version);\n if (!parsed) {\n return null;\n }\n\n const { channel } = parsed;\n\n // Only version objects have patch\n if (isObject(channel)) {\n return channel.patch ?? null;\n }\n\n return null;\n }\n\n sortVersions(version: string, other: string): number {\n const parsedA = parse(version);\n const parsedB = parse(other);\n\n if (!parsedA || !parsedB) {\n return version.localeCompare(other);\n }\n\n return sortParsed(parsedA, parsedB);\n }\n\n equals(version: string, other: string): boolean {\n const parsedA = parse(version);\n const parsedB = parse(other);\n\n if (!parsedA || !parsedB) {\n return false;\n }\n\n return sortParsed(parsedA, parsedB) === 0;\n }\n\n isGreaterThan(version: string, other: string): boolean {\n return this.sortVersions(version, other) > 0;\n }\n\n getSatisfyingVersion(versions: string[], range: string): string | null {\n const matching = versions.filter((version) => this.matches(version, range));\n if (matching.length === 0) {\n return null;\n }\n\n // Sort and return the highest (last in sorted array)\n matching.sort((a, b) => this.sortVersions(a, b));\n return matching.at(-1)!;\n }\n\n minSatisfyingVersion(versions: string[], range: string): string | null {\n const matching = versions.filter((version) => this.matches(version, range));\n if (matching.length === 0) {\n return null;\n }\n\n // Sort and return the lowest (first in sorted array)\n matching.sort((a, b) => this.sortVersions(a, b));\n return matching[0];\n }\n\n getNewValue({\n currentValue,\n rangeStrategy,\n newVersion,\n }: NewValueConfig): string | null {\n const parsedCurrent = parse(currentValue);\n const parsedNew = parse(newVersion);\n\n if (!parsedCurrent || !parsedNew) {\n return null;\n }\n\n const currentChannel = parsedCurrent.channel;\n const newChannel = parsedNew.channel;\n\n // Pin strategy: always return exact newVersion\n if (rangeStrategy === 'pin') {\n return newVersion;\n }\n\n // Dated nightlies should be replaced with new dated nightly\n if (currentChannel === 'nightly' && parsedCurrent.date) {\n return newVersion;\n }\n\n // Channel names (without dates) stay as channel names\n if (!isObject(currentChannel)) {\n return currentValue;\n }\n\n if (isObject(newChannel)) {\n // If current had no patch, new shouldn't either (range style)\n if (currentChannel.patch === undefined) {\n return `${newChannel.major}.${newChannel.minor}`;\n }\n\n // If current had prerelease without number (beta range), create beta range\n if (\n currentChannel.prerelease &&\n currentChannel.prerelease.number === undefined\n ) {\n return `${newChannel.major}.${newChannel.minor}.${newChannel.patch ?? 0}-beta`;\n }\n }\n\n return newVersion;\n }\n\n matches(version: string, range: string): boolean {\n const parsedVersion = parse(version);\n const parsedRange = parse(range);\n\n if (!parsedVersion || !parsedRange) {\n return false;\n }\n\n const versionChannel = parsedVersion.channel;\n const rangeChannel = parsedRange.channel;\n\n // For 'nightly' range, version must be a dated nightly\n if (rangeChannel === 'nightly') {\n return versionChannel === 'nightly' && parsedVersion.date !== undefined;\n }\n\n // For 'beta' range, version must be a beta version\n if (rangeChannel === 'beta') {\n return (\n isObject(versionChannel) && versionChannel.prerelease?.name === 'beta'\n );\n }\n\n // For 'stable' range, version must be a final release\n if (rangeChannel === 'stable') {\n return (\n isObject(versionChannel) &&\n versionChannel.patch !== undefined &&\n !versionChannel.prerelease\n );\n }\n\n // Handle version range matching\n if (isObject(rangeChannel) && isObject(versionChannel)) {\n // Major and minor must match\n if (\n versionChannel.major !== rangeChannel.major ||\n versionChannel.minor !== rangeChannel.minor\n ) {\n return false;\n }\n\n // If range has no patch, it's a range (e.g., \"1.82\" matches \"1.82.0\", \"1.82.1\", etc.)\n if (rangeChannel.patch === undefined) {\n return true;\n }\n\n // Patch must match\n if (versionChannel.patch !== rangeChannel.patch) {\n return false;\n }\n\n // If range has no prerelease, version must also have no prerelease\n if (!rangeChannel.prerelease) {\n return !versionChannel.prerelease;\n }\n\n // If range has prerelease but no number, it's a range (e.g., \"1.83.0-beta\" matches all beta versions)\n if (rangeChannel.prerelease.number === undefined) {\n return !!versionChannel.prerelease;\n }\n\n // Both have prerelease with numbers, they must match exactly\n return (\n !!versionChannel.prerelease &&\n versionChannel.prerelease?.number === rangeChannel.prerelease.number\n );\n }\n\n return false;\n }\n}\n\nexport const api = new RustReleaseChannelVersioning();\n\nexport default api;\n"],"mappings":"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"}
|
|
@@ -11,13 +11,13 @@ function sortParsed(parsedA, parsedB) {
|
|
|
11
11
|
const isANightly = channelA === "nightly";
|
|
12
12
|
const isBNightly = channelB === "nightly";
|
|
13
13
|
if (isANightly && !isBNightly) return 1;
|
|
14
|
-
|
|
14
|
+
if (!isANightly && isBNightly) return -1;
|
|
15
15
|
if (isANightly && isBNightly && parsedA.date && parsedB.date) {
|
|
16
16
|
const dateA = parsedA.date;
|
|
17
17
|
const dateB = parsedB.date;
|
|
18
18
|
if (dateA.year !== dateB.year) return dateA.year - dateB.year;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
if (dateA.month !== dateB.month) return dateA.month - dateB.month;
|
|
20
|
+
if (dateA.day !== dateB.day) return dateA.day - dateB.day;
|
|
21
21
|
return 0;
|
|
22
22
|
}
|
|
23
23
|
if (isObject(channelA) && isObject(channelB)) {
|
|
@@ -29,7 +29,7 @@ function sortParsed(parsedA, parsedB) {
|
|
|
29
29
|
const hasPreA = channelA.prerelease !== void 0;
|
|
30
30
|
const hasPreB = channelB.prerelease !== void 0;
|
|
31
31
|
if (hasPreA && !hasPreB) return -1;
|
|
32
|
-
|
|
32
|
+
if (!hasPreA && hasPreB) return 1;
|
|
33
33
|
if (hasPreA && hasPreB) {
|
|
34
34
|
const numA = channelA.prerelease.number ?? 0;
|
|
35
35
|
const numB = channelB.prerelease.number ?? 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","names":[],"sources":["../../../../lib/modules/versioning/rust-release-channel/util.ts"],"sourcesContent":["import { isObject } from '@sindresorhus/is';\nimport type { ToolchainObject } from './types.ts';\n\n/**\n * Compare two parsed toolchain objects for sorting.\n *\n * @returns negative if a < b, positive if a > b, 0 if equal\n */\nexport function sortParsed(\n parsedA: ToolchainObject,\n parsedB: ToolchainObject,\n): number {\n const channelA = parsedA.channel;\n const channelB = parsedB.channel;\n\n // Nightlies are always greater than versioned releases\n const isANightly = channelA === 'nightly';\n const isBNightly = channelB === 'nightly';\n\n if (isANightly && !isBNightly) {\n return 1;\n }
|
|
1
|
+
{"version":3,"file":"util.js","names":[],"sources":["../../../../lib/modules/versioning/rust-release-channel/util.ts"],"sourcesContent":["import { isObject } from '@sindresorhus/is';\nimport type { ToolchainObject } from './types.ts';\n\n/**\n * Compare two parsed toolchain objects for sorting.\n *\n * @returns negative if a < b, positive if a > b, 0 if equal\n */\nexport function sortParsed(\n parsedA: ToolchainObject,\n parsedB: ToolchainObject,\n): number {\n const channelA = parsedA.channel;\n const channelB = parsedB.channel;\n\n // Nightlies are always greater than versioned releases\n const isANightly = channelA === 'nightly';\n const isBNightly = channelB === 'nightly';\n\n if (isANightly && !isBNightly) {\n return 1;\n }\n if (!isANightly && isBNightly) {\n return -1;\n }\n\n // Both nightlies -> compare by date\n if (isANightly && isBNightly && parsedA.date && parsedB.date) {\n const dateA = parsedA.date;\n const dateB = parsedB.date;\n\n if (dateA.year !== dateB.year) {\n return dateA.year - dateB.year;\n }\n if (dateA.month !== dateB.month) {\n return dateA.month - dateB.month;\n }\n if (dateA.day !== dateB.day) {\n return dateA.day - dateB.day;\n }\n\n return 0;\n }\n\n // Both versioned -> compare by semver\n if (isObject(channelA) && isObject(channelB)) {\n if (channelA.major !== channelB.major) {\n return channelA.major - channelB.major;\n }\n if (channelA.minor !== channelB.minor) {\n return channelA.minor - channelB.minor;\n }\n\n const patchA = channelA.patch ?? 0;\n const patchB = channelB.patch ?? 0;\n if (patchA !== patchB) {\n return patchA - patchB;\n }\n\n // Handle prerelease comparison\n const hasPreA = channelA.prerelease !== undefined;\n const hasPreB = channelB.prerelease !== undefined;\n\n // Version with prerelease is less than version without\n if (hasPreA && !hasPreB) {\n return -1;\n }\n if (!hasPreA && hasPreB) {\n return 1;\n }\n\n // Both have prerelease -> compare beta numbers\n if (hasPreA && hasPreB) {\n const numA = channelA.prerelease!.number ?? 0;\n const numB = channelB.prerelease!.number ?? 0;\n if (numA !== numB) {\n return numA - numB;\n }\n }\n }\n\n return 0;\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,WACd,SACA,SACQ;CACR,MAAM,WAAW,QAAQ;CACzB,MAAM,WAAW,QAAQ;CAGzB,MAAM,aAAa,aAAa;CAChC,MAAM,aAAa,aAAa;CAEhC,IAAI,cAAc,CAAC,YACjB,OAAO;CAET,IAAI,CAAC,cAAc,YACjB,OAAO;CAIT,IAAI,cAAc,cAAc,QAAQ,QAAQ,QAAQ,MAAM;EAC5D,MAAM,QAAQ,QAAQ;EACtB,MAAM,QAAQ,QAAQ;EAEtB,IAAI,MAAM,SAAS,MAAM,MACvB,OAAO,MAAM,OAAO,MAAM;EAE5B,IAAI,MAAM,UAAU,MAAM,OACxB,OAAO,MAAM,QAAQ,MAAM;EAE7B,IAAI,MAAM,QAAQ,MAAM,KACtB,OAAO,MAAM,MAAM,MAAM;EAG3B,OAAO;CACT;CAGA,IAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ,GAAG;EAC5C,IAAI,SAAS,UAAU,SAAS,OAC9B,OAAO,SAAS,QAAQ,SAAS;EAEnC,IAAI,SAAS,UAAU,SAAS,OAC9B,OAAO,SAAS,QAAQ,SAAS;EAGnC,MAAM,SAAS,SAAS,SAAS;EACjC,MAAM,SAAS,SAAS,SAAS;EACjC,IAAI,WAAW,QACb,OAAO,SAAS;EAIlB,MAAM,UAAU,SAAS,eAAe,KAAA;EACxC,MAAM,UAAU,SAAS,eAAe,KAAA;EAGxC,IAAI,WAAW,CAAC,SACd,OAAO;EAET,IAAI,CAAC,WAAW,SACd,OAAO;EAIT,IAAI,WAAW,SAAS;GACtB,MAAM,OAAO,SAAS,WAAY,UAAU;GAC5C,MAAM,OAAO,SAAS,WAAY,UAAU;GAC5C,IAAI,SAAS,MACX,OAAO,OAAO;EAElB;CACF;CAEA,OAAO;AACT"}
|
package/dist/util/common.js
CHANGED
|
@@ -65,9 +65,7 @@ function getInheritedOrGlobal(key) {
|
|
|
65
65
|
const inheritedValue = InheritConfig.get(key);
|
|
66
66
|
const globalValue = GlobalConfig.get(key);
|
|
67
67
|
if (inheritedValue !== NOT_PRESENT) {
|
|
68
|
-
if (key === "onboardingAutoCloseAge" && isNumber(inheritedValue) && isNumber(globalValue))
|
|
69
|
-
if (globalValue < inheritedValue) return globalValue;
|
|
70
|
-
}
|
|
68
|
+
if (key === "onboardingAutoCloseAge" && isNumber(inheritedValue) && isNumber(globalValue) && globalValue < inheritedValue) return globalValue;
|
|
71
69
|
return inheritedValue;
|
|
72
70
|
}
|
|
73
71
|
return globalValue;
|
package/dist/util/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","names":["hostType","hostRules.hostType","jsoncWeaverParse"],"sources":["../../lib/util/common.ts"],"sourcesContent":["import { isNumber } from '@sindresorhus/is';\nimport JSON5 from 'json5';\nimport { parse as jsoncWeaverParse } from 'jsonc-weaver';\nimport type { JsonValue } from 'type-fest';\nimport { GlobalConfig } from '../config/global.ts';\nimport { InheritConfig, NOT_PRESENT } from '../config/inherit.ts';\nimport type { GlobalInheritableConfig } from '../config/types.ts';\nimport {\n AZURE_API_USING_HOST_TYPES,\n BITBUCKET_API_USING_HOST_TYPES,\n BITBUCKET_SERVER_API_USING_HOST_TYPES,\n FORGEJO_API_USING_HOST_TYPES,\n GITEA_API_USING_HOST_TYPES,\n GITHUB_API_USING_HOST_TYPES,\n GITLAB_API_USING_HOST_TYPES,\n} from '../constants/index.ts';\nimport { logger } from '../logger/index.ts';\nimport type { Nullish } from '../types/index.ts';\nimport * as hostRules from './host-rules.ts';\nimport { parseUrl } from './url.ts';\n\n/**\n * Tries to detect the `platform` from a url.\n *\n * @param url the url to detect `platform` from\n * @returns matched `platform` if found, otherwise `null`\n */\nexport function detectPlatform(\n url: string,\n):\n | 'azure'\n | 'bitbucket'\n | 'bitbucket-server'\n | 'forgejo'\n | 'gitea'\n | 'github'\n | 'gitlab'\n | null {\n const { hostname } = parseUrl(url) ?? {};\n if (hostname === 'dev.azure.com' || hostname?.endsWith('.visualstudio.com')) {\n return 'azure';\n }\n if (hostname === 'bitbucket.org' || hostname === 'bitbucket.com') {\n return 'bitbucket';\n }\n if (hostname?.includes('bitbucket')) {\n return 'bitbucket-server';\n }\n if (hostname?.includes('forgejo')) {\n return 'forgejo';\n }\n if (hostname && ['codeberg.org', 'codefloe.com'].includes(hostname)) {\n return 'forgejo';\n }\n if (\n hostname &&\n (['gitea.com'].includes(hostname) || hostname.includes('gitea'))\n ) {\n return 'gitea';\n }\n if (hostname === 'github.com' || hostname?.includes('github')) {\n return 'github';\n }\n if (hostname === 'gitlab.com' || hostname?.includes('gitlab')) {\n return 'gitlab';\n }\n\n const hostType = hostRules.hostType({ url });\n\n if (!hostType) {\n return null;\n }\n\n if (AZURE_API_USING_HOST_TYPES.includes(hostType)) {\n return 'azure';\n }\n\n if (BITBUCKET_SERVER_API_USING_HOST_TYPES.includes(hostType)) {\n return 'bitbucket-server';\n }\n if (BITBUCKET_API_USING_HOST_TYPES.includes(hostType)) {\n return 'bitbucket';\n }\n if (FORGEJO_API_USING_HOST_TYPES.includes(hostType)) {\n return 'forgejo';\n }\n if (GITEA_API_USING_HOST_TYPES.includes(hostType)) {\n return 'gitea';\n }\n if (GITHUB_API_USING_HOST_TYPES.includes(hostType)) {\n return 'github';\n }\n if (GITLAB_API_USING_HOST_TYPES.includes(hostType)) {\n return 'gitlab';\n }\n\n return null;\n}\n\nexport function noLeadingAtSymbol(input: string): string {\n return input.startsWith('@') ? input.slice(1) : input;\n}\n\nexport function parseJson(\n content: Nullish<string>,\n filename: string,\n): JsonValue {\n if (!content) {\n return null;\n }\n\n if (filename.endsWith('.jsonc')) {\n return parseJsonc(content);\n }\n\n if (filename.endsWith('.json5')) {\n return JSON5.parse(content);\n }\n\n return parseJsonWithFallback(content, filename);\n}\n\nexport function parseJsonWithFallback(\n content: string,\n context: string,\n): JsonValue {\n let parsedJson: JsonValue;\n\n try {\n parsedJson = parseJsonc(content);\n } catch {\n // warn if json5 format used in json\n parsedJson = JSON5.parse(content);\n logger.warn(\n { context },\n 'File contents are invalid JSONC but parse using JSON5. Support for this will be removed in a future release so please change to a support .json5 file name or ensure correct JSON syntax.',\n );\n }\n\n return parsedJson;\n}\n\nexport function parseJsonc(content: string): JsonValue {\n return jsoncWeaverParse(content);\n}\n\n/**\n * Use only if an option is inherited + globalOnly\n * For globalOnly options use GlobalConfig.get\n */\nexport function getInheritedOrGlobal<Key extends keyof GlobalInheritableConfig>(\n key: Key,\n): GlobalInheritableConfig[Key] {\n const inheritedValue = InheritConfig.get(key);\n const globalValue = GlobalConfig.get(key);\n if (inheritedValue !== NOT_PRESENT) {\n // Don't allow inherited config to make `onboardingAutoCloseAge` a higher value than our global setting\n if (\n key === 'onboardingAutoCloseAge' &&\n isNumber(inheritedValue) &&\n isNumber(globalValue)
|
|
1
|
+
{"version":3,"file":"common.js","names":["hostType","hostRules.hostType","jsoncWeaverParse"],"sources":["../../lib/util/common.ts"],"sourcesContent":["import { isNumber } from '@sindresorhus/is';\nimport JSON5 from 'json5';\nimport { parse as jsoncWeaverParse } from 'jsonc-weaver';\nimport type { JsonValue } from 'type-fest';\nimport { GlobalConfig } from '../config/global.ts';\nimport { InheritConfig, NOT_PRESENT } from '../config/inherit.ts';\nimport type { GlobalInheritableConfig } from '../config/types.ts';\nimport {\n AZURE_API_USING_HOST_TYPES,\n BITBUCKET_API_USING_HOST_TYPES,\n BITBUCKET_SERVER_API_USING_HOST_TYPES,\n FORGEJO_API_USING_HOST_TYPES,\n GITEA_API_USING_HOST_TYPES,\n GITHUB_API_USING_HOST_TYPES,\n GITLAB_API_USING_HOST_TYPES,\n} from '../constants/index.ts';\nimport { logger } from '../logger/index.ts';\nimport type { Nullish } from '../types/index.ts';\nimport * as hostRules from './host-rules.ts';\nimport { parseUrl } from './url.ts';\n\n/**\n * Tries to detect the `platform` from a url.\n *\n * @param url the url to detect `platform` from\n * @returns matched `platform` if found, otherwise `null`\n */\nexport function detectPlatform(\n url: string,\n):\n | 'azure'\n | 'bitbucket'\n | 'bitbucket-server'\n | 'forgejo'\n | 'gitea'\n | 'github'\n | 'gitlab'\n | null {\n const { hostname } = parseUrl(url) ?? {};\n if (hostname === 'dev.azure.com' || hostname?.endsWith('.visualstudio.com')) {\n return 'azure';\n }\n if (hostname === 'bitbucket.org' || hostname === 'bitbucket.com') {\n return 'bitbucket';\n }\n if (hostname?.includes('bitbucket')) {\n return 'bitbucket-server';\n }\n if (hostname?.includes('forgejo')) {\n return 'forgejo';\n }\n if (hostname && ['codeberg.org', 'codefloe.com'].includes(hostname)) {\n return 'forgejo';\n }\n if (\n hostname &&\n (['gitea.com'].includes(hostname) || hostname.includes('gitea'))\n ) {\n return 'gitea';\n }\n if (hostname === 'github.com' || hostname?.includes('github')) {\n return 'github';\n }\n if (hostname === 'gitlab.com' || hostname?.includes('gitlab')) {\n return 'gitlab';\n }\n\n const hostType = hostRules.hostType({ url });\n\n if (!hostType) {\n return null;\n }\n\n if (AZURE_API_USING_HOST_TYPES.includes(hostType)) {\n return 'azure';\n }\n\n if (BITBUCKET_SERVER_API_USING_HOST_TYPES.includes(hostType)) {\n return 'bitbucket-server';\n }\n if (BITBUCKET_API_USING_HOST_TYPES.includes(hostType)) {\n return 'bitbucket';\n }\n if (FORGEJO_API_USING_HOST_TYPES.includes(hostType)) {\n return 'forgejo';\n }\n if (GITEA_API_USING_HOST_TYPES.includes(hostType)) {\n return 'gitea';\n }\n if (GITHUB_API_USING_HOST_TYPES.includes(hostType)) {\n return 'github';\n }\n if (GITLAB_API_USING_HOST_TYPES.includes(hostType)) {\n return 'gitlab';\n }\n\n return null;\n}\n\nexport function noLeadingAtSymbol(input: string): string {\n return input.startsWith('@') ? input.slice(1) : input;\n}\n\nexport function parseJson(\n content: Nullish<string>,\n filename: string,\n): JsonValue {\n if (!content) {\n return null;\n }\n\n if (filename.endsWith('.jsonc')) {\n return parseJsonc(content);\n }\n\n if (filename.endsWith('.json5')) {\n return JSON5.parse(content);\n }\n\n return parseJsonWithFallback(content, filename);\n}\n\nexport function parseJsonWithFallback(\n content: string,\n context: string,\n): JsonValue {\n let parsedJson: JsonValue;\n\n try {\n parsedJson = parseJsonc(content);\n } catch {\n // warn if json5 format used in json\n parsedJson = JSON5.parse(content);\n logger.warn(\n { context },\n 'File contents are invalid JSONC but parse using JSON5. Support for this will be removed in a future release so please change to a support .json5 file name or ensure correct JSON syntax.',\n );\n }\n\n return parsedJson;\n}\n\nexport function parseJsonc(content: string): JsonValue {\n return jsoncWeaverParse(content);\n}\n\n/**\n * Use only if an option is inherited + globalOnly\n * For globalOnly options use GlobalConfig.get\n */\nexport function getInheritedOrGlobal<Key extends keyof GlobalInheritableConfig>(\n key: Key,\n): GlobalInheritableConfig[Key] {\n const inheritedValue = InheritConfig.get(key);\n const globalValue = GlobalConfig.get(key);\n if (inheritedValue !== NOT_PRESENT) {\n // Don't allow inherited config to make `onboardingAutoCloseAge` a higher value than our global setting\n if (\n key === 'onboardingAutoCloseAge' &&\n isNumber(inheritedValue) &&\n isNumber(globalValue) &&\n globalValue < inheritedValue\n ) {\n return globalValue;\n }\n\n return inheritedValue;\n }\n\n return globalValue;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA2BA,SAAgB,eACd,KASO;CACP,MAAM,EAAE,aAAa,SAAS,GAAG,KAAK,CAAC;CACvC,IAAI,aAAa,mBAAmB,UAAU,SAAS,mBAAmB,GACxE,OAAO;CAET,IAAI,aAAa,mBAAmB,aAAa,iBAC/C,OAAO;CAET,IAAI,UAAU,SAAS,WAAW,GAChC,OAAO;CAET,IAAI,UAAU,SAAS,SAAS,GAC9B,OAAO;CAET,IAAI,YAAY,CAAC,gBAAgB,cAAc,CAAC,CAAC,SAAS,QAAQ,GAChE,OAAO;CAET,IACE,aACC,CAAC,WAAW,CAAC,CAAC,SAAS,QAAQ,KAAK,SAAS,SAAS,OAAO,IAE9D,OAAO;CAET,IAAI,aAAa,gBAAgB,UAAU,SAAS,QAAQ,GAC1D,OAAO;CAET,IAAI,aAAa,gBAAgB,UAAU,SAAS,QAAQ,GAC1D,OAAO;CAGT,MAAMA,aAAWC,SAAmB,EAAE,IAAI,CAAC;CAE3C,IAAI,CAACD,YACH,OAAO;CAGT,IAAI,2BAA2B,SAASA,UAAQ,GAC9C,OAAO;CAGT,IAAI,sCAAsC,SAASA,UAAQ,GACzD,OAAO;CAET,IAAI,+BAA+B,SAASA,UAAQ,GAClD,OAAO;CAET,IAAI,6BAA6B,SAASA,UAAQ,GAChD,OAAO;CAET,IAAI,2BAA2B,SAASA,UAAQ,GAC9C,OAAO;CAET,IAAI,4BAA4B,SAASA,UAAQ,GAC/C,OAAO;CAET,IAAI,4BAA4B,SAASA,UAAQ,GAC/C,OAAO;CAGT,OAAO;AACT;AAEA,SAAgB,kBAAkB,OAAuB;CACvD,OAAO,MAAM,WAAW,GAAG,IAAI,MAAM,MAAM,CAAC,IAAI;AAClD;AAEA,SAAgB,UACd,SACA,UACW;CACX,IAAI,CAAC,SACH,OAAO;CAGT,IAAI,SAAS,SAAS,QAAQ,GAC5B,OAAO,WAAW,OAAO;CAG3B,IAAI,SAAS,SAAS,QAAQ,GAC5B,OAAO,MAAM,MAAM,OAAO;CAG5B,OAAO,sBAAsB,SAAS,QAAQ;AAChD;AAEA,SAAgB,sBACd,SACA,SACW;CACX,IAAI;CAEJ,IAAI;EACF,aAAa,WAAW,OAAO;CACjC,QAAQ;EAEN,aAAa,MAAM,MAAM,OAAO;EAChC,OAAO,KACL,EAAE,QAAQ,GACV,2LACF;CACF;CAEA,OAAO;AACT;AAEA,SAAgB,WAAW,SAA4B;CACrD,OAAOE,MAAiB,OAAO;AACjC;;;;;AAMA,SAAgB,qBACd,KAC8B;CAC9B,MAAM,iBAAiB,cAAc,IAAI,GAAG;CAC5C,MAAM,cAAc,aAAa,IAAI,GAAG;CACxC,IAAI,mBAAmB,aAAa;EAElC,IACE,QAAQ,4BACR,SAAS,cAAc,KACvB,SAAS,WAAW,KACpB,cAAc,gBAEd,OAAO;EAGT,OAAO;CACT;CAEA,OAAO;AACT"}
|
package/dist/util/exec/common.js
CHANGED
|
@@ -139,12 +139,10 @@ function kill(cp, signal) {
|
|
|
139
139
|
* and for which the process has permission to send a signal.
|
|
140
140
|
*/
|
|
141
141
|
return process.kill(-cp.pid, signal);
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
return cp.kill(signal);
|
|
147
|
-
}
|
|
142
|
+
cp.stderr?.destroy();
|
|
143
|
+
cp.stdout?.destroy();
|
|
144
|
+
cp.unref();
|
|
145
|
+
return cp.kill(signal);
|
|
148
146
|
} catch {
|
|
149
147
|
return false;
|
|
150
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","names":[],"sources":["../../../lib/util/exec/common.ts"],"sourcesContent":["import type { ChildProcess } from 'node:child_process';\nimport type { Readable } from 'node:stream';\nimport { isNullOrUndefined } from '@sindresorhus/is';\nimport { execa } from 'execa';\nimport { join, split } from 'shlex';\nimport { instrument } from '../../instrumentation/index.ts';\nimport { logger } from '../../logger/index.ts';\nimport { getEnv } from '../env.ts';\nimport { sanitize } from '../sanitize.ts';\nimport type { ExecErrorData } from './exec-error.ts';\nimport { ExecError } from './exec-error.ts';\nimport type {\n CommandWithOptions,\n DataListener,\n ExecResult,\n RawExecOptions,\n} from './types.ts';\nimport { asRawCommand, isCommandWithOptions } from './utils.ts';\n\n// https://man7.org/linux/man-pages/man7/signal.7.html#NAME\n// Non TERM/CORE signals\n// The following is step 3. in https://github.com/renovatebot/renovate/issues/16197#issuecomment-1171423890\nconst NONTERM = [\n 'SIGCHLD',\n 'SIGCLD',\n 'SIGCONT',\n 'SIGSTOP',\n 'SIGTSTP',\n 'SIGTTIN',\n 'SIGTTOU',\n 'SIGURG',\n 'SIGWINCH',\n];\n\nconst encoding = 'utf8';\n\nfunction stringify(list: Buffer[]): string {\n return Buffer.concat(list).toString(encoding);\n}\n\nfunction initStreamListeners(\n cp: ChildProcess,\n opts: RawExecOptions & { maxBuffer: number },\n): [Buffer[], Buffer[]] {\n const stdout: Buffer[] = [];\n const stderr: Buffer[] = [];\n let stdoutLen = 0;\n let stderrLen = 0;\n\n registerDataListeners(cp.stdout, opts.outputListeners?.stdout);\n registerDataListeners(cp.stderr, opts.outputListeners?.stderr);\n\n cp.stdout?.on('data', (chunk: Buffer) => {\n // process.stdout.write(data.toString());\n const len = Buffer.byteLength(chunk, encoding);\n stdoutLen += len;\n if (stdoutLen > opts.maxBuffer) {\n cp.emit('error', new Error('stdout maxBuffer exceeded'));\n } else {\n stdout.push(chunk);\n }\n });\n\n cp.stderr?.on('data', (chunk: Buffer) => {\n // process.stderr.write(data.toString());\n const len = Buffer.byteLength(chunk, encoding);\n stderrLen += len;\n if (stderrLen > opts.maxBuffer) {\n cp.emit('error', new Error('stderr maxBuffer exceeded'));\n } else {\n stderr.push(chunk);\n }\n });\n return [stdout, stderr];\n}\n\nfunction registerDataListeners(\n readable: Readable | null,\n dataListeners: DataListener[] | undefined,\n): void {\n if (isNullOrUndefined(readable) || isNullOrUndefined(dataListeners)) {\n return;\n }\n\n for (const listener of dataListeners) {\n readable.on('data', listener);\n }\n}\n\nexport function exec(\n commandArgument: string | CommandWithOptions,\n opts: RawExecOptions,\n): Promise<ExecResult> {\n let theCmd = commandArgument;\n let ignoreFailure = false;\n if (isCommandWithOptions(commandArgument)) {\n theCmd = join(commandArgument.command);\n if (commandArgument.ignoreFailure !== undefined) {\n ignoreFailure = commandArgument.ignoreFailure;\n }\n }\n\n return new Promise((resolve, reject) => {\n let cmd = asRawCommand(theCmd);\n let args: string[] = [];\n const maxBuffer = opts.maxBuffer ?? 10 * 1024 * 1024; // Set default max buffer size to 10MB\n\n // don't use shell by default, as it leads to potential security issues\n let shell = opts.shell ?? false;\n if (\n isCommandWithOptions(commandArgument) &&\n commandArgument.shell !== undefined\n ) {\n shell = commandArgument.shell;\n }\n\n // if we're not in shell mode, we need to provide the command and arguments\n if (shell === false) {\n const parts = split(cmd);\n // v8 ignore else -- TODO: add test #40625\n if (parts) {\n cmd = parts[0];\n args = parts.slice(1);\n }\n }\n\n const cp = execa(cmd, args, {\n ...opts,\n // force detached on non WIN platforms\n // https://github.com/nodejs/node/issues/21825#issuecomment-611328888\n detached: process.platform !== 'win32',\n shell,\n extendEnv: false,\n });\n\n // handle streams\n const [stdout, stderr] = initStreamListeners(cp, {\n ...opts,\n maxBuffer,\n });\n\n // handle process events\n void cp.on('error', (error) => {\n kill(cp, 'SIGTERM');\n // rethrowing, use originally emitted error message\n reject(new ExecError(error.message, rejectInfo(), error));\n });\n\n void cp.on('exit', (code: number, signal: NodeJS.Signals) => {\n if (NONTERM.includes(signal)) {\n return;\n }\n if (signal) {\n kill(cp, signal);\n reject(\n new ExecError(\n `Command failed: ${cp.spawnargs.join(' ')}\\nInterrupted by ${signal}`,\n {\n ...rejectInfo(),\n signal,\n },\n ),\n );\n return;\n }\n if (code !== 0) {\n if (ignoreFailure === undefined || ignoreFailure === false) {\n reject(\n new ExecError(\n `Command failed: ${cp.spawnargs.join(' ')}\\n${stringify(stderr)}`,\n {\n ...rejectInfo(),\n exitCode: code,\n },\n ),\n );\n return;\n }\n\n logger.once.debug(\n {\n command: cp.spawnargs.join(' '),\n stdout: stringify(stdout),\n stderr: stringify(stderr),\n exitCode: code,\n },\n `Ignoring failure to execute comamnd \\`${cp.spawnargs.join(' ')}\\`, as ignoreFailure=true is set`,\n );\n\n resolve({\n stderr: stringify(stderr),\n stdout: stringify(stdout),\n exitCode: code,\n });\n return;\n }\n resolve({\n stderr: stringify(stderr),\n stdout: stringify(stdout),\n });\n });\n\n function rejectInfo(): ExecErrorData {\n return {\n cmd: cp.spawnargs.join(' '),\n options: opts,\n stdout: stringify(stdout),\n stderr: stringify(stderr),\n };\n }\n });\n}\n\nfunction kill(cp: ChildProcess, signal: NodeJS.Signals): boolean {\n try {\n if (cp.pid && getEnv().RENOVATE_X_EXEC_GPID_HANDLE) {\n /**\n * If `pid` is negative, but not `-1`, signal shall be sent to all processes\n * (excluding an unspecified set of system processes),\n * whose process group ID (pgid) is equal to the absolute value of pid,\n * and for which the process has permission to send a signal.\n */\n return process.kill(-cp.pid, signal);\n } else {\n // destroying stdio is needed for unref to work\n // https://nodejs.org/api/child_process.html#subprocessunref\n // https://github.com/nodejs/node/blob/4d5ff25a813fd18939c9f76b17e36291e3ea15c3/lib/child_process.js#L412-L426\n cp.stderr?.destroy();\n cp.stdout?.destroy();\n cp.unref();\n return cp.kill(signal);\n }\n } catch {\n // cp is a single node tree, therefore -pid is invalid as there is no such pgid,\n return false;\n }\n}\n\nexport const rawExec: (\n cmd: string | CommandWithOptions,\n opts: RawExecOptions,\n) => Promise<ExecResult> = (\n cmd: string | CommandWithOptions,\n opts: RawExecOptions,\n) =>\n instrument(`rawExec: ${sanitize(asRawCommand(cmd))}`, () => exec(cmd, opts));\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"common.js","names":[],"sources":["../../../lib/util/exec/common.ts"],"sourcesContent":["import type { ChildProcess } from 'node:child_process';\nimport type { Readable } from 'node:stream';\nimport { isNullOrUndefined } from '@sindresorhus/is';\nimport { execa } from 'execa';\nimport { join, split } from 'shlex';\nimport { instrument } from '../../instrumentation/index.ts';\nimport { logger } from '../../logger/index.ts';\nimport { getEnv } from '../env.ts';\nimport { sanitize } from '../sanitize.ts';\nimport type { ExecErrorData } from './exec-error.ts';\nimport { ExecError } from './exec-error.ts';\nimport type {\n CommandWithOptions,\n DataListener,\n ExecResult,\n RawExecOptions,\n} from './types.ts';\nimport { asRawCommand, isCommandWithOptions } from './utils.ts';\n\n// https://man7.org/linux/man-pages/man7/signal.7.html#NAME\n// Non TERM/CORE signals\n// The following is step 3. in https://github.com/renovatebot/renovate/issues/16197#issuecomment-1171423890\nconst NONTERM = [\n 'SIGCHLD',\n 'SIGCLD',\n 'SIGCONT',\n 'SIGSTOP',\n 'SIGTSTP',\n 'SIGTTIN',\n 'SIGTTOU',\n 'SIGURG',\n 'SIGWINCH',\n];\n\nconst encoding = 'utf8';\n\nfunction stringify(list: Buffer[]): string {\n return Buffer.concat(list).toString(encoding);\n}\n\nfunction initStreamListeners(\n cp: ChildProcess,\n opts: RawExecOptions & { maxBuffer: number },\n): [Buffer[], Buffer[]] {\n const stdout: Buffer[] = [];\n const stderr: Buffer[] = [];\n let stdoutLen = 0;\n let stderrLen = 0;\n\n registerDataListeners(cp.stdout, opts.outputListeners?.stdout);\n registerDataListeners(cp.stderr, opts.outputListeners?.stderr);\n\n cp.stdout?.on('data', (chunk: Buffer) => {\n // process.stdout.write(data.toString());\n const len = Buffer.byteLength(chunk, encoding);\n stdoutLen += len;\n if (stdoutLen > opts.maxBuffer) {\n cp.emit('error', new Error('stdout maxBuffer exceeded'));\n } else {\n stdout.push(chunk);\n }\n });\n\n cp.stderr?.on('data', (chunk: Buffer) => {\n // process.stderr.write(data.toString());\n const len = Buffer.byteLength(chunk, encoding);\n stderrLen += len;\n if (stderrLen > opts.maxBuffer) {\n cp.emit('error', new Error('stderr maxBuffer exceeded'));\n } else {\n stderr.push(chunk);\n }\n });\n return [stdout, stderr];\n}\n\nfunction registerDataListeners(\n readable: Readable | null,\n dataListeners: DataListener[] | undefined,\n): void {\n if (isNullOrUndefined(readable) || isNullOrUndefined(dataListeners)) {\n return;\n }\n\n for (const listener of dataListeners) {\n readable.on('data', listener);\n }\n}\n\nexport function exec(\n commandArgument: string | CommandWithOptions,\n opts: RawExecOptions,\n): Promise<ExecResult> {\n let theCmd = commandArgument;\n let ignoreFailure = false;\n if (isCommandWithOptions(commandArgument)) {\n theCmd = join(commandArgument.command);\n if (commandArgument.ignoreFailure !== undefined) {\n ignoreFailure = commandArgument.ignoreFailure;\n }\n }\n\n return new Promise((resolve, reject) => {\n let cmd = asRawCommand(theCmd);\n let args: string[] = [];\n const maxBuffer = opts.maxBuffer ?? 10 * 1024 * 1024; // Set default max buffer size to 10MB\n\n // don't use shell by default, as it leads to potential security issues\n let shell = opts.shell ?? false;\n if (\n isCommandWithOptions(commandArgument) &&\n commandArgument.shell !== undefined\n ) {\n shell = commandArgument.shell;\n }\n\n // if we're not in shell mode, we need to provide the command and arguments\n if (shell === false) {\n const parts = split(cmd);\n // v8 ignore else -- TODO: add test #40625\n if (parts) {\n cmd = parts[0];\n args = parts.slice(1);\n }\n }\n\n const cp = execa(cmd, args, {\n ...opts,\n // force detached on non WIN platforms\n // https://github.com/nodejs/node/issues/21825#issuecomment-611328888\n detached: process.platform !== 'win32',\n shell,\n extendEnv: false,\n });\n\n // handle streams\n const [stdout, stderr] = initStreamListeners(cp, {\n ...opts,\n maxBuffer,\n });\n\n // handle process events\n void cp.on('error', (error) => {\n kill(cp, 'SIGTERM');\n // rethrowing, use originally emitted error message\n reject(new ExecError(error.message, rejectInfo(), error));\n });\n\n void cp.on('exit', (code: number, signal: NodeJS.Signals) => {\n if (NONTERM.includes(signal)) {\n return;\n }\n if (signal) {\n kill(cp, signal);\n reject(\n new ExecError(\n `Command failed: ${cp.spawnargs.join(' ')}\\nInterrupted by ${signal}`,\n {\n ...rejectInfo(),\n signal,\n },\n ),\n );\n return;\n }\n if (code !== 0) {\n if (ignoreFailure === undefined || ignoreFailure === false) {\n reject(\n new ExecError(\n `Command failed: ${cp.spawnargs.join(' ')}\\n${stringify(stderr)}`,\n {\n ...rejectInfo(),\n exitCode: code,\n },\n ),\n );\n return;\n }\n\n logger.once.debug(\n {\n command: cp.spawnargs.join(' '),\n stdout: stringify(stdout),\n stderr: stringify(stderr),\n exitCode: code,\n },\n `Ignoring failure to execute comamnd \\`${cp.spawnargs.join(' ')}\\`, as ignoreFailure=true is set`,\n );\n\n resolve({\n stderr: stringify(stderr),\n stdout: stringify(stdout),\n exitCode: code,\n });\n return;\n }\n resolve({\n stderr: stringify(stderr),\n stdout: stringify(stdout),\n });\n });\n\n function rejectInfo(): ExecErrorData {\n return {\n cmd: cp.spawnargs.join(' '),\n options: opts,\n stdout: stringify(stdout),\n stderr: stringify(stderr),\n };\n }\n });\n}\n\nfunction kill(cp: ChildProcess, signal: NodeJS.Signals): boolean {\n try {\n if (cp.pid && getEnv().RENOVATE_X_EXEC_GPID_HANDLE) {\n /**\n * If `pid` is negative, but not `-1`, signal shall be sent to all processes\n * (excluding an unspecified set of system processes),\n * whose process group ID (pgid) is equal to the absolute value of pid,\n * and for which the process has permission to send a signal.\n */\n return process.kill(-cp.pid, signal);\n }\n // destroying stdio is needed for unref to work\n // https://nodejs.org/api/child_process.html#subprocessunref\n // https://github.com/nodejs/node/blob/4d5ff25a813fd18939c9f76b17e36291e3ea15c3/lib/child_process.js#L412-L426\n cp.stderr?.destroy();\n cp.stdout?.destroy();\n cp.unref();\n return cp.kill(signal);\n } catch {\n // cp is a single node tree, therefore -pid is invalid as there is no such pgid,\n return false;\n }\n}\n\nexport const rawExec: (\n cmd: string | CommandWithOptions,\n opts: RawExecOptions,\n) => Promise<ExecResult> = (\n cmd: string | CommandWithOptions,\n opts: RawExecOptions,\n) =>\n instrument(`rawExec: ${sanitize(asRawCommand(cmd))}`, () => exec(cmd, opts));\n"],"mappings":"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"}
|
|
@@ -259,9 +259,7 @@ function isDynamicInstall(toolConstraints) {
|
|
|
259
259
|
}
|
|
260
260
|
function isStable(version, versioningApi, latest) {
|
|
261
261
|
if (!versioningApi.isStable(version)) return false;
|
|
262
|
-
if (isString(latest))
|
|
263
|
-
if (versioningApi.isGreaterThan(version, latest)) return false;
|
|
264
|
-
}
|
|
262
|
+
if (isString(latest) && versioningApi.isGreaterThan(version, latest)) return false;
|
|
265
263
|
return true;
|
|
266
264
|
}
|
|
267
265
|
async function resolveConstraint(toolConstraint) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerbase.js","names":[],"sources":["../../../lib/util/exec/containerbase.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { GlobalConfig } from '../../config/global.ts';\nimport { logger } from '../../logger/index.ts';\nimport type { ReleaseResult } from '../../modules/datasource/index.ts';\nimport type { VersioningApi } from '../../modules/versioning/types.ts';\nimport { getEnv } from '../env.ts';\nimport type { Opt, ToolConfig, ToolConstraint, ToolName } from './types.ts';\n\nexport const allToolConfig: Record<ToolName, ToolConfig> = {\n bazelisk: {\n datasource: 'github-releases',\n packageName: 'bazelbuild/bazelisk',\n versioning: 'semver',\n },\n bun: {\n datasource: 'github-releases',\n packageName: 'oven-sh/bun',\n extractVersion: '^bun-v(?<version>.*)$',\n versioning: 'npm',\n },\n bundler: {\n datasource: 'rubygems',\n packageName: 'bundler',\n versioning: 'ruby',\n },\n cocoapods: {\n datasource: 'rubygems',\n packageName: 'cocoapods',\n versioning: 'ruby',\n },\n composer: {\n datasource: 'github-releases',\n packageName: 'containerbase/composer-prebuild',\n versioning: 'composer',\n },\n conan: {\n datasource: 'pypi',\n packageName: 'conan',\n versioning: 'pep440',\n },\n copier: {\n datasource: 'pypi',\n packageName: 'copier',\n versioning: 'pep440',\n },\n corepack: {\n datasource: 'npm',\n packageName: 'corepack',\n versioning: 'npm',\n },\n deno: {\n datasource: 'github-releases',\n packageName: 'denoland/deno',\n versioning: 'deno',\n },\n devbox: {\n datasource: 'github-releases',\n packageName: 'jetify-com/devbox',\n versioning: 'semver',\n },\n dotnet: {\n datasource: 'dotnet-version',\n packageName: 'dotnet-sdk',\n versioning: 'semver',\n },\n erlang: {\n datasource: 'github-releases',\n packageName: 'containerbase/erlang-prebuild',\n versioning: 'semver-coerced',\n },\n elixir: {\n datasource: 'github-releases',\n packageName: 'elixir-lang/elixir',\n versioning: 'semver',\n },\n flux: {\n datasource: 'github-releases',\n packageName: 'fluxcd/flux2',\n versioning: 'semver',\n },\n gleam: {\n datasource: 'github-releases',\n packageName: 'gleam-lang/gleam',\n versioning: 'semver',\n },\n golang: {\n datasource: 'github-releases',\n packageName: 'containerbase/golang-prebuild',\n versioning: 'npm',\n },\n gradle: {\n datasource: 'gradle-version',\n packageName: 'gradle',\n versioning: 'gradle',\n },\n hashin: {\n datasource: 'pypi',\n packageName: 'hashin',\n versioning: 'pep440',\n },\n helm: {\n datasource: 'github-releases',\n packageName: 'helm/helm',\n versioning: 'semver',\n },\n helmfile: {\n datasource: 'github-releases',\n packageName: 'helmfile/helmfile',\n versioning: 'semver',\n },\n java: {\n datasource: 'java-version',\n packageName: 'java?system=true',\n versioning: 'npm',\n },\n /* not used in Renovate */\n 'java-maven': {\n datasource: 'java-version',\n packageName: 'java?system=true',\n versioning: 'maven',\n },\n jb: {\n datasource: 'github-releases',\n packageName: 'jsonnet-bundler/jsonnet-bundler',\n versioning: 'semver',\n },\n kustomize: {\n datasource: 'github-releases',\n packageName: 'kubernetes-sigs/kustomize',\n extractVersion: '^kustomize/v(?<version>.*)$',\n versioning: 'semver',\n },\n maven: {\n datasource: 'github-releases',\n packageName: 'containerbase/maven-prebuild',\n versioning: 'maven',\n },\n mise: {\n datasource: 'github-releases',\n packageName: 'jdx/mise',\n versioning: 'npm',\n },\n nix: {\n datasource: 'github-releases',\n packageName: 'containerbase/nix-prebuild',\n versioning: 'semver',\n },\n node: {\n datasource: 'github-releases',\n packageName: 'containerbase/node-prebuild',\n versioning: 'node',\n },\n npm: {\n datasource: 'npm',\n packageName: 'npm',\n versioning: 'npm',\n },\n pdm: {\n datasource: 'github-releases',\n packageName: 'pdm-project/pdm',\n versioning: 'semver',\n },\n php: {\n datasource: 'github-releases',\n packageName: 'containerbase/php-prebuild',\n versioning: 'composer',\n },\n 'pip-tools': {\n datasource: 'pypi',\n packageName: 'pip-tools',\n versioning: 'pep440',\n },\n pipenv: {\n datasource: 'pypi',\n packageName: 'pipenv',\n versioning: 'pep440',\n },\n pnpm: {\n datasource: 'npm',\n packageName: 'pnpm',\n versioning: 'npm',\n },\n pixi: {\n datasource: 'github-releases',\n packageName: 'prefix-dev/pixi',\n versioning: 'conda',\n extractVersion: '^v(?<version>.*)$',\n },\n poetry: {\n datasource: 'pypi',\n packageName: 'poetry',\n versioning: 'pep440',\n },\n python: {\n datasource: 'github-releases',\n packageName: 'containerbase/python-prebuild',\n versioning: 'python',\n },\n ruby: {\n datasource: 'github-releases',\n packageName: 'containerbase/ruby-prebuild',\n versioning: 'ruby',\n },\n rust: {\n datasource: 'rust-version',\n packageName: 'rust',\n versioning: 'rust-release-channel',\n },\n uv: {\n datasource: 'pypi',\n packageName: 'uv',\n versioning: 'pep440',\n },\n yarn: {\n datasource: 'npm',\n packageName: 'yarn',\n versioning: 'npm',\n },\n 'yarn-slim': {\n datasource: 'npm',\n packageName: 'yarn',\n versioning: 'npm',\n },\n dart: {\n datasource: 'dart-version',\n packageName: 'dart',\n versioning: 'npm',\n },\n flutter: {\n datasource: 'github-releases',\n packageName: 'containerbase/flutter-prebuild',\n versioning: 'npm',\n },\n vendir: {\n datasource: 'github-releases',\n packageName: 'carvel-dev/vendir',\n versioning: 'semver',\n },\n} as const;\n\nlet _getPkgReleases: Promise<\n typeof import('../../modules/datasource/index.ts')\n> | null = null;\n\nasync function getPkgReleases(\n toolConfig: ToolConfig,\n): Promise<ReleaseResult | null> {\n _getPkgReleases ??= import('../../modules/datasource/index.ts');\n const { getPkgReleases } = await _getPkgReleases;\n return getPkgReleases(toolConfig);\n}\n\nexport function getToolConfig(toolName: ToolName): ToolConfig {\n return allToolConfig[toolName];\n}\n\nexport function supportsDynamicInstall(toolName: ToolName): boolean {\n return !!allToolConfig[toolName];\n}\n\nexport function isContainerbase(): boolean {\n return !!getEnv().CONTAINERBASE;\n}\n\nexport function isDynamicInstall(\n toolConstraints?: Opt<ToolConstraint[]>,\n): boolean {\n if (GlobalConfig.get('binarySource') !== 'install') {\n return false;\n }\n if (!isContainerbase()) {\n logger.debug('Falling back to binarySource=global');\n return false;\n }\n return (\n !toolConstraints ||\n toolConstraints.every((toolConstraint) =>\n supportsDynamicInstall(toolConstraint.toolName),\n )\n );\n}\n\nfunction isStable(\n version: string,\n versioningApi: VersioningApi,\n latest?: string,\n): boolean {\n if (!versioningApi.isStable(version)) {\n return false;\n }\n if (isString(latest)) {\n if (versioningApi.isGreaterThan(version, latest)) {\n return false;\n }\n }\n return true;\n}\n\nexport async function resolveConstraint(\n toolConstraint: ToolConstraint,\n): Promise<string> {\n const { toolName } = toolConstraint;\n const toolConfig = allToolConfig[toolName];\n if (!toolConfig) {\n throw new Error(`Invalid tool to install: ${toolName}`);\n }\n\n const { get: getVersioning } =\n await import('../../modules/versioning/index.ts');\n const versioning = getVersioning(toolConfig.versioning);\n let constraint = toolConstraint.constraint;\n if (constraint) {\n if (versioning.isValid(constraint)) {\n if (versioning.isSingleVersion(constraint)) {\n return constraint.replace(/^=+/, '').trim();\n }\n } else {\n logger.warn(\n { toolName, constraint, versioning: toolConfig.versioning },\n 'Invalid tool constraint',\n );\n constraint = undefined;\n }\n }\n\n const pkgReleases = await getPkgReleases(toolConfig);\n const releases = pkgReleases?.releases ?? [];\n\n if (!releases?.length) {\n logger.warn({ toolConfig }, 'No tool releases found.');\n throw new Error('No tool releases found.');\n }\n\n const matchingReleases = releases.filter(\n (r) => !constraint || versioning.matches(r.version, constraint),\n );\n\n const stableMatchingVersion = matchingReleases\n .filter((r) => isStable(r.version, versioning, pkgReleases?.tags?.latest))\n .pop()?.version;\n if (stableMatchingVersion) {\n logger.debug(\n { toolName, constraint, resolvedVersion: stableMatchingVersion },\n 'Resolved stable matching version',\n );\n return stableMatchingVersion;\n }\n\n const unstableMatchingVersion = matchingReleases.pop()?.version;\n if (unstableMatchingVersion) {\n logger.debug(\n { toolName, constraint, resolvedVersion: unstableMatchingVersion },\n 'Resolved unstable matching version',\n );\n return unstableMatchingVersion;\n }\n\n const stableVersion = releases\n .filter((r) => isStable(r.version, versioning, pkgReleases?.tags?.latest))\n .pop()?.version;\n if (stableVersion) {\n logger.warn(\n { toolName, constraint, stableVersion },\n 'No matching tool versions found for constraint - using latest stable version',\n );\n }\n\n const highestVersion = releases.pop()!.version;\n logger.warn(\n { toolName, constraint, highestVersion },\n 'No matching or stable tool versions found - using an unstable version',\n );\n return highestVersion;\n}\n\nexport async function generateInstallCommands(\n toolConstraints: Opt<ToolConstraint[]>,\n): Promise<string[]> {\n const installCommands: string[] = [];\n if (toolConstraints?.length) {\n for (const toolConstraint of toolConstraints) {\n const toolVersion = await resolveConstraint(toolConstraint);\n const { toolName } = toolConstraint;\n const installCommand = `install-tool ${toolName} ${quote(toolVersion)}`;\n installCommands.push(installCommand);\n }\n }\n return installCommands;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"containerbase.js","names":[],"sources":["../../../lib/util/exec/containerbase.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { GlobalConfig } from '../../config/global.ts';\nimport { logger } from '../../logger/index.ts';\nimport type { ReleaseResult } from '../../modules/datasource/index.ts';\nimport type { VersioningApi } from '../../modules/versioning/types.ts';\nimport { getEnv } from '../env.ts';\nimport type { Opt, ToolConfig, ToolConstraint, ToolName } from './types.ts';\n\nexport const allToolConfig: Record<ToolName, ToolConfig> = {\n bazelisk: {\n datasource: 'github-releases',\n packageName: 'bazelbuild/bazelisk',\n versioning: 'semver',\n },\n bun: {\n datasource: 'github-releases',\n packageName: 'oven-sh/bun',\n extractVersion: '^bun-v(?<version>.*)$',\n versioning: 'npm',\n },\n bundler: {\n datasource: 'rubygems',\n packageName: 'bundler',\n versioning: 'ruby',\n },\n cocoapods: {\n datasource: 'rubygems',\n packageName: 'cocoapods',\n versioning: 'ruby',\n },\n composer: {\n datasource: 'github-releases',\n packageName: 'containerbase/composer-prebuild',\n versioning: 'composer',\n },\n conan: {\n datasource: 'pypi',\n packageName: 'conan',\n versioning: 'pep440',\n },\n copier: {\n datasource: 'pypi',\n packageName: 'copier',\n versioning: 'pep440',\n },\n corepack: {\n datasource: 'npm',\n packageName: 'corepack',\n versioning: 'npm',\n },\n deno: {\n datasource: 'github-releases',\n packageName: 'denoland/deno',\n versioning: 'deno',\n },\n devbox: {\n datasource: 'github-releases',\n packageName: 'jetify-com/devbox',\n versioning: 'semver',\n },\n dotnet: {\n datasource: 'dotnet-version',\n packageName: 'dotnet-sdk',\n versioning: 'semver',\n },\n erlang: {\n datasource: 'github-releases',\n packageName: 'containerbase/erlang-prebuild',\n versioning: 'semver-coerced',\n },\n elixir: {\n datasource: 'github-releases',\n packageName: 'elixir-lang/elixir',\n versioning: 'semver',\n },\n flux: {\n datasource: 'github-releases',\n packageName: 'fluxcd/flux2',\n versioning: 'semver',\n },\n gleam: {\n datasource: 'github-releases',\n packageName: 'gleam-lang/gleam',\n versioning: 'semver',\n },\n golang: {\n datasource: 'github-releases',\n packageName: 'containerbase/golang-prebuild',\n versioning: 'npm',\n },\n gradle: {\n datasource: 'gradle-version',\n packageName: 'gradle',\n versioning: 'gradle',\n },\n hashin: {\n datasource: 'pypi',\n packageName: 'hashin',\n versioning: 'pep440',\n },\n helm: {\n datasource: 'github-releases',\n packageName: 'helm/helm',\n versioning: 'semver',\n },\n helmfile: {\n datasource: 'github-releases',\n packageName: 'helmfile/helmfile',\n versioning: 'semver',\n },\n java: {\n datasource: 'java-version',\n packageName: 'java?system=true',\n versioning: 'npm',\n },\n /* not used in Renovate */\n 'java-maven': {\n datasource: 'java-version',\n packageName: 'java?system=true',\n versioning: 'maven',\n },\n jb: {\n datasource: 'github-releases',\n packageName: 'jsonnet-bundler/jsonnet-bundler',\n versioning: 'semver',\n },\n kustomize: {\n datasource: 'github-releases',\n packageName: 'kubernetes-sigs/kustomize',\n extractVersion: '^kustomize/v(?<version>.*)$',\n versioning: 'semver',\n },\n maven: {\n datasource: 'github-releases',\n packageName: 'containerbase/maven-prebuild',\n versioning: 'maven',\n },\n mise: {\n datasource: 'github-releases',\n packageName: 'jdx/mise',\n versioning: 'npm',\n },\n nix: {\n datasource: 'github-releases',\n packageName: 'containerbase/nix-prebuild',\n versioning: 'semver',\n },\n node: {\n datasource: 'github-releases',\n packageName: 'containerbase/node-prebuild',\n versioning: 'node',\n },\n npm: {\n datasource: 'npm',\n packageName: 'npm',\n versioning: 'npm',\n },\n pdm: {\n datasource: 'github-releases',\n packageName: 'pdm-project/pdm',\n versioning: 'semver',\n },\n php: {\n datasource: 'github-releases',\n packageName: 'containerbase/php-prebuild',\n versioning: 'composer',\n },\n 'pip-tools': {\n datasource: 'pypi',\n packageName: 'pip-tools',\n versioning: 'pep440',\n },\n pipenv: {\n datasource: 'pypi',\n packageName: 'pipenv',\n versioning: 'pep440',\n },\n pnpm: {\n datasource: 'npm',\n packageName: 'pnpm',\n versioning: 'npm',\n },\n pixi: {\n datasource: 'github-releases',\n packageName: 'prefix-dev/pixi',\n versioning: 'conda',\n extractVersion: '^v(?<version>.*)$',\n },\n poetry: {\n datasource: 'pypi',\n packageName: 'poetry',\n versioning: 'pep440',\n },\n python: {\n datasource: 'github-releases',\n packageName: 'containerbase/python-prebuild',\n versioning: 'python',\n },\n ruby: {\n datasource: 'github-releases',\n packageName: 'containerbase/ruby-prebuild',\n versioning: 'ruby',\n },\n rust: {\n datasource: 'rust-version',\n packageName: 'rust',\n versioning: 'rust-release-channel',\n },\n uv: {\n datasource: 'pypi',\n packageName: 'uv',\n versioning: 'pep440',\n },\n yarn: {\n datasource: 'npm',\n packageName: 'yarn',\n versioning: 'npm',\n },\n 'yarn-slim': {\n datasource: 'npm',\n packageName: 'yarn',\n versioning: 'npm',\n },\n dart: {\n datasource: 'dart-version',\n packageName: 'dart',\n versioning: 'npm',\n },\n flutter: {\n datasource: 'github-releases',\n packageName: 'containerbase/flutter-prebuild',\n versioning: 'npm',\n },\n vendir: {\n datasource: 'github-releases',\n packageName: 'carvel-dev/vendir',\n versioning: 'semver',\n },\n} as const;\n\nlet _getPkgReleases: Promise<\n typeof import('../../modules/datasource/index.ts')\n> | null = null;\n\nasync function getPkgReleases(\n toolConfig: ToolConfig,\n): Promise<ReleaseResult | null> {\n _getPkgReleases ??= import('../../modules/datasource/index.ts');\n const { getPkgReleases } = await _getPkgReleases;\n return getPkgReleases(toolConfig);\n}\n\nexport function getToolConfig(toolName: ToolName): ToolConfig {\n return allToolConfig[toolName];\n}\n\nexport function supportsDynamicInstall(toolName: ToolName): boolean {\n return !!allToolConfig[toolName];\n}\n\nexport function isContainerbase(): boolean {\n return !!getEnv().CONTAINERBASE;\n}\n\nexport function isDynamicInstall(\n toolConstraints?: Opt<ToolConstraint[]>,\n): boolean {\n if (GlobalConfig.get('binarySource') !== 'install') {\n return false;\n }\n if (!isContainerbase()) {\n logger.debug('Falling back to binarySource=global');\n return false;\n }\n return (\n !toolConstraints ||\n toolConstraints.every((toolConstraint) =>\n supportsDynamicInstall(toolConstraint.toolName),\n )\n );\n}\n\nfunction isStable(\n version: string,\n versioningApi: VersioningApi,\n latest?: string,\n): boolean {\n if (!versioningApi.isStable(version)) {\n return false;\n }\n if (isString(latest) && versioningApi.isGreaterThan(version, latest)) {\n return false;\n }\n return true;\n}\n\nexport async function resolveConstraint(\n toolConstraint: ToolConstraint,\n): Promise<string> {\n const { toolName } = toolConstraint;\n const toolConfig = allToolConfig[toolName];\n if (!toolConfig) {\n throw new Error(`Invalid tool to install: ${toolName}`);\n }\n\n const { get: getVersioning } =\n await import('../../modules/versioning/index.ts');\n const versioning = getVersioning(toolConfig.versioning);\n let constraint = toolConstraint.constraint;\n if (constraint) {\n if (versioning.isValid(constraint)) {\n if (versioning.isSingleVersion(constraint)) {\n return constraint.replace(/^=+/, '').trim();\n }\n } else {\n logger.warn(\n { toolName, constraint, versioning: toolConfig.versioning },\n 'Invalid tool constraint',\n );\n constraint = undefined;\n }\n }\n\n const pkgReleases = await getPkgReleases(toolConfig);\n const releases = pkgReleases?.releases ?? [];\n\n if (!releases?.length) {\n logger.warn({ toolConfig }, 'No tool releases found.');\n throw new Error('No tool releases found.');\n }\n\n const matchingReleases = releases.filter(\n (r) => !constraint || versioning.matches(r.version, constraint),\n );\n\n const stableMatchingVersion = matchingReleases\n .filter((r) => isStable(r.version, versioning, pkgReleases?.tags?.latest))\n .pop()?.version;\n if (stableMatchingVersion) {\n logger.debug(\n { toolName, constraint, resolvedVersion: stableMatchingVersion },\n 'Resolved stable matching version',\n );\n return stableMatchingVersion;\n }\n\n const unstableMatchingVersion = matchingReleases.pop()?.version;\n if (unstableMatchingVersion) {\n logger.debug(\n { toolName, constraint, resolvedVersion: unstableMatchingVersion },\n 'Resolved unstable matching version',\n );\n return unstableMatchingVersion;\n }\n\n const stableVersion = releases\n .filter((r) => isStable(r.version, versioning, pkgReleases?.tags?.latest))\n .pop()?.version;\n if (stableVersion) {\n logger.warn(\n { toolName, constraint, stableVersion },\n 'No matching tool versions found for constraint - using latest stable version',\n );\n }\n\n const highestVersion = releases.pop()!.version;\n logger.warn(\n { toolName, constraint, highestVersion },\n 'No matching or stable tool versions found - using an unstable version',\n );\n return highestVersion;\n}\n\nexport async function generateInstallCommands(\n toolConstraints: Opt<ToolConstraint[]>,\n): Promise<string[]> {\n const installCommands: string[] = [];\n if (toolConstraints?.length) {\n for (const toolConstraint of toolConstraints) {\n const toolVersion = await resolveConstraint(toolConstraint);\n const { toolName } = toolConstraint;\n const installCommand = `install-tool ${toolName} ${quote(toolVersion)}`;\n installCommands.push(installCommand);\n }\n }\n return installCommands;\n}\n"],"mappings":";;;;;;AASA,MAAa,gBAA8C;CACzD,UAAU;EACR,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,KAAK;EACH,YAAY;EACZ,aAAa;EACb,gBAAgB;EAChB,YAAY;CACd;CACA,SAAS;EACP,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,WAAW;EACT,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,UAAU;EACR,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,OAAO;EACL,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,UAAU;EACR,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,OAAO;EACL,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,UAAU;EACR,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CAEA,cAAc;EACZ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,IAAI;EACF,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,WAAW;EACT,YAAY;EACZ,aAAa;EACb,gBAAgB;EAChB,YAAY;CACd;CACA,OAAO;EACL,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,KAAK;EACH,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,KAAK;EACH,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,KAAK;EACH,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,KAAK;EACH,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,aAAa;EACX,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,gBAAgB;CAClB;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,IAAI;EACF,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,aAAa;EACX,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,SAAS;EACP,YAAY;EACZ,aAAa;EACb,YAAY;CACd;CACA,QAAQ;EACN,YAAY;EACZ,aAAa;EACb,YAAY;CACd;AACF;AAEA,IAAI,kBAEO;AAEX,eAAe,eACb,YAC+B;CAC/B,oBAAoB,OAAO;CAC3B,MAAM,EAAE,mBAAmB,MAAM;CACjC,OAAO,eAAe,UAAU;AAClC;AAEA,SAAgB,cAAc,UAAgC;CAC5D,OAAO,cAAc;AACvB;AAEA,SAAgB,uBAAuB,UAA6B;CAClE,OAAO,CAAC,CAAC,cAAc;AACzB;AAEA,SAAgB,kBAA2B;CACzC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;AACpB;AAEA,SAAgB,iBACd,iBACS;CACT,IAAI,aAAa,IAAI,cAAc,MAAM,WACvC,OAAO;CAET,IAAI,CAAC,gBAAgB,GAAG;EACtB,OAAO,MAAM,qCAAqC;EAClD,OAAO;CACT;CACA,OACE,CAAC,mBACD,gBAAgB,OAAO,mBACrB,uBAAuB,eAAe,QAAQ,CAChD;AAEJ;AAEA,SAAS,SACP,SACA,eACA,QACS;CACT,IAAI,CAAC,cAAc,SAAS,OAAO,GACjC,OAAO;CAET,IAAI,SAAS,MAAM,KAAK,cAAc,cAAc,SAAS,MAAM,GACjE,OAAO;CAET,OAAO;AACT;AAEA,eAAsB,kBACpB,gBACiB;CACjB,MAAM,EAAE,aAAa;CACrB,MAAM,aAAa,cAAc;CACjC,IAAI,CAAC,YACH,MAAM,IAAI,MAAM,4BAA4B,UAAU;CAGxD,MAAM,EAAE,KAAK,kBACX,MAAM,OAAO;CACf,MAAM,aAAa,cAAc,WAAW,UAAU;CACtD,IAAI,aAAa,eAAe;CAChC,IAAI,YACF,IAAI,WAAW,QAAQ,UAAU;MAC3B,WAAW,gBAAgB,UAAU,GACvC,OAAO,WAAW,QAAQ,OAAO,EAAE,CAAC,CAAC,KAAK;CAAA,OAEvC;EACL,OAAO,KACL;GAAE;GAAU;GAAY,YAAY,WAAW;EAAW,GAC1D,yBACF;EACA,aAAa,KAAA;CACf;CAGF,MAAM,cAAc,MAAM,eAAe,UAAU;CACnD,MAAM,WAAW,aAAa,YAAY,CAAC;CAE3C,IAAI,CAAC,UAAU,QAAQ;EACrB,OAAO,KAAK,EAAE,WAAW,GAAG,yBAAyB;EACrD,MAAM,IAAI,MAAM,yBAAyB;CAC3C;CAEA,MAAM,mBAAmB,SAAS,QAC/B,MAAM,CAAC,cAAc,WAAW,QAAQ,EAAE,SAAS,UAAU,CAChE;CAEA,MAAM,wBAAwB,iBAC3B,QAAQ,MAAM,SAAS,EAAE,SAAS,YAAY,aAAa,MAAM,MAAM,CAAC,CAAC,CACzE,IAAI,CAAC,EAAE;CACV,IAAI,uBAAuB;EACzB,OAAO,MACL;GAAE;GAAU;GAAY,iBAAiB;EAAsB,GAC/D,kCACF;EACA,OAAO;CACT;CAEA,MAAM,0BAA0B,iBAAiB,IAAI,CAAC,EAAE;CACxD,IAAI,yBAAyB;EAC3B,OAAO,MACL;GAAE;GAAU;GAAY,iBAAiB;EAAwB,GACjE,oCACF;EACA,OAAO;CACT;CAEA,MAAM,gBAAgB,SACnB,QAAQ,MAAM,SAAS,EAAE,SAAS,YAAY,aAAa,MAAM,MAAM,CAAC,CAAC,CACzE,IAAI,CAAC,EAAE;CACV,IAAI,eACF,OAAO,KACL;EAAE;EAAU;EAAY;CAAc,GACtC,8EACF;CAGF,MAAM,iBAAiB,SAAS,IAAI,CAAC,CAAE;CACvC,OAAO,KACL;EAAE;EAAU;EAAY;CAAe,GACvC,uEACF;CACA,OAAO;AACT;AAEA,eAAsB,wBACpB,iBACmB;CACnB,MAAM,kBAA4B,CAAC;CACnC,IAAI,iBAAiB,QACnB,KAAK,MAAM,kBAAkB,iBAAiB;EAC5C,MAAM,cAAc,MAAM,kBAAkB,cAAc;EAC1D,MAAM,EAAE,aAAa;EACrB,MAAM,iBAAiB,gBAAgB,SAAS,GAAG,MAAM,WAAW;EACpE,gBAAgB,KAAK,cAAc;CACrC;CAEF,OAAO;AACT"}
|
|
@@ -63,7 +63,7 @@ var InstrumentedSimpleGit = class {
|
|
|
63
63
|
const { spanName, options } = prepareInstrumentation("checkout");
|
|
64
64
|
return await instrument(spanName, async () => {
|
|
65
65
|
if (typeof whatOrOptions === "string") return await this.git.checkout(whatOrOptions);
|
|
66
|
-
|
|
66
|
+
return await this.git.checkout(whatOrOptions);
|
|
67
67
|
}, options);
|
|
68
68
|
}
|
|
69
69
|
async checkoutBranch(branch, startPoint) {
|
|
@@ -130,7 +130,7 @@ var InstrumentedSimpleGit = class {
|
|
|
130
130
|
const { spanName, options } = prepareInstrumentation("log");
|
|
131
131
|
return await instrument(spanName, async () => {
|
|
132
132
|
if (typeof optionOrOptions === "string") return await this.git.revparse(optionOrOptions);
|
|
133
|
-
|
|
133
|
+
return await this.git.revparse(optionOrOptions);
|
|
134
134
|
}, options);
|
|
135
135
|
}
|
|
136
136
|
async show(args) {
|
|
@@ -149,7 +149,7 @@ var InstrumentedSimpleGit = class {
|
|
|
149
149
|
const { spanName, options } = prepareInstrumentation("remote");
|
|
150
150
|
return await instrument(spanName, async () => {
|
|
151
151
|
if (verbose === true) return await instrument("other", () => this.git.getRemotes(true));
|
|
152
|
-
|
|
152
|
+
return await instrument("other", () => this.git.getRemotes());
|
|
153
153
|
}, options);
|
|
154
154
|
}
|
|
155
155
|
async addRemote(name, repo) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument.js","names":[],"sources":["../../../lib/util/git/instrument.ts"],"sourcesContent":["import type {\n BranchSummary,\n CommitResult,\n DefaultLogFields,\n DiffResult,\n LogOptions,\n LogResult,\n Options,\n RemoteWithRefs,\n RemoteWithoutRefs,\n Response,\n SimpleGit,\n StatusResult,\n TaskOptions,\n VersionResult,\n} from 'simple-git';\nimport { instrument } from '../../instrumentation/index.ts';\n\nimport type { RenovateSpanOptions } from '../../instrumentation/types.ts';\nimport {\n ATTR_VCS_GIT_OPERATION_TYPE,\n ATTR_VCS_GIT_SUBCOMMAND,\n} from '../../instrumentation/types.ts';\nimport type { GitOperationType } from './types.ts';\n\nfunction isGitOperationType(\n subcommand: string,\n): subcommand is GitOperationType {\n return knownGitOperationTypesBySubcommand.includes(\n subcommand as GitOperationType,\n );\n}\n\nfunction gitOperationTypeForSubcommand(subcommand: string): GitOperationType {\n let operationType: GitOperationType = 'other';\n if (!isGitOperationType(subcommand)) {\n if (subcommand === 'update-index') {\n operationType = 'plumbing';\n }\n\n return operationType;\n }\n\n return subcommand;\n}\n\n/** single-command prefixes that correspond to an operation type */\nconst knownGitOperationTypesBySubcommand: GitOperationType[] = [\n 'branch',\n 'checkout',\n 'clean',\n 'clone',\n 'commit',\n 'fetch',\n 'merge',\n 'pull',\n 'push',\n 'reset',\n 'submodule',\n];\n\n/** helper method for instrumentation of Git operations */\nexport function prepareInstrumentation(\n subcommand: string,\n options: RenovateSpanOptions = {},\n): {\n spanName: string;\n options: RenovateSpanOptions;\n} {\n const operationType = gitOperationTypeForSubcommand(subcommand);\n\n options.attributes ??= {};\n options.attributes[ATTR_VCS_GIT_OPERATION_TYPE] = operationType;\n options.attributes[ATTR_VCS_GIT_SUBCOMMAND] = subcommand;\n\n return {\n spanName: `git ${subcommand}`,\n options,\n };\n}\n\nexport function instrumentGit(git: SimpleGit): InstrumentedSimpleGit {\n return new InstrumentedSimpleGit(git);\n}\n\n/**\n * A wrapper for SimpleGit, which is instrumented and adds an ATTR_VCS_GIT_SUBCOMMAND and ATTR_VCS_GIT_OPERATION_TYPE attribute to all calls.\n *\n * We purposefully use a reduced set of methods, with simpler function parameters, to reduce the complexity needed to instrument the methods that we actually need.\n *\n * @see SimpleGit\n */\nexport class InstrumentedSimpleGit {\n private git: SimpleGit;\n\n constructor(git: SimpleGit) {\n this.git = git;\n }\n\n version(): Response<VersionResult> {\n return this.git.version();\n }\n\n raw(args: string[]): Response<string> {\n const { spanName, options } = prepareInstrumentation(args[0]);\n\n return instrument(spanName, () => this.git.raw(args), options);\n }\n\n async checkout(whatOrOptions: string | TaskOptions): Promise<string> {\n const { spanName, options } = prepareInstrumentation('checkout');\n\n return await instrument(\n spanName,\n async () => {\n if (typeof whatOrOptions === 'string') {\n return await this.git.checkout(whatOrOptions);\n } else {\n return await this.git.checkout(whatOrOptions);\n }\n },\n options,\n );\n }\n\n async checkoutBranch(branch: string, startPoint: string): Promise<void> {\n const { spanName, options } = prepareInstrumentation('checkout');\n\n await instrument(\n spanName,\n () => this.git.checkoutBranch(branch, startPoint),\n options,\n );\n }\n async branch(args: string[]): Promise<BranchSummary> {\n const { spanName, options } = prepareInstrumentation('branch');\n\n return await instrument(spanName, () => this.git.branch(args), options);\n }\n async branchLocal(): Promise<BranchSummary> {\n const { spanName, options } = prepareInstrumentation('branch');\n\n return await instrument(spanName, () => this.git.branchLocal(), options);\n }\n async add(files: string | string[]): Promise<string> {\n const { spanName, options } = prepareInstrumentation('add');\n\n return await instrument(spanName, () => this.git.add(files), options);\n }\n async addConfig(key: string, value: string): Promise<void> {\n const { spanName, options } = prepareInstrumentation('config');\n\n await instrument(spanName, () => this.git.addConfig(key, value), options);\n }\n async rm(files: string | string[]): Promise<void> {\n const { spanName, options } = prepareInstrumentation('rm');\n\n await instrument(spanName, () => this.git.rm(files), options);\n }\n async reset(modeOrOptions: any): Promise<void> {\n const { spanName, options } = prepareInstrumentation('reset');\n\n await instrument(spanName, () => this.git.reset(modeOrOptions), options);\n }\n async merge(args: string[]): Promise<void> {\n const { spanName, options } = prepareInstrumentation('merge');\n\n await instrument(spanName, () => this.git.merge(args), options);\n }\n async push(...args: any[]): Promise<any> {\n const { spanName, options } = prepareInstrumentation('push');\n\n return await instrument(spanName, () => this.git.push(...args), options);\n }\n async pull(args: string[]): Promise<any> {\n const { spanName, options } = prepareInstrumentation('pull');\n\n return await instrument(spanName, () => this.git.pull(args), options);\n }\n async fetch(args: string[]): Promise<any> {\n const { spanName, options } = prepareInstrumentation('fetch');\n\n return await instrument(spanName, () => this.git.fetch(args), options);\n }\n async clone(repo: string, dir: string, options: string[]): Promise<void> {\n const { spanName, options: spanOptions } = prepareInstrumentation('clone');\n\n await instrument(\n spanName,\n () => this.git.clone(repo, dir, options),\n spanOptions,\n );\n }\n commit(\n message: string | string[],\n files?: string[],\n options?: Options,\n ): Promise<CommitResult> {\n const { spanName, options: spanOptions } = prepareInstrumentation('clone');\n\n return instrument(\n spanName,\n () => this.git.commit(message, files, options),\n spanOptions,\n );\n }\n status(args?: string[]): Response<StatusResult> {\n const { spanName, options } = prepareInstrumentation('status');\n\n return instrument(spanName, () => this.git.status(args), options);\n }\n async log<T = DefaultLogFields>(\n options?: TaskOptions | LogOptions<T>,\n ): Promise<LogResult<T>> {\n const { spanName, options: spanOptions } = prepareInstrumentation('log');\n\n return await instrument(spanName, () => this.git.log(options), spanOptions);\n }\n async revparse(optionOrOptions: string | TaskOptions): Promise<string> {\n const { spanName, options } = prepareInstrumentation('log');\n\n return await instrument(\n spanName,\n async () => {\n if (typeof optionOrOptions === 'string') {\n return await this.git.revparse(optionOrOptions);\n } else {\n return await this.git.revparse(optionOrOptions);\n }\n },\n options,\n );\n }\n async show(args: string[]): Promise<string> {\n const { spanName, options } = prepareInstrumentation('show');\n\n return await instrument(spanName, () => this.git.show(args), options);\n }\n async diff(args: string[]): Promise<string> {\n const { spanName, options } = prepareInstrumentation('diff');\n\n return await instrument(spanName, () => this.git.diff(args), options);\n }\n\n async diffSummary(options: TaskOptions): Promise<DiffResult> {\n const { spanName, options: spanOptions } = prepareInstrumentation('diff');\n\n return await instrument(\n spanName,\n () => this.git.diffSummary(options),\n spanOptions,\n );\n }\n async getRemotes(\n verbose?: boolean,\n ): Promise<RemoteWithRefs[] | RemoteWithoutRefs[]> {\n const { spanName, options } = prepareInstrumentation('remote');\n\n return await instrument(\n spanName,\n async () => {\n if (verbose === true) {\n return await instrument('other', () => this.git.getRemotes(true));\n } else {\n return await instrument('other', () => this.git.getRemotes());\n }\n },\n options,\n );\n }\n async addRemote(name: string, repo: string): Promise<void> {\n const { spanName, options } = prepareInstrumentation('remote');\n\n await instrument(spanName, () => this.git.addRemote(name, repo), options);\n }\n env(env: Record<string, string>): this {\n this.git = this.git.env(env);\n return this;\n }\n async catFile(args: string[]): Promise<string> {\n const { spanName, options } = prepareInstrumentation('remote');\n\n return await instrument(spanName, () => this.git.catFile(args), options);\n }\n async listRemote(args: string[]): Promise<string> {\n const { spanName, options } = prepareInstrumentation('ls-remote');\n\n return await instrument(spanName, () => this.git.listRemote(args), options);\n }\n async submoduleUpdate(args: string[]): Promise<void> {\n const { spanName, options } = prepareInstrumentation('submodule');\n\n await instrument(spanName, () => this.git.submoduleUpdate(args), options);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrument.js","names":[],"sources":["../../../lib/util/git/instrument.ts"],"sourcesContent":["import type {\n BranchSummary,\n CommitResult,\n DefaultLogFields,\n DiffResult,\n LogOptions,\n LogResult,\n Options,\n RemoteWithRefs,\n RemoteWithoutRefs,\n Response,\n SimpleGit,\n StatusResult,\n TaskOptions,\n VersionResult,\n} from 'simple-git';\nimport { instrument } from '../../instrumentation/index.ts';\n\nimport type { RenovateSpanOptions } from '../../instrumentation/types.ts';\nimport {\n ATTR_VCS_GIT_OPERATION_TYPE,\n ATTR_VCS_GIT_SUBCOMMAND,\n} from '../../instrumentation/types.ts';\nimport type { GitOperationType } from './types.ts';\n\nfunction isGitOperationType(\n subcommand: string,\n): subcommand is GitOperationType {\n return knownGitOperationTypesBySubcommand.includes(\n subcommand as GitOperationType,\n );\n}\n\nfunction gitOperationTypeForSubcommand(subcommand: string): GitOperationType {\n let operationType: GitOperationType = 'other';\n if (!isGitOperationType(subcommand)) {\n if (subcommand === 'update-index') {\n operationType = 'plumbing';\n }\n\n return operationType;\n }\n\n return subcommand;\n}\n\n/** single-command prefixes that correspond to an operation type */\nconst knownGitOperationTypesBySubcommand: GitOperationType[] = [\n 'branch',\n 'checkout',\n 'clean',\n 'clone',\n 'commit',\n 'fetch',\n 'merge',\n 'pull',\n 'push',\n 'reset',\n 'submodule',\n];\n\n/** helper method for instrumentation of Git operations */\nexport function prepareInstrumentation(\n subcommand: string,\n options: RenovateSpanOptions = {},\n): {\n spanName: string;\n options: RenovateSpanOptions;\n} {\n const operationType = gitOperationTypeForSubcommand(subcommand);\n\n options.attributes ??= {};\n options.attributes[ATTR_VCS_GIT_OPERATION_TYPE] = operationType;\n options.attributes[ATTR_VCS_GIT_SUBCOMMAND] = subcommand;\n\n return {\n spanName: `git ${subcommand}`,\n options,\n };\n}\n\nexport function instrumentGit(git: SimpleGit): InstrumentedSimpleGit {\n return new InstrumentedSimpleGit(git);\n}\n\n/**\n * A wrapper for SimpleGit, which is instrumented and adds an ATTR_VCS_GIT_SUBCOMMAND and ATTR_VCS_GIT_OPERATION_TYPE attribute to all calls.\n *\n * We purposefully use a reduced set of methods, with simpler function parameters, to reduce the complexity needed to instrument the methods that we actually need.\n *\n * @see SimpleGit\n */\nexport class InstrumentedSimpleGit {\n private git: SimpleGit;\n\n constructor(git: SimpleGit) {\n this.git = git;\n }\n\n version(): Response<VersionResult> {\n return this.git.version();\n }\n\n raw(args: string[]): Response<string> {\n const { spanName, options } = prepareInstrumentation(args[0]);\n\n return instrument(spanName, () => this.git.raw(args), options);\n }\n\n async checkout(whatOrOptions: string | TaskOptions): Promise<string> {\n const { spanName, options } = prepareInstrumentation('checkout');\n\n return await instrument(\n spanName,\n async () => {\n if (typeof whatOrOptions === 'string') {\n return await this.git.checkout(whatOrOptions);\n }\n return await this.git.checkout(whatOrOptions);\n },\n options,\n );\n }\n\n async checkoutBranch(branch: string, startPoint: string): Promise<void> {\n const { spanName, options } = prepareInstrumentation('checkout');\n\n await instrument(\n spanName,\n () => this.git.checkoutBranch(branch, startPoint),\n options,\n );\n }\n async branch(args: string[]): Promise<BranchSummary> {\n const { spanName, options } = prepareInstrumentation('branch');\n\n return await instrument(spanName, () => this.git.branch(args), options);\n }\n async branchLocal(): Promise<BranchSummary> {\n const { spanName, options } = prepareInstrumentation('branch');\n\n return await instrument(spanName, () => this.git.branchLocal(), options);\n }\n async add(files: string | string[]): Promise<string> {\n const { spanName, options } = prepareInstrumentation('add');\n\n return await instrument(spanName, () => this.git.add(files), options);\n }\n async addConfig(key: string, value: string): Promise<void> {\n const { spanName, options } = prepareInstrumentation('config');\n\n await instrument(spanName, () => this.git.addConfig(key, value), options);\n }\n async rm(files: string | string[]): Promise<void> {\n const { spanName, options } = prepareInstrumentation('rm');\n\n await instrument(spanName, () => this.git.rm(files), options);\n }\n async reset(modeOrOptions: any): Promise<void> {\n const { spanName, options } = prepareInstrumentation('reset');\n\n await instrument(spanName, () => this.git.reset(modeOrOptions), options);\n }\n async merge(args: string[]): Promise<void> {\n const { spanName, options } = prepareInstrumentation('merge');\n\n await instrument(spanName, () => this.git.merge(args), options);\n }\n async push(...args: any[]): Promise<any> {\n const { spanName, options } = prepareInstrumentation('push');\n\n return await instrument(spanName, () => this.git.push(...args), options);\n }\n async pull(args: string[]): Promise<any> {\n const { spanName, options } = prepareInstrumentation('pull');\n\n return await instrument(spanName, () => this.git.pull(args), options);\n }\n async fetch(args: string[]): Promise<any> {\n const { spanName, options } = prepareInstrumentation('fetch');\n\n return await instrument(spanName, () => this.git.fetch(args), options);\n }\n async clone(repo: string, dir: string, options: string[]): Promise<void> {\n const { spanName, options: spanOptions } = prepareInstrumentation('clone');\n\n await instrument(\n spanName,\n () => this.git.clone(repo, dir, options),\n spanOptions,\n );\n }\n commit(\n message: string | string[],\n files?: string[],\n options?: Options,\n ): Promise<CommitResult> {\n const { spanName, options: spanOptions } = prepareInstrumentation('clone');\n\n return instrument(\n spanName,\n () => this.git.commit(message, files, options),\n spanOptions,\n );\n }\n status(args?: string[]): Response<StatusResult> {\n const { spanName, options } = prepareInstrumentation('status');\n\n return instrument(spanName, () => this.git.status(args), options);\n }\n async log<T = DefaultLogFields>(\n options?: TaskOptions | LogOptions<T>,\n ): Promise<LogResult<T>> {\n const { spanName, options: spanOptions } = prepareInstrumentation('log');\n\n return await instrument(spanName, () => this.git.log(options), spanOptions);\n }\n async revparse(optionOrOptions: string | TaskOptions): Promise<string> {\n const { spanName, options } = prepareInstrumentation('log');\n\n return await instrument(\n spanName,\n async () => {\n if (typeof optionOrOptions === 'string') {\n return await this.git.revparse(optionOrOptions);\n }\n return await this.git.revparse(optionOrOptions);\n },\n options,\n );\n }\n async show(args: string[]): Promise<string> {\n const { spanName, options } = prepareInstrumentation('show');\n\n return await instrument(spanName, () => this.git.show(args), options);\n }\n async diff(args: string[]): Promise<string> {\n const { spanName, options } = prepareInstrumentation('diff');\n\n return await instrument(spanName, () => this.git.diff(args), options);\n }\n\n async diffSummary(options: TaskOptions): Promise<DiffResult> {\n const { spanName, options: spanOptions } = prepareInstrumentation('diff');\n\n return await instrument(\n spanName,\n () => this.git.diffSummary(options),\n spanOptions,\n );\n }\n async getRemotes(\n verbose?: boolean,\n ): Promise<RemoteWithRefs[] | RemoteWithoutRefs[]> {\n const { spanName, options } = prepareInstrumentation('remote');\n\n return await instrument(\n spanName,\n async () => {\n if (verbose === true) {\n return await instrument('other', () => this.git.getRemotes(true));\n }\n return await instrument('other', () => this.git.getRemotes());\n },\n options,\n );\n }\n async addRemote(name: string, repo: string): Promise<void> {\n const { spanName, options } = prepareInstrumentation('remote');\n\n await instrument(spanName, () => this.git.addRemote(name, repo), options);\n }\n env(env: Record<string, string>): this {\n this.git = this.git.env(env);\n return this;\n }\n async catFile(args: string[]): Promise<string> {\n const { spanName, options } = prepareInstrumentation('remote');\n\n return await instrument(spanName, () => this.git.catFile(args), options);\n }\n async listRemote(args: string[]): Promise<string> {\n const { spanName, options } = prepareInstrumentation('ls-remote');\n\n return await instrument(spanName, () => this.git.listRemote(args), options);\n }\n async submoduleUpdate(args: string[]): Promise<void> {\n const { spanName, options } = prepareInstrumentation('submodule');\n\n await instrument(spanName, () => this.git.submoduleUpdate(args), options);\n }\n}\n"],"mappings":"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"}
|
|
@@ -77,10 +77,11 @@ var GithubGraphqlDatasourceFetcher = class GithubGraphqlDatasourceFetcher {
|
|
|
77
77
|
}
|
|
78
78
|
const { body } = httpRes;
|
|
79
79
|
const { data, errors } = body;
|
|
80
|
-
if (errors?.length)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
if (errors?.length) {
|
|
81
|
+
if (errors.length === 1) {
|
|
82
|
+
const { message } = errors[0];
|
|
83
|
+
return [null, new Error(message)];
|
|
84
|
+
}
|
|
84
85
|
const errorInstances = errors.map(({ message }) => new Error(message));
|
|
85
86
|
return [null, new AggregateError(errorInstances)];
|
|
86
87
|
}
|