diff --git a/lib/constants/managers.ts b/lib/constants/managers.ts
deleted file mode 100644
index 557a15706568c01561206cd44366d03a52597f02..0000000000000000000000000000000000000000
--- a/lib/constants/managers.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-export const MANAGER_ANSIBLE = 'ansible';
-export const MANAGER_BAZEL = 'bazel';
-export const MANAGER_BUILDKITE = 'buildkite';
-export const MANAGER_BUNDLER = 'bundler';
-export const MANAGER_CARGO = 'cargo';
-export const MANAGER_CDNURL = 'cdnurl';
-export const MANAGER_CIRCLE_CI = 'circleci';
-export const MANAGER_COMPOSER = 'composer';
-export const MANAGER_DEPS_EDN = 'deps-edn';
-export const MANAGER_DOCKERFILE = 'dockerfile';
-export const MANAGER_DOCKER_COMPOSE = 'docker-compose';
-export const MANAGER_DRONE_CI = 'droneci';
-export const MANAGER_GITHUB_ACTIONS = 'github-actions';
-export const MANAGER_GITLAB_CI = 'gitlabci';
-export const MANAGER_GITLAB_CI_INCLUDE = 'gitlabci-include';
-export const MANAGER_GIT_SUBMODULES = 'git-submodules';
-export const MANAGER_GO_MOD = 'gomod';
-export const MANAGER_GRADLE = 'gradle';
-export const MANAGER_GRADLE_WRAPPER = 'gradle-wrapper';
-export const MANAGER_HELM_REQUIREMENTS = 'helm-requirements';
-export const MANAGER_HELMFILE = 'helmfile';
-export const MANAGER_HOMEBREW = 'homebrew';
-export const MANAGER_KUBERNETES = 'kubernetes';
-export const MANAGER_LEININGEN = 'leiningen';
-export const MANAGER_MAVEN = 'maven';
-export const MANAGER_METEOR = 'meteor';
-export const MANAGER_MIX = 'mix';
-export const MANAGER_NPM = 'npm';
-export const MANAGER_NUGET = 'nuget';
-export const MANAGER_NVM = 'nvm';
-export const MANAGER_PIPENV = 'pipenv';
-export const MANAGER_PIP_REQUIREMENTS = 'pip_requirements';
-export const MANAGER_PIP_SETUP = 'pip_setup';
-export const MANAGER_POETRY = 'poetry';
-export const MANAGER_PUB = 'pub';
-export const MANAGER_RUBY_VERSION = 'ruby-version';
-export const MANAGER_SBT = 'sbt';
-export const MANAGER_SWIFT = 'swift';
-export const MANAGER_TERRAFORM = 'terraform';
-export const MANAGER_TRAVIS = 'travis';
diff --git a/lib/manager/cocoapods/readme.md b/lib/manager/cocoapods/readme.md
deleted file mode 100644
index 60fd16b958475d91882954d66d3ce2b267f0f73f..0000000000000000000000000000000000000000
--- a/lib/manager/cocoapods/readme.md
+++ /dev/null
@@ -1,246 +0,0 @@
-## Overview
-
-#### Name of package manager
-
-Cocoapods
-
----
-
-#### Implementation status
-
-Unimplemented
-
----
-
-#### What language does this support?
-
-Swift, Objective-C
-
----
-
-#### Does that language have other (competing?) package managers?
-
-Carthage, Swift Package Manager
-
-## Package File Detection
-
-#### What type of package files and names does it use?
-
-Podfile
-
----
-
-#### What [fileMatch](https://docs.renovatebot.com/configuration-options/#filematch) pattern(s) should be used?
-
-`['(^|/)Podfile$']`
-
----
-
-#### Is it likely that many users would need to extend this pattern for custom file names?
-
-No
-
----
-
-#### Is the fileMatch pattern likely to get many "false hits" for files that have nothing to do with package management?
-
-Unlikely
-
-## Parsing and Extraction
-
-#### Can package files have "local" links to each other that need to be resolved?
-
-There can be local links, but they don't need to be resolved.
-
-#### Is there reason why package files need to be parsed together (in serial) instead of independently?
-
-No
-
----
-
-#### What format/syntax is the package file in? e.g. JSON, TOML, custom?
-
-Package file uses ruby syntax.
-
----
-
-#### How do you suggest parsing the file? Using an off-the-shelf parser, using regex, or can it be custom-parsed line by line?
-
-Using line-by-line parser.
-
----
-
-#### Does the package file structure distinguish between different "types" of dependencies? e.g. production dependencies, dev dependencies, etc?
-
-It distinguishes dependencies for different targets (testing target, target for TV OS etc)
-
----
-
-#### List all the sources/syntaxes of dependencies that can be extracted:
-
-Dependency indicated by keyword `pod` and name with version.
-
-Also, it's possible to use a local podspec file on the machine, or in the root of library repo.
-In case of the repo you also can specify branch, tag or commit.
-
-```
-pod 'AFNetworking', '~> 2.6'
-pod 'Alamofire', :path => '~/Documents/Alamofire'
-pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'
-pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'dev'
-pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'
-pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45'
-```
-
----
-
-#### Describe which types of dependencies above are supported and which will be implemented in future:
-
-Cocoapods supports dependencies from git source and local path.
-
-## Versioning
-
-#### What versioning scheme do the package files use?
-
-Package file use [Ruby-compatible semver 2.0](https://guides.cocoapods.org/using/the-podfile.html#specifying-pod-versions)
-
----
-
-#### Does this versioning scheme support range constraints, e.g. `^1.0.0` or `1.x`?
-
-Versioning scheme supports logical operators:
-
-- `> 0.1` Any version higher than 0.1
-- `>= 0.1` Version 0.1 and any higher version
-- `< 0.1` Any version lower than 0.1
-- `<= 0.1` Version 0.1 and any lower version
-
-In addition to the logic operators CocoaPods has an optimistic operator `~>`:
-
-- `~> 0.1.2` Version 0.1.2 and the versions up to 0.2, not including 0.2 and higher
-- `~> 0.1` Version 0.1 and the versions up to 1.0, not including 1.0 and higher
-- `~> 0` Version 0 and higher, this is basically the same as not having it.
-
----
-
-#### Is this package manager used for applications, libraries, or both? If both, is there a way to tell which is which?
-
-Package manager used for applications only
-
----
-
-#### If ranges are supported, are there any cases when Renovate should pin ranges to exact versions if rangeStrategy=auto?
-
-They can be pinned as cocoapods is only for applications.
-
-## Lookup
-
-#### Is a new datasource required? Provide details
-
-There is a index service for cocoapods. Developers always search for pod on this [site](https://github.com/CocoaPods):
-
-Also, all podspec are stored in one [repo](https://github.com/CocoaPods/Specs)
-
----
-
-#### Will users need the capability to specify a custom host/registry to look up? Can it be found within the package files, or within other files inside the repository, or would it require Renovate configuration?
-
-User can specify a different location of the source. The official CocoaPods source is implicit.
-
-```
-source 'https://github.com/artsy/Specs.git'
-source 'https://github.com/CocoaPods/Specs.git'
-```
-
----
-
-#### Do the package files contain any "constraints" on the parent language (e.g. supports only v3.x of Python) or platform (Linux, Windows, etc) that should be used in the lookup procedure?
-
-Cocoapods supports only mac platform but there can be different target OSes.
-
----
-
-#### Will users need the ability to configure language or other constraints using Renovate config?
-
-No
-
-## Artifacts
-
-#### Are lock files or checksum files used? Mandatory?
-
-Yes, lock file will be named `Podfile.lock`.
-
----
-
-#### If so, what tool and exact commands should be used if updating 1 or more package versions in a dependency file?
-
-To update single package: `pod update SomePodName`
-
-To update all packages: `pod update`
-
----
-
-#### If applicable, describe how the tool maintains a cache and if it can be controlled via CLI or env? Do you recommend the cache be kept or disabled/ignored?
-
-Cocoapods keeps cache in directory `${HOME}/Library/Caches/CocoaPods`
-
-You can get information about cache state and clean cache throutgh cocoapods ([details](https://guides.cocoapods.org/terminal/commands.html#group_cache))
-
----
-
-#### If applicable, what command should be used to generate a lock file from scratch if you already have a package file? This will be used for "lock file maintenance".
-
-You can generate `Podfile.lock` by running `pod install`. This command also install required dependencies and link them to xcode project.
-
-I don't know hot to generate only `Podfile.lock`
-
-## Other
-
-#### Is there anything else to know about this package manager?
-
-Cocoapods has interesting feature that may be usefull for renovate.
-Command `pod outdated` lists all outdated dependecies ([details](https://guides.cocoapods.org/using/pod-install-vs-update.html#pod-outdated))
-
----
-
-In order to add dependencies to your xcode project you have to create file named `Podfile`
-in your Xcode project directory
-
-```
-platform :ios, '8.0'
-use_frameworks!
-
-target 'MyApp' do
-  pod 'AFNetworking', '~> 2.6'
-  pod 'ORStackView', '~> 3.0'
-  pod 'SwiftyJSON', '~> 2.3'
-end
-```
-
-[Syntax](https://guides.cocoapods.org/syntax/podspec.html#deployment_target)
-
-After that you can install dependencies in your project by runing `pod install`
-
-Also pod CLI supports creating own pod `pod spec create Peanut`
-
-This command will create a podspec file. This file describes a version of Pod library. It includes details about where the source should be fetched from, what files to use, the build settings to apply, and other general metadata such as its name, version, and description. More details about podspec syntax you can find [here](https://guides.cocoapods.org/syntax/podspec.html)
-
-```
-Pod::Spec.new do |spec|
-  spec.name         = 'Reachability'
-  spec.version      = '3.1.0'
-  spec.license      = { :type => 'BSD' }
-  spec.homepage     = 'https://github.com/tonymillion/Reachability'
-  spec.authors      = { 'Tony Million' => 'tonymillion@gmail.com' }
-  spec.summary      = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
-  spec.source       = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
-  spec.source_files = 'Reachability.{h,m}'
-  spec.framework    = 'SystemConfiguration'
-  spec.dependency 'SomeOtherPod'
-end
-```
-
-When you're done you can get an account and push your pod to the CocoaPods Trunk. CocoaPods Trunk is an authentication and CocoaPods API service. To publish new or updated libraries to CocoaPods for public release you will need to be registered with Trunk and have a valid Trunk session on your current device. More details about CocoaPods Trunk you can find [here](https://guides.cocoapods.org/making/getting-setup-with-trunk.html)
-
-It's possible to perform `pod install` and `pod update` action in Docker-based version of cocoapods.
-I used this (image)[https://github.com/MaSpeng/docker-hub-cocoapods] and random iOS project.
diff --git a/lib/manager/index.ts b/lib/manager/index.ts
index c64b9ce80aaa5dadb9359f04abb545904a2ff88b..726d7e826af3af0f4b979c7ce8fb5c9b0b0fc676 100644
--- a/lib/manager/index.ts
+++ b/lib/manager/index.ts
@@ -1,3 +1,6 @@
+import fs from 'fs';
+import { logger } from '../logger';
+
 import {
   ExtractConfig,
   ManagerApi,
@@ -21,96 +24,36 @@ import {
   LANGUAGE_RUBY,
   LANGUAGE_RUST,
 } from '../constants/languages';
-import {
-  MANAGER_ANSIBLE,
-  MANAGER_BAZEL,
-  MANAGER_BUILDKITE,
-  MANAGER_BUNDLER,
-  MANAGER_CARGO,
-  MANAGER_CDNURL,
-  MANAGER_CIRCLE_CI,
-  MANAGER_COMPOSER,
-  MANAGER_DEPS_EDN,
-  MANAGER_DOCKER_COMPOSE,
-  MANAGER_DOCKERFILE,
-  MANAGER_DRONE_CI,
-  MANAGER_GIT_SUBMODULES,
-  MANAGER_GITHUB_ACTIONS,
-  MANAGER_GITLAB_CI,
-  MANAGER_GITLAB_CI_INCLUDE,
-  MANAGER_GO_MOD,
-  MANAGER_GRADLE,
-  MANAGER_GRADLE_WRAPPER,
-  MANAGER_HELM_REQUIREMENTS,
-  MANAGER_HELMFILE,
-  MANAGER_HOMEBREW,
-  MANAGER_KUBERNETES,
-  MANAGER_LEININGEN,
-  MANAGER_MAVEN,
-  MANAGER_METEOR,
-  MANAGER_MIX,
-  MANAGER_NPM,
-  MANAGER_NUGET,
-  MANAGER_NVM,
-  MANAGER_PIP_REQUIREMENTS,
-  MANAGER_PIP_SETUP,
-  MANAGER_PIPENV,
-  MANAGER_POETRY,
-  MANAGER_PUB,
-  MANAGER_RUBY_VERSION,
-  MANAGER_SBT,
-  MANAGER_SWIFT,
-  MANAGER_TERRAFORM,
-  MANAGER_TRAVIS,
-} from '../constants/managers';
-
-const managerList = [
-  MANAGER_ANSIBLE,
-  MANAGER_BAZEL,
-  MANAGER_BUILDKITE,
-  MANAGER_BUNDLER,
-  MANAGER_CARGO,
-  MANAGER_CDNURL,
-  MANAGER_CIRCLE_CI,
-  MANAGER_COMPOSER,
-  MANAGER_DEPS_EDN,
-  MANAGER_DOCKER_COMPOSE,
-  MANAGER_DOCKERFILE,
-  MANAGER_DRONE_CI,
-  MANAGER_GIT_SUBMODULES,
-  MANAGER_GITHUB_ACTIONS,
-  MANAGER_GITLAB_CI,
-  MANAGER_GITLAB_CI_INCLUDE,
-  MANAGER_GO_MOD,
-  MANAGER_GRADLE,
-  MANAGER_GRADLE_WRAPPER,
-  MANAGER_HELM_REQUIREMENTS,
-  MANAGER_HELMFILE,
-  MANAGER_HOMEBREW,
-  MANAGER_KUBERNETES,
-  MANAGER_LEININGEN,
-  MANAGER_MAVEN,
-  MANAGER_METEOR,
-  MANAGER_MIX,
-  MANAGER_NPM,
-  MANAGER_NUGET,
-  MANAGER_NVM,
-  MANAGER_PIP_REQUIREMENTS,
-  MANAGER_PIP_SETUP,
-  MANAGER_PIPENV,
-  MANAGER_POETRY,
-  MANAGER_PUB,
-  MANAGER_SBT,
-  MANAGER_SWIFT,
-  MANAGER_TERRAFORM,
-  MANAGER_TRAVIS,
-  MANAGER_RUBY_VERSION,
-];
 
+const managerList = [];
 const managers: Record<string, ManagerApi> = {};
-for (const manager of managerList) {
-  managers[manager] = require(`./${manager}`); // eslint-disable-line
+
+function isValidManagerModule(module: unknown): module is ManagerApi {
+  // TODO: check interface and fail-fast?
+  return !!module;
+}
+
+function loadManagers(): void {
+  const managerDirs = fs
+    .readdirSync(__dirname, { withFileTypes: true })
+    .filter(dirent => dirent.isDirectory())
+    .map(dirent => dirent.name)
+    .sort();
+  for (const manager of managerDirs) {
+    let module = null;
+    try {
+      module = require(`./${manager}`); // eslint-disable-line
+    } catch (e) /* istanbul ignore next */ {
+      logger.error(`Can not load manager "${manager}", skipping directory.`);
+    }
+
+    if (isValidManagerModule(module)) {
+      managers[manager] = module;
+      managerList.push(manager);
+    }
+  }
 }
+loadManagers();
 
 const languageList = [
   LANGUAGE_DART,
diff --git a/test/manager/index.spec.ts b/test/manager/index.spec.ts
index 0970cc7375e3214268a8429bba066c0a8b903f6b..2b847612c171e96077f5737add98243e830ff02d 100644
--- a/test/manager/index.spec.ts
+++ b/test/manager/index.spec.ts
@@ -1,12 +1,9 @@
 import * as manager from '../../lib/manager';
-import { MANAGER_DOCKERFILE } from '../../lib/constants/managers';
 
 describe('manager', () => {
   describe('get()', () => {
     it('gets something', () => {
-      expect(
-        manager.get(MANAGER_DOCKERFILE, 'extractPackageFile')
-      ).not.toBeNull();
+      expect(manager.get('dockerfile', 'extractPackageFile')).not.toBeNull();
     });
   });
   describe('getLanguageList()', () => {
@@ -22,7 +19,7 @@ describe('manager', () => {
   describe('extractAllPackageFiles()', () => {
     it('returns null', () => {
       expect(
-        manager.extractAllPackageFiles(MANAGER_DOCKERFILE, {} as any, [])
+        manager.extractAllPackageFiles('dockerfile', {} as any, [])
       ).toBeNull();
     });
     it('returns non-null', () => {
diff --git a/test/manager/range.spec.ts b/test/manager/range.spec.ts
index 76de9438e4202ba6de9362bd133e9e1a0e0406d2..df8892b5d60b374ea786f5313fd81dbecd4ec78f 100644
--- a/test/manager/range.spec.ts
+++ b/test/manager/range.spec.ts
@@ -1,18 +1,17 @@
 import { getRangeStrategy } from '../../lib/manager';
 import { RangeConfig } from '../../lib/manager/common';
-import { MANAGER_CIRCLE_CI, MANAGER_NPM } from '../../lib/constants/managers';
 
 describe('getRangeStrategy', () => {
   it('returns same if not auto', () => {
     const config: RangeConfig = {
-      manager: MANAGER_NPM,
+      manager: 'npm',
       rangeStrategy: 'widen',
     };
     expect(getRangeStrategy(config)).toEqual('widen');
   });
   it('returns manager strategy', () => {
     const config: RangeConfig = {
-      manager: MANAGER_NPM,
+      manager: 'npm',
       rangeStrategy: 'auto',
       depType: 'dependencies',
       packageJsonType: 'app',
@@ -21,14 +20,14 @@ describe('getRangeStrategy', () => {
   });
   it('defaults to replace', () => {
     const config: RangeConfig = {
-      manager: MANAGER_CIRCLE_CI,
+      manager: 'circleci',
       rangeStrategy: 'auto',
     };
     expect(getRangeStrategy(config)).toEqual('replace');
   });
   it('returns rangeStrategy if not auto', () => {
     const config: RangeConfig = {
-      manager: MANAGER_CIRCLE_CI,
+      manager: 'circleci',
       rangeStrategy: 'future',
     };
     expect(getRangeStrategy(config)).toEqual('future');
diff --git a/test/util/package-rules.spec.ts b/test/util/package-rules.spec.ts
index e12a562f281d6a1dc7ccf9cd65abf64c2a8e479f..ad497d00838b50f76ca3a02d27f202e594f153ec 100644
--- a/test/util/package-rules.spec.ts
+++ b/test/util/package-rules.spec.ts
@@ -6,12 +6,6 @@ import {
   LANGUAGE_NODE,
   LANGUAGE_PYTHON,
 } from '../../lib/constants/languages';
-import {
-  MANAGER_DOCKERFILE,
-  MANAGER_METEOR,
-  MANAGER_NPM,
-  MANAGER_PIPENV,
-} from '../../lib/constants/managers';
 
 import {
   DATASOURCE_DOCKER,
@@ -193,7 +187,7 @@ describe('applyPackageRules()', () => {
     const config: TestConfig = {
       packageRules: [
         {
-          managers: [MANAGER_NPM, MANAGER_METEOR],
+          managers: ['npm', 'meteor'],
           packageNames: ['node'],
           x: 1,
         },
@@ -202,7 +196,7 @@ describe('applyPackageRules()', () => {
     const dep = {
       depType: 'dependencies',
       language: LANGUAGE_JAVASCRIPT,
-      manager: MANAGER_METEOR,
+      manager: 'meteor',
       depName: 'node',
     };
     const res = applyPackageRules({ ...config, ...dep });
@@ -212,7 +206,7 @@ describe('applyPackageRules()', () => {
     const config: TestConfig = {
       packageRules: [
         {
-          managers: [MANAGER_DOCKERFILE, MANAGER_NPM],
+          managers: ['dockerfile', 'npm'],
           packageNames: ['node'],
           x: 1,
         },
@@ -221,7 +215,7 @@ describe('applyPackageRules()', () => {
     const dep = {
       depType: 'dependencies',
       language: LANGUAGE_PYTHON,
-      manager: MANAGER_PIPENV,
+      manager: 'pipenv',
       depName: 'node',
     };
     const res = applyPackageRules({ ...config, ...dep });
@@ -240,7 +234,7 @@ describe('applyPackageRules()', () => {
     const dep = {
       depType: 'dependencies',
       language: LANGUAGE_JAVASCRIPT,
-      manager: MANAGER_METEOR,
+      manager: 'meteor',
       depName: 'node',
     };
     const res = applyPackageRules({ ...config, ...dep });
@@ -259,7 +253,7 @@ describe('applyPackageRules()', () => {
     const dep = {
       depType: 'dependencies',
       language: LANGUAGE_PYTHON,
-      manager: MANAGER_PIPENV,
+      manager: 'pipenv',
       depName: 'node',
     };
     const res = applyPackageRules({ ...config, ...dep });
diff --git a/test/workers/branch/get-updated.spec.ts b/test/workers/branch/get-updated.spec.ts
index 778449ca878b1f568c872d2e086a6714f9190541..4a4ae1828e84e61a7b4806adce5d5a8d9baceb6e 100644
--- a/test/workers/branch/get-updated.spec.ts
+++ b/test/workers/branch/get-updated.spec.ts
@@ -3,11 +3,6 @@ import * as _npm from '../../../lib/manager/npm';
 import * as _gitSubmodules from '../../../lib/manager/git-submodules';
 import { getUpdatedPackageFiles } from '../../../lib/workers/branch/get-updated';
 import { mocked, defaultConfig, platform } from '../../util';
-import {
-  MANAGER_COMPOSER,
-  MANAGER_GIT_SUBMODULES,
-  MANAGER_NPM,
-} from '../../../lib/constants/managers';
 import { DATASOURCE_GIT_SUBMODULES } from '../../../lib/constants/data-binary-source';
 
 const composer = mocked(_composer);
@@ -36,14 +31,14 @@ describe('workers/branch/get-updated', () => {
     it('handles null content', async () => {
       config.parentBranch = 'some-branch';
       config.upgrades.push({
-        manager: MANAGER_NPM,
+        manager: 'npm',
       });
       await expect(getUpdatedPackageFiles(config)).rejects.toThrow();
     });
     it('handles content change', async () => {
       config.parentBranch = 'some-branch';
       config.upgrades.push({
-        manager: MANAGER_NPM,
+        manager: 'npm',
       });
       npm.updateDependency.mockReturnValue('some new content');
       const res = await getUpdatedPackageFiles(config);
@@ -52,7 +47,7 @@ describe('workers/branch/get-updated', () => {
     it('handles lock files', async () => {
       config.parentBranch = 'some-branch';
       config.upgrades.push({
-        manager: MANAGER_COMPOSER,
+        manager: 'composer',
       });
       composer.updateDependency.mockReturnValue('some new content');
       composer.updateArtifacts.mockResolvedValueOnce([
@@ -69,7 +64,7 @@ describe('workers/branch/get-updated', () => {
     it('handles lockFileMaintenance', async () => {
       // config.parentBranch = 'some-branch';
       config.upgrades.push({
-        manager: MANAGER_COMPOSER,
+        manager: 'composer',
         updateType: 'lockFileMaintenance',
       });
       composer.updateArtifacts.mockResolvedValueOnce([
@@ -86,7 +81,7 @@ describe('workers/branch/get-updated', () => {
     it('handles lockFileMaintenance error', async () => {
       // config.parentBranch = 'some-branch';
       config.upgrades.push({
-        manager: MANAGER_COMPOSER,
+        manager: 'composer',
         updateType: 'lockFileMaintenance',
       });
       composer.updateArtifacts.mockResolvedValueOnce([
@@ -103,7 +98,7 @@ describe('workers/branch/get-updated', () => {
     it('handles lock file errors', async () => {
       config.parentBranch = 'some-branch';
       config.upgrades.push({
-        manager: MANAGER_COMPOSER,
+        manager: 'composer',
       });
       composer.updateDependency.mockReturnValue('some new content');
       composer.updateArtifacts.mockResolvedValueOnce([
@@ -119,7 +114,7 @@ describe('workers/branch/get-updated', () => {
     });
     it('handles git submodules', async () => {
       config.upgrades.push({
-        manager: MANAGER_GIT_SUBMODULES,
+        manager: 'git-submodules',
         datasource: DATASOURCE_GIT_SUBMODULES,
       });
       gitSubmodules.updateDependency.mockResolvedValueOnce('existing content');
diff --git a/test/workers/repository/extract/manager-files.spec.ts b/test/workers/repository/extract/manager-files.spec.ts
index f96737aa65903e1c6aeb5ebcfe4f740540070590..4220a56faa6347d0e0c56288012745e62e4efe3c 100644
--- a/test/workers/repository/extract/manager-files.spec.ts
+++ b/test/workers/repository/extract/manager-files.spec.ts
@@ -3,11 +3,6 @@ import * as _fileMatch from '../../../../lib/workers/repository/extract/file-mat
 import * as _dockerfile from '../../../../lib/manager/dockerfile';
 import { mocked, platform, getConfig } from '../../../util';
 import { RenovateConfig } from '../../../../lib/config';
-import {
-  MANAGER_DOCKERFILE,
-  MANAGER_NPM,
-  MANAGER_TRAVIS,
-} from '../../../../lib/constants/managers';
 
 jest.mock('../../../../lib/workers/repository/extract/file-match');
 jest.mock('../../../../lib/manager/dockerfile');
@@ -23,7 +18,7 @@ describe('workers/repository/extract/manager-files', () => {
       config = getConfig;
     });
     it('returns empty of manager is disabled', async () => {
-      const managerConfig = { manager: MANAGER_TRAVIS, enabled: false };
+      const managerConfig = { manager: 'travis', enabled: false };
       const res = await getManagerPackageFiles(managerConfig);
       expect(res).toHaveLength(0);
     });
@@ -34,13 +29,13 @@ describe('workers/repository/extract/manager-files', () => {
       expect(res).toHaveLength(0);
     });
     it('skips files if null content returned', async () => {
-      const managerConfig = { manager: MANAGER_NPM, enabled: true };
+      const managerConfig = { manager: 'npm', enabled: true };
       fileMatch.getMatchingFiles.mockReturnValue(['package.json']);
       const res = await getManagerPackageFiles(managerConfig);
       expect(res).toHaveLength(0);
     });
     it('returns files with extractPackageFile', async () => {
-      const managerConfig = { manager: MANAGER_DOCKERFILE, enabled: true };
+      const managerConfig = { manager: 'dockerfile', enabled: true };
       fileMatch.getMatchingFiles.mockReturnValue(['Dockerfile']);
       platform.getFile.mockResolvedValue('some content');
       dockerfile.extractPackageFile = jest.fn(() => ({
@@ -50,7 +45,7 @@ describe('workers/repository/extract/manager-files', () => {
       expect(res).toMatchSnapshot();
     });
     it('returns files with extractAllPackageFiles', async () => {
-      const managerConfig = { manager: MANAGER_NPM, enabled: true };
+      const managerConfig = { manager: 'npm', enabled: true };
       fileMatch.getMatchingFiles.mockReturnValue(['package.json']);
       platform.getFile.mockResolvedValue('{}');
       const res = await getManagerPackageFiles(managerConfig);
diff --git a/test/workers/repository/process/lookup/index.spec.ts b/test/workers/repository/process/lookup/index.spec.ts
index 7d7c694fb74e076f7bc3bc97d842696eb30443ad..2324380d1cb64d6331c4cea18e35169d5a0e48a0 100644
--- a/test/workers/repository/process/lookup/index.spec.ts
+++ b/test/workers/repository/process/lookup/index.spec.ts
@@ -18,7 +18,6 @@ import {
   VERSION_SCHEME_PEP440,
 } from '../../../../../lib/constants/version-schemes';
 
-import { MANAGER_PIP_REQUIREMENTS } from '../../../../../lib/constants/managers';
 import {
   DATASOURCE_DOCKER,
   DATASOURCE_GIT_SUBMODULES,
@@ -1031,7 +1030,7 @@ describe('workers/repository/process/lookup', () => {
     it('handles PEP440', async () => {
       config.manager = 'pip_requirements';
       config.versionScheme = VERSION_SCHEME_PEP440;
-      config.manager = MANAGER_PIP_REQUIREMENTS;
+      config.manager = 'pip_requirements';
       config.versionScheme = 'pep440';
       config.rangeStrategy = 'pin';
       config.lockedVersion = '0.9.4';