From 1563bb7eee786d31aef012d9e26120fd6431171b Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Thu, 21 Jan 2021 13:11:35 +0100
Subject: [PATCH] feat(datasource): define defaultVersioning (#8369)

---
 lib/datasource/crate/index.ts                          |  2 ++
 lib/datasource/docker/index.ts                         |  2 ++
 lib/datasource/gradle-version/index.ts                 |  2 ++
 lib/datasource/hex/index.ts                            |  2 ++
 lib/datasource/maven/index.ts                          |  2 ++
 lib/datasource/npm/index.ts                            |  3 +++
 lib/datasource/nuget/index.ts                          |  2 ++
 lib/datasource/packagist/index.ts                      |  2 ++
 lib/datasource/pypi/index.ts                           |  4 ++--
 .../ruby-version/__snapshots__/index.spec.ts.snap      | 10 +++++-----
 lib/datasource/ruby-version/index.ts                   |  3 ++-
 lib/datasource/rubygems/index.ts                       |  3 +++
 lib/datasource/sbt-package/index.ts                    |  3 ++-
 lib/datasource/sbt-plugin/index.ts                     |  3 ++-
 lib/datasource/terraform-module/index.ts               |  2 ++
 lib/datasource/terraform-provider/index.ts             |  2 ++
 16 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/lib/datasource/crate/index.ts b/lib/datasource/crate/index.ts
index 807a28c0f0..19d55fcc2d 100644
--- a/lib/datasource/crate/index.ts
+++ b/lib/datasource/crate/index.ts
@@ -7,10 +7,12 @@ import * as memCache from '../../util/cache/memory';
 import * as packageCache from '../../util/cache/package';
 import { privateCacheDir, readFile } from '../../util/fs';
 import { Http } from '../../util/http';
+import * as cargoVersioning from '../../versioning/cargo';
 import { GetReleasesConfig, Release, ReleaseResult } from '../common';
 
 export const id = 'crate';
 export const defaultRegistryUrls = ['https://crates.io'];
+export const defaultVersioning = cargoVersioning.id;
 export const registryStrategy = 'first';
 
 const http = new Http(id);
diff --git a/lib/datasource/docker/index.ts b/lib/datasource/docker/index.ts
index a0b85421e7..5f77fc0fc9 100644
--- a/lib/datasource/docker/index.ts
+++ b/lib/datasource/docker/index.ts
@@ -11,6 +11,7 @@ import { ExternalHostError } from '../../types/errors/external-host-error';
 import * as packageCache from '../../util/cache/package';
 import * as hostRules from '../../util/host-rules';
 import { Http, HttpResponse } from '../../util/http';
+import * as dockerVersioning from '../../versioning/docker';
 import { GetReleasesConfig, ReleaseResult } from '../common';
 
 // TODO: add got typings when available
@@ -18,6 +19,7 @@ import { GetReleasesConfig, ReleaseResult } from '../common';
 
 export const id = 'docker';
 export const defaultRegistryUrls = ['https://index.docker.io'];
+export const defaultVersioning = dockerVersioning.id;
 export const registryStrategy = 'first';
 
 export const defaultConfig = {
diff --git a/lib/datasource/gradle-version/index.ts b/lib/datasource/gradle-version/index.ts
index 2492dbf348..346231f12c 100644
--- a/lib/datasource/gradle-version/index.ts
+++ b/lib/datasource/gradle-version/index.ts
@@ -1,10 +1,12 @@
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import { Http } from '../../util/http';
 import { regEx } from '../../util/regex';
+import * as gradleVersioning from '../../versioning/gradle';
 import { GetReleasesConfig, ReleaseResult } from '../common';
 
 export const id = 'gradle-version';
 export const defaultRegistryUrls = ['https://services.gradle.org/versions/all'];
+export const defaultVersioning = gradleVersioning.id;
 export const registryStrategy = 'merge';
 
 const http = new Http(id);
diff --git a/lib/datasource/hex/index.ts b/lib/datasource/hex/index.ts
index 530740f49c..55f102fa4e 100644
--- a/lib/datasource/hex/index.ts
+++ b/lib/datasource/hex/index.ts
@@ -1,9 +1,11 @@
 import { logger } from '../../logger';
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import { Http } from '../../util/http';
+import * as hexVersioning from '../../versioning/hex';
 import { GetReleasesConfig, ReleaseResult } from '../common';
 
 export const id = 'hex';
+export const defaultVersioning = hexVersioning.id;
 
 const http = new Http(id);
 
diff --git a/lib/datasource/maven/index.ts b/lib/datasource/maven/index.ts
index 9ef3ea4c20..ff97ff8d33 100644
--- a/lib/datasource/maven/index.ts
+++ b/lib/datasource/maven/index.ts
@@ -5,6 +5,7 @@ import { XmlDocument } from 'xmldoc';
 import { logger } from '../../logger';
 import * as packageCache from '../../util/cache/package';
 import mavenVersion from '../../versioning/maven';
+import * as mavenVersioning from '../../versioning/maven';
 import { compare } from '../../versioning/maven/compare';
 import { GetReleasesConfig, Release, ReleaseResult } from '../common';
 import { MAVEN_REPO } from './common';
@@ -13,6 +14,7 @@ import { downloadHttpProtocol, isHttpResourceExists } from './util';
 export { id } from './common';
 
 export const defaultRegistryUrls = [MAVEN_REPO];
+export const defaultVersioning = mavenVersioning.id;
 export const registryStrategy = 'merge';
 
 function containsPlaceholder(str: string): boolean {
diff --git a/lib/datasource/npm/index.ts b/lib/datasource/npm/index.ts
index d0c7d10a70..673b2843cd 100644
--- a/lib/datasource/npm/index.ts
+++ b/lib/datasource/npm/index.ts
@@ -1,4 +1,7 @@
+import * as npmVersioning from '../../versioning/npm';
+
 export { resetMemCache, resetCache } from './get';
 export { getReleases } from './releases';
 export { getNpmrc, setNpmrc } from './npmrc';
 export { id } from './common';
+export const defaultVersioning = npmVersioning.id;
diff --git a/lib/datasource/nuget/index.ts b/lib/datasource/nuget/index.ts
index 3d90c560ca..ce6dbed0e2 100644
--- a/lib/datasource/nuget/index.ts
+++ b/lib/datasource/nuget/index.ts
@@ -1,5 +1,6 @@
 import urlApi from 'url';
 import { logger } from '../../logger';
+import * as nugetVersioning from '../../versioning/nuget';
 import { GetReleasesConfig, ReleaseResult } from '../common';
 import * as v2 from './v2';
 import * as v3 from './v3';
@@ -7,6 +8,7 @@ import * as v3 from './v3';
 export { id } from './common';
 
 export const defaultRegistryUrls = [v3.getDefaultFeed()];
+export const defaultVersioning = nugetVersioning.id;
 export const registryStrategy = 'merge';
 
 function parseRegistryUrl(
diff --git a/lib/datasource/packagist/index.ts b/lib/datasource/packagist/index.ts
index 175914a9c6..b673ac994b 100644
--- a/lib/datasource/packagist/index.ts
+++ b/lib/datasource/packagist/index.ts
@@ -7,10 +7,12 @@ import * as memCache from '../../util/cache/memory';
 import * as packageCache from '../../util/cache/package';
 import * as hostRules from '../../util/host-rules';
 import { Http, HttpOptions } from '../../util/http';
+import * as composerVersioning from '../../versioning/composer';
 import { GetReleasesConfig, ReleaseResult } from '../common';
 
 export const id = 'packagist';
 export const defaultRegistryUrls = ['https://packagist.org'];
+export const defaultVersioning = composerVersioning.id;
 export const registryStrategy = 'hunt';
 
 const http = new Http(id);
diff --git a/lib/datasource/pypi/index.ts b/lib/datasource/pypi/index.ts
index 19bee498cf..4e60a1b720 100644
--- a/lib/datasource/pypi/index.ts
+++ b/lib/datasource/pypi/index.ts
@@ -4,7 +4,6 @@ import { logger } from '../../logger';
 import { parse } from '../../util/html';
 import { Http } from '../../util/http';
 import { ensureTrailingSlash } from '../../util/url';
-import { matches } from '../../versioning/pep440';
 import * as pep440 from '../../versioning/pep440';
 import { GetReleasesConfig, Release, ReleaseResult } from '../common';
 
@@ -12,6 +11,7 @@ export const id = 'pypi';
 export const defaultRegistryUrls = [
   process.env.PIP_INDEX_URL || 'https://pypi.org/pypi/',
 ];
+export const defaultVersioning = pep440.id;
 export const registryStrategy = 'merge';
 
 const githubRepoPattern = /^https?:\/\/github\.com\/[^\\/]+\/[^\\/]+$/;
@@ -50,7 +50,7 @@ function compatibleVersions(
       if (!release.requires_python) {
         return true;
       }
-      return matches(constraints.python, release.requires_python);
+      return pep440.matches(constraints.python, release.requires_python);
     })
   );
 }
diff --git a/lib/datasource/ruby-version/__snapshots__/index.spec.ts.snap b/lib/datasource/ruby-version/__snapshots__/index.spec.ts.snap
index 892c5e3850..7ee07cfb1b 100644
--- a/lib/datasource/ruby-version/__snapshots__/index.spec.ts.snap
+++ b/lib/datasource/ruby-version/__snapshots__/index.spec.ts.snap
@@ -74,6 +74,11 @@ Object {
       "releaseTimestamp": "2007-03-12",
       "version": "1.8.6",
     },
+    Object {
+      "changelogUrl": "https://www.ruby-lang.org/en/news/2008/08/11/ruby-1-8-7-p72-and-1-8-6-p287-released/",
+      "releaseTimestamp": "2008-08-11",
+      "version": "1.8.7-p72",
+    },
     Object {
       "changelogUrl": "https://www.ruby-lang.org/en/news/2009/04/18/ruby-1-8-7-p160-and-1-8-6-p368-released/",
       "releaseTimestamp": "2009-04-18",
@@ -114,11 +119,6 @@ Object {
       "releaseTimestamp": "2013-06-27",
       "version": "1.8.7-p374",
     },
-    Object {
-      "changelogUrl": "https://www.ruby-lang.org/en/news/2008/08/11/ruby-1-8-7-p72-and-1-8-6-p287-released/",
-      "releaseTimestamp": "2008-08-11",
-      "version": "1.8.7-p72",
-    },
     Object {
       "changelogUrl": "https://www.ruby-lang.org/en/news/2008/05/31/ruby-1-8-7-has-been-released/",
       "releaseTimestamp": "2008-05-31",
diff --git a/lib/datasource/ruby-version/index.ts b/lib/datasource/ruby-version/index.ts
index 8f14c5054e..53852ebd4d 100644
--- a/lib/datasource/ruby-version/index.ts
+++ b/lib/datasource/ruby-version/index.ts
@@ -2,10 +2,11 @@ import { ExternalHostError } from '../../types/errors/external-host-error';
 import * as packageCache from '../../util/cache/package';
 import { parse } from '../../util/html';
 import { Http } from '../../util/http';
-import { isVersion } from '../../versioning/ruby';
+import { isVersion, id as rubyVersioningId } from '../../versioning/ruby';
 import { GetReleasesConfig, ReleaseResult } from '../common';
 
 export const id = 'ruby-version';
+export const defaultVersioning = rubyVersioningId;
 
 const http = new Http(id);
 
diff --git a/lib/datasource/rubygems/index.ts b/lib/datasource/rubygems/index.ts
index 336ffdae7c..f0af4c8b62 100644
--- a/lib/datasource/rubygems/index.ts
+++ b/lib/datasource/rubygems/index.ts
@@ -1,4 +1,7 @@
+import * as rubyVersioning from '../../versioning/ruby';
+
 export { getReleases } from './releases';
 export { id } from './common';
 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 37f0144404..eaf84a511e 100644
--- a/lib/datasource/sbt-package/index.ts
+++ b/lib/datasource/sbt-package/index.ts
@@ -1,5 +1,6 @@
 import { XmlDocument } from 'xmldoc';
 import { logger } from '../../logger';
+import * as ivyVersioning from '../../versioning/ivy';
 import { compare } from '../../versioning/maven/compare';
 import { GetReleasesConfig, ReleaseResult } from '../common';
 import { MAVEN_REPO } from '../maven/common';
@@ -7,8 +8,8 @@ import { downloadHttpProtocol } from '../maven/util';
 import { parseIndexDir } from '../sbt-plugin/util';
 
 export const id = 'sbt-package';
-
 export const defaultRegistryUrls = [MAVEN_REPO];
+export const defaultVersioning = ivyVersioning.id;
 export const registryStrategy = 'hunt';
 
 const ensureTrailingSlash = (str: string): string => str.replace(/\/?$/, '/');
diff --git a/lib/datasource/sbt-plugin/index.ts b/lib/datasource/sbt-plugin/index.ts
index ac2b457987..e7920f037d 100644
--- a/lib/datasource/sbt-plugin/index.ts
+++ b/lib/datasource/sbt-plugin/index.ts
@@ -1,4 +1,5 @@
 import { logger } from '../../logger';
+import * as ivyVersioning from '../../versioning/ivy';
 import { compare } from '../../versioning/maven/compare';
 import { GetReleasesConfig, ReleaseResult } from '../common';
 import { downloadHttpProtocol } from '../maven/util';
@@ -11,8 +12,8 @@ import {
 import { SBT_PLUGINS_REPO, parseIndexDir } from './util';
 
 export const id = 'sbt-plugin';
-
 export const defaultRegistryUrls = [SBT_PLUGINS_REPO];
+export const defaultVersioning = ivyVersioning.id;
 export const registryStrategy = 'hunt';
 
 const ensureTrailingSlash = (str: string): string => str.replace(/\/?$/, '/');
diff --git a/lib/datasource/terraform-module/index.ts b/lib/datasource/terraform-module/index.ts
index c4a866a686..df7e5c5d3c 100644
--- a/lib/datasource/terraform-module/index.ts
+++ b/lib/datasource/terraform-module/index.ts
@@ -2,10 +2,12 @@ import { logger } from '../../logger';
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import * as packageCache from '../../util/cache/package';
 import { Http } from '../../util/http';
+import * as hashicorpVersioning from '../../versioning/hashicorp';
 import { GetReleasesConfig, ReleaseResult } from '../common';
 
 export const id = 'terraform-module';
 export const defaultRegistryUrls = ['https://registry.terraform.io'];
+export const defaultVersioning = hashicorpVersioning.id;
 export const registryStrategy = 'first';
 
 const http = new Http(id);
diff --git a/lib/datasource/terraform-provider/index.ts b/lib/datasource/terraform-provider/index.ts
index 5a9b7fe1b2..c41de0dfef 100644
--- a/lib/datasource/terraform-provider/index.ts
+++ b/lib/datasource/terraform-provider/index.ts
@@ -2,6 +2,7 @@ import URL from 'url';
 import { logger } from '../../logger';
 import * as packageCache from '../../util/cache/package';
 import { Http } from '../../util/http';
+import * as hashicorpVersioning from '../../versioning/hashicorp';
 import { GetReleasesConfig, ReleaseResult } from '../common';
 import { getTerraformServiceDiscoveryResult } from '../terraform-module';
 
@@ -10,6 +11,7 @@ export const defaultRegistryUrls = [
   'https://registry.terraform.io',
   'https://releases.hashicorp.com',
 ];
+export const defaultVersioning = hashicorpVersioning.id;
 export const registryStrategy = 'hunt';
 
 const http = new Http(id);
-- 
GitLab