From f1a4102dd9496b0a0564e6d7fe48327025ed5c67 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 15 Mar 2021 13:56:23 +0100 Subject: [PATCH] refactor: customRegistrySupport (#9142) --- lib/datasource/bitbucket-tags/index.ts | 1 + lib/datasource/cdnjs/index.ts | 2 +- lib/datasource/clojure/index.ts | 2 +- lib/datasource/crate/index.ts | 1 + lib/datasource/dart/index.ts | 2 +- lib/datasource/docker/index.ts | 1 + lib/datasource/galaxy/index.ts | 2 +- lib/datasource/git-refs/index.ts | 2 +- lib/datasource/git-tags/index.ts | 2 +- lib/datasource/github-releases/index.ts | 1 + lib/datasource/github-tags/index.ts | 1 + lib/datasource/gitlab-tags/index.ts | 1 + lib/datasource/go/index.ts | 2 +- lib/datasource/gradle-version/index.ts | 1 + lib/datasource/helm/index.ts | 1 + lib/datasource/hex/index.ts | 2 +- lib/datasource/index.ts | 40 +++++++--------------- lib/datasource/jenkins-plugins/index.ts | 2 ++ lib/datasource/maven/index.ts | 1 + lib/datasource/npm/index.ts | 2 +- lib/datasource/nuget/index.ts | 1 + lib/datasource/orb/index.ts | 2 +- lib/datasource/packagist/index.ts | 1 + lib/datasource/pod/index.ts | 1 + lib/datasource/pypi/index.ts | 1 + lib/datasource/repology/index.ts | 1 + lib/datasource/ruby-version/index.ts | 2 +- lib/datasource/rubygems/index.ts | 1 + lib/datasource/sbt-package/index.ts | 1 + lib/datasource/sbt-plugin/index.ts | 1 + lib/datasource/terraform-module/index.ts | 1 + lib/datasource/terraform-provider/index.ts | 1 + lib/datasource/types.ts | 6 ++-- 33 files changed, 46 insertions(+), 43 deletions(-) diff --git a/lib/datasource/bitbucket-tags/index.ts b/lib/datasource/bitbucket-tags/index.ts index 523547d560caf2..3e06f3b4f07f3b 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 ffdfd341174b1c..e678e56ecd33a6 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 8e86fdded4ee9e..10adb16fe33f93 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 617c326565b8e3..cce827f726b39f 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 d76f8ec01545c8..2df5e623200c16 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 ff9e4f53363c84..68ee2f26561082 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 fdb8ef9cba0de7..87e41b9346684b 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 f2b8e79bc1b50a..16801069614a7a 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 b848900727d68f..ce1fd1497542f1 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 8bd862f07e0f22..a505dd7424926e 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 b26efa501e4130..ac3b93c528928b 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 31292d8da440f8..bb9c0f3c95075d 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 275059647d594a..9f2cfd6d550517 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 080c103c6d0f47..3313fe32f00074 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 c5bca39989ae6f..ea1105841ac2d0 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 45e883c1cc97b5..a9eaa5b08442fa 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 58b8efeaedd08a..cfd2277eb58b69 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 3fe0504600c977..5790e0e57ca2b4 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 bf5775e0e6ad14..5867caa41ca61c 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 2bc09a87d68612..1f3bfc82ecab6f 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 0b9ebb79369ab0..d85e3ff0733b4f 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 f33a61edbea484..546167c187312f 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 654854a3a7fea6..bc8a0cf2b2d3d5 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 efb92c49fa98ed..dd2d050815c175 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 e2d8864d1eb562..144e417ec8ea76 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 eb85626a444680..4551ac596b0033 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 134e33796e0423..f225b9fbca9bec 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 f0af4c8b625e4f..83ca50a1de8f63 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 977dad57043c46..c1e5b154d7c134 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 23f3988b5169ce..12d6481b176424 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 0155cf930118b8..57fb1f4b9ebe51 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 f76d9b4f82393e..def44bfb2562d6 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 b49045cc4cd690..bcaf83f9c3d164 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.