diff --git a/lib/config/definitions.ts b/lib/config/definitions.ts
index 04e3605aed86dbc58df16831d7e6c3a542631e07..82240a1e91a66e0f4863240c64c827dab06db84c 100644
--- a/lib/config/definitions.ts
+++ b/lib/config/definitions.ts
@@ -1,4 +1,24 @@
 import { RenovateConfigStage } from './common';
+import {
+  VERSION_SCHEME_CARGO,
+  VERSION_SCHEME_COMPOSER,
+  VERSION_SCHEME_DOCKER,
+  VERSION_SCHEME_GIT,
+  VERSION_SCHEME_HEX,
+  VERSION_SCHEME_HASHICORP,
+  VERSION_SCHEME_IVY,
+  VERSION_SCHEME_LOOSE,
+  VERSION_SCHEME_MAVEN,
+  VERSION_SCHEME_NODE,
+  VERSION_SCHEME_NPM,
+  VERSION_SCHEME_NUGET,
+  VERSION_SCHEME_PEP440,
+  VERSION_SCHEME_POETRY,
+  VERSION_SCHEME_REGEX,
+  VERSION_SCHEME_RUBY,
+  VERSION_SCHEME_SEMVER,
+  VERSION_SCHEME_SWIFT,
+} from '../constants/version-schemes';
 import {
   PLATFORM_TYPE_AZURE,
   PLATFORM_TYPE_BITBUCKET,
@@ -601,26 +621,26 @@ const options: RenovateOptions[] = [
     description: 'Version scheme to use for filtering and comparisons',
     type: 'string',
     allowedValues: [
-      'cargo',
-      'composer',
-      'docker',
-      'git',
-      'hashicorp',
-      'hex',
-      'ivy',
-      'loose',
-      'maven',
-      'node',
-      'npm',
-      'nuget',
-      'pep440',
-      'poetry',
-      'regex',
-      'ruby',
-      'semver',
-      'swift',
+      VERSION_SCHEME_CARGO,
+      VERSION_SCHEME_COMPOSER,
+      VERSION_SCHEME_DOCKER,
+      VERSION_SCHEME_GIT,
+      VERSION_SCHEME_HASHICORP,
+      VERSION_SCHEME_HEX,
+      VERSION_SCHEME_IVY,
+      VERSION_SCHEME_LOOSE,
+      VERSION_SCHEME_MAVEN,
+      VERSION_SCHEME_NODE,
+      VERSION_SCHEME_NPM,
+      VERSION_SCHEME_NUGET,
+      VERSION_SCHEME_PEP440,
+      VERSION_SCHEME_POETRY,
+      VERSION_SCHEME_REGEX,
+      VERSION_SCHEME_RUBY,
+      VERSION_SCHEME_SEMVER,
+      VERSION_SCHEME_SWIFT,
     ],
-    default: 'semver',
+    default: VERSION_SCHEME_SEMVER,
     cli: false,
     env: false,
   },
@@ -1379,7 +1399,7 @@ const options: RenovateOptions[] = [
     default: {
       fileMatch: ['(^|/)package.json$'],
       rollbackPrs: true,
-      versionScheme: 'npm',
+      versionScheme: VERSION_SCHEME_NPM,
       prBodyDefinitions: {
         Change:
           '[{{#if displayFrom}}`{{{displayFrom}}}` -> {{else}}{{#if currentValue}}`{{{currentValue}}}` -> {{/if}}{{/if}}{{#if displayTo}}`{{{displayTo}}}`{{else}}`{{{newValue}}}`{{/if}}](https://renovatebot.com/diffs/npm/{{{depNameEscaped}}}/{{{fromVersion}}}/{{{toVersion}}})',
@@ -1474,7 +1494,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['(^|/)Gemfile$'],
-      versionScheme: 'ruby',
+      versionScheme: VERSION_SCHEME_RUBY,
     },
     mergeable: true,
   },
@@ -1485,7 +1505,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['(^|/)\\.ruby-version$'],
-      versionScheme: 'ruby',
+      versionScheme: VERSION_SCHEME_RUBY,
     },
     mergeable: true,
     cli: false,
@@ -1499,7 +1519,7 @@ const options: RenovateOptions[] = [
       commitMessageTopic:
         'Terraform {{managerData.terraformDependencyType}} {{depNameShort}}',
       fileMatch: ['\\.tf$'],
-      versionScheme: 'hashicorp',
+      versionScheme: VERSION_SCHEME_HASHICORP,
     },
     mergeable: true,
   },
@@ -1510,7 +1530,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['(^|/)mix\\.exs$'],
-      versionScheme: 'hex',
+      versionScheme: VERSION_SCHEME_HEX,
     },
     mergeable: true,
   },
@@ -1532,7 +1552,7 @@ const options: RenovateOptions[] = [
       commitMessageTopic: 'Rust crate {{depName}}',
       managerBranchPrefix: 'rust-',
       fileMatch: ['(^|/)Cargo.toml$'],
-      versionScheme: 'cargo',
+      versionScheme: VERSION_SCHEME_CARGO,
       rangeStrategy: 'bump',
     },
     mergeable: true,
@@ -1567,7 +1587,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['^.travis.yml$'],
-      versionScheme: 'node',
+      versionScheme: VERSION_SCHEME_NODE,
     },
     mergeable: true,
     cli: false,
@@ -1579,7 +1599,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['^.nvmrc$'],
-      versionScheme: 'node',
+      versionScheme: VERSION_SCHEME_NODE,
     },
     mergeable: true,
     cli: false,
@@ -1591,7 +1611,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['(^|/)pubspec\\.ya?ml$'],
-      versionScheme: 'npm',
+      versionScheme: VERSION_SCHEME_NPM,
     },
     mergeable: true,
     cli: false,
@@ -1602,7 +1622,7 @@ const options: RenovateOptions[] = [
     stage: 'package',
     type: 'object',
     default: {
-      versionScheme: 'docker',
+      versionScheme: VERSION_SCHEME_DOCKER,
       managerBranchPrefix: 'docker-',
       commitMessageTopic: '{{{depName}}} Docker tag',
       major: { enabled: false },
@@ -1742,7 +1762,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['(^|/)([\\w-]*)composer.json$'],
-      versionScheme: 'composer',
+      versionScheme: VERSION_SCHEME_COMPOSER,
     },
     mergeable: true,
     cli: false,
@@ -1754,7 +1774,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       enabled: false,
-      versionScheme: 'git',
+      versionScheme: VERSION_SCHEME_GIT,
       fileMatch: ['(^|/).gitmodules$'],
     },
     mergeable: true,
@@ -1808,7 +1828,7 @@ const options: RenovateOptions[] = [
     stage: 'package',
     type: 'object',
     default: {
-      versionScheme: 'poetry',
+      versionScheme: VERSION_SCHEME_POETRY,
       fileMatch: ['(^|/)pyproject\\.toml$'],
     },
     mergeable: true,
@@ -1819,7 +1839,7 @@ const options: RenovateOptions[] = [
     stage: 'package',
     type: 'object',
     default: {
-      versionScheme: 'pep440',
+      versionScheme: VERSION_SCHEME_PEP440,
     },
     mergeable: true,
     cli: false,
@@ -1832,7 +1852,7 @@ const options: RenovateOptions[] = [
     default: {
       fileMatch: ['\\.sbt$', 'project/[^/]*.scala$'],
       timeout: 300,
-      versionScheme: 'ivy',
+      versionScheme: VERSION_SCHEME_IVY,
     },
     mergeable: true,
     cli: false,
@@ -1845,7 +1865,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['(^|/)project\\.clj$'],
-      versionScheme: 'maven',
+      versionScheme: VERSION_SCHEME_MAVEN,
     },
     mergeable: true,
     cli: false,
@@ -1858,7 +1878,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['(^|/)deps\\.edn$'],
-      versionScheme: 'maven',
+      versionScheme: VERSION_SCHEME_MAVEN,
     },
     mergeable: true,
     cli: false,
@@ -1888,7 +1908,7 @@ const options: RenovateOptions[] = [
     default: {
       fileMatch: ['\\.gradle(\\.kts)?$', '(^|/)gradle.properties$'],
       timeout: 600,
-      versionScheme: 'maven',
+      versionScheme: VERSION_SCHEME_MAVEN,
     },
     mergeable: true,
     cli: false,
@@ -1911,7 +1931,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['\\.pom\\.xml$', '(^|/)pom\\.xml$'],
-      versionScheme: 'maven',
+      versionScheme: VERSION_SCHEME_MAVEN,
     },
     mergeable: true,
     cli: false,
@@ -2102,7 +2122,7 @@ const options: RenovateOptions[] = [
     type: 'object',
     default: {
       fileMatch: ['(^|/)Package\\.swift'],
-      versionScheme: 'swift',
+      versionScheme: VERSION_SCHEME_SWIFT,
       rangeStrategy: 'bump',
     },
     mergeable: true,
diff --git a/lib/constants/version-schemes.ts b/lib/constants/version-schemes.ts
new file mode 100644
index 0000000000000000000000000000000000000000..94f18183d7f988e09fd48c65e02f6ac22c14a447
--- /dev/null
+++ b/lib/constants/version-schemes.ts
@@ -0,0 +1,18 @@
+export const VERSION_SCHEME_SEMVER = 'semver';
+export const VERSION_SCHEME_NPM = 'npm';
+export const VERSION_SCHEME_NODE = 'node';
+export const VERSION_SCHEME_HASHICORP = 'hashicorp';
+export const VERSION_SCHEME_COMPOSER = 'composer';
+export const VERSION_SCHEME_GIT = 'git';
+export const VERSION_SCHEME_POETRY = 'poetry';
+export const VERSION_SCHEME_MAVEN = 'maven';
+export const VERSION_SCHEME_SWIFT = 'swift';
+export const VERSION_SCHEME_RUBY = 'ruby';
+export const VERSION_SCHEME_HEX = 'hex';
+export const VERSION_SCHEME_CARGO = 'cargo';
+export const VERSION_SCHEME_DOCKER = 'docker';
+export const VERSION_SCHEME_PEP440 = 'pep440';
+export const VERSION_SCHEME_IVY = 'ivy';
+export const VERSION_SCHEME_LOOSE = 'loose';
+export const VERSION_SCHEME_NUGET = 'nuget';
+export const VERSION_SCHEME_REGEX = 'regex';
diff --git a/lib/datasource/index.ts b/lib/datasource/index.ts
index ce8ef4f8d6d4ba0db0b0623dc37ebb42d5b42a12..435e3ec44453d02a32dad307c67550440ac16915 100644
--- a/lib/datasource/index.ts
+++ b/lib/datasource/index.ts
@@ -31,6 +31,7 @@ import {
   ReleaseResult,
   DigestConfig,
 } from './common';
+import { VERSION_SCHEME_SEMVER } from '../constants/version-schemes';
 
 export * from './common';
 
@@ -105,7 +106,9 @@ export async function getPkgReleases(
     return res;
   }
   const versionScheme =
-    config && config.versionScheme ? config.versionScheme : 'semver';
+    config && config.versionScheme
+      ? config.versionScheme
+      : VERSION_SCHEME_SEMVER;
   // Filter by version scheme
   const version = versioning.get(versionScheme);
   // Return a sorted list of valid Versions
diff --git a/lib/manager/ansible/extract.ts b/lib/manager/ansible/extract.ts
index b7bc8b625b73e1d6e8404aca33ed7796fea76221..f50ea788232a6437bac65f439be6368725358eaf 100644
--- a/lib/manager/ansible/extract.ts
+++ b/lib/manager/ansible/extract.ts
@@ -1,6 +1,7 @@
 import { logger } from '../../logger';
 import { getDep } from '../dockerfile/extract';
 import { PackageFile, PackageDependency } from '../common';
+import { VERSION_SCHEME_DOCKER } from '../../constants/version-schemes';
 
 export default function extractPackageFile(
   content: string
@@ -22,7 +23,7 @@ export default function extractPackageFile(
         'Docker image inside ansible'
       );
       dep.managerData = { lineNumber };
-      dep.versionScheme = 'docker';
+      dep.versionScheme = VERSION_SCHEME_DOCKER;
       deps.push(dep);
     }
     lineNumber += 1;
diff --git a/lib/manager/bazel/extract.ts b/lib/manager/bazel/extract.ts
index 2a8f920dad507c9f43e7f5a955b974fa26dece82..5b9aa1cd0a9c3aa7becc767f2bda5c5b866b40f3 100644
--- a/lib/manager/bazel/extract.ts
+++ b/lib/manager/bazel/extract.ts
@@ -4,6 +4,7 @@ import { parse as _parse } from 'url';
 import { logger } from '../../logger';
 import { PackageDependency, PackageFile } from '../common';
 import { regEx } from '../../util/regex';
+import { VERSION_SCHEME_DOCKER } from '../../constants/version-schemes';
 import {
   DATASOURCE_DOCKER,
   DATASOURCE_GITHUB,
@@ -241,8 +242,8 @@ export function extractPackageFile(content: string): PackageFile | null {
       dep.currentDigest = digest;
       dep.currentValue = currentValue;
       dep.depName = depName;
+      dep.versionScheme = VERSION_SCHEME_DOCKER;
       dep.datasource = DATASOURCE_DOCKER;
-      dep.versionScheme = 'docker';
       dep.lookupName = repository;
       deps.push(dep);
     } else {
diff --git a/lib/manager/circleci/extract.ts b/lib/manager/circleci/extract.ts
index efe529aca08465181d0aed6f52036b073b84e498..99a36c682b758fc66bf53eca29354d7915840150 100644
--- a/lib/manager/circleci/extract.ts
+++ b/lib/manager/circleci/extract.ts
@@ -1,6 +1,7 @@
 import { logger } from '../../logger';
 import { getDep } from '../dockerfile/extract';
 import { PackageFile, PackageDependency } from '../common';
+import { VERSION_SCHEME_NPM } from '../../constants/version-schemes';
 import { DATASOURCE_ORB } from '../../constants/data-binary-source';
 
 export function extractPackageFile(content: string): PackageFile | null {
@@ -32,7 +33,7 @@ export function extractPackageFile(content: string): PackageFile | null {
               datasource: DATASOURCE_ORB,
               lookupName: orbName,
               commitMessageTopic: '{{{depName}}} orb',
-              versionScheme: 'npm',
+              versionScheme: VERSION_SCHEME_NPM,
               rangeStrategy: 'pin',
             };
             deps.push(dep);
diff --git a/lib/manager/github-actions/extract.ts b/lib/manager/github-actions/extract.ts
index 96eac846ed73c8fb64e20293909a358efa5aa9a3..0740cf86ad24545335c688d0b590dfdd9ea5ebb1 100644
--- a/lib/manager/github-actions/extract.ts
+++ b/lib/manager/github-actions/extract.ts
@@ -1,6 +1,7 @@
 import { logger } from '../../logger';
 import { getDep } from '../dockerfile/extract';
 import { PackageFile, PackageDependency } from '../common';
+import { VERSION_SCHEME_DOCKER } from '../../constants/version-schemes';
 
 export function extractPackageFile(content: string): PackageFile | null {
   logger.debug('github-actions.extractPackageFile()');
@@ -24,7 +25,7 @@ export function extractPackageFile(content: string): PackageFile | null {
         'Docker image inside GitHub Actions'
       );
       dep.managerData = { lineNumber };
-      dep.versionScheme = 'docker';
+      dep.versionScheme = VERSION_SCHEME_DOCKER;
       deps.push(dep);
     }
     lineNumber += 1;
diff --git a/lib/manager/gradle-wrapper/extract.ts b/lib/manager/gradle-wrapper/extract.ts
index 1c1b5378e2cf3d405a9c1263c61fcdb1f633aa6d..80745cee8faa15c3c575282968b2f70d19b46692 100644
--- a/lib/manager/gradle-wrapper/extract.ts
+++ b/lib/manager/gradle-wrapper/extract.ts
@@ -1,6 +1,7 @@
 import { coerce } from 'semver';
 import { logger } from '../../logger';
 import { PackageFile, PackageDependency } from '../common';
+import { VERSION_SCHEME_SEMVER } from '../../constants/version-schemes';
 import { DATASOURCE_GRADLE_VERSION } from '../../constants/data-binary-source';
 
 export function extractPackageFile(fileContent: string): PackageFile | null {
@@ -19,7 +20,7 @@ export function extractPackageFile(fileContent: string): PackageFile | null {
         depName: 'gradle',
         currentValue: coerce(match[1]).toString(),
         managerData: { lineNumber, gradleWrapperType: match[3] },
-        versionScheme: 'semver',
+        versionScheme: VERSION_SCHEME_SEMVER,
       };
 
       let shaLineNumber = 0;
diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts
index b2bc46cef32d3a544752a8f3927183cc15b50f35..387aa2af3a5b703e3d1a6d7ae6290327bf5c0f99 100644
--- a/lib/manager/npm/extract/index.ts
+++ b/lib/manager/npm/extract/index.ts
@@ -17,6 +17,7 @@ import {
 import { NpmPackage } from './common';
 import { platform } from '../../../platform';
 import { CONFIG_VALIDATION } from '../../../constants/error-messages';
+import { VERSION_SCHEME_NODE } from '../../../constants/version-schemes';
 import { MANAGER_NPM } from '../../../constants/managers';
 import {
   DATASOURCE_GITHUB,
@@ -153,7 +154,7 @@ export async function extractPackageFile(
       if (depName === 'node') {
         dep.datasource = DATASOURCE_GITHUB;
         dep.lookupName = 'nodejs/node';
-        dep.versionScheme = 'node';
+        dep.versionScheme = VERSION_SCHEME_NODE;
       } else if (depName === 'yarn') {
         dep.datasource = DATASOURCE_NPM;
         dep.commitMessageTopic = 'Yarn';
@@ -174,7 +175,7 @@ export async function extractPackageFile(
       if (depName === 'node') {
         dep.datasource = DATASOURCE_GITHUB;
         dep.lookupName = 'nodejs/node';
-        dep.versionScheme = 'node';
+        dep.versionScheme = VERSION_SCHEME_NODE;
       } else if (depName === 'yarn') {
         dep.datasource = DATASOURCE_NPM;
         dep.commitMessageTopic = 'Yarn';
diff --git a/lib/manager/nuget/extract.ts b/lib/manager/nuget/extract.ts
index 7a1afcd992b3432590f6ebe801478793e4f2dc0f..61ebcd45c5aa833eda295ca89fa929be51a5774a 100644
--- a/lib/manager/nuget/extract.ts
+++ b/lib/manager/nuget/extract.ts
@@ -1,6 +1,7 @@
 import { logger } from '../../logger';
 import { get } from '../../versioning';
 import { PackageDependency, ExtractConfig, PackageFile } from '../common';
+import { VERSION_SCHEME_SEMVER } from '../../constants/version-schemes';
 import { DATASOURCE_NUGET } from '../../constants/data-binary-source';
 
 export function extractPackageFile(
@@ -9,7 +10,7 @@ export function extractPackageFile(
   config: ExtractConfig = {}
 ): PackageFile {
   logger.trace(`nuget.extractPackageFile(${packageFile})`);
-  const { isVersion } = get(config.versionScheme || 'semver');
+  const { isVersion } = get(config.versionScheme || VERSION_SCHEME_SEMVER);
   const deps: PackageDependency[] = [];
 
   let lineNumber = 0;
diff --git a/lib/manager/sbt/extract.ts b/lib/manager/sbt/extract.ts
index eda688680fe915878e20383eb4fafad974eaf8b3..b4a41c3846b0c4433860bca89835dff9398e6673 100644
--- a/lib/manager/sbt/extract.ts
+++ b/lib/manager/sbt/extract.ts
@@ -1,6 +1,7 @@
 import { DEFAULT_MAVEN_REPO } from '../maven/extract';
 import { PackageFile, PackageDependency } from '../common';
 import { get } from '../../versioning';
+import { VERSION_SCHEME_MAVEN } from '../../constants/version-schemes';
 import { DATASOURCE_SBT } from '../../constants/data-binary-source';
 
 const isComment = (str: string): boolean => /^\s*\/\//.test(str);
@@ -28,7 +29,7 @@ const getScalaVersion = (str: string): string =>
 const normalizeScalaVersion = (str: string): string => {
   // istanbul ignore if
   if (!str) return str;
-  const versioning = get('maven');
+  const versioning = get(VERSION_SCHEME_MAVEN);
   if (versioning.isVersion(str)) {
     // Do not normalize unstable versions
     if (!versioning.isStable(str)) return str;
diff --git a/lib/workers/repository/init/vulnerability.ts b/lib/workers/repository/init/vulnerability.ts
index 58e4c5c40057a70efc83c68e041c9dbf973418ef..8e55f6cade19f08dc43edc6f6e08bb99ec93bc2f 100644
--- a/lib/workers/repository/init/vulnerability.ts
+++ b/lib/workers/repository/init/vulnerability.ts
@@ -3,6 +3,13 @@ import * as versioning from '../../../versioning';
 import { platform } from '../../../platform';
 import { RenovateConfig } from '../../../config';
 import { REPOSITORY_NO_VULNERABILITY } from '../../../constants/error-messages';
+import {
+  VERSION_SCHEME_MAVEN,
+  VERSION_SCHEME_NPM,
+  VERSION_SCHEME_PEP440,
+  VERSION_SCHEME_RUBY,
+  VERSION_SCHEME_SEMVER,
+} from '../../../constants/version-schemes';
 import {
   DATASOURCE_MAVEN,
   DATASOURCE_NPM,
@@ -71,11 +78,11 @@ export async function detectVulnerabilityAlerts(
       const firstPatchedVersion =
         alert.securityVulnerability.firstPatchedVersion.identifier;
       const versionSchemes = {
-        maven: 'maven',
-        npm: 'npm',
-        nuget: 'semver',
-        pip_requirements: 'pep440',
-        rubygems: 'ruby',
+        maven: VERSION_SCHEME_MAVEN,
+        npm: VERSION_SCHEME_NPM,
+        nuget: VERSION_SCHEME_SEMVER,
+        pip_requirements: VERSION_SCHEME_PEP440,
+        rubygems: VERSION_SCHEME_RUBY,
       };
       const version = versioning.get(versionSchemes[datasource]);
       if (version.isVersion(firstPatchedVersion)) {
diff --git a/lib/workers/repository/process/lookup/filter.ts b/lib/workers/repository/process/lookup/filter.ts
index c83f207f366e7de04540d83ff441fd40b2fddd26..4b495e735a6810b8f92faa6e3742ebb0a22b229b 100644
--- a/lib/workers/repository/process/lookup/filter.ts
+++ b/lib/workers/repository/process/lookup/filter.ts
@@ -3,6 +3,7 @@ import { logger } from '../../../../logger';
 import * as versioning from '../../../../versioning';
 import { Release } from '../../../../datasource';
 import { CONFIG_VALIDATION } from '../../../../constants/error-messages';
+import { VERSION_SCHEME_NPM } from '../../../../constants/version-schemes';
 
 export interface FilterConfig {
   allowedVersions?: string;
@@ -58,7 +59,10 @@ export function filterVersions(
       filteredVersions = filteredVersions.filter(v =>
         version.matches(v, allowedVersions)
       );
-    } else if (versionScheme !== 'npm' && semver.validRange(allowedVersions)) {
+    } else if (
+      versionScheme !== VERSION_SCHEME_NPM &&
+      semver.validRange(allowedVersions)
+    ) {
       logger.debug(
         { depName: config.depName },
         'Falling back to npm semver syntax for allowedVersions'
diff --git a/test/datasource/maven.spec.ts b/test/datasource/maven.spec.ts
index d1b910638717e053cde657b5c19c7fadff56e99d..d5af7816b6a6a948856a6655b768eaff2f5524b3 100644
--- a/test/datasource/maven.spec.ts
+++ b/test/datasource/maven.spec.ts
@@ -2,6 +2,7 @@ import nock from 'nock';
 import fs from 'fs';
 import * as datasource from '../../lib/datasource';
 import { DATASOURCE_FAILURE } from '../../lib/constants/error-messages';
+import { VERSION_SCHEME_LOOSE } from '../../lib/constants/version-schemes';
 import { DATASOURCE_MAVEN } from '../../lib/constants/data-binary-source';
 
 const hostRules = require('../../lib/util/host-rules');
@@ -27,8 +28,8 @@ const MYSQL_MAVEN_MYSQL_POM = fs.readFileSync(
 );
 
 const config = {
+  versionScheme: VERSION_SCHEME_LOOSE,
   datasource: DATASOURCE_MAVEN,
-  versionScheme: 'loose',
 };
 
 describe('datasource/maven', () => {
diff --git a/test/datasource/packagist.spec.ts b/test/datasource/packagist.spec.ts
index 482968deb5b9d351be4fd00fb89e7bd72cd0d3ac..9d36d8a77f330945eb498812b025486050c21134 100644
--- a/test/datasource/packagist.spec.ts
+++ b/test/datasource/packagist.spec.ts
@@ -2,6 +2,7 @@ import fs from 'fs';
 import _got from '../../lib/util/got';
 import * as datasource from '../../lib/datasource';
 import * as _hostRules from '../../lib/util/host-rules';
+import { VERSION_SCHEME_COMPOSER } from '../../lib/constants/version-schemes';
 import { DATASOURCE_PACKAGIST } from '../../lib/constants/data-binary-source';
 
 jest.mock('../../lib/util/got');
@@ -29,8 +30,8 @@ describe('datasource/packagist', () => {
       hostRules.hosts = jest.fn(() => []);
       global.repoCache = {};
       config = {
+        versionScheme: VERSION_SCHEME_COMPOSER,
         datasource: DATASOURCE_PACKAGIST,
-        versionScheme: 'composer',
         registryUrls: [
           'https://composer.renovatebot.com',
           'https://packagist.org',
diff --git a/test/datasource/sbt/index.spec.ts b/test/datasource/sbt/index.spec.ts
index 66a3c2b6e6f4cc02f3d936156f9f98dc6ed44b11..5582b84e843c09f486326cbf85e8cbf6c54f00a1 100644
--- a/test/datasource/sbt/index.spec.ts
+++ b/test/datasource/sbt/index.spec.ts
@@ -7,6 +7,7 @@ import {
   parseIndexDir,
   SBT_PLUGINS_REPO,
 } from '../../../lib/datasource/sbt/util';
+import { VERSION_SCHEME_IVY } from '../../../lib/constants/version-schemes';
 import { DATASOURCE_SBT } from '../../../lib/constants/data-binary-source';
 
 const mavenIndexHtml = fs.readFileSync(
@@ -103,16 +104,16 @@ describe('datasource/sbt', () => {
     it('returns null in case of errors', async () => {
       expect(
         await getPkgReleases({
+          versionScheme: VERSION_SCHEME_IVY,
           datasource: DATASOURCE_SBT,
-          versionScheme: 'ivy',
           lookupName: 'org.scalatest:scalatest',
           registryUrls: ['https://failed_repo/maven'],
         })
       ).toEqual(null);
       expect(
         await getPkgReleases({
+          versionScheme: VERSION_SCHEME_IVY,
           datasource: DATASOURCE_SBT,
-          versionScheme: 'ivy',
           lookupName: 'org.scalatest:scalaz',
           depType: 'plugin',
           registryUrls: [SBT_PLUGINS_REPO],
@@ -122,8 +123,8 @@ describe('datasource/sbt', () => {
     it('fetches releases from Maven', async () => {
       expect(
         await getPkgReleases({
+          versionScheme: VERSION_SCHEME_IVY,
           datasource: DATASOURCE_SBT,
-          versionScheme: 'ivy',
           lookupName: 'org.scalatest:scalatest',
           registryUrls: [
             'https://failed_repo/maven',
@@ -140,8 +141,8 @@ describe('datasource/sbt', () => {
       });
       expect(
         await getPkgReleases({
+          versionScheme: VERSION_SCHEME_IVY,
           datasource: DATASOURCE_SBT,
-          versionScheme: 'ivy',
           lookupName: 'org.scalatest:scalatest_2.12',
           registryUrls: [DEFAULT_MAVEN_REPO, SBT_PLUGINS_REPO],
         })
@@ -156,8 +157,8 @@ describe('datasource/sbt', () => {
     it('fetches sbt plugins', async () => {
       expect(
         await getPkgReleases({
+          versionScheme: VERSION_SCHEME_IVY,
           datasource: DATASOURCE_SBT,
-          versionScheme: 'ivy',
           lookupName: 'org.foundweekends:sbt-bintray',
           depType: 'plugin',
           registryUrls: [DEFAULT_MAVEN_REPO, SBT_PLUGINS_REPO],
@@ -172,8 +173,8 @@ describe('datasource/sbt', () => {
       });
       expect(
         await getPkgReleases({
+          versionScheme: VERSION_SCHEME_IVY,
           datasource: DATASOURCE_SBT,
-          versionScheme: 'ivy',
           lookupName: 'org.foundweekends:sbt-bintray_2.12',
           depType: 'plugin',
           registryUrls: [DEFAULT_MAVEN_REPO, SBT_PLUGINS_REPO],
diff --git a/test/versioning/index.spec.ts b/test/versioning/index.spec.ts
index 4a47f0427d9ba9afc343bf3fcc06aa6e542e3b9c..1574c38bb9ba93daaf6487518c13a3a59caf2ea6 100644
--- a/test/versioning/index.spec.ts
+++ b/test/versioning/index.spec.ts
@@ -4,6 +4,7 @@ import {
   GenericVersioningApi,
   GenericVersion,
 } from '../../lib/versioning/loose/generic';
+import { VERSION_SCHEME_SEMVER } from '../../lib/constants/version-schemes';
 
 const supportedSchemes = getOptions().find(
   option => option.name === 'versionScheme'
@@ -15,8 +16,12 @@ describe('versioning.get(versionScheme)', () => {
   });
 
   it('should fallback to semver', () => {
-    expect(versioning.get(undefined)).toBe(versioning.get('semver'));
-    expect(versioning.get('unknown')).toBe(versioning.get('semver'));
+    expect(versioning.get(undefined)).toBe(
+      versioning.get(VERSION_SCHEME_SEMVER)
+    );
+    expect(versioning.get('unknown')).toBe(
+      versioning.get(VERSION_SCHEME_SEMVER)
+    );
   });
 
   it('should accept config', () => {
@@ -36,7 +41,7 @@ describe('versioning.get(versionScheme)', () => {
       'toString',
       'valueOf',
     ];
-    const npmApi = Object.keys(versioning.get('semver'))
+    const npmApi = Object.keys(versioning.get(VERSION_SCHEME_SEMVER))
       .filter(val => !optionalFunctions.includes(val))
       .sort();
 
diff --git a/test/workers/pr/changelog/index.spec.ts b/test/workers/pr/changelog/index.spec.ts
index 8a44a6fc39381403d7c2a0bc0ef29914d3f00595..1ae66afec7ddcb16e8b90381bb0fae719d9ea7c7 100644
--- a/test/workers/pr/changelog/index.spec.ts
+++ b/test/workers/pr/changelog/index.spec.ts
@@ -5,6 +5,7 @@ import {
   ChangeLogConfig,
 } from '../../../../lib/workers/pr/changelog';
 import { mocked } from '../../../util';
+import { VERSION_SCHEME_SEMVER } from '../../../../lib/constants/version-schemes';
 
 jest.mock('../../../../lib/platform/github/gh-got-wrapper');
 jest.mock('../../../../lib/datasource/npm');
@@ -14,7 +15,7 @@ const ghGot = mocked(api).get;
 const upgrade: ChangeLogConfig = {
   endpoint: 'https://api.github.com/',
   depName: 'renovate',
-  versionScheme: 'semver',
+  versionScheme: VERSION_SCHEME_SEMVER,
   fromVersion: '1.0.0',
   toVersion: '3.0.0',
   sourceUrl: 'https://github.com/chalk/chalk',
diff --git a/test/workers/pr/changelog/releases.spec.ts b/test/workers/pr/changelog/releases.spec.ts
index bd0bafb498bbf2c339835cf7c9e38b29fa8da0cd..dad684faccdeda5a503e652a5a5d2af69c8abb7a 100644
--- a/test/workers/pr/changelog/releases.spec.ts
+++ b/test/workers/pr/changelog/releases.spec.ts
@@ -1,6 +1,10 @@
 import * as releases from '../../../../lib/workers/pr/changelog/releases';
 import * as datasource from '../../../../lib/datasource';
 import { mocked } from '../../../util';
+import {
+  VERSION_SCHEME_DOCKER,
+  VERSION_SCHEME_NPM,
+} from '../../../../lib/constants/version-schemes';
 
 jest.mock('../../../../lib/datasource');
 
@@ -40,7 +44,7 @@ describe('workers/pr/changelog/releases', () => {
     });
     it('should contain only stable', async () => {
       const config = {
-        versionScheme: 'npm',
+        versionScheme: VERSION_SCHEME_NPM,
         fromVersion: '1.0.0',
         toVersion: '1.1.0',
       };
@@ -50,7 +54,7 @@ describe('workers/pr/changelog/releases', () => {
     });
     it('should contain fromVersion unstable', async () => {
       const config = {
-        versionScheme: 'npm',
+        versionScheme: VERSION_SCHEME_NPM,
         fromVersion: '1.0.1-rc0',
         toVersion: '1.1.0',
       };
@@ -60,7 +64,7 @@ describe('workers/pr/changelog/releases', () => {
     });
     it('should contain toVersion unstable', async () => {
       const config = {
-        versionScheme: 'npm',
+        versionScheme: VERSION_SCHEME_NPM,
         fromVersion: '1.0.1',
         toVersion: '1.2.0-rc1',
       };
@@ -70,7 +74,7 @@ describe('workers/pr/changelog/releases', () => {
     });
     it('should contain both fromVersion toVersion unstable', async () => {
       const config = {
-        versionScheme: 'npm',
+        versionScheme: VERSION_SCHEME_NPM,
         fromVersion: '1.0.1-rc0',
         toVersion: '1.2.0-rc1',
       };
@@ -80,7 +84,7 @@ describe('workers/pr/changelog/releases', () => {
     });
     it('should valueToVersion', async () => {
       const config = {
-        versionScheme: 'docker',
+        versionScheme: VERSION_SCHEME_DOCKER,
         fromVersion: '1.0.1-rc0',
         toVersion: '1.2.0-rc0',
       };
diff --git a/test/workers/repository/process/lookup/index.spec.ts b/test/workers/repository/process/lookup/index.spec.ts
index f01f306054cf4c40aaa423d36c0801c25d654d2a..7d7c694fb74e076f7bc3bc97d842696eb30443ad 100644
--- a/test/workers/repository/process/lookup/index.spec.ts
+++ b/test/workers/repository/process/lookup/index.spec.ts
@@ -11,6 +11,13 @@ import * as _docker from '../../../../../lib/datasource/docker';
 import * as _gitSubmodules from '../../../../../lib/datasource/git-submodules';
 import { mocked, getConfig } from '../../../../util';
 import { CONFIG_VALIDATION } from '../../../../../lib/constants/error-messages';
+import {
+  VERSION_SCHEME_DOCKER,
+  VERSION_SCHEME_GIT,
+  VERSION_SCHEME_NPM,
+  VERSION_SCHEME_PEP440,
+} from '../../../../../lib/constants/version-schemes';
+
 import { MANAGER_PIP_REQUIREMENTS } from '../../../../../lib/constants/managers';
 import {
   DATASOURCE_DOCKER,
@@ -35,7 +42,7 @@ describe('workers/repository/process/lookup', () => {
   beforeEach(() => {
     config = getConfig();
     config.manager = 'npm';
-    config.versionScheme = 'npm';
+    config.versionScheme = VERSION_SCHEME_NPM;
     config.rangeStrategy = 'replace';
     global.repoCache = {};
     jest.resetAllMocks();
@@ -173,8 +180,8 @@ describe('workers/repository/process/lookup', () => {
       config.currentValue = '0.4.0';
       config.allowedVersions = '<1';
       config.depName = 'q';
-      config.datasource = DATASOURCE_NPM;
-      config.versionScheme = 'docker'; // this doesn't make sense but works for this test
+      config.versionScheme = VERSION_SCHEME_DOCKER; // this doesn't make sense but works for this test
+      config.datasource = DATASOURCE_NPM; // this doesn't make sense but works for this test
       nock('https://registry.npmjs.org')
         .get('/q')
         .reply(200, qJson);
@@ -1022,6 +1029,8 @@ describe('workers/repository/process/lookup', () => {
       expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot();
     });
     it('handles PEP440', async () => {
+      config.manager = 'pip_requirements';
+      config.versionScheme = VERSION_SCHEME_PEP440;
       config.manager = MANAGER_PIP_REQUIREMENTS;
       config.versionScheme = 'pep440';
       config.rangeStrategy = 'pin';
@@ -1116,8 +1125,8 @@ describe('workers/repository/process/lookup', () => {
       it('skips uncompatible versions for ' + currentValue, async () => {
         config.currentValue = currentValue;
         config.depName = 'node';
+        config.versionScheme = VERSION_SCHEME_DOCKER;
         config.datasource = DATASOURCE_DOCKER;
-        config.versionScheme = 'docker';
         docker.getPkgReleases.mockResolvedValueOnce({
           releases: [
             { version: '8.1.0' },
@@ -1243,8 +1252,8 @@ describe('workers/repository/process/lookup', () => {
       expect(res).toMatchSnapshot();
     });
     it('handles git submodule update', async () => {
+      config.versionScheme = VERSION_SCHEME_GIT;
       config.datasource = DATASOURCE_GIT_SUBMODULES;
-      config.versionScheme = 'git';
       gitSubmodules.getPkgReleases.mockResolvedValueOnce({
         releases: [
           {