diff --git a/lib/datasource/bitbucket-tags/index.ts b/lib/datasource/bitbucket-tags/index.ts index 523547d560caf2214e95362edf17adc4212dca61..3e06f3b4f07f3b089cd72688b0f267b6bf1bc87b 100644 --- a/lib/datasource/bitbucket-tags/index.ts +++ b/lib/datasource/bitbucket-tags/index.ts @@ -8,6 +8,7 @@ import { BitbucketCommit, BitbucketTag } from './types'; const bitbucketHttp = new BitbucketHttp(); export const id = 'bitbucket-tags'; +export const customRegistrySupport = true; export const registryStrategy = 'first'; export const defaultRegistryUrls = ['https://bitbucket.org']; diff --git a/lib/datasource/cdnjs/index.ts b/lib/datasource/cdnjs/index.ts index ffdfd341174b1cb93ff68e202145765bafbc340f..e678e56ecd33a6b6e58c2bbdeaa717d287ad681b 100644 --- a/lib/datasource/cdnjs/index.ts +++ b/lib/datasource/cdnjs/index.ts @@ -3,7 +3,7 @@ import { Http } from '../../util/http'; import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'cdnjs'; -export const registryUrlRestriction = 'fixed'; +export const customRegistrySupport = false; export const defaultRegistryUrls = ['https://api.cdnjs.com/']; export const caching = true; diff --git a/lib/datasource/clojure/index.ts b/lib/datasource/clojure/index.ts index 8e86fdded4ee9e897f803cbd16e61a8d43956968..10adb16fe33f932376da38391ef85e4e52d1fe41 100644 --- a/lib/datasource/clojure/index.ts +++ b/lib/datasource/clojure/index.ts @@ -1,7 +1,7 @@ import { MAVEN_REPO } from '../maven/common'; export const id = 'clojure'; - +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://clojars.org/repo', MAVEN_REPO]; export const registryStrategy = 'merge'; diff --git a/lib/datasource/crate/index.ts b/lib/datasource/crate/index.ts index 617c326565b8e33b770754995e6197fcacfa81f3..cce827f726b39f76fa5aab077031f51cc4240499 100644 --- a/lib/datasource/crate/index.ts +++ b/lib/datasource/crate/index.ts @@ -12,6 +12,7 @@ import * as cargoVersioning from '../../versioning/cargo'; import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; export const id = 'crate'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://crates.io']; export const defaultVersioning = cargoVersioning.id; export const registryStrategy = 'first'; diff --git a/lib/datasource/dart/index.ts b/lib/datasource/dart/index.ts index d76f8ec01545c808f3aae3049c28c50bd7cf4a0e..2df5e623200c16313ad5e20036c63646871d0cb9 100644 --- a/lib/datasource/dart/index.ts +++ b/lib/datasource/dart/index.ts @@ -4,7 +4,7 @@ import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'dart'; export const defaultRegistryUrls = ['https://pub.dartlang.org/']; -export const registryUrlRestriction = 'fixed'; +export const customRegistrySupport = false; const http = new Http(id); diff --git a/lib/datasource/docker/index.ts b/lib/datasource/docker/index.ts index ff9e4f53363c84b2baf801db8a343728dae0e012..68ee2f26561082d5988f60f3bacef5c5f45dc7ec 100644 --- a/lib/datasource/docker/index.ts +++ b/lib/datasource/docker/index.ts @@ -20,6 +20,7 @@ import { Image, ImageList, MediaType } from './types'; // TODO: replace www-authenticate with https://www.npmjs.com/package/auth-header ? export const id = 'docker'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://index.docker.io']; export const defaultVersioning = dockerVersioning.id; export const registryStrategy = 'first'; diff --git a/lib/datasource/galaxy/index.ts b/lib/datasource/galaxy/index.ts index fdb8ef9cba0de7f85d9b0b2eaa8f25c303f0ac63..87e41b9346684b80ded73181f08a3c70d0bbe4d8 100644 --- a/lib/datasource/galaxy/index.ts +++ b/lib/datasource/galaxy/index.ts @@ -6,7 +6,7 @@ import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; export const id = 'galaxy'; export const defaultRegistryUrls = ['https://galaxy.ansible.com/']; -export const registryUrlRestriction = 'fixed'; +export const customRegistrySupport = false; const http = new Http(id); diff --git a/lib/datasource/git-refs/index.ts b/lib/datasource/git-refs/index.ts index f2b8e79bc1b50a6fe1cc482efd98a945292b8f6d..16801069614a7aceff75c33a5978dad1d1b99300 100644 --- a/lib/datasource/git-refs/index.ts +++ b/lib/datasource/git-refs/index.ts @@ -4,7 +4,7 @@ import * as semver from '../../versioning/semver'; import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'git-refs'; -export const registryUrlRestriction = 'disallowed'; +export const customRegistrySupport = false; const cacheMinutes = 10; diff --git a/lib/datasource/git-tags/index.ts b/lib/datasource/git-tags/index.ts index b848900727d68f7759c741ddbddb42aaf7de6fd3..ce1fd1497542f1cacd2165098560c9abdd679d15 100644 --- a/lib/datasource/git-tags/index.ts +++ b/lib/datasource/git-tags/index.ts @@ -3,7 +3,7 @@ import * as gitRefs from '../git-refs'; import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'git-tags'; -export const registryUrlRestriction = 'disallowed'; +export const customRegistrySupport = false; export async function getReleases({ lookupName, diff --git a/lib/datasource/github-releases/index.ts b/lib/datasource/github-releases/index.ts index 8bd862f07e0f22bea8559e3b74fed6f50afcc37a..a505dd7424926e428504b2a88981788b0bac4720 100644 --- a/lib/datasource/github-releases/index.ts +++ b/lib/datasource/github-releases/index.ts @@ -4,6 +4,7 @@ import { ensureTrailingSlash } from '../../util/url'; import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'github-releases'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://github.com']; export const registryStrategy = 'first'; diff --git a/lib/datasource/github-tags/index.ts b/lib/datasource/github-tags/index.ts index b26efa501e4130b1ce3cb47672474e1aaacbe74d..ac3b93c528928b968b00bb219b5876e2f08c9d36 100644 --- a/lib/datasource/github-tags/index.ts +++ b/lib/datasource/github-tags/index.ts @@ -6,6 +6,7 @@ import * as githubReleases from '../github-releases'; import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'github-tags'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://github.com']; export const registryStrategy = 'first'; diff --git a/lib/datasource/gitlab-tags/index.ts b/lib/datasource/gitlab-tags/index.ts index 31292d8da440f844c4cd5b28f82fbf32fdde4e0f..bb9c0f3c95075d1ae9a92ce2493341199ef9fcb3 100644 --- a/lib/datasource/gitlab-tags/index.ts +++ b/lib/datasource/gitlab-tags/index.ts @@ -6,6 +6,7 @@ import type { GetReleasesConfig, ReleaseResult } from '../types'; const gitlabApi = new GitlabHttp(); export const id = 'gitlab-tags'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://gitlab.com']; export const registryStrategy = 'first'; diff --git a/lib/datasource/go/index.ts b/lib/datasource/go/index.ts index 275059647d594a2c36482b1d2abccbb4888c491e..9f2cfd6d550517fd786863c7c623ddd3f61b3d6e 100644 --- a/lib/datasource/go/index.ts +++ b/lib/datasource/go/index.ts @@ -11,7 +11,7 @@ import * as gitlab from '../gitlab-tags'; import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'go'; -export const registryUrlRestriction = 'disallowed'; +export const customRegistrySupport = false; const http = new Http(id); const gitlabRegExp = /^(https:\/\/[^/]*gitlab.[^/]*)\/(.*)$/; diff --git a/lib/datasource/gradle-version/index.ts b/lib/datasource/gradle-version/index.ts index 080c103c6d0f476c4d0cc719491a86781d34ca7c..3313fe32f000741e6b796ea9b30d26c2f3d62e4c 100644 --- a/lib/datasource/gradle-version/index.ts +++ b/lib/datasource/gradle-version/index.ts @@ -5,6 +5,7 @@ import * as gradleVersioning from '../../versioning/gradle'; import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'gradle-version'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://services.gradle.org/versions/all']; export const defaultVersioning = gradleVersioning.id; export const registryStrategy = 'merge'; diff --git a/lib/datasource/helm/index.ts b/lib/datasource/helm/index.ts index c5bca39989ae6feb3fd21fee1b7db59d34173e8f..ea1105841ac2d01bc7823c7f0b9774db414027c7 100644 --- a/lib/datasource/helm/index.ts +++ b/lib/datasource/helm/index.ts @@ -12,6 +12,7 @@ export const id = 'helm'; const http = new Http(id); +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://charts.helm.sh/stable']; export const registryStrategy = 'first'; diff --git a/lib/datasource/hex/index.ts b/lib/datasource/hex/index.ts index 45e883c1cc97b53e1c3341afeebdff2d5afad931..a9eaa5b08442fa96be0f062101ec2508bf765244 100644 --- a/lib/datasource/hex/index.ts +++ b/lib/datasource/hex/index.ts @@ -6,7 +6,7 @@ import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'hex'; export const defaultRegistryUrls = ['https://hex.pm/']; -export const registryUrlRestriction = 'fixed'; +export const customRegistrySupport = false; export const defaultVersioning = hexVersioning.id; const http = new Http(id); diff --git a/lib/datasource/index.ts b/lib/datasource/index.ts index 58b8efeaedd08a803c627e432be7a01d17ba2e4a..cfd2277eb58b693ae8f98e0727d34f14c0f3b99a 100644 --- a/lib/datasource/index.ts +++ b/lib/datasource/index.ts @@ -171,17 +171,17 @@ function resolveRegistryUrls( datasource: DatasourceApi, extractedUrls: string[] ): string[] { - const { defaultRegistryUrls = [], registryUrlRestriction } = datasource; - const customUrls = extractedUrls?.filter(Boolean); - if (registryUrlRestriction) { - if (is.nonEmptyArray(customUrls)) { + const { defaultRegistryUrls = [] } = datasource; + if (!datasource.customRegistrySupport) { + if (is.nonEmptyArray(extractedUrls)) { logger.warn( - { datasource: datasource.id, customUrls }, - 'Ignoring custom registryUrls as they cannot be overridden' + { datasource: datasource.id, registryUrls: extractedUrls }, + 'Custom datasources are not allowed for this datasource and will be ignored' ); } return defaultRegistryUrls; } + const customUrls = extractedUrls?.filter(Boolean); let registryUrls: string[]; if (is.nonEmptyArray(customUrls)) { registryUrls = [...customUrls]; @@ -207,34 +207,18 @@ async function fetchReleases( const datasource = load(datasourceName); const registryUrls = resolveRegistryUrls(datasource, config.registryUrls); let dep: ReleaseResult = null; + const registryStrategy = datasource.registryStrategy || 'hunt'; try { - if ( - datasource.registryStrategy || - datasource.registryUrlRestriction === 'fixed' - ) { - // istanbul ignore if - if (!registryUrls.length) { - logger.warn( - { datasource: datasourceName, depName: config.depName }, - 'Missing registryUrls for registryStrategy' - ); - return null; - } - if (datasource.registryStrategy === 'first') { + if (is.nonEmptyArray(registryUrls)) { + if (registryStrategy === 'first') { dep = await firstRegistry(config, datasource, registryUrls); - } else if (datasource.registryStrategy === 'hunt') { + } else if (registryStrategy === 'hunt') { dep = await huntRegistries(config, datasource, registryUrls); - } else if (datasource.registryStrategy === 'merge') { + } else if (registryStrategy === 'merge') { dep = await mergeRegistries(config, datasource, registryUrls); - } else { - // Default to hunting default registries if no rangeStrategy provided - dep = await huntRegistries(config, datasource, registryUrls); } } else { - dep = await datasource.getReleases({ - ...config, - registryUrls, - }); + dep = await datasource.getReleases(config); } } catch (err) { if (err.message === HOST_DISABLED || err.err?.message === HOST_DISABLED) { diff --git a/lib/datasource/jenkins-plugins/index.ts b/lib/datasource/jenkins-plugins/index.ts index 3fe0504600c977e076b1d74962278c809472f155..5790e0e57ca2b40a74681a34e779136e8e7d9f35 100644 --- a/lib/datasource/jenkins-plugins/index.ts +++ b/lib/datasource/jenkins-plugins/index.ts @@ -1,3 +1,5 @@ export { id } from './common'; export { getReleases } from './get'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://updates.jenkins.io']; +export const registryStrategy = 'hunt'; diff --git a/lib/datasource/maven/index.ts b/lib/datasource/maven/index.ts index bf5775e0e6ad148d863c79f76822aded407d3f30..5867caa41ca61c2e56e32cec77685db86c0d2924 100644 --- a/lib/datasource/maven/index.ts +++ b/lib/datasource/maven/index.ts @@ -13,6 +13,7 @@ import { downloadHttpProtocol, isHttpResourceExists } from './util'; export { id } from './common'; +export const customRegistrySupport = true; export const defaultRegistryUrls = [MAVEN_REPO]; export const defaultVersioning = mavenVersioning.id; export const registryStrategy = 'merge'; diff --git a/lib/datasource/npm/index.ts b/lib/datasource/npm/index.ts index 2bc09a87d6861255c16aeedd7bf8b656dae22b7a..1f3bfc82ecab6f54256785f2ddc741073a5c82a3 100644 --- a/lib/datasource/npm/index.ts +++ b/lib/datasource/npm/index.ts @@ -5,4 +5,4 @@ export { getReleases } from './releases'; export { getNpmrc, setNpmrc } from './npmrc'; export { id } from './common'; export const defaultVersioning = npmVersioning.id; -export const registryUrlRestriction = 'disallowed'; +export const customRegistrySupport = false; diff --git a/lib/datasource/nuget/index.ts b/lib/datasource/nuget/index.ts index 0b9ebb79369ab0dbf0ead86acea0194990307ae4..d85e3ff0733b4f9f71fe8f1c3e1662ffeeebfc03 100644 --- a/lib/datasource/nuget/index.ts +++ b/lib/datasource/nuget/index.ts @@ -7,6 +7,7 @@ import * as v3 from './v3'; export { id } from './common'; +export const customRegistrySupport = true; export const defaultRegistryUrls = [v3.getDefaultFeed()]; export const defaultVersioning = nugetVersioning.id; export const registryStrategy = 'merge'; diff --git a/lib/datasource/orb/index.ts b/lib/datasource/orb/index.ts index f33a61edbea484a7c55f5a1e023505d53afae648..546167c187312f916889cd767ade6694937a93d8 100644 --- a/lib/datasource/orb/index.ts +++ b/lib/datasource/orb/index.ts @@ -5,7 +5,7 @@ import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'orb'; export const defaultRegistryUrls = ['https://circleci.com/']; -export const registryUrlRestriction = 'fixed'; +export const customRegistrySupport = false; const http = new Http(id); diff --git a/lib/datasource/packagist/index.ts b/lib/datasource/packagist/index.ts index 654854a3a7fea6a047ab4b199871de5a520216c2..bc8a0cf2b2d3d51965ac19df1ec9fd32729f28c2 100644 --- a/lib/datasource/packagist/index.ts +++ b/lib/datasource/packagist/index.ts @@ -11,6 +11,7 @@ import * as composerVersioning from '../../versioning/composer'; import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'packagist'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://packagist.org']; export const defaultVersioning = composerVersioning.id; export const registryStrategy = 'hunt'; diff --git a/lib/datasource/pod/index.ts b/lib/datasource/pod/index.ts index efb92c49fa98ede7fb039def06b24d2dcc29810e..dd2d050815c175746bb307dc9f460efb0769a418 100644 --- a/lib/datasource/pod/index.ts +++ b/lib/datasource/pod/index.ts @@ -9,6 +9,7 @@ import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'pod'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://cdn.cocoapods.org']; export const registryStrategy = 'hunt'; diff --git a/lib/datasource/pypi/index.ts b/lib/datasource/pypi/index.ts index e2d8864d1eb5627080933fa6782dcac29d79f965..144e417ec8ea7668070e136bf3963a3ae0c8013f 100644 --- a/lib/datasource/pypi/index.ts +++ b/lib/datasource/pypi/index.ts @@ -8,6 +8,7 @@ import * as pep440 from '../../versioning/pep440'; import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; export const id = 'pypi'; +export const customRegistrySupport = true; export const defaultRegistryUrls = [ process.env.PIP_INDEX_URL || 'https://pypi.org/pypi/', ]; diff --git a/lib/datasource/repology/index.ts b/lib/datasource/repology/index.ts index eb85626a44468087fb272558401f998454d64ae3..4551ac596b0033aaeffccbd14cafa85050d2939d 100644 --- a/lib/datasource/repology/index.ts +++ b/lib/datasource/repology/index.ts @@ -7,6 +7,7 @@ import { getQueryString } from '../../util/url'; import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'repology'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://repology.org/']; export const registryStrategy = 'hunt'; diff --git a/lib/datasource/ruby-version/index.ts b/lib/datasource/ruby-version/index.ts index 134e33796e04236b4082e5bb963d55b2d9784bd7..f225b9fbca9bec49d792fabf2e0b507704742f83 100644 --- a/lib/datasource/ruby-version/index.ts +++ b/lib/datasource/ruby-version/index.ts @@ -7,7 +7,7 @@ import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'ruby-version'; export const defaultRegistryUrls = ['https://www.ruby-lang.org/']; -export const registryUrlRestriction = 'fixed'; +export const customRegistrySupport = false; export const defaultVersioning = rubyVersioningId; const http = new Http(id); diff --git a/lib/datasource/rubygems/index.ts b/lib/datasource/rubygems/index.ts index f0af4c8b625e4ff09c99612c44bd7dea57294931..83ca50a1de8f639ae2e3bdd8a3fae9e428667df2 100644 --- a/lib/datasource/rubygems/index.ts +++ b/lib/datasource/rubygems/index.ts @@ -2,6 +2,7 @@ import * as rubyVersioning from '../../versioning/ruby'; export { getReleases } from './releases'; export { id } from './common'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://rubygems.org']; export const defaultVersioning = rubyVersioning.id; export const registryStrategy = 'hunt'; diff --git a/lib/datasource/sbt-package/index.ts b/lib/datasource/sbt-package/index.ts index 977dad57043c46b665becd675ec931b5a891f530..c1e5b154d7c134824bc9497be347340831ef9689 100644 --- a/lib/datasource/sbt-package/index.ts +++ b/lib/datasource/sbt-package/index.ts @@ -8,6 +8,7 @@ import { parseIndexDir } from '../sbt-plugin/util'; import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'sbt-package'; +export const customRegistrySupport = true; export const defaultRegistryUrls = [MAVEN_REPO]; export const defaultVersioning = ivyVersioning.id; export const registryStrategy = 'hunt'; diff --git a/lib/datasource/sbt-plugin/index.ts b/lib/datasource/sbt-plugin/index.ts index 23f3988b5169ce0ba502b132b310b759c331afa0..12d6481b1764240400e74450b00f958e01709c8e 100644 --- a/lib/datasource/sbt-plugin/index.ts +++ b/lib/datasource/sbt-plugin/index.ts @@ -12,6 +12,7 @@ import type { GetReleasesConfig, ReleaseResult } from '../types'; import { SBT_PLUGINS_REPO, parseIndexDir } from './util'; export const id = 'sbt-plugin'; +export const customRegistrySupport = true; export const defaultRegistryUrls = [SBT_PLUGINS_REPO]; export const defaultVersioning = ivyVersioning.id; export const registryStrategy = 'hunt'; diff --git a/lib/datasource/terraform-module/index.ts b/lib/datasource/terraform-module/index.ts index 0155cf930118b8230b8227119034d1f82d11c8ec..57fb1f4b9ebe51af99bdea4953919168d897adb4 100644 --- a/lib/datasource/terraform-module/index.ts +++ b/lib/datasource/terraform-module/index.ts @@ -6,6 +6,7 @@ import * as hashicorpVersioning from '../../versioning/hashicorp'; import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'terraform-module'; +export const customRegistrySupport = true; export const defaultRegistryUrls = ['https://registry.terraform.io']; export const defaultVersioning = hashicorpVersioning.id; export const registryStrategy = 'first'; diff --git a/lib/datasource/terraform-provider/index.ts b/lib/datasource/terraform-provider/index.ts index f76d9b4f82393eb74c76cfea484712c55500ac24..def44bfb2562d6051c00d7a50b8ab351255e87c7 100644 --- a/lib/datasource/terraform-provider/index.ts +++ b/lib/datasource/terraform-provider/index.ts @@ -7,6 +7,7 @@ import { getTerraformServiceDiscoveryResult } from '../terraform-module'; import type { GetReleasesConfig, ReleaseResult } from '../types'; export const id = 'terraform-provider'; +export const customRegistrySupport = true; export const defaultRegistryUrls = [ 'https://registry.terraform.io', 'https://releases.hashicorp.com', diff --git a/lib/datasource/types.ts b/lib/datasource/types.ts index b49045cc4cd69017f6632e00c5e2f19afe62cef7..bcaf83f9c3d164766abb2a2ba563e45736e8144c 100644 --- a/lib/datasource/types.ts +++ b/lib/datasource/types.ts @@ -73,11 +73,9 @@ export interface DatasourceApi { registryStrategy?: 'first' | 'hunt' | 'merge'; /** - * Whether restrictions apply on custom registryUrls. If unspecified, it means custom registryUrls are allowed (no retriction). - * fixed: the default registryUrl settings can't be overridden - * disallowed: registryUrls are not applicable to this datasource + * Whether custom registryUrls are allowed. */ - registryUrlRestriction?: 'fixed' | 'disallowed'; + customRegistrySupport: boolean; /** * Whether to perform caching in the datasource index/wrapper or not.