diff --git a/lib/config/cli.spec.ts b/lib/config/cli.spec.ts
index 9ad91f8e7630c889e9d58b1b022ee871db42ab8b..bf95f618d9d984cafafb6c1c1de3462259dc4d21 100644
--- a/lib/config/cli.spec.ts
+++ b/lib/config/cli.spec.ts
@@ -1,9 +1,10 @@
+import { getName } from '../../test/util';
 import * as datasourceDocker from '../datasource/docker';
 import * as cli from './cli';
 import getArgv from './config/__fixtures__/argv';
 import type { RenovateOptions } from './types';
 
-describe('config/cli', () => {
+describe(getName(__filename), () => {
   let argv: string[];
   beforeEach(() => {
     argv = getArgv();
diff --git a/lib/config/decrypt.spec.ts b/lib/config/decrypt.spec.ts
index 3910758dac8a278e74f83c2e1ef5c57fe9e579ec..5bf81c44afcd39faf0b8fb3fe7a3d2442252c74d 100644
--- a/lib/config/decrypt.spec.ts
+++ b/lib/config/decrypt.spec.ts
@@ -1,11 +1,12 @@
 import fs from 'fs';
+import { getName } from '../../test/util';
 import { setAdminConfig } from './admin';
 import { decryptConfig } from './decrypt';
 import { RenovateConfig } from '.';
 
 const privateKey = fs.readFileSync('lib/config/keys/__fixtures__/private.pem');
 
-describe('config/decrypt', () => {
+describe(getName(__filename), () => {
   describe('decryptConfig()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/config/env.spec.ts b/lib/config/env.spec.ts
index 13d2311362fac115a229cfc10bf2452ce4288918..58a08bbfd431dec2a4783a292e5f2f1c8dea4fde 100644
--- a/lib/config/env.spec.ts
+++ b/lib/config/env.spec.ts
@@ -1,3 +1,4 @@
+import { getName } from '../../test/util';
 import {
   PLATFORM_TYPE_BITBUCKET,
   PLATFORM_TYPE_GITLAB,
@@ -5,7 +6,7 @@ import {
 import * as env from './env';
 import type { RenovateOptions } from './types';
 
-describe('config/env', () => {
+describe(getName(__filename), () => {
   describe('.getConfig(env)', () => {
     it('returns empty env', () => {
       expect(env.getConfig({})).toEqual({ hostRules: [] });
diff --git a/lib/config/file.spec.ts b/lib/config/file.spec.ts
index 1383858da9d2f04d300a6b0d2377ba95f9be0d15..a75f18e7e530fb8ae1c2c9de58c715fbedeeabb6 100644
--- a/lib/config/file.spec.ts
+++ b/lib/config/file.spec.ts
@@ -1,10 +1,11 @@
 import fs from 'fs';
 import { DirectoryResult, dir } from 'tmp-promise';
 import upath from 'upath';
+import { getName } from '../../test/util';
 import customConfig from './config/__fixtures__/file';
 import * as file from './file';
 
-describe('config/file', () => {
+describe(getName(__filename), () => {
   let tmp: DirectoryResult;
 
   beforeAll(async () => {
diff --git a/lib/config/index.spec.ts b/lib/config/index.spec.ts
index 79a2fc0d0d85f3711903c3f6511cae76e404e626..08dd9dd7f14d03558df6c7635e00f28e7b857046 100644
--- a/lib/config/index.spec.ts
+++ b/lib/config/index.spec.ts
@@ -1,4 +1,5 @@
 import upath from 'upath';
+import { getName } from '../../test/util';
 import { readFile } from '../util/fs';
 import getArgv from './config/__fixtures__/argv';
 import { getConfig } from './defaults';
@@ -12,7 +13,7 @@ try {
 
 const defaultConfig = getConfig();
 
-describe('config/index', () => {
+describe(getName(__filename), () => {
   describe('.parseConfigs(env, defaultArgv)', () => {
     let configParser: typeof import('.');
     let defaultArgv: string[];
diff --git a/lib/config/massage.spec.ts b/lib/config/massage.spec.ts
index 04b6eb6c461fbeb212b5d3604fae7a6dadd3de5b..54ee01afca69f1ad9f657517af941b0a266caac3 100644
--- a/lib/config/massage.spec.ts
+++ b/lib/config/massage.spec.ts
@@ -1,7 +1,8 @@
+import { getName } from '../../test/util';
 import * as massage from './massage';
 import { RenovateConfig } from '.';
 
-describe('config/massage', () => {
+describe(getName(__filename), () => {
   describe('massageConfig', () => {
     it('returns empty', () => {
       const config: RenovateConfig = {};
diff --git a/lib/config/migrate-validate.spec.ts b/lib/config/migrate-validate.spec.ts
index 81057deaacc1e485ff2689304c1f752b2dac6894..bd1de334b8a87d7b6e4d929d4196755e3c7c9248 100644
--- a/lib/config/migrate-validate.spec.ts
+++ b/lib/config/migrate-validate.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig } from '../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../test/util';
 import { migrateAndValidate } from './migrate-validate';
 
 let config: RenovateConfig;
@@ -7,7 +7,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe('config/migrate-validate', () => {
+describe(getName(__filename), () => {
   describe('migrateAndValidate()', () => {
     it('handles empty', async () => {
       const res = await migrateAndValidate(config, {});
diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts
index ba28db45b97da7269c68a65053b75476a04173f6..3b2bdb7bc75e68af720835ae5bdb4fc7ae7d238b 100644
--- a/lib/config/migration.spec.ts
+++ b/lib/config/migration.spec.ts
@@ -1,3 +1,4 @@
+import { getName } from '../../test/util';
 import { PLATFORM_TYPE_GITHUB } from '../constants/platforms';
 import { getConfig } from './defaults';
 import * as configMigration from './migration';
@@ -10,7 +11,7 @@ interface RenovateConfig extends _RenovateConfig {
   node?: RenovateSharedConfig & { supportPolicy?: unknown };
 }
 
-describe('config/migration', () => {
+describe(getName(__filename), () => {
   describe('migrateConfig(config, parentConfig)', () => {
     it('migrates config', () => {
       const config: RenovateConfig = {
diff --git a/lib/config/presets/__snapshots__/index.spec.ts.snap b/lib/config/presets/__snapshots__/index.spec.ts.snap
index 1b661e5c0030acdf0446a931da6c020a57ee5778..013755592929276a6bad83a7423465617213c55d 100644
--- a/lib/config/presets/__snapshots__/index.spec.ts.snap
+++ b/lib/config/presets/__snapshots__/index.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`config/presets getPreset gets linters 1`] = `
+exports[`config/presets/index getPreset gets linters 1`] = `
 Object {
   "description": Array [
     "All lint-related packages",
@@ -17,7 +17,7 @@ Object {
 }
 `;
 
-exports[`config/presets getPreset gets parameterised configs 1`] = `
+exports[`config/presets/index getPreset gets parameterised configs 1`] = `
 Object {
   "description": Array [
     "Group eslint packages into same branch/PR",
@@ -33,13 +33,13 @@ Object {
 }
 `;
 
-exports[`config/presets getPreset handles 404 packages 1`] = `undefined`;
+exports[`config/presets/index getPreset handles 404 packages 1`] = `undefined`;
 
-exports[`config/presets getPreset handles 404 packages 2`] = `undefined`;
+exports[`config/presets/index getPreset handles 404 packages 2`] = `undefined`;
 
-exports[`config/presets getPreset handles 404 packages 3`] = `undefined`;
+exports[`config/presets/index getPreset handles 404 packages 3`] = `undefined`;
 
-exports[`config/presets getPreset handles missing params 1`] = `
+exports[`config/presets/index getPreset handles missing params 1`] = `
 Object {
   "description": Array [
     "Group {{arg1}} packages into same branch/PR",
@@ -55,25 +55,25 @@ Object {
 }
 `;
 
-exports[`config/presets getPreset handles no config 1`] = `undefined`;
+exports[`config/presets/index getPreset handles no config 1`] = `undefined`;
 
-exports[`config/presets getPreset handles no config 2`] = `undefined`;
+exports[`config/presets/index getPreset handles no config 2`] = `undefined`;
 
-exports[`config/presets getPreset handles no config 3`] = `undefined`;
+exports[`config/presets/index getPreset handles no config 3`] = `undefined`;
 
-exports[`config/presets getPreset handles preset not found 1`] = `undefined`;
+exports[`config/presets/index getPreset handles preset not found 1`] = `undefined`;
 
-exports[`config/presets getPreset handles preset not found 2`] = `undefined`;
+exports[`config/presets/index getPreset handles preset not found 2`] = `undefined`;
 
-exports[`config/presets getPreset handles preset not found 3`] = `undefined`;
+exports[`config/presets/index getPreset handles preset not found 3`] = `undefined`;
 
-exports[`config/presets getPreset handles throw errors 1`] = `undefined`;
+exports[`config/presets/index getPreset handles throw errors 1`] = `undefined`;
 
-exports[`config/presets getPreset handles throw errors 2`] = `undefined`;
+exports[`config/presets/index getPreset handles throw errors 2`] = `undefined`;
 
-exports[`config/presets getPreset handles throw errors 3`] = `undefined`;
+exports[`config/presets/index getPreset handles throw errors 3`] = `undefined`;
 
-exports[`config/presets getPreset ignores irrelevant params 1`] = `
+exports[`config/presets/index getPreset ignores irrelevant params 1`] = `
 Object {
   "description": Array [
     "Use version pinning (maintain a single version only and not semver ranges)",
@@ -82,7 +82,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses gitea 1`] = `
+exports[`config/presets/index parsePreset parses gitea 1`] = `
 Object {
   "packageName": "some/repo",
   "params": undefined,
@@ -92,7 +92,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses github 1`] = `
+exports[`config/presets/index parsePreset parses github 1`] = `
 Object {
   "packageName": "some/repo",
   "params": undefined,
@@ -102,7 +102,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses github subdirectories 1`] = `
+exports[`config/presets/index parsePreset parses github subdirectories 1`] = `
 Object {
   "packageName": "some/repo",
   "params": undefined,
@@ -112,7 +112,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses github subfiles 1`] = `
+exports[`config/presets/index parsePreset parses github subfiles 1`] = `
 Object {
   "packageName": "some/repo",
   "params": undefined,
@@ -122,7 +122,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses github subfiles with preset and sub-preset name 1`] = `
+exports[`config/presets/index parsePreset parses github subfiles with preset and sub-preset name 1`] = `
 Object {
   "packageName": "some/repo",
   "params": undefined,
@@ -132,7 +132,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses github subfiles with preset name 1`] = `
+exports[`config/presets/index parsePreset parses github subfiles with preset name 1`] = `
 Object {
   "packageName": "some/repo",
   "params": undefined,
@@ -142,7 +142,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses github toplevel file using subdirectory syntax 1`] = `
+exports[`config/presets/index parsePreset parses github toplevel file using subdirectory syntax 1`] = `
 Object {
   "packageName": "some/repo",
   "params": undefined,
@@ -152,7 +152,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses gitlab 1`] = `
+exports[`config/presets/index parsePreset parses gitlab 1`] = `
 Object {
   "packageName": "some/repo",
   "params": undefined,
@@ -162,7 +162,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses local 1`] = `
+exports[`config/presets/index parsePreset parses local 1`] = `
 Object {
   "packageName": "some/repo",
   "params": undefined,
@@ -172,7 +172,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses local with subdirectory 1`] = `
+exports[`config/presets/index parsePreset parses local with subdirectory 1`] = `
 Object {
   "packageName": "some-group/some-repo",
   "params": undefined,
@@ -182,7 +182,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset parses no prefix as local 1`] = `
+exports[`config/presets/index parsePreset parses no prefix as local 1`] = `
 Object {
   "packageName": "some/repo",
   "params": undefined,
@@ -192,7 +192,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns default package name 1`] = `
+exports[`config/presets/index parsePreset returns default package name 1`] = `
 Object {
   "packageName": "default",
   "params": undefined,
@@ -202,7 +202,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns default package name with params 1`] = `
+exports[`config/presets/index parsePreset returns default package name with params 1`] = `
 Object {
   "packageName": "default",
   "params": Array [
@@ -215,7 +215,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns non-scoped default 1`] = `
+exports[`config/presets/index parsePreset returns non-scoped default 1`] = `
 Object {
   "packageName": "renovate-config-somepackage",
   "params": undefined,
@@ -225,7 +225,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns non-scoped package name 1`] = `
+exports[`config/presets/index parsePreset returns non-scoped package name 1`] = `
 Object {
   "packageName": "renovate-config-somepackage",
   "params": undefined,
@@ -235,7 +235,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns non-scoped package name full 1`] = `
+exports[`config/presets/index parsePreset returns non-scoped package name full 1`] = `
 Object {
   "packageName": "renovate-config-somepackage",
   "params": undefined,
@@ -245,7 +245,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns non-scoped package name with params 1`] = `
+exports[`config/presets/index parsePreset returns non-scoped package name with params 1`] = `
 Object {
   "packageName": "renovate-config-somepackage",
   "params": Array [
@@ -257,7 +257,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns scope with packageName and default 1`] = `
+exports[`config/presets/index parsePreset returns scope with packageName and default 1`] = `
 Object {
   "packageName": "@somescope/somepackagename",
   "params": undefined,
@@ -267,7 +267,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns scope with packageName and params and default 1`] = `
+exports[`config/presets/index parsePreset returns scope with packageName and params and default 1`] = `
 Object {
   "packageName": "@somescope/somepackagename",
   "params": Array [
@@ -281,7 +281,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns scope with packageName and presetName 1`] = `
+exports[`config/presets/index parsePreset returns scope with packageName and presetName 1`] = `
 Object {
   "packageName": "@somescope/somepackagename",
   "params": undefined,
@@ -291,7 +291,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns scope with packageName and presetName and params 1`] = `
+exports[`config/presets/index parsePreset returns scope with packageName and presetName and params 1`] = `
 Object {
   "packageName": "@somescope/somepackagename",
   "params": Array [
@@ -304,7 +304,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns scope with presetName 1`] = `
+exports[`config/presets/index parsePreset returns scope with presetName 1`] = `
 Object {
   "packageName": "@somescope/renovate-config",
   "params": undefined,
@@ -314,7 +314,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns scope with presetName and params 1`] = `
+exports[`config/presets/index parsePreset returns scope with presetName and params 1`] = `
 Object {
   "packageName": "@somescope/renovate-config",
   "params": Array [
@@ -326,7 +326,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns simple scope 1`] = `
+exports[`config/presets/index parsePreset returns simple scope 1`] = `
 Object {
   "packageName": "@somescope/renovate-config",
   "params": undefined,
@@ -336,7 +336,7 @@ Object {
 }
 `;
 
-exports[`config/presets parsePreset returns simple scope and params 1`] = `
+exports[`config/presets/index parsePreset returns simple scope and params 1`] = `
 Object {
   "packageName": "@somescope/renovate-config",
   "params": Array [
@@ -348,9 +348,9 @@ Object {
 }
 `;
 
-exports[`config/presets replaceArgs replaces args in strings 1`] = `"c foo ab"`;
+exports[`config/presets/index replaceArgs replaces args in strings 1`] = `"c foo ab"`;
 
-exports[`config/presets replaceArgs replaces arrays 1`] = `
+exports[`config/presets/index replaceArgs replaces arrays 1`] = `
 Object {
   "foo": Array [
     "a",
@@ -362,7 +362,7 @@ Object {
 }
 `;
 
-exports[`config/presets replaceArgs replaces objects 1`] = `
+exports[`config/presets/index replaceArgs replaces objects 1`] = `
 Object {
   "bar": Object {
     "aaa": Object {
@@ -374,7 +374,7 @@ Object {
 }
 `;
 
-exports[`config/presets resolvePreset combines two package alls 1`] = `
+exports[`config/presets/index resolvePreset combines two package alls 1`] = `
 Object {
   "matchPackageNames": Array [
     "babel-eslint",
@@ -387,9 +387,9 @@ Object {
 }
 `;
 
-exports[`config/presets resolvePreset ignores presets 1`] = `Object {}`;
+exports[`config/presets/index resolvePreset ignores presets 1`] = `Object {}`;
 
-exports[`config/presets resolvePreset migrates automerge in presets 1`] = `
+exports[`config/presets/index resolvePreset migrates automerge in presets 1`] = `
 Object {
   "automergeType": "pr",
   "branchPrefix": "renovate/",
@@ -463,7 +463,7 @@ Object {
 }
 `;
 
-exports[`config/presets resolvePreset resolves eslint 1`] = `
+exports[`config/presets/index resolvePreset resolves eslint 1`] = `
 Object {
   "matchPackageNames": Array [
     "babel-eslint",
@@ -475,7 +475,7 @@ Object {
 }
 `;
 
-exports[`config/presets resolvePreset resolves linters 1`] = `
+exports[`config/presets/index resolvePreset resolves linters 1`] = `
 Object {
   "description": Array [
     "All lint-related packages",
@@ -497,7 +497,7 @@ Object {
 }
 `;
 
-exports[`config/presets resolvePreset resolves nested groups 1`] = `
+exports[`config/presets/index resolvePreset resolves nested groups 1`] = `
 Object {
   "description": Array [
     "Update lint packages automatically if tests pass",
@@ -527,7 +527,7 @@ Object {
 }
 `;
 
-exports[`config/presets resolvePreset resolves packageRule 1`] = `
+exports[`config/presets/index resolvePreset resolves packageRule 1`] = `
 Object {
   "packageRules": Array [
     Object {
@@ -544,7 +544,7 @@ Object {
 }
 `;
 
-exports[`config/presets resolvePreset resolves self-hosted presets without baseConfig 1`] = `
+exports[`config/presets/index resolvePreset resolves self-hosted presets without baseConfig 1`] = `
 Object {
   "labels": Array [
     "self-hosted resolved",
@@ -552,55 +552,55 @@ Object {
 }
 `;
 
-exports[`config/presets resolvePreset returns same if no presets 1`] = `
+exports[`config/presets/index resolvePreset returns same if no presets 1`] = `
 Object {
   "foo": 1,
 }
 `;
 
-exports[`config/presets resolvePreset throws if invalid preset 1`] = `undefined`;
+exports[`config/presets/index resolvePreset throws if invalid preset 1`] = `undefined`;
 
-exports[`config/presets resolvePreset throws if invalid preset 2`] = `"Preset name not found within published preset config (wrongpreset:invalid-preset)"`;
+exports[`config/presets/index resolvePreset throws if invalid preset 2`] = `"Preset name not found within published preset config (wrongpreset:invalid-preset)"`;
 
-exports[`config/presets resolvePreset throws if invalid preset 3`] = `undefined`;
+exports[`config/presets/index resolvePreset throws if invalid preset 3`] = `undefined`;
 
-exports[`config/presets resolvePreset throws if invalid preset file 1`] = `undefined`;
+exports[`config/presets/index resolvePreset throws if invalid preset file 1`] = `undefined`;
 
-exports[`config/presets resolvePreset throws if invalid preset file 2`] = `"Cannot find preset's package (notfound)"`;
+exports[`config/presets/index resolvePreset throws if invalid preset file 2`] = `"Cannot find preset's package (notfound)"`;
 
-exports[`config/presets resolvePreset throws if invalid preset file 3`] = `undefined`;
+exports[`config/presets/index resolvePreset throws if invalid preset file 3`] = `undefined`;
 
-exports[`config/presets resolvePreset throws if path + invalid syntax 1`] = `undefined`;
+exports[`config/presets/index resolvePreset throws if path + invalid syntax 1`] = `undefined`;
 
-exports[`config/presets resolvePreset throws if path + invalid syntax 2`] = `"Preset is invalid (github>user/repo//)"`;
+exports[`config/presets/index resolvePreset throws if path + invalid syntax 2`] = `"Preset is invalid (github>user/repo//)"`;
 
-exports[`config/presets resolvePreset throws if path + invalid syntax 3`] = `undefined`;
+exports[`config/presets/index resolvePreset throws if path + invalid syntax 3`] = `undefined`;
 
-exports[`config/presets resolvePreset throws if path + sub-preset 1`] = `undefined`;
+exports[`config/presets/index resolvePreset throws if path + sub-preset 1`] = `undefined`;
 
-exports[`config/presets resolvePreset throws if path + sub-preset 2`] = `"Sub-presets cannot be combined with a custom path (github>user/repo//path:subpreset)"`;
+exports[`config/presets/index resolvePreset throws if path + sub-preset 2`] = `"Sub-presets cannot be combined with a custom path (github>user/repo//path:subpreset)"`;
 
-exports[`config/presets resolvePreset throws if path + sub-preset 3`] = `undefined`;
+exports[`config/presets/index resolvePreset throws if path + sub-preset 3`] = `undefined`;
 
-exports[`config/presets resolvePreset throws if valid and invalid 1`] = `undefined`;
+exports[`config/presets/index resolvePreset throws if valid and invalid 1`] = `undefined`;
 
-exports[`config/presets resolvePreset throws if valid and invalid 2`] = `"Preset name not found within published preset config (wrongpreset:invalid-preset)"`;
+exports[`config/presets/index resolvePreset throws if valid and invalid 2`] = `"Preset name not found within published preset config (wrongpreset:invalid-preset)"`;
 
-exports[`config/presets resolvePreset throws if valid and invalid 3`] = `undefined`;
+exports[`config/presets/index resolvePreset throws if valid and invalid 3`] = `undefined`;
 
-exports[`config/presets resolvePreset throws noconfig 1`] = `undefined`;
+exports[`config/presets/index resolvePreset throws noconfig 1`] = `undefined`;
 
-exports[`config/presets resolvePreset throws noconfig 2`] = `"Preset package is missing a renovate-config entry (noconfig:base)"`;
+exports[`config/presets/index resolvePreset throws noconfig 2`] = `"Preset package is missing a renovate-config entry (noconfig:base)"`;
 
-exports[`config/presets resolvePreset throws noconfig 3`] = `undefined`;
+exports[`config/presets/index resolvePreset throws noconfig 3`] = `undefined`;
 
-exports[`config/presets resolvePreset throws throw 1`] = `undefined`;
+exports[`config/presets/index resolvePreset throws throw 1`] = `undefined`;
 
-exports[`config/presets resolvePreset throws throw 2`] = `undefined`;
+exports[`config/presets/index resolvePreset throws throw 2`] = `undefined`;
 
-exports[`config/presets resolvePreset throws throw 3`] = `undefined`;
+exports[`config/presets/index resolvePreset throws throw 3`] = `undefined`;
 
-exports[`config/presets resolvePreset works with valid 1`] = `
+exports[`config/presets/index resolvePreset works with valid 1`] = `
 Object {
   "foo": 1,
   "ignoreDeps": Array [],
diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts
index 42e573920ae9032cebdd3f36dc20f879593ba0f4..4b829c7ed6d8a4137b50dc3041f5f96848a015b6 100644
--- a/lib/config/presets/index.spec.ts
+++ b/lib/config/presets/index.spec.ts
@@ -1,5 +1,5 @@
 import { RenovateConfig } from '..';
-import { mocked } from '../../../test/util';
+import { getName, mocked } from '../../../test/util';
 import presetIkatyang from './__fixtures__/renovate-config-ikatyang.json';
 import * as _local from './local';
 import * as _npm from './npm';
@@ -33,7 +33,7 @@ npm.getPreset = jest.fn(({ packageName, presetName }) => {
   return null;
 });
 
-describe('config/presets', () => {
+describe(getName(__filename), () => {
   describe('resolvePreset', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/config/presets/internal/index.spec.ts b/lib/config/presets/internal/index.spec.ts
index dc56f96a4bb8c6c2532f3ff3b4586f076e5177bc..b58b51b3a1822ddc8a7d6d61c6d6b5d4cc7e1b45 100644
--- a/lib/config/presets/internal/index.spec.ts
+++ b/lib/config/presets/internal/index.spec.ts
@@ -1,4 +1,4 @@
-import { mocked } from '../../../../test/util';
+import { getName, mocked } from '../../../../test/util';
 import { CONFIG_VALIDATION } from '../../../constants/error-messages';
 import { massageConfig } from '../../massage';
 import { validateConfig } from '../../validation';
@@ -14,7 +14,7 @@ npm.getPreset = jest.fn((_) => null);
 
 const ignoredPresets = ['default:group', 'default:timezone'];
 
-describe('config/presets/internal', () => {
+describe(getName(__filename), () => {
   it('fails for undefined internal preset', async () => {
     const preset = 'foo:bar';
     const presetConfig = { extends: [preset] };
diff --git a/lib/config/presets/npm/__snapshots__/index.spec.ts.snap b/lib/config/presets/npm/__snapshots__/index.spec.ts.snap
index eb67bf320a745a276b4064596c08e889f2ef8751..b4544d12eb27fd493faae5bf0d40887105957f72 100644
--- a/lib/config/presets/npm/__snapshots__/index.spec.ts.snap
+++ b/lib/config/presets/npm/__snapshots__/index.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`config/presets/npm should return preset 1`] = `
+exports[`config/presets/npm/index should return preset 1`] = `
 Object {
   "rangeStrategy": "auto",
 }
diff --git a/lib/config/presets/npm/index.spec.ts b/lib/config/presets/npm/index.spec.ts
index 8cd3601638dd68ad7995809eec74f9a9e6d00b02..931ae3d39d6c600c75c7afc679d3e99c607e6be5 100644
--- a/lib/config/presets/npm/index.spec.ts
+++ b/lib/config/presets/npm/index.spec.ts
@@ -1,11 +1,12 @@
 import nock from 'nock';
+import { getName } from '../../../../test/util';
 import { setAdminConfig } from '../../admin';
 import * as npm from '.';
 
 jest.mock('registry-auth-token');
 jest.mock('delay');
 
-describe('config/presets/npm', () => {
+describe(getName(__filename), () => {
   delete process.env.NPM_TOKEN;
   beforeEach(() => {
     jest.resetAllMocks();
diff --git a/lib/config/validation.spec.ts b/lib/config/validation.spec.ts
index b7a3aa8ae7deb6382652dd7c2c5762a9e68f3d7e..a8ddf051b3fa4320effcd55047d5c9c5b0de51a6 100644
--- a/lib/config/validation.spec.ts
+++ b/lib/config/validation.spec.ts
@@ -1,7 +1,8 @@
+import { getName } from '../../test/util';
 import * as configValidation from './validation';
 import { RenovateConfig } from '.';
 
-describe('config/validation', () => {
+describe(getName(__filename), () => {
   describe('getParentName()', () => {
     it('ignores encrypted in root', () => {
       expect(configValidation.getParentName('encrypted')).toEqual('');
diff --git a/lib/logger/config-serializer.spec.ts b/lib/logger/config-serializer.spec.ts
index d3079b2b5de76b8a697be5b845eb66dc603b14e0..35472ec7700708ac52b9ffd6391458748b250598 100644
--- a/lib/logger/config-serializer.spec.ts
+++ b/lib/logger/config-serializer.spec.ts
@@ -1,6 +1,7 @@
+import { getName } from '../../test/util';
 import configSerializer from './config-serializer';
 
-describe('logger/config-serializer', () => {
+describe(getName(__filename), () => {
   it('squashes templates', () => {
     const config = {
       nottoken: 'b',
diff --git a/lib/logger/err-serializer.spec.ts b/lib/logger/err-serializer.spec.ts
index 2e1ed2a052339d2e1287f2d93fba1f8cbfdab965..bc9e775c3a33a3a29ee2d1e01bae95c9e928acb5 100644
--- a/lib/logger/err-serializer.spec.ts
+++ b/lib/logger/err-serializer.spec.ts
@@ -1,11 +1,11 @@
 import * as httpMock from '../../test/http-mock';
-import { partial } from '../../test/util';
+import { getName, partial } from '../../test/util';
 import * as hostRules from '../util/host-rules';
 import { Http } from '../util/http';
 import errSerializer from './err-serializer';
 import { sanitizeValue } from './utils';
 
-describe('logger/err-serializer', () => {
+describe(getName(__filename), () => {
   it('expands errors', () => {
     const err = partial<Error & Record<string, unknown>>({
       a: 1,
diff --git a/lib/logger/pretty-stdout.spec.ts b/lib/logger/pretty-stdout.spec.ts
index bf335f5686d09e5896e3dd43b0ce63195f3a02c7..21a48e4809093032188a230b22c8b77593b9b08c 100644
--- a/lib/logger/pretty-stdout.spec.ts
+++ b/lib/logger/pretty-stdout.spec.ts
@@ -1,4 +1,5 @@
 import chalk from 'chalk';
+import { getName } from '../../test/util';
 import * as prettyStdout from './pretty-stdout';
 import type { BunyanRecord } from './utils';
 
@@ -9,7 +10,7 @@ jest.mock('chalk', () =>
   )
 );
 
-describe('logger/pretty-stdout', () => {
+describe(getName(__filename), () => {
   describe('getMeta(rec)', () => {
     it('returns empty string if null rec', () => {
       expect(prettyStdout.getMeta(null as any)).toEqual('');
diff --git a/lib/platform/azure/__snapshots__/azure-helper.spec.ts.snap b/lib/platform/azure/__snapshots__/azure-helper.spec.ts.snap
index 86f7b3e499e3f04222785f40490a0a646e287cf1..2cc4a32e24ddf113518dc60a973a7fa351cf60ac 100644
--- a/lib/platform/azure/__snapshots__/azure-helper.spec.ts.snap
+++ b/lib/platform/azure/__snapshots__/azure-helper.spec.ts.snap
@@ -1,20 +1,20 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`platform/azure/helpers getAzureBranchObj should get the branch object 1`] = `
+exports[`platform/azure/azure-helper getAzureBranchObj should get the branch object 1`] = `
 Object {
   "name": "refs/heads/branchName",
   "oldObjectId": "132",
 }
 `;
 
-exports[`platform/azure/helpers getAzureBranchObj should get the branch object when ref missing 1`] = `
+exports[`platform/azure/azure-helper getAzureBranchObj should get the branch object when ref missing 1`] = `
 Object {
   "name": "refs/heads/branchName",
   "oldObjectId": "0000000000000000000000000000000000000000",
 }
 `;
 
-exports[`platform/azure/helpers getCommitDetails should get commit details 1`] = `
+exports[`platform/azure/azure-helper getCommitDetails should get commit details 1`] = `
 Object {
   "parents": Array [
     "123456",
@@ -22,9 +22,9 @@ Object {
 }
 `;
 
-exports[`platform/azure/helpers getFile should return the file content because it is not a json 1`] = `"{\\"hello\\"= \\"test\\"}"`;
+exports[`platform/azure/azure-helper getFile should return the file content because it is not a json 1`] = `"{\\"hello\\"= \\"test\\"}"`;
 
-exports[`platform/azure/helpers getRef should get the ref with full ref name 1`] = `
+exports[`platform/azure/azure-helper getRef should get the ref with full ref name 1`] = `
 Array [
   Object {
     "objectId": "132",
@@ -32,7 +32,7 @@ Array [
 ]
 `;
 
-exports[`platform/azure/helpers getRef should get the ref with short ref name 1`] = `
+exports[`platform/azure/azure-helper getRef should get the ref with short ref name 1`] = `
 Array [
   Object {
     "objectId": 132,
diff --git a/lib/platform/azure/__snapshots__/index.spec.ts.snap b/lib/platform/azure/__snapshots__/index.spec.ts.snap
index f086e94fa491ae20f1ddc8c5fa46f28c5771f2d9..8616755105d0be9855cb2618024457a53e2ca174 100644
--- a/lib/platform/azure/__snapshots__/index.spec.ts.snap
+++ b/lib/platform/azure/__snapshots__/index.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`platform/azure createPr() should create and return a PR object 1`] = `
+exports[`platform/azure/index createPr() should create and return a PR object 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -14,7 +14,7 @@ Object {
 }
 `;
 
-exports[`platform/azure createPr() should create and return a PR object from base branch 1`] = `
+exports[`platform/azure/index createPr() should create and return a PR object from base branch 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -28,7 +28,7 @@ Object {
 }
 `;
 
-exports[`platform/azure createPr() should create and return a PR object with auto-complete set 1`] = `
+exports[`platform/azure/index createPr() should create and return a PR object with auto-complete set 1`] = `
 Object {
   "autoCompleteSetBy": Object {
     "id": 123,
@@ -52,14 +52,14 @@ Object {
 }
 `;
 
-exports[`platform/azure deleteLabel() Should delete a label 1`] = `
+exports[`platform/azure/index deleteLabel() Should delete a label 1`] = `
 Array [
   Array [],
   Array [],
 ]
 `;
 
-exports[`platform/azure ensureComment adds comment if missing 1`] = `
+exports[`platform/azure/index ensureComment adds comment if missing 1`] = `
 Array [
   Array [
     Object {
@@ -81,19 +81,19 @@ content",
 ]
 `;
 
-exports[`platform/azure ensureComment adds comment if missing 2`] = `Array []`;
+exports[`platform/azure/index ensureComment adds comment if missing 2`] = `Array []`;
 
-exports[`platform/azure ensureComment does nothing if comment exists and is the same 1`] = `Array []`;
+exports[`platform/azure/index ensureComment does nothing if comment exists and is the same 1`] = `Array []`;
 
-exports[`platform/azure ensureComment does nothing if comment exists and is the same 2`] = `Array []`;
+exports[`platform/azure/index ensureComment does nothing if comment exists and is the same 2`] = `Array []`;
 
-exports[`platform/azure ensureComment does nothing if comment exists and is the same when there is no topic 1`] = `Array []`;
+exports[`platform/azure/index ensureComment does nothing if comment exists and is the same when there is no topic 1`] = `Array []`;
 
-exports[`platform/azure ensureComment does nothing if comment exists and is the same when there is no topic 2`] = `Array []`;
+exports[`platform/azure/index ensureComment does nothing if comment exists and is the same when there is no topic 2`] = `Array []`;
 
-exports[`platform/azure ensureComment updates comment if missing 1`] = `Array []`;
+exports[`platform/azure/index ensureComment updates comment if missing 1`] = `Array []`;
 
-exports[`platform/azure ensureComment updates comment if missing 2`] = `
+exports[`platform/azure/index ensureComment updates comment if missing 2`] = `
 Array [
   Array [
     Object {
@@ -111,7 +111,7 @@ content",
 ]
 `;
 
-exports[`platform/azure findPr(branchName, prTitle, state) returns pr if found it all state 1`] = `
+exports[`platform/azure/index findPr(branchName, prTitle, state) returns pr if found it all state 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -128,7 +128,7 @@ Object {
 }
 `;
 
-exports[`platform/azure findPr(branchName, prTitle, state) returns pr if found it close 1`] = `
+exports[`platform/azure/index findPr(branchName, prTitle, state) returns pr if found it close 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -145,7 +145,7 @@ Object {
 }
 `;
 
-exports[`platform/azure findPr(branchName, prTitle, state) returns pr if found it open 1`] = `
+exports[`platform/azure/index findPr(branchName, prTitle, state) returns pr if found it open 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -162,7 +162,7 @@ Object {
 }
 `;
 
-exports[`platform/azure findPr(branchName, prTitle, state) returns pr if found not open 1`] = `
+exports[`platform/azure/index findPr(branchName, prTitle, state) returns pr if found not open 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -179,9 +179,9 @@ Object {
 }
 `;
 
-exports[`platform/azure getBranchPr(branchName) should return the pr 1`] = `null`;
+exports[`platform/azure/index getBranchPr(branchName) should return the pr 1`] = `null`;
 
-exports[`platform/azure getJsonFile() supports fetch from another repo 1`] = `
+exports[`platform/azure/index getJsonFile() supports fetch from another repo 1`] = `
 Array [
   Array [
     "123456",
@@ -190,7 +190,7 @@ Array [
 ]
 `;
 
-exports[`platform/azure getPr(prNo) should return a pr in the right format 1`] = `
+exports[`platform/azure/index getPr(prNo) should return a pr in the right format 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -208,41 +208,41 @@ Object {
 }
 `;
 
-exports[`platform/azure getRepos() should return an array of repos 1`] = `
+exports[`platform/azure/index getRepos() should return an array of repos 1`] = `
 Array [
   Array [],
 ]
 `;
 
-exports[`platform/azure getRepos() should return an array of repos 2`] = `
+exports[`platform/azure/index getRepos() should return an array of repos 2`] = `
 Array [
   "prj1/repo1",
   "prj1/repo2",
 ]
 `;
 
-exports[`platform/azure initPlatform() should init 1`] = `
+exports[`platform/azure/index initPlatform() should init 1`] = `
 Object {
   "endpoint": "https://dev.azure.com/renovate12345/",
 }
 `;
 
-exports[`platform/azure initRepo should initialise the config for a repo 1`] = `
+exports[`platform/azure/index initRepo should initialise the config for a repo 1`] = `
 Array [
   Array [],
 ]
 `;
 
-exports[`platform/azure initRepo should initialise the config for a repo 2`] = `
+exports[`platform/azure/index initRepo should initialise the config for a repo 2`] = `
 Object {
   "defaultBranch": "defBr",
   "isFork": false,
 }
 `;
 
-exports[`platform/azure massageMarkdown(input) returns updated pr body 1`] = `"https://github.com/foo/bar/issues/5 plus also [a link](https://github.com/foo/bar/issues/5)"`;
+exports[`platform/azure/index massageMarkdown(input) returns updated pr body 1`] = `"https://github.com/foo/bar/issues/5 plus also [a link](https://github.com/foo/bar/issues/5)"`;
 
-exports[`platform/azure updatePr(prNo, title, body) should close the PR 1`] = `
+exports[`platform/azure/index updatePr(prNo, title, body) should close the PR 1`] = `
 Array [
   Array [
     Object {
@@ -256,7 +256,7 @@ Array [
 ]
 `;
 
-exports[`platform/azure updatePr(prNo, title, body) should reopen the PR 1`] = `
+exports[`platform/azure/index updatePr(prNo, title, body) should reopen the PR 1`] = `
 Array [
   Array [
     Object {
@@ -276,7 +276,7 @@ Array [
 ]
 `;
 
-exports[`platform/azure updatePr(prNo, title, body) should update the PR 1`] = `
+exports[`platform/azure/index updatePr(prNo, title, body) should update the PR 1`] = `
 Array [
   Array [
     Object {
@@ -289,7 +289,7 @@ Array [
 ]
 `;
 
-exports[`platform/azure updatePr(prNo, title, body) should update the PR without description 1`] = `
+exports[`platform/azure/index updatePr(prNo, title, body) should update the PR without description 1`] = `
 Array [
   Array [
     Object {
diff --git a/lib/platform/azure/__snapshots__/util.spec.ts.snap b/lib/platform/azure/__snapshots__/util.spec.ts.snap
index fbee39390726d970fd860ed95758bb7b480693fb..0e46c62728147133cd034db4faee262205b22e40 100644
--- a/lib/platform/azure/__snapshots__/util.spec.ts.snap
+++ b/lib/platform/azure/__snapshots__/util.spec.ts.snap
@@ -1,20 +1,20 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`platform/azure/helpers getProjectAndRepo should return the object with project and repo 1`] = `
+exports[`platform/azure/util getProjectAndRepo should return the object with project and repo 1`] = `
 Object {
   "project": "prjName",
   "repo": "myRepoName",
 }
 `;
 
-exports[`platform/azure/helpers getProjectAndRepo should return the object with same strings 1`] = `
+exports[`platform/azure/util getProjectAndRepo should return the object with same strings 1`] = `
 Object {
   "project": "myRepoName",
   "repo": "myRepoName",
 }
 `;
 
-exports[`platform/azure/helpers getRenovatePRFormat should be formated (closed v2) 1`] = `
+exports[`platform/azure/util getRenovatePRFormat should be formated (closed v2) 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -28,7 +28,7 @@ Object {
 }
 `;
 
-exports[`platform/azure/helpers getRenovatePRFormat should be formated (closed) 1`] = `
+exports[`platform/azure/util getRenovatePRFormat should be formated (closed) 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -42,7 +42,7 @@ Object {
 }
 `;
 
-exports[`platform/azure/helpers getRenovatePRFormat should be formated (isConflicted) 1`] = `
+exports[`platform/azure/util getRenovatePRFormat should be formated (isConflicted) 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -57,7 +57,7 @@ Object {
 }
 `;
 
-exports[`platform/azure/helpers getRenovatePRFormat should be formated (not closed) 1`] = `
+exports[`platform/azure/util getRenovatePRFormat should be formated (not closed) 1`] = `
 Object {
   "body": undefined,
   "createdAt": undefined,
@@ -71,22 +71,22 @@ Object {
 }
 `;
 
-exports[`platform/azure/helpers getStorageExtraCloneOpts should configure basic auth 1`] = `
+exports[`platform/azure/util getStorageExtraCloneOpts should configure basic auth 1`] = `
 Object {
   "-c": "http.extraheader=AUTHORIZATION: basic dXNlcjpwYXNz",
 }
 `;
 
-exports[`platform/azure/helpers getStorageExtraCloneOpts should configure bearer token 1`] = `
+exports[`platform/azure/util getStorageExtraCloneOpts should configure bearer token 1`] = `
 Object {
   "-c": "http.extraheader=AUTHORIZATION: bearer token",
 }
 `;
 
-exports[`platform/azure/helpers getStorageExtraCloneOpts should configure personal access token 1`] = `
+exports[`platform/azure/util getStorageExtraCloneOpts should configure personal access token 1`] = `
 Object {
   "-c": "http.extraheader=AUTHORIZATION: basic OjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=",
 }
 `;
 
-exports[`platform/azure/helpers max4000Chars should be the same 1`] = `"Hello"`;
+exports[`platform/azure/util max4000Chars should be the same 1`] = `"Hello"`;
diff --git a/lib/platform/azure/azure-got-wrapper.spec.ts b/lib/platform/azure/azure-got-wrapper.spec.ts
index 79d88828d74ee56b199b1ef65cb1fbe40804deac..e00051becae07e6b7b2eb7bbc3cfd39653ee730a 100644
--- a/lib/platform/azure/azure-got-wrapper.spec.ts
+++ b/lib/platform/azure/azure-got-wrapper.spec.ts
@@ -1,7 +1,8 @@
+import { getName } from '../../../test/util';
 import { PLATFORM_TYPE_AZURE } from '../../constants/platforms';
 import * as _hostRules from '../../util/host-rules';
 
-describe('platform/azure/azure-got-wrapper', () => {
+describe(getName(__filename), () => {
   let azure: typeof import('./azure-got-wrapper');
   let hostRules: typeof _hostRules;
   beforeEach(() => {
diff --git a/lib/platform/azure/azure-helper.spec.ts b/lib/platform/azure/azure-helper.spec.ts
index e6988efa804597864a4660a69a0046c9ff1fb295..dd6bf34ebd2a6b92c6719688b177cfb409ebfd63 100644
--- a/lib/platform/azure/azure-helper.spec.ts
+++ b/lib/platform/azure/azure-helper.spec.ts
@@ -1,7 +1,8 @@
 import { Readable } from 'stream';
 import { GitPullRequestMergeStrategy } from 'azure-devops-node-api/interfaces/GitInterfaces';
+import { getName } from '../../../test/util';
 
-describe('platform/azure/helpers', () => {
+describe(getName(__filename), () => {
   let azureHelper: typeof import('./azure-helper');
   let azureApi: jest.Mocked<typeof import('./azure-got-wrapper')>;
 
diff --git a/lib/platform/azure/index.spec.ts b/lib/platform/azure/index.spec.ts
index 7c18b91d8087bc667f2f090dada20c10728da024..ce063598ae3991a5192a8172cef1236892ea5215 100644
--- a/lib/platform/azure/index.spec.ts
+++ b/lib/platform/azure/index.spec.ts
@@ -5,13 +5,14 @@ import {
   GitStatusState,
   PullRequestStatus,
 } from 'azure-devops-node-api/interfaces/GitInterfaces';
+import { getName } from '../../../test/util';
 import { logger as _logger } from '../../logger';
 import { BranchStatus, PrState } from '../../types';
 import * as _git from '../../util/git';
 import * as _hostRules from '../../util/host-rules';
 import type { Platform, RepoParams } from '../types';
 
-describe('platform/azure', () => {
+describe(getName(__filename), () => {
   let hostRules: jest.Mocked<typeof _hostRules>;
   let azure: Platform;
   let azureApi: jest.Mocked<typeof import('./azure-got-wrapper')>;
diff --git a/lib/platform/azure/util.spec.ts b/lib/platform/azure/util.spec.ts
index c816ea2229db6d17e5593639e8d8e3af68ae900e..92f1270a1f277255beefb724a91774c1acd7dbae 100644
--- a/lib/platform/azure/util.spec.ts
+++ b/lib/platform/azure/util.spec.ts
@@ -1,4 +1,5 @@
 import { Readable } from 'stream';
+import { getName } from '../../../test/util';
 import {
   getBranchNameWithoutRefsheadsPrefix,
   getGitStatusContextCombinedName,
@@ -12,7 +13,7 @@ import {
   streamToString,
 } from './util';
 
-describe('platform/azure/helpers', () => {
+describe(getName(__filename), () => {
   describe('getNewBranchName', () => {
     it('should add refs/heads', () => {
       const res = getNewBranchName('testBB');
diff --git a/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap b/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap
index c7ee7e74d2f99022709887c45ac9b64393623273..45b8e81ab43814e1a992105ddd64f55b67d88880 100644
--- a/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap
+++ b/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap
@@ -1,8 +1,8 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`platform/bitbucket addAssignees() does not throw 1`] = `undefined`;
+exports[`platform/bitbucket/index addAssignees() does not throw 1`] = `undefined`;
 
-exports[`platform/bitbucket addReviewers should add the given reviewers to the PR 1`] = `
+exports[`platform/bitbucket/index addReviewers should add the given reviewers to the PR 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -53,7 +53,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket createPr() posts PR 1`] = `
+exports[`platform/bitbucket/index createPr() posts PR 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -94,11 +94,11 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket ensureComment() does not throw 1`] = `false`;
+exports[`platform/bitbucket/index ensureComment() does not throw 1`] = `false`;
 
-exports[`platform/bitbucket ensureCommentRemoval() does not throw 1`] = `undefined`;
+exports[`platform/bitbucket/index ensureCommentRemoval() does not throw 1`] = `undefined`;
 
-exports[`platform/bitbucket ensureIssue() creates new issue 1`] = `
+exports[`platform/bitbucket/index ensureIssue() creates new issue 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -150,7 +150,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket ensureIssue() noop for existing issue 1`] = `
+exports[`platform/bitbucket/index ensureIssue() noop for existing issue 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -191,7 +191,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket ensureIssue() updates existing issues 1`] = `
+exports[`platform/bitbucket/index ensureIssue() updates existing issues 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -246,7 +246,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket ensureIssueClosing() closes issue 1`] = `
+exports[`platform/bitbucket/index ensureIssueClosing() closes issue 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -301,7 +301,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket ensureIssueClosing() does not throw 1`] = `
+exports[`platform/bitbucket/index ensureIssueClosing() does not throw 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -317,14 +317,14 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket findIssue() does not throw 1`] = `
+exports[`platform/bitbucket/index findIssue() does not throw 1`] = `
 Object {
   "body": "content",
   "number": 25,
 }
 `;
 
-exports[`platform/bitbucket findIssue() does not throw 2`] = `
+exports[`platform/bitbucket/index findIssue() does not throw 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -351,7 +351,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket findIssue() returns null if no issues 1`] = `
+exports[`platform/bitbucket/index findIssue() returns null if no issues 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -378,7 +378,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket findPr() finds pr 1`] = `
+exports[`platform/bitbucket/index findPr() finds pr 1`] = `
 Object {
   "body": "summary",
   "createdAt": "2018-07-02T07:02:25.275030+00:00",
@@ -390,7 +390,7 @@ Object {
 }
 `;
 
-exports[`platform/bitbucket findPr() finds pr 2`] = `
+exports[`platform/bitbucket/index findPr() finds pr 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -417,7 +417,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchPr() bitbucket finds PR for branch 1`] = `
+exports[`platform/bitbucket/index getBranchPr() bitbucket finds PR for branch 1`] = `
 Object {
   "body": "summary",
   "canMerge": true,
@@ -433,7 +433,7 @@ Object {
 }
 `;
 
-exports[`platform/bitbucket getBranchPr() bitbucket finds PR for branch 2`] = `
+exports[`platform/bitbucket/index getBranchPr() bitbucket finds PR for branch 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -481,7 +481,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchPr() returns null if no PR for branch 1`] = `
+exports[`platform/bitbucket/index getBranchPr() returns null if no PR for branch 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -508,7 +508,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchStatus() getBranchStatus 1 1`] = `
+exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 1 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -524,7 +524,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchStatus() getBranchStatus 2 1`] = `
+exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 2 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -540,7 +540,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchStatus() getBranchStatus 3 1`] = `
+exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 3 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -578,7 +578,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchStatus() getBranchStatus 4 1`] = `
+exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 4 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -616,7 +616,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchStatus() getBranchStatus 5 1`] = `
+exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 5 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -654,7 +654,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchStatus() getBranchStatus 6 1`] = `
+exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 6 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -692,7 +692,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchStatusCheck() getBranchStatusCheck 1 1`] = `
+exports[`platform/bitbucket/index getBranchStatusCheck() getBranchStatusCheck 1 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -730,7 +730,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchStatusCheck() getBranchStatusCheck 2 1`] = `
+exports[`platform/bitbucket/index getBranchStatusCheck() getBranchStatusCheck 2 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -768,7 +768,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getBranchStatusCheck() getBranchStatusCheck 3 1`] = `
+exports[`platform/bitbucket/index getBranchStatusCheck() getBranchStatusCheck 3 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -806,7 +806,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getIssueList() does not throw 1`] = `
+exports[`platform/bitbucket/index getIssueList() does not throw 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -833,7 +833,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getIssueList() get issues 1`] = `
+exports[`platform/bitbucket/index getIssueList() get issues 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -860,7 +860,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getIssueList() get issues 2`] = `
+exports[`platform/bitbucket/index getIssueList() get issues 2`] = `
 Array [
   Object {
     "content": Object {
@@ -879,7 +879,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getIssueList() has no issues 1`] = `
+exports[`platform/bitbucket/index getIssueList() has no issues 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -895,7 +895,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getJsonFile() returns file content 1`] = `
+exports[`platform/bitbucket/index getJsonFile() returns file content 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -921,7 +921,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getJsonFile() throws on errors 1`] = `
+exports[`platform/bitbucket/index getJsonFile() throws on errors 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -947,7 +947,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getJsonFile() throws on malformed JSON 1`] = `
+exports[`platform/bitbucket/index getJsonFile() throws on malformed JSON 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -973,7 +973,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getPr() canRebase 1`] = `
+exports[`platform/bitbucket/index getPr() canRebase 1`] = `
 Object {
   "body": "summary",
   "canMerge": true,
@@ -989,7 +989,7 @@ Object {
 }
 `;
 
-exports[`platform/bitbucket getPr() canRebase 2`] = `
+exports[`platform/bitbucket/index getPr() canRebase 2`] = `
 Object {
   "body": "summary",
   "canMerge": true,
@@ -1005,7 +1005,7 @@ Object {
 }
 `;
 
-exports[`platform/bitbucket getPr() canRebase 3`] = `
+exports[`platform/bitbucket/index getPr() canRebase 3`] = `
 Object {
   "body": "summary",
   "canMerge": true,
@@ -1021,7 +1021,7 @@ Object {
 }
 `;
 
-exports[`platform/bitbucket getPr() canRebase 4`] = `
+exports[`platform/bitbucket/index getPr() canRebase 4`] = `
 Array [
   Object {
     "headers": Object {
@@ -1100,7 +1100,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getPr() exists 1`] = `
+exports[`platform/bitbucket/index getPr() exists 1`] = `
 Object {
   "body": "summary",
   "canMerge": true,
@@ -1116,7 +1116,7 @@ Object {
 }
 `;
 
-exports[`platform/bitbucket getPr() exists 2`] = `
+exports[`platform/bitbucket/index getPr() exists 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1153,7 +1153,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getPrList() filters PR list by author 1`] = `
+exports[`platform/bitbucket/index getPrList() filters PR list by author 1`] = `
 Array [
   Object {
     "body": undefined,
@@ -1167,7 +1167,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getPrList() filters PR list by author 2`] = `
+exports[`platform/bitbucket/index getPrList() filters PR list by author 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1205,7 +1205,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket getRepos() returns repos 1`] = `
+exports[`platform/bitbucket/index getRepos() returns repos 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1221,20 +1221,20 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket initPlatform() should init 1`] = `
+exports[`platform/bitbucket/index initPlatform() should init 1`] = `
 Object {
   "endpoint": "https://api.bitbucket.org/",
 }
 `;
 
-exports[`platform/bitbucket initRepo() works 1`] = `
+exports[`platform/bitbucket/index initRepo() works 1`] = `
 Object {
   "defaultBranch": "master",
   "isFork": false,
 }
 `;
 
-exports[`platform/bitbucket initRepo() works 2`] = `
+exports[`platform/bitbucket/index initRepo() works 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1250,9 +1250,9 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket massageMarkdown() returns diff files 1`] = `"**foo**bartext"`;
+exports[`platform/bitbucket/index massageMarkdown() returns diff files 1`] = `"**foo**bartext"`;
 
-exports[`platform/bitbucket mergePr() posts Merge 1`] = `
+exports[`platform/bitbucket/index mergePr() posts Merge 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1282,7 +1282,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket setBranchStatus() posts status 1`] = `
+exports[`platform/bitbucket/index setBranchStatus() posts status 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1345,7 +1345,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket updatePr() closes PR 1`] = `
+exports[`platform/bitbucket/index updatePr() closes PR 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1397,7 +1397,7 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket updatePr() puts PR 1`] = `
+exports[`platform/bitbucket/index updatePr() puts PR 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1438,9 +1438,9 @@ Array [
 ]
 `;
 
-exports[`platform/bitbucket updatePr() throws an error on failure to get current list of reviewers 1`] = `"Response code 500 (Internal Server Error)"`;
+exports[`platform/bitbucket/index updatePr() throws an error on failure to get current list of reviewers 1`] = `"Response code 500 (Internal Server Error)"`;
 
-exports[`platform/bitbucket updatePr() throws an error on failure to get current list of reviewers 2`] = `
+exports[`platform/bitbucket/index updatePr() throws an error on failure to get current list of reviewers 2`] = `
 Array [
   Object {
     "headers": Object {
diff --git a/lib/platform/bitbucket/index.spec.ts b/lib/platform/bitbucket/index.spec.ts
index 1df73fffd706baaecac0f6d3c615c1406eacf234..068232a2290311d0e9796557908c367c8e458c5c 100644
--- a/lib/platform/bitbucket/index.spec.ts
+++ b/lib/platform/bitbucket/index.spec.ts
@@ -1,5 +1,6 @@
 import nock from 'nock';
 import * as httpMock from '../../../test/http-mock';
+import { getName } from '../../../test/util';
 import { logger as _logger } from '../../logger';
 import { BranchStatus, PrState } from '../../types';
 import * as _git from '../../util/git';
@@ -34,7 +35,7 @@ lxml==3.6.0
 mccabe==0.6.1
 `;
 
-describe('platform/bitbucket', () => {
+describe(getName(__filename), () => {
   let bitbucket: Platform;
   let hostRules: jest.Mocked<typeof import('../../util/host-rules')>;
   let git: jest.Mocked<typeof _git>;
diff --git a/lib/platform/github/__snapshots__/index.spec.ts.snap b/lib/platform/github/__snapshots__/index.spec.ts.snap
index 0e736cb3b322aae11a6c6b2ec623283615780a97..cf435e4afb76a7f21c4bb8c6c175d3db9b8a18e6 100644
--- a/lib/platform/github/__snapshots__/index.spec.ts.snap
+++ b/lib/platform/github/__snapshots__/index.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`platform/github addAssignees(issueNo, assignees) should add the given assignees to the issue 1`] = `
+exports[`platform/github/index addAssignees(issueNo, assignees) should add the given assignees to the issue 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -54,7 +54,7 @@ Array [
 ]
 `;
 
-exports[`platform/github addReviewers(issueNo, reviewers) should add the given reviewers to the PR 1`] = `
+exports[`platform/github/index addReviewers(issueNo, reviewers) should add the given reviewers to the PR 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -108,7 +108,7 @@ Array [
 ]
 `;
 
-exports[`platform/github createPr() should create a draftPR if set in the settings 1`] = `
+exports[`platform/github/index createPr() should create a draftPR if set in the settings 1`] = `
 Object {
   "displayNumber": "Pull Request #123",
   "head": Object {
@@ -122,7 +122,7 @@ Object {
 }
 `;
 
-exports[`platform/github createPr() should create a draftPR if set in the settings 2`] = `
+exports[`platform/github/index createPr() should create a draftPR if set in the settings 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -176,7 +176,7 @@ Array [
 ]
 `;
 
-exports[`platform/github createPr() should create and return a PR object 1`] = `
+exports[`platform/github/index createPr() should create and return a PR object 1`] = `
 Object {
   "displayNumber": "Pull Request #123",
   "head": Object {
@@ -190,7 +190,7 @@ Object {
 }
 `;
 
-exports[`platform/github createPr() should create and return a PR object 2`] = `
+exports[`platform/github/index createPr() should create and return a PR object 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -258,7 +258,7 @@ Array [
 ]
 `;
 
-exports[`platform/github createPr() should use defaultBranch 1`] = `
+exports[`platform/github/index createPr() should use defaultBranch 1`] = `
 Object {
   "displayNumber": "Pull Request #123",
   "head": Object {
@@ -272,7 +272,7 @@ Object {
 }
 `;
 
-exports[`platform/github createPr() should use defaultBranch 2`] = `
+exports[`platform/github/index createPr() should use defaultBranch 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -326,7 +326,7 @@ Array [
 ]
 `;
 
-exports[`platform/github deleteLabel(issueNo, label) should delete the label 1`] = `
+exports[`platform/github/index deleteLabel(issueNo, label) should delete the label 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -377,7 +377,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureComment add comment if not found 1`] = `
+exports[`platform/github/index ensureComment add comment if not found 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -489,7 +489,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureComment add updates comment if necessary 1`] = `
+exports[`platform/github/index ensureComment add updates comment if necessary 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -601,7 +601,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureComment adds comment if found in closed PR list 1`] = `
+exports[`platform/github/index ensureComment adds comment if found in closed PR list 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -702,7 +702,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureComment handles comment with no description 1`] = `
+exports[`platform/github/index ensureComment handles comment with no description 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -800,7 +800,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureComment skips comment 1`] = `
+exports[`platform/github/index ensureComment skips comment 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -898,7 +898,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureCommentRemoval deletes comment by content if found 1`] = `
+exports[`platform/github/index ensureCommentRemoval deletes comment by content if found 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1007,7 +1007,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureCommentRemoval deletes comment by topic if found 1`] = `
+exports[`platform/github/index ensureCommentRemoval deletes comment by topic if found 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1116,7 +1116,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureIssue() closes others if ensuring only once 1`] = `
+exports[`platform/github/index ensureIssue() closes others if ensuring only once 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1170,7 +1170,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureIssue() creates issue 1`] = `
+exports[`platform/github/index ensureIssue() creates issue 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1227,7 +1227,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureIssue() creates issue if not ensuring only once 1`] = `
+exports[`platform/github/index ensureIssue() creates issue if not ensuring only once 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1281,7 +1281,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureIssue() creates issue if reopen flag false and issue is not open 1`] = `
+exports[`platform/github/index ensureIssue() creates issue if reopen flag false and issue is not open 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1349,7 +1349,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureIssue() deletes if duplicate 1`] = `
+exports[`platform/github/index ensureIssue() deletes if duplicate 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1417,7 +1417,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureIssue() does not create issue if ensuring only once 1`] = `
+exports[`platform/github/index ensureIssue() does not create issue if ensuring only once 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1460,7 +1460,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureIssue() does not create issue if reopen flag false and issue is already open 1`] = `
+exports[`platform/github/index ensureIssue() does not create issue if reopen flag false and issue is already open 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1514,7 +1514,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureIssue() skips update if unchanged 1`] = `
+exports[`platform/github/index ensureIssue() skips update if unchanged 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1568,7 +1568,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureIssue() updates issue 1`] = `
+exports[`platform/github/index ensureIssue() updates issue 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1636,7 +1636,7 @@ Array [
 ]
 `;
 
-exports[`platform/github ensureIssueClosing() closes issue 1`] = `
+exports[`platform/github/index ensureIssueClosing() closes issue 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1693,7 +1693,7 @@ Array [
 ]
 `;
 
-exports[`platform/github findIssue() finds issue 1`] = `
+exports[`platform/github/index findIssue() finds issue 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1747,7 +1747,7 @@ Array [
 ]
 `;
 
-exports[`platform/github findIssue() returns null if no issue 1`] = `
+exports[`platform/github/index findIssue() returns null if no issue 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1790,7 +1790,7 @@ Array [
 ]
 `;
 
-exports[`platform/github findPr(branchName, prTitle, state) caches pr list 1`] = `
+exports[`platform/github/index findPr(branchName, prTitle, state) caches pr list 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1806,7 +1806,7 @@ Array [
 ]
 `;
 
-exports[`platform/github findPr(branchName, prTitle, state) returns true if no title and all state 1`] = `
+exports[`platform/github/index findPr(branchName, prTitle, state) returns true if no title and all state 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1857,7 +1857,7 @@ Array [
 ]
 `;
 
-exports[`platform/github findPr(branchName, prTitle, state) returns true if not open 1`] = `
+exports[`platform/github/index findPr(branchName, prTitle, state) returns true if not open 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1873,7 +1873,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchPr(branchName) aborts reopen if PR is too old 1`] = `
+exports[`platform/github/index getBranchPr(branchName) aborts reopen if PR is too old 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1924,7 +1924,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchPr(branchName) aborts reopening if PR reopening fails 1`] = `
+exports[`platform/github/index getBranchPr(branchName) aborts reopening if PR reopening fails 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -1989,7 +1989,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchPr(branchName) aborts reopening if branch recreation fails 1`] = `
+exports[`platform/github/index getBranchPr(branchName) aborts reopening if branch recreation fails 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -2068,7 +2068,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchPr(branchName) should reopen an autoclosed PR 1`] = `
+exports[`platform/github/index getBranchPr(branchName) should reopen an autoclosed PR 1`] = `
 Object {
   "additions": 1,
   "base": Object {
@@ -2092,7 +2092,7 @@ Object {
 }
 `;
 
-exports[`platform/github getBranchPr(branchName) should reopen an autoclosed PR 2`] = `
+exports[`platform/github/index getBranchPr(branchName) should reopen an autoclosed PR 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -2318,7 +2318,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchPr(branchName) should return null if no PR exists 1`] = `
+exports[`platform/github/index getBranchPr(branchName) should return null if no PR exists 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -2369,7 +2369,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchPr(branchName) should return the PR object 1`] = `
+exports[`platform/github/index getBranchPr(branchName) should return the PR object 1`] = `
 Object {
   "additions": 1,
   "base": Object {
@@ -2393,7 +2393,7 @@ Object {
 }
 `;
 
-exports[`platform/github getBranchPr(branchName) should return the PR object 2`] = `
+exports[`platform/github/index getBranchPr(branchName) should return the PR object 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -2591,7 +2591,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchPr(branchName) should return the PR object in fork mode 1`] = `
+exports[`platform/github/index getBranchPr(branchName) should return the PR object in fork mode 1`] = `
 Object {
   "additions": 1,
   "base": Object {
@@ -2615,7 +2615,7 @@ Object {
 }
 `;
 
-exports[`platform/github getBranchPr(branchName) should return the PR object in fork mode 2`] = `
+exports[`platform/github/index getBranchPr(branchName) should return the PR object in fork mode 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -2849,7 +2849,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchStatus() defaults to pending 1`] = `
+exports[`platform/github/index getBranchStatus() defaults to pending 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -2911,7 +2911,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchStatus() return failed if unsupported requiredStatusChecks 1`] = `
+exports[`platform/github/index getBranchStatus() return failed if unsupported requiredStatusChecks 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -2951,7 +2951,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchStatus() returns success if requiredStatusChecks null 1`] = `
+exports[`platform/github/index getBranchStatus() returns success if requiredStatusChecks null 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -2991,7 +2991,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchStatus() should fail if a check run has failed 1`] = `
+exports[`platform/github/index getBranchStatus() should fail if a check run has failed 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3053,7 +3053,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchStatus() should fail if a check run is pending 1`] = `
+exports[`platform/github/index getBranchStatus() should fail if a check run is pending 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3115,7 +3115,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchStatus() should pass through failed 1`] = `
+exports[`platform/github/index getBranchStatus() should pass through failed 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3177,7 +3177,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchStatus() should pass through success 1`] = `
+exports[`platform/github/index getBranchStatus() should pass through success 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3239,7 +3239,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchStatus() should succeed if no status and all passed check runs 1`] = `
+exports[`platform/github/index getBranchStatus() should succeed if no status and all passed check runs 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3301,7 +3301,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchStatusCheck returns null 1`] = `
+exports[`platform/github/index getBranchStatusCheck returns null 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3352,7 +3352,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getBranchStatusCheck returns state if found 1`] = `
+exports[`platform/github/index getBranchStatusCheck returns state if found 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3403,7 +3403,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getJsonFile() returns file content 1`] = `
+exports[`platform/github/index getJsonFile() returns file content 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3454,7 +3454,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getJsonFile() throws on errors 1`] = `
+exports[`platform/github/index getJsonFile() throws on errors 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3505,7 +3505,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getJsonFile() throws on malformed JSON 1`] = `
+exports[`platform/github/index getJsonFile() throws on malformed JSON 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3556,7 +3556,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getPr(prNo) should return PR from closed graphql result 1`] = `
+exports[`platform/github/index getPr(prNo) should return PR from closed graphql result 1`] = `
 Object {
   "body": "dummy body",
   "comments": Array [
@@ -3579,7 +3579,7 @@ Your **[semantic-release](https://github.com/semantic-release/semantic-release)*
 }
 `;
 
-exports[`platform/github getPr(prNo) should return PR from closed graphql result 2`] = `
+exports[`platform/github/index getPr(prNo) should return PR from closed graphql result 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3755,7 +3755,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getPr(prNo) should return PR from graphql result 1`] = `
+exports[`platform/github/index getPr(prNo) should return PR from graphql result 1`] = `
 Object {
   "canMerge": false,
   "canMergeReason": "mergeStateStatus = DIRTY",
@@ -3771,7 +3771,7 @@ Object {
 }
 `;
 
-exports[`platform/github getPr(prNo) should return PR from graphql result 2`] = `
+exports[`platform/github/index getPr(prNo) should return PR from graphql result 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -3900,7 +3900,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getPr(prNo) should return a PR object - 0 1`] = `
+exports[`platform/github/index getPr(prNo) should return a PR object - 0 1`] = `
 Object {
   "base": Object {
     "sha": "1234",
@@ -3913,7 +3913,7 @@ Object {
 }
 `;
 
-exports[`platform/github getPr(prNo) should return a PR object - 0 2`] = `
+exports[`platform/github/index getPr(prNo) should return a PR object - 0 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -4100,7 +4100,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getPr(prNo) should return a PR object - 1 1`] = `
+exports[`platform/github/index getPr(prNo) should return a PR object - 1 1`] = `
 Object {
   "base": Object {
     "sha": "1234",
@@ -4118,7 +4118,7 @@ Object {
 }
 `;
 
-exports[`platform/github getPr(prNo) should return a PR object - 1 2`] = `
+exports[`platform/github/index getPr(prNo) should return a PR object - 1 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -4305,7 +4305,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getPr(prNo) should return a PR object - 2 1`] = `
+exports[`platform/github/index getPr(prNo) should return a PR object - 2 1`] = `
 Object {
   "base": Object {
     "sha": "5678",
@@ -4321,7 +4321,7 @@ Object {
 }
 `;
 
-exports[`platform/github getPr(prNo) should return a PR object - 2 2`] = `
+exports[`platform/github/index getPr(prNo) should return a PR object - 2 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -4508,7 +4508,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getPr(prNo) should return null if no PR is returned from GitHub 1`] = `
+exports[`platform/github/index getPr(prNo) should return null if no PR is returned from GitHub 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -4695,7 +4695,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getRepoForceRebase should detect repoForceRebase 1`] = `
+exports[`platform/github/index getRepoForceRebase should detect repoForceRebase 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -4711,7 +4711,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getRepoForceRebase should handle 403 1`] = `
+exports[`platform/github/index getRepoForceRebase should handle 403 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -4727,7 +4727,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getRepoForceRebase should handle 404 1`] = `
+exports[`platform/github/index getRepoForceRebase should handle 404 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -4743,9 +4743,9 @@ Array [
 ]
 `;
 
-exports[`platform/github getRepoForceRebase should throw 401 1`] = `"Response code 401 (Unauthorized)"`;
+exports[`platform/github/index getRepoForceRebase should throw 401 1`] = `"Response code 401 (Unauthorized)"`;
 
-exports[`platform/github getRepoForceRebase should throw 401 2`] = `
+exports[`platform/github/index getRepoForceRebase should throw 401 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -4761,14 +4761,14 @@ Array [
 ]
 `;
 
-exports[`platform/github getRepos should return an array of repos 1`] = `
+exports[`platform/github/index getRepos should return an array of repos 1`] = `
 Array [
   "a/b",
   "c/d",
 ]
 `;
 
-exports[`platform/github getRepos should return an array of repos 2`] = `
+exports[`platform/github/index getRepos should return an array of repos 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -4784,7 +4784,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getVulnerabilityAlerts() handles network error 1`] = `
+exports[`platform/github/index getVulnerabilityAlerts() handles network error 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -4846,7 +4846,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getVulnerabilityAlerts() returns array if found 1`] = `
+exports[`platform/github/index getVulnerabilityAlerts() returns array if found 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -4908,7 +4908,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getVulnerabilityAlerts() returns empty if disabled 1`] = `
+exports[`platform/github/index getVulnerabilityAlerts() returns empty if disabled 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -4970,7 +4970,7 @@ Array [
 ]
 `;
 
-exports[`platform/github getVulnerabilityAlerts() returns empty if error 1`] = `
+exports[`platform/github/index getVulnerabilityAlerts() returns empty if error 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5032,7 +5032,7 @@ Array [
 ]
 `;
 
-exports[`platform/github initPlatform() should support custom endpoint 1`] = `
+exports[`platform/github/index initPlatform() should support custom endpoint 1`] = `
 Object {
   "endpoint": "https://ghe.renovatebot.com/",
   "gitAuthor": "undefined <user@domain.com>",
@@ -5040,7 +5040,7 @@ Object {
 }
 `;
 
-exports[`platform/github initPlatform() should support custom endpoint 2`] = `
+exports[`platform/github/index initPlatform() should support custom endpoint 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -5067,7 +5067,7 @@ Array [
 ]
 `;
 
-exports[`platform/github initPlatform() should support default endpoint no email access 1`] = `
+exports[`platform/github/index initPlatform() should support default endpoint no email access 1`] = `
 Object {
   "endpoint": "https://api.github.com/",
   "gitAuthor": undefined,
@@ -5075,7 +5075,7 @@ Object {
 }
 `;
 
-exports[`platform/github initPlatform() should support default endpoint no email access 2`] = `
+exports[`platform/github/index initPlatform() should support default endpoint no email access 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -5102,7 +5102,7 @@ Array [
 ]
 `;
 
-exports[`platform/github initPlatform() should support default endpoint no email result 1`] = `
+exports[`platform/github/index initPlatform() should support default endpoint no email result 1`] = `
 Object {
   "endpoint": "https://api.github.com/",
   "gitAuthor": undefined,
@@ -5110,7 +5110,7 @@ Object {
 }
 `;
 
-exports[`platform/github initPlatform() should support default endpoint no email result 2`] = `
+exports[`platform/github/index initPlatform() should support default endpoint no email result 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -5137,7 +5137,7 @@ Array [
 ]
 `;
 
-exports[`platform/github initPlatform() should support default endpoint with email 1`] = `
+exports[`platform/github/index initPlatform() should support default endpoint with email 1`] = `
 Object {
   "endpoint": "https://api.github.com/",
   "gitAuthor": "undefined <user@domain.com>",
@@ -5145,7 +5145,7 @@ Object {
 }
 `;
 
-exports[`platform/github initPlatform() should support default endpoint with email 2`] = `
+exports[`platform/github/index initPlatform() should support default endpoint with email 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -5172,7 +5172,7 @@ Array [
 ]
 `;
 
-exports[`platform/github initPlatform() should support gitAuthor and username 1`] = `
+exports[`platform/github/index initPlatform() should support gitAuthor and username 1`] = `
 Object {
   "endpoint": "https://api.github.com/",
   "gitAuthor": "renovate@whitesourcesoftware.com",
@@ -5180,7 +5180,7 @@ Object {
 }
 `;
 
-exports[`platform/github initPlatform() should throw if user failure 1`] = `
+exports[`platform/github/index initPlatform() should throw if user failure 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -5196,14 +5196,14 @@ Array [
 ]
 `;
 
-exports[`platform/github initRepo detects fork default branch mismatch 1`] = `
+exports[`platform/github/index initRepo detects fork default branch mismatch 1`] = `
 Object {
   "defaultBranch": "master",
   "isFork": false,
 }
 `;
 
-exports[`platform/github initRepo detects fork default branch mismatch 2`] = `
+exports[`platform/github/index initRepo detects fork default branch mismatch 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5307,14 +5307,14 @@ Array [
 ]
 `;
 
-exports[`platform/github initRepo should fork when forkMode 1`] = `
+exports[`platform/github/index initRepo should fork when forkMode 1`] = `
 Object {
   "defaultBranch": "master",
   "isFork": false,
 }
 `;
 
-exports[`platform/github initRepo should fork when forkMode 2`] = `
+exports[`platform/github/index initRepo should fork when forkMode 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5376,14 +5376,14 @@ Array [
 ]
 `;
 
-exports[`platform/github initRepo should merge 1`] = `
+exports[`platform/github/index initRepo should merge 1`] = `
 Object {
   "defaultBranch": "master",
   "isFork": false,
 }
 `;
 
-exports[`platform/github initRepo should merge 2`] = `
+exports[`platform/github/index initRepo should merge 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5423,14 +5423,14 @@ Array [
 ]
 `;
 
-exports[`platform/github initRepo should not guess at merge 1`] = `
+exports[`platform/github/index initRepo should not guess at merge 1`] = `
 Object {
   "defaultBranch": "master",
   "isFork": false,
 }
 `;
 
-exports[`platform/github initRepo should not guess at merge 2`] = `
+exports[`platform/github/index initRepo should not guess at merge 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5470,14 +5470,14 @@ Array [
 ]
 `;
 
-exports[`platform/github initRepo should rebase 1`] = `
+exports[`platform/github/index initRepo should rebase 1`] = `
 Object {
   "defaultBranch": "master",
   "isFork": false,
 }
 `;
 
-exports[`platform/github initRepo should rebase 2`] = `
+exports[`platform/github/index initRepo should rebase 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5517,14 +5517,14 @@ Array [
 ]
 `;
 
-exports[`platform/github initRepo should squash 1`] = `
+exports[`platform/github/index initRepo should squash 1`] = `
 Object {
   "defaultBranch": "master",
   "isFork": false,
 }
 `;
 
-exports[`platform/github initRepo should squash 2`] = `
+exports[`platform/github/index initRepo should squash 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5564,7 +5564,7 @@ Array [
 ]
 `;
 
-exports[`platform/github initRepo should throw error if archived 1`] = `
+exports[`platform/github/index initRepo should throw error if archived 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5604,7 +5604,7 @@ Array [
 ]
 `;
 
-exports[`platform/github initRepo should throw error if renamed 1`] = `
+exports[`platform/github/index initRepo should throw error if renamed 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5644,14 +5644,14 @@ Array [
 ]
 `;
 
-exports[`platform/github initRepo should update fork when forkMode 1`] = `
+exports[`platform/github/index initRepo should update fork when forkMode 1`] = `
 Object {
   "defaultBranch": "master",
   "isFork": false,
 }
 `;
 
-exports[`platform/github initRepo should update fork when forkMode 2`] = `
+exports[`platform/github/index initRepo should update fork when forkMode 2`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5727,7 +5727,7 @@ Array [
 ]
 `;
 
-exports[`platform/github initRepo throws not-found 1`] = `
+exports[`platform/github/index initRepo throws not-found 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5767,7 +5767,7 @@ Array [
 ]
 `;
 
-exports[`platform/github massageMarkdown(input) returns not-updated pr body for GHE 1`] = `
+exports[`platform/github/index massageMarkdown(input) returns not-updated pr body for GHE 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -5829,9 +5829,9 @@ Array [
 ]
 `;
 
-exports[`platform/github massageMarkdown(input) returns updated pr body 1`] = `"https://github.com/foo/bar/issues/5 plus also [a link](https://togithub.com/foo/bar/issues/5)"`;
+exports[`platform/github/index massageMarkdown(input) returns updated pr body 1`] = `"https://github.com/foo/bar/issues/5 plus also [a link](https://togithub.com/foo/bar/issues/5)"`;
 
-exports[`platform/github mergePr(prNo) - autodetection should give up 1`] = `
+exports[`platform/github/index mergePr(prNo) - autodetection should give up 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -5927,7 +5927,7 @@ Array [
 ]
 `;
 
-exports[`platform/github mergePr(prNo) - autodetection should try merge after squash 1`] = `
+exports[`platform/github/index mergePr(prNo) - autodetection should try merge after squash 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -6009,7 +6009,7 @@ Array [
 ]
 `;
 
-exports[`platform/github mergePr(prNo) - autodetection should try rebase first 1`] = `
+exports[`platform/github/index mergePr(prNo) - autodetection should try rebase first 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -6063,7 +6063,7 @@ Array [
 ]
 `;
 
-exports[`platform/github mergePr(prNo) - autodetection should try squash after rebase 1`] = `
+exports[`platform/github/index mergePr(prNo) - autodetection should try squash after rebase 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -6117,7 +6117,7 @@ Array [
 ]
 `;
 
-exports[`platform/github mergePr(prNo) should handle merge error 1`] = `
+exports[`platform/github/index mergePr(prNo) should handle merge error 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -6171,7 +6171,7 @@ Array [
 ]
 `;
 
-exports[`platform/github mergePr(prNo) should merge the PR 1`] = `
+exports[`platform/github/index mergePr(prNo) should merge the PR 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -6225,7 +6225,7 @@ Array [
 ]
 `;
 
-exports[`platform/github setBranchStatus returns if already set 1`] = `
+exports[`platform/github/index setBranchStatus returns if already set 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -6276,7 +6276,7 @@ Array [
 ]
 `;
 
-exports[`platform/github setBranchStatus sets branch status 1`] = `
+exports[`platform/github/index setBranchStatus sets branch status 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -6363,7 +6363,7 @@ Array [
 ]
 `;
 
-exports[`platform/github updatePr(prNo, title, body) should update and close the PR 1`] = `
+exports[`platform/github/index updatePr(prNo, title, body) should update and close the PR 1`] = `
 Array [
   Object {
     "graphql": Object {
@@ -6417,7 +6417,7 @@ Array [
 ]
 `;
 
-exports[`platform/github updatePr(prNo, title, body) should update the PR 1`] = `
+exports[`platform/github/index updatePr(prNo, title, body) should update the PR 1`] = `
 Array [
   Object {
     "graphql": Object {
diff --git a/lib/platform/github/index.spec.ts b/lib/platform/github/index.spec.ts
index 1b4d87c64b901acee64330dce394693715cbcac4..ebcd4a20d0d65dc10f0a18c2dd09a05638d95a55 100644
--- a/lib/platform/github/index.spec.ts
+++ b/lib/platform/github/index.spec.ts
@@ -1,7 +1,7 @@
 import fs from 'fs-extra';
 import { DateTime } from 'luxon';
 import * as httpMock from '../../../test/http-mock';
-import { mocked } from '../../../test/util';
+import { getName, mocked } from '../../../test/util';
 import {
   REPOSITORY_NOT_FOUND,
   REPOSITORY_RENAMED,
@@ -12,7 +12,7 @@ import type { Platform } from '../types';
 
 const githubApiHost = 'https://api.github.com';
 
-describe('platform/github', () => {
+describe(getName(__filename), () => {
   let github: Platform;
   let hostRules: jest.Mocked<typeof import('../../util/host-rules')>;
   let git: jest.Mocked<typeof _git>;
diff --git a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap
index 732b9c57b0043c773c2be2bd602873b5a714c273..2650d4d63eef09758d365efa9c3ff65256353cdf 100644
--- a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap
+++ b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`platform/gitlab addAssignees(issueNo, assignees) should add the given assignees to the issue 1`] = `
+exports[`platform/gitlab/index addAssignees(issueNo, assignees) should add the given assignees to the issue 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -27,7 +27,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab addAssignees(issueNo, assignees) should add the given assignees to the issue if supported 1`] = `
+exports[`platform/gitlab/index addAssignees(issueNo, assignees) should add the given assignees to the issue if supported 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -76,7 +76,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab addAssignees(issueNo, assignees) should swallow error 1`] = `
+exports[`platform/gitlab/index addAssignees(issueNo, assignees) should swallow error 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -92,7 +92,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab addAssignees(issueNo, assignees) should warn if more than one assignee 1`] = `
+exports[`platform/gitlab/index addAssignees(issueNo, assignees) should warn if more than one assignee 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -141,7 +141,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab createPr(branchName, title, body) auto-accepts the MR when requested 1`] = `
+exports[`platform/gitlab/index createPr(branchName, title, body) auto-accepts the MR when requested 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -218,7 +218,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab createPr(branchName, title, body) returns the PR 1`] = `
+exports[`platform/gitlab/index createPr(branchName, title, body) returns the PR 1`] = `
 Object {
   "displayNumber": "Merge Request #12345",
   "id": 1,
@@ -229,7 +229,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab createPr(branchName, title, body) returns the PR 2`] = `
+exports[`platform/gitlab/index createPr(branchName, title, body) returns the PR 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -270,7 +270,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab createPr(branchName, title, body) supports draftPR on < 13.2 1`] = `
+exports[`platform/gitlab/index createPr(branchName, title, body) supports draftPR on < 13.2 1`] = `
 Object {
   "displayNumber": "Merge Request #12345",
   "id": 1,
@@ -282,7 +282,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab createPr(branchName, title, body) supports draftPR on < 13.2 2`] = `
+exports[`platform/gitlab/index createPr(branchName, title, body) supports draftPR on < 13.2 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -323,7 +323,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab createPr(branchName, title, body) supports draftPR on >= 13.2 1`] = `
+exports[`platform/gitlab/index createPr(branchName, title, body) supports draftPR on >= 13.2 1`] = `
 Object {
   "displayNumber": "Merge Request #12345",
   "id": 1,
@@ -335,7 +335,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab createPr(branchName, title, body) supports draftPR on >= 13.2 2`] = `
+exports[`platform/gitlab/index createPr(branchName, title, body) supports draftPR on >= 13.2 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -376,7 +376,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab createPr(branchName, title, body) uses default branch 1`] = `
+exports[`platform/gitlab/index createPr(branchName, title, body) uses default branch 1`] = `
 Object {
   "displayNumber": "Merge Request #12345",
   "id": 1,
@@ -387,7 +387,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab createPr(branchName, title, body) uses default branch 2`] = `
+exports[`platform/gitlab/index createPr(branchName, title, body) uses default branch 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -428,7 +428,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab deleteLabel(issueNo, label) should delete the label 1`] = `
+exports[`platform/gitlab/index deleteLabel(issueNo, label) should delete the label 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -458,7 +458,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab ensureComment add comment if not found 1`] = `
+exports[`platform/gitlab/index ensureComment add comment if not found 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -499,7 +499,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab ensureComment add updates comment if necessary 1`] = `
+exports[`platform/gitlab/index ensureComment add updates comment if necessary 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -540,7 +540,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab ensureComment handles comment with no description 1`] = `
+exports[`platform/gitlab/index ensureComment handles comment with no description 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -567,7 +567,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab ensureComment skips comment 1`] = `
+exports[`platform/gitlab/index ensureComment skips comment 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -594,7 +594,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab ensureCommentRemoval deletes comment by content if found 1`] = `
+exports[`platform/gitlab/index ensureCommentRemoval deletes comment by content if found 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -632,7 +632,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab ensureCommentRemoval deletes comment by topic if found 1`] = `
+exports[`platform/gitlab/index ensureCommentRemoval deletes comment by topic if found 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -670,7 +670,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab ensureIssue() creates issue 1`] = `
+exports[`platform/gitlab/index ensureIssue() creates issue 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -700,7 +700,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab ensureIssue() skips update if unchanged 1`] = `
+exports[`platform/gitlab/index ensureIssue() skips update if unchanged 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -727,7 +727,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab ensureIssue() updates issue 1`] = `
+exports[`platform/gitlab/index ensureIssue() updates issue 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -768,7 +768,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab ensureIssueClosing() closes issue 1`] = `
+exports[`platform/gitlab/index ensureIssueClosing() closes issue 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -798,7 +798,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab findIssue() finds issue 1`] = `
+exports[`platform/gitlab/index findIssue() finds issue 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -825,7 +825,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab findIssue() returns null if no issue 1`] = `
+exports[`platform/gitlab/index findIssue() returns null if no issue 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -841,7 +841,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab findPr(branchName, prTitle, state) returns true if no title and all state 1`] = `
+exports[`platform/gitlab/index findPr(branchName, prTitle, state) returns true if no title and all state 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -857,7 +857,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab findPr(branchName, prTitle, state) returns true if not open 1`] = `
+exports[`platform/gitlab/index findPr(branchName, prTitle, state) returns true if not open 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -873,7 +873,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab findPr(branchName, prTitle, state) returns true if open and with title 1`] = `
+exports[`platform/gitlab/index findPr(branchName, prTitle, state) returns true if open and with title 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -889,7 +889,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab findPr(branchName, prTitle, state) returns true with deprecated draft prefix title 1`] = `
+exports[`platform/gitlab/index findPr(branchName, prTitle, state) returns true with deprecated draft prefix title 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -905,7 +905,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab findPr(branchName, prTitle, state) returns true with draft prefix title 1`] = `
+exports[`platform/gitlab/index findPr(branchName, prTitle, state) returns true with draft prefix title 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -921,7 +921,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab findPr(branchName, prTitle, state) returns true with title 1`] = `
+exports[`platform/gitlab/index findPr(branchName, prTitle, state) returns true with title 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -937,7 +937,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchPr(branchName) should return null if no PR exists 1`] = `
+exports[`platform/gitlab/index getBranchPr(branchName) should return null if no PR exists 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -964,7 +964,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchPr(branchName) should return the PR object 1`] = `
+exports[`platform/gitlab/index getBranchPr(branchName) should return the PR object 1`] = `
 Object {
   "body": undefined,
   "displayNumber": "Merge Request #91",
@@ -980,7 +980,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab getBranchPr(branchName) should return the PR object 2`] = `
+exports[`platform/gitlab/index getBranchPr(branchName) should return the PR object 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1029,7 +1029,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchPr(branchName) should strip deprecated draft prefix from title 1`] = `
+exports[`platform/gitlab/index getBranchPr(branchName) should strip deprecated draft prefix from title 1`] = `
 Object {
   "body": undefined,
   "displayNumber": "Merge Request #91",
@@ -1046,7 +1046,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab getBranchPr(branchName) should strip deprecated draft prefix from title 2`] = `
+exports[`platform/gitlab/index getBranchPr(branchName) should strip deprecated draft prefix from title 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1095,7 +1095,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchPr(branchName) should strip draft prefix from title 1`] = `
+exports[`platform/gitlab/index getBranchPr(branchName) should strip draft prefix from title 1`] = `
 Object {
   "body": undefined,
   "displayNumber": "Merge Request #91",
@@ -1112,7 +1112,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab getBranchPr(branchName) should strip draft prefix from title 2`] = `
+exports[`platform/gitlab/index getBranchPr(branchName) should strip draft prefix from title 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1161,7 +1161,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatus(branchName, requiredStatusChecks) maps custom statuses to yellow 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) maps custom statuses to yellow 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1188,7 +1188,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatus(branchName, requiredStatusChecks) returns failure if any mandatory jobs fails 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns failure if any mandatory jobs fails 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1215,7 +1215,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatus(branchName, requiredStatusChecks) returns failure if any mandatory jobs fails and one job is skipped 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns failure if any mandatory jobs fails and one job is skipped 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1242,7 +1242,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatus(branchName, requiredStatusChecks) returns pending if no results 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns pending if no results 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1269,7 +1269,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatus(branchName, requiredStatusChecks) returns success if all are optional 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if all are optional 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1296,7 +1296,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatus(branchName, requiredStatusChecks) returns success if all are success 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if all are success 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1323,7 +1323,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatus(branchName, requiredStatusChecks) returns success if job is skipped 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if job is skipped 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1350,7 +1350,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatus(branchName, requiredStatusChecks) returns success if optional jobs fail 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if optional jobs fail 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1377,7 +1377,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatus(branchName, requiredStatusChecks) returns yellow if there are no jobs expect skipped 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns yellow if there are no jobs expect skipped 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1404,7 +1404,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatus(branchName, requiredStatusChecks) throws repository-changed 1`] = `
+exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) throws repository-changed 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1420,7 +1420,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatusCheck returns null if no matching results 1`] = `
+exports[`platform/gitlab/index getBranchStatusCheck returns null if no matching results 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1447,7 +1447,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatusCheck returns null if no results 1`] = `
+exports[`platform/gitlab/index getBranchStatusCheck returns null if no results 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1474,7 +1474,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getBranchStatusCheck returns status if name found 1`] = `
+exports[`platform/gitlab/index getBranchStatusCheck returns status if name found 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1501,7 +1501,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getJsonFile() returns file content 1`] = `
+exports[`platform/gitlab/index getJsonFile() returns file content 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1528,7 +1528,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getJsonFile() throws on errors 1`] = `
+exports[`platform/gitlab/index getJsonFile() throws on errors 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1555,7 +1555,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getJsonFile() throws on malformed JSON 1`] = `
+exports[`platform/gitlab/index getJsonFile() throws on malformed JSON 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1582,7 +1582,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getPr(prNo) removes deprecated draft prefix from returned title 1`] = `
+exports[`platform/gitlab/index getPr(prNo) removes deprecated draft prefix from returned title 1`] = `
 Object {
   "body": "a merge request",
   "canMerge": false,
@@ -1601,7 +1601,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab getPr(prNo) removes deprecated draft prefix from returned title 2`] = `
+exports[`platform/gitlab/index getPr(prNo) removes deprecated draft prefix from returned title 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1617,7 +1617,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getPr(prNo) removes draft prefix from returned title 1`] = `
+exports[`platform/gitlab/index getPr(prNo) removes draft prefix from returned title 1`] = `
 Object {
   "body": "a merge request",
   "canMerge": false,
@@ -1636,7 +1636,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab getPr(prNo) removes draft prefix from returned title 2`] = `
+exports[`platform/gitlab/index getPr(prNo) removes draft prefix from returned title 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1652,7 +1652,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getPr(prNo) returns the PR 1`] = `
+exports[`platform/gitlab/index getPr(prNo) returns the PR 1`] = `
 Object {
   "body": "a merge request",
   "canMerge": false,
@@ -1670,7 +1670,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab getPr(prNo) returns the PR 2`] = `
+exports[`platform/gitlab/index getPr(prNo) returns the PR 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1686,7 +1686,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getPr(prNo) returns the PR with nonexisting branch 1`] = `
+exports[`platform/gitlab/index getPr(prNo) returns the PR with nonexisting branch 1`] = `
 Object {
   "body": "a merge request",
   "canMerge": false,
@@ -1704,7 +1704,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab getPr(prNo) returns the PR with nonexisting branch 2`] = `
+exports[`platform/gitlab/index getPr(prNo) returns the PR with nonexisting branch 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1720,7 +1720,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getPr(prNo) returns the mergeable PR 1`] = `
+exports[`platform/gitlab/index getPr(prNo) returns the mergeable PR 1`] = `
 Object {
   "body": "a merge request",
   "canMerge": true,
@@ -1737,7 +1737,7 @@ Object {
 }
 `;
 
-exports[`platform/gitlab getPr(prNo) returns the mergeable PR 2`] = `
+exports[`platform/gitlab/index getPr(prNo) returns the mergeable PR 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1775,7 +1775,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getRepoForceRebase should return false 1`] = `
+exports[`platform/gitlab/index getRepoForceRebase should return false 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1791,7 +1791,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getRepoForceRebase should return true 1`] = `
+exports[`platform/gitlab/index getRepoForceRebase should return true 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1807,14 +1807,14 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getRepos should return an array of repos 1`] = `
+exports[`platform/gitlab/index getRepos should return an array of repos 1`] = `
 Array [
   "a/b",
   "c/d",
 ]
 `;
 
-exports[`platform/gitlab getRepos should return an array of repos 2`] = `
+exports[`platform/gitlab/index getRepos should return an array of repos 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1830,7 +1830,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab getRepos should throw an error if it receives an error 1`] = `
+exports[`platform/gitlab/index getRepos should throw an error if it receives an error 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1846,14 +1846,14 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initPlatform() should accept custom endpoint 1`] = `
+exports[`platform/gitlab/index initPlatform() should accept custom endpoint 1`] = `
 Object {
   "endpoint": "https://gitlab.renovatebot.com/",
   "gitAuthor": "Renovate Bot <a@b.com>",
 }
 `;
 
-exports[`platform/gitlab initPlatform() should accept custom endpoint 2`] = `
+exports[`platform/gitlab/index initPlatform() should accept custom endpoint 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1880,14 +1880,14 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initPlatform() should default to gitlab.com 1`] = `
+exports[`platform/gitlab/index initPlatform() should default to gitlab.com 1`] = `
 Object {
   "endpoint": "https://gitlab.com/api/v4/",
   "gitAuthor": "Renovate Bot <a@b.com>",
 }
 `;
 
-exports[`platform/gitlab initPlatform() should default to gitlab.com 2`] = `
+exports[`platform/gitlab/index initPlatform() should default to gitlab.com 2`] = `
 Array [
   Object {
     "headers": Object {
@@ -1914,7 +1914,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initPlatform() should throw if auth fails 1`] = `
+exports[`platform/gitlab/index initPlatform() should throw if auth fails 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1930,7 +1930,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initRepo should escape all forward slashes in project names 1`] = `
+exports[`platform/gitlab/index initRepo should escape all forward slashes in project names 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1946,7 +1946,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initRepo should fall back if http_url_to_repo is empty 1`] = `
+exports[`platform/gitlab/index initRepo should fall back if http_url_to_repo is empty 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1962,7 +1962,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initRepo should throw an error if MRs are disabled 1`] = `
+exports[`platform/gitlab/index initRepo should throw an error if MRs are disabled 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1978,7 +1978,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initRepo should throw an error if receiving an error 1`] = `
+exports[`platform/gitlab/index initRepo should throw an error if receiving an error 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -1994,7 +1994,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initRepo should throw an error if repository access is disabled 1`] = `
+exports[`platform/gitlab/index initRepo should throw an error if repository access is disabled 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2010,7 +2010,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initRepo should throw an error if repository has empty_repo property 1`] = `
+exports[`platform/gitlab/index initRepo should throw an error if repository has empty_repo property 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2026,7 +2026,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initRepo should throw an error if repository is a mirror 1`] = `
+exports[`platform/gitlab/index initRepo should throw an error if repository is a mirror 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2042,7 +2042,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initRepo should throw an error if repository is archived 1`] = `
+exports[`platform/gitlab/index initRepo should throw an error if repository is archived 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2058,7 +2058,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab initRepo should throw an error if repository is empty 1`] = `
+exports[`platform/gitlab/index initRepo should throw an error if repository is empty 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2074,7 +2074,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab massageMarkdown(input) returns updated pr body 1`] = `
+exports[`platform/gitlab/index massageMarkdown(input) returns updated pr body 1`] = `
 "https://github.com/foo/bar/issues/5 plus also [a link](https://github.com/foo/bar/issues/5
 
   Merge Requests are the best, here are some MRs.
@@ -2087,7 +2087,7 @@ These updates have all been created already. Click a checkbox below to force a r
 "
 `;
 
-exports[`platform/gitlab mergePr(pr) merges the PR 1`] = `
+exports[`platform/gitlab/index mergePr(pr) merges the PR 1`] = `
 Array [
   Object {
     "body": "{\\"should_remove_source_branch\\":true}",
@@ -2106,7 +2106,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab setBranchStatus sets branch status green 1`] = `
+exports[`platform/gitlab/index setBranchStatus sets branch status green 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2147,7 +2147,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab setBranchStatus sets branch status red 1`] = `
+exports[`platform/gitlab/index setBranchStatus sets branch status red 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2188,7 +2188,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab setBranchStatus sets branch status yellow 1`] = `
+exports[`platform/gitlab/index setBranchStatus sets branch status yellow 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2229,7 +2229,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab updatePr(prNo, title, body) closes the PR 1`] = `
+exports[`platform/gitlab/index updatePr(prNo, title, body) closes the PR 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2281,7 +2281,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab updatePr(prNo, title, body) retains draft status when draft uses current prefix 1`] = `
+exports[`platform/gitlab/index updatePr(prNo, title, body) retains draft status when draft uses current prefix 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2333,7 +2333,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab updatePr(prNo, title, body) retains draft status when draft uses deprecated prefix 1`] = `
+exports[`platform/gitlab/index updatePr(prNo, title, body) retains draft status when draft uses deprecated prefix 1`] = `
 Array [
   Object {
     "headers": Object {
@@ -2385,7 +2385,7 @@ Array [
 ]
 `;
 
-exports[`platform/gitlab updatePr(prNo, title, body) updates the PR 1`] = `
+exports[`platform/gitlab/index updatePr(prNo, title, body) updates the PR 1`] = `
 Array [
   Object {
     "headers": Object {
diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts
index d2d1182775978f4b0f2044eeef5ca967670ad7bf..b60e0ac2eed26be5bda59b665f36163320a45eb5 100644
--- a/lib/platform/gitlab/index.spec.ts
+++ b/lib/platform/gitlab/index.spec.ts
@@ -2,6 +2,7 @@
 import nock from 'nock';
 import { Platform, RepoParams } from '..';
 import * as httpMock from '../../../test/http-mock';
+import { getName } from '../../../test/util';
 import {
   REPOSITORY_ARCHIVED,
   REPOSITORY_CHANGED,
@@ -16,7 +17,7 @@ import * as _hostRules from '../../util/host-rules';
 
 const gitlabApiHost = 'https://gitlab.com';
 
-describe('platform/gitlab', () => {
+describe(getName(__filename), () => {
   let gitlab: Platform;
   let hostRules: jest.Mocked<typeof _hostRules>;
   let git: jest.Mocked<typeof _git>;
diff --git a/lib/platform/utils/pr-body.spec.ts b/lib/platform/utils/pr-body.spec.ts
index 67558e516987e8903a49dd8ad321880d4a8d1d4d..ab0b3a7cfece7d7a689995595e50cfed7f6b68ff 100644
--- a/lib/platform/utils/pr-body.spec.ts
+++ b/lib/platform/utils/pr-body.spec.ts
@@ -1,7 +1,8 @@
 import fs from 'fs-extra';
+import { getName } from '../../../test/util';
 import { smartTruncate } from './pr-body';
 
-describe('platform/utils/pr-body', () => {
+describe(getName(__filename), () => {
   let prBody: string;
   beforeAll(async () => {
     prBody = await fs.readFile(
diff --git a/lib/platform/utils/read-only-issue-body.spec.ts b/lib/platform/utils/read-only-issue-body.spec.ts
index 0bd87efa367e47250346e212fb943caf08ae4cdd..440d4b82acaa568e2bb2f585c52e88c27e39184d 100644
--- a/lib/platform/utils/read-only-issue-body.spec.ts
+++ b/lib/platform/utils/read-only-issue-body.spec.ts
@@ -1,7 +1,8 @@
 import fs from 'fs-extra';
+import { getName } from '../../../test/util';
 import { readOnlyIssueBody } from './read-only-issue-body';
 
-describe('platform/utils/read-only-issue-body', () => {
+describe(getName(__filename), () => {
   let issueBody: string;
   beforeAll(async () => {
     issueBody = await fs.readFile(
diff --git a/lib/util/cache/package/file.spec.ts b/lib/util/cache/package/file.spec.ts
index d4d26fcac869ce94e781244bc83e6cb031fc1b3b..7248343c02bd18e00e62346560b2a1b045861f14 100644
--- a/lib/util/cache/package/file.spec.ts
+++ b/lib/util/cache/package/file.spec.ts
@@ -1,7 +1,8 @@
 import os from 'os';
+import { getName } from '../../../../test/util';
 import { get, init, set } from './file';
 
-describe('lib/util/cache/global/file', () => {
+describe(getName(__filename), () => {
   it('returns if uninitiated', async () => {
     await set('test', 'key', 1234);
     expect(await get('test', 'key')).toBeUndefined();
diff --git a/lib/util/cache/repository/index.spec.ts b/lib/util/cache/repository/index.spec.ts
index f62a6e5e8df26414c59a5a64392df77e8a0ecdc2..9ac8eb0977d879a983abc9a79a24f3b61449f3ff 100644
--- a/lib/util/cache/repository/index.spec.ts
+++ b/lib/util/cache/repository/index.spec.ts
@@ -1,12 +1,12 @@
 import * as _fs from 'fs-extra';
-import { mocked } from '../../../../test/util';
+import { getName, mocked } from '../../../../test/util';
 import * as repositoryCache from '.';
 
 jest.mock('fs-extra');
 
 const fs = mocked(_fs);
 
-describe('lib/util/cache/repository', () => {
+describe(getName(__filename), () => {
   beforeEach(() => {
     jest.resetAllMocks();
   });
diff --git a/lib/util/fs/proxies.spec.ts b/lib/util/fs/proxies.spec.ts
index 91a97c709a499a94fa1bc5d3d5c8b22744a1f649..4ea97c575553eb146f3b73d16703f4770108a12e 100644
--- a/lib/util/fs/proxies.spec.ts
+++ b/lib/util/fs/proxies.spec.ts
@@ -1,9 +1,10 @@
 import * as fs from 'fs-extra';
+import { getName } from '../../../test/util';
 import { remove } from './proxies';
 
 jest.mock('fs-extra');
 
-describe('utils/fs/proxies', () => {
+describe(getName(__filename), () => {
   describe('remove', () => {
     it('should call remove in fs-extra', async () => {
       (fs.remove as jest.Mock).mockResolvedValue(undefined);
diff --git a/lib/util/git/__snapshots__/index.spec.ts.snap b/lib/util/git/__snapshots__/index.spec.ts.snap
index 4f03a4baee793d807d6e9365067a647beb29537a..570893090636d5069d5caf7654d421f3cb7e6a61 100644
--- a/lib/util/git/__snapshots__/index.spec.ts.snap
+++ b/lib/util/git/__snapshots__/index.spec.ts.snap
@@ -1,19 +1,19 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`platform/git getBranchFiles(branchName) detects changed files compared to current base branch 1`] = `
+exports[`util/git/index getBranchFiles(branchName) detects changed files compared to current base branch 1`] = `
 Array [
   "some-new-file",
 ]
 `;
 
-exports[`platform/git getCommitMessages() returns commit messages 1`] = `
+exports[`util/git/index getCommitMessages() returns commit messages 1`] = `
 Array [
   "master message",
   "past message",
 ]
 `;
 
-exports[`platform/git getFileList() should exclude submodules 1`] = `
+exports[`util/git/index getFileList() should exclude submodules 1`] = `
 Array [
   ".gitmodules",
   "file_to_delete",
@@ -22,7 +22,7 @@ Array [
 ]
 `;
 
-exports[`platform/git getFileList() should return the correct files 1`] = `
+exports[`util/git/index getFileList() should return the correct files 1`] = `
 Array [
   "file_to_delete",
   "master_file",
@@ -30,14 +30,14 @@ Array [
 ]
 `;
 
-exports[`platform/git initRepo()) should fetch latest 1`] = `
+exports[`util/git/index initRepo()) should fetch latest 1`] = `
 Array [
   "master message",
   "past message",
 ]
 `;
 
-exports[`platform/git initRepo()) should fetch latest 2`] = `
+exports[`util/git/index initRepo()) should fetch latest 2`] = `
 Array [
   "past message2",
   "master message",
diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts
index ec59af45b971a0c581e85d377c5cf7b6a02364ff..9e0d33354ec4835598ec01b43092914d8ac67c04 100644
--- a/lib/util/git/index.spec.ts
+++ b/lib/util/git/index.spec.ts
@@ -1,9 +1,10 @@
 import fs from 'fs-extra';
 import Git from 'simple-git';
 import tmp from 'tmp-promise';
+import { getName } from '../../../test/util';
 import * as git from '.';
 
-describe('platform/git', () => {
+describe(getName(__filename), () => {
   jest.setTimeout(15000);
 
   const masterCommitDate = new Date();
diff --git a/lib/util/host-rules.spec.ts b/lib/util/host-rules.spec.ts
index 03134fa572fa2ac6b6c4393b7c1b92c0c92c815a..e8172b4bc43a939555b0e36bb7f357bb067e4e3d 100644
--- a/lib/util/host-rules.spec.ts
+++ b/lib/util/host-rules.spec.ts
@@ -1,8 +1,9 @@
+import { getName } from '../../test/util';
 import { PLATFORM_TYPE_AZURE } from '../constants/platforms';
 import * as datasourceNuget from '../datasource/nuget';
 import { add, clear, find, findAll, hosts } from './host-rules';
 
-describe('util/host-rules', () => {
+describe(getName(__filename), () => {
   beforeEach(() => {
     clear();
   });
diff --git a/lib/util/mask.spec.ts b/lib/util/mask.spec.ts
index 7d0753ba9604d2a0930c7bd5399e37c3ac095e43..3e283611d6b1ef6177300135f3c5b94c446030d2 100644
--- a/lib/util/mask.spec.ts
+++ b/lib/util/mask.spec.ts
@@ -1,6 +1,7 @@
+import { getName } from '../../test/util';
 import { maskToken } from './mask';
 
-describe('util/mask', () => {
+describe(getName(__filename), () => {
   describe('.maskToken', () => {
     it('returns value if passed value is falsy', () => {
       expect(maskToken('')).toEqual('');
diff --git a/lib/util/object.spec.ts b/lib/util/object.spec.ts
index bfc925898efeace5a9f40d5c201f990a620d1404..9056fde1619400514e1841889b0ba919b16084e6 100644
--- a/lib/util/object.spec.ts
+++ b/lib/util/object.spec.ts
@@ -1,6 +1,7 @@
+import { getName } from '../../test/util';
 import { hasKey } from './object';
 
-describe('util/object', () => {
+describe(getName(__filename), () => {
   beforeEach(() => {
     jest.resetModules();
   });
diff --git a/lib/util/regex.spec.ts b/lib/util/regex.spec.ts
index b0dad6a8b310e9959316fb9bd18b4d972f2c256d..09dba7c08311b2779f2cbc7241286d2534260dd5 100644
--- a/lib/util/regex.spec.ts
+++ b/lib/util/regex.spec.ts
@@ -1,9 +1,10 @@
 // eslint-disable-next-line import/no-extraneous-dependencies
 import RE2 from 're2';
+import { getName } from '../../test/util';
 import { CONFIG_VALIDATION } from '../constants/error-messages';
 import { regEx } from './regex';
 
-describe('util/regex', () => {
+describe(getName(__filename), () => {
   beforeEach(() => {
     jest.resetModules();
   });
diff --git a/lib/util/sanitize.spec.ts b/lib/util/sanitize.spec.ts
index 341f2e285bc96a5ba5f304c589b4b4c21456e7b9..1796bce4aa28aa8dd916414e0caf3107a0c88180 100644
--- a/lib/util/sanitize.spec.ts
+++ b/lib/util/sanitize.spec.ts
@@ -1,6 +1,7 @@
+import { getName } from '../../test/util';
 import { add, clear, sanitize } from './sanitize';
 
-describe('util/sanitize', () => {
+describe(getName(__filename), () => {
   beforeEach(() => {
     clear();
   });
diff --git a/lib/util/split.spec.ts b/lib/util/split.spec.ts
index f1f6260bfcae16353234933edde193bb7f78c3a9..7c1a5237444e50c5df3b4d68a131bcea44ad5c60 100644
--- a/lib/util/split.spec.ts
+++ b/lib/util/split.spec.ts
@@ -1,6 +1,7 @@
+import { getName } from '../../test/util';
 import { addSplit, getSplits, splitInit } from './split';
 
-describe('util/split', () => {
+describe(getName(__filename), () => {
   it('adds splits and returns results', () => {
     splitInit();
     addSplit('one');
diff --git a/lib/util/template/__snapshots__/index.spec.ts.snap b/lib/util/template/__snapshots__/index.spec.ts.snap
index 45767123c60298734ff9821e314a21759cd478e4..e9fc7048944be908cb8b100e8c0e8b2cce380ec3 100644
--- a/lib/util/template/__snapshots__/index.spec.ts.snap
+++ b/lib/util/template/__snapshots__/index.spec.ts.snap
@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`util/template filters out disallowed fields 1`] = `"github token = \\"\\""`;
+exports[`util/template/index filters out disallowed fields 1`] = `"github token = \\"\\""`;
diff --git a/lib/util/template/index.spec.ts b/lib/util/template/index.spec.ts
index e7331e5dfcfab72ef3dbfa68005f9c1dc041c86b..2bd2b2101d3018e2d1b9c20d1bcc97fe9c75056a 100644
--- a/lib/util/template/index.spec.ts
+++ b/lib/util/template/index.spec.ts
@@ -1,7 +1,8 @@
+import { getName } from '../../../test/util';
 import { getOptions } from '../../config/definitions';
 import * as template from '.';
 
-describe('util/template', () => {
+describe(getName(__filename), () => {
   it('has valid exposed config options', () => {
     const allOptions = getOptions().map((option) => option.name);
     const missingOptions = template.exposedConfigOptions.filter(
diff --git a/lib/util/url.spec.ts b/lib/util/url.spec.ts
index b1a5d249801d88d5c238c348489e945a077a9864..fd4adfc56ff30126848746e9f39b2b7b6618151a 100644
--- a/lib/util/url.spec.ts
+++ b/lib/util/url.spec.ts
@@ -1,3 +1,4 @@
+import { getName } from '../../test/util';
 import {
   parseUrl,
   resolveBaseUrl,
@@ -5,7 +6,7 @@ import {
   validateUrl,
 } from './url';
 
-describe('util/url', () => {
+describe(getName(__filename), () => {
   test.each([
     ['http://foo.io', '', 'http://foo.io'],
     ['http://foo.io/', '', 'http://foo.io'],
diff --git a/lib/workers/branch/__snapshots__/commit.spec.ts.snap b/lib/workers/branch/__snapshots__/commit.spec.ts.snap
index d67db0c47a90fed0a4e1d2212317e6f076b0be54..a097ea37927e36e629263610ec734d2bc1365f8d 100644
--- a/lib/workers/branch/__snapshots__/commit.spec.ts.snap
+++ b/lib/workers/branch/__snapshots__/commit.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`workers/branch/automerge commitFilesToBranch commits files 1`] = `
+exports[`workers/branch/commit commitFilesToBranch commits files 1`] = `
 Array [
   Array [
     Object {
diff --git a/lib/workers/branch/auto-replace.spec.ts b/lib/workers/branch/auto-replace.spec.ts
index c7b56a3e828eb47f11ec2c46d247f9568b6e090d..0bf06f454badb637930407978d906c67861d2fd1 100644
--- a/lib/workers/branch/auto-replace.spec.ts
+++ b/lib/workers/branch/auto-replace.spec.ts
@@ -1,6 +1,6 @@
 import { readFileSync } from 'fs';
 import { resolve } from 'upath';
-import { defaultConfig } from '../../../test/util';
+import { defaultConfig, getName } from '../../../test/util';
 import { WORKER_FILE_UPDATE_FAILED } from '../../constants/error-messages';
 import { extractPackageFile } from '../../manager/html';
 import type { BranchUpgradeConfig } from '../types';
@@ -13,7 +13,7 @@ const sampleHtml = readFileSync(
 
 jest.mock('../../util/fs');
 
-describe('workers/branch/auto-replace', () => {
+describe(getName(__filename), () => {
   describe('doAutoReplace', () => {
     let reuseExistingBranch: boolean;
     let upgrade: BranchUpgradeConfig;
diff --git a/lib/workers/branch/automerge.spec.ts b/lib/workers/branch/automerge.spec.ts
index 4b8bce684dcc03f8b33613b96335544b638fde69..0d561f0080da7aeb039cb2c2ad358e944c41020f 100644
--- a/lib/workers/branch/automerge.spec.ts
+++ b/lib/workers/branch/automerge.spec.ts
@@ -1,4 +1,4 @@
-import { defaultConfig, git, platform } from '../../../test/util';
+import { defaultConfig, getName, git, platform } from '../../../test/util';
 import { RenovateConfig } from '../../config';
 import { setAdminConfig } from '../../config/admin';
 import { BranchStatus } from '../../types';
@@ -6,7 +6,7 @@ import { tryBranchAutomerge } from './automerge';
 
 jest.mock('../../util/git');
 
-describe('workers/branch/automerge', () => {
+describe(getName(__filename), () => {
   describe('tryBranchAutomerge', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/branch/check-existing.spec.ts b/lib/workers/branch/check-existing.spec.ts
index 8149ac4f40a1bbb31834e631a8bc056deb5eb98b..e92bcadf84c18d4f662e5636baa20fbc737619eb 100644
--- a/lib/workers/branch/check-existing.spec.ts
+++ b/lib/workers/branch/check-existing.spec.ts
@@ -1,9 +1,9 @@
-import { defaultConfig, partial, platform } from '../../../test/util';
+import { defaultConfig, getName, partial, platform } from '../../../test/util';
 import { PrState } from '../../types';
 import type { BranchConfig } from '../types';
 import { prAlreadyExisted } from './check-existing';
 
-describe('workers/branch/check-existing', () => {
+describe(getName(__filename), () => {
   describe('prAlreadyExisted', () => {
     let config: BranchConfig;
     beforeEach(() => {
diff --git a/lib/workers/branch/commit.spec.ts b/lib/workers/branch/commit.spec.ts
index 78b118918479e99cec9f514d79a335a1c85f373d..50d81df7e20c19101f32ed9264822cdd28eb0ad4 100644
--- a/lib/workers/branch/commit.spec.ts
+++ b/lib/workers/branch/commit.spec.ts
@@ -1,11 +1,11 @@
-import { defaultConfig, git, partial } from '../../../test/util';
+import { defaultConfig, getName, git, partial } from '../../../test/util';
 import { setAdminConfig } from '../../config/admin';
 import type { BranchConfig } from '../types';
 import { commitFilesToBranch } from './commit';
 
 jest.mock('../../util/git');
 
-describe('workers/branch/automerge', () => {
+describe(getName(__filename), () => {
   describe('commitFilesToBranch', () => {
     let config: BranchConfig;
     beforeEach(() => {
diff --git a/lib/workers/branch/get-updated.spec.ts b/lib/workers/branch/get-updated.spec.ts
index c02094f945624b9f2fafb7535f370e2e3469c4c2..5da097965c79d6f91c062ab36fde55ce51e79765 100644
--- a/lib/workers/branch/get-updated.spec.ts
+++ b/lib/workers/branch/get-updated.spec.ts
@@ -1,4 +1,4 @@
-import { defaultConfig, git, mocked } from '../../../test/util';
+import { defaultConfig, getName, git, mocked } from '../../../test/util';
 import * as datasourceGitRefs from '../../datasource/git-refs';
 import * as _composer from '../../manager/composer';
 import * as _gitSubmodules from '../../manager/git-submodules';
@@ -21,7 +21,7 @@ jest.mock('../../manager/git-submodules');
 jest.mock('../../util/git');
 jest.mock('./auto-replace');
 
-describe('workers/branch/get-updated', () => {
+describe(getName(__filename), () => {
   describe('getUpdatedPackageFiles()', () => {
     let config: BranchConfig;
     beforeEach(() => {
diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts
index 7f78d75eccca14513d88823023d90bf200f66069..359b54c823910291bef033453e2084ed7ea027e6 100644
--- a/lib/workers/branch/index.spec.ts
+++ b/lib/workers/branch/index.spec.ts
@@ -1,5 +1,11 @@
 import * as _fs from 'fs-extra';
-import { defaultConfig, git, mocked, platform } from '../../../test/util';
+import {
+  defaultConfig,
+  getName,
+  git,
+  mocked,
+  platform,
+} from '../../../test/util';
 import { setAdminConfig } from '../../config/admin';
 import {
   MANAGER_LOCKFILE_ERROR,
@@ -53,7 +59,7 @@ const sanitize = mocked(_sanitize);
 const fs = mocked(_fs);
 const limits = mocked(_limits);
 
-describe('workers/branch', () => {
+describe(getName(__filename), () => {
   describe('processBranch', () => {
     const updatedPackageFiles: PackageFilesResult = {
       updatedPackageFiles: [],
diff --git a/lib/workers/branch/lock-files/__snapshots__/index.spec.ts.snap b/lib/workers/branch/lock-files/__snapshots__/index.spec.ts.snap
index 09f1a6b4bd8e6ac424510c35e0e519420aee388e..8553abb9029207a8a83e8796435b1256892614c3 100644
--- a/lib/workers/branch/lock-files/__snapshots__/index.spec.ts.snap
+++ b/lib/workers/branch/lock-files/__snapshots__/index.spec.ts.snap
@@ -1,13 +1,13 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`manager/npm/post-update getAdditionalFiles returns no error and empty lockfiles if lock file maintenance exists 1`] = `
+exports[`workers/branch/lock-files/index getAdditionalFiles returns no error and empty lockfiles if lock file maintenance exists 1`] = `
 Object {
   "artifactErrors": Array [],
   "updatedArtifacts": Array [],
 }
 `;
 
-exports[`manager/npm/post-update getAdditionalFiles returns no error and empty lockfiles if updateLockFiles false 1`] = `
+exports[`workers/branch/lock-files/index getAdditionalFiles returns no error and empty lockfiles if updateLockFiles false 1`] = `
 Object {
   "artifactErrors": Array [],
   "updatedArtifacts": Array [],
diff --git a/lib/workers/branch/lock-files/index.spec.ts b/lib/workers/branch/lock-files/index.spec.ts
index e78c05e28ce2e871bb763ad9bd890f1bbd0a3dac..cc4bb406f60be979363fbbc8e10dfa0a12469822 100644
--- a/lib/workers/branch/lock-files/index.spec.ts
+++ b/lib/workers/branch/lock-files/index.spec.ts
@@ -1,4 +1,4 @@
-import { git, mocked } from '../../../../test/util';
+import { getName, git, mocked } from '../../../../test/util';
 import { getConfig } from '../../../config/defaults';
 import * as _lockFiles from '../../../manager/npm/post-update';
 import * as _lerna from '../../../manager/npm/post-update/lerna';
@@ -27,7 +27,7 @@ hostRules.find = jest.fn((_) => ({
 
 const { writeUpdatedPackageFiles, getAdditionalFiles } = lockFiles;
 
-describe('manager/npm/post-update', () => {
+describe(getName(__filename), () => {
   describe('writeUpdatedPackageFiles', () => {
     let config: PostUpdateConfig;
     beforeEach(() => {
diff --git a/lib/workers/branch/schedule.spec.ts b/lib/workers/branch/schedule.spec.ts
index ccd5f46f624a5b65628df98bff86196959fa04b8..24c2b4b6d47d20cf2716cfc0c0cdc50d2fe3861e 100644
--- a/lib/workers/branch/schedule.spec.ts
+++ b/lib/workers/branch/schedule.spec.ts
@@ -1,8 +1,9 @@
 import mockDate from 'mockdate';
+import { getName } from '../../../test/util';
 import { RenovateConfig } from '../../config';
 import * as schedule from './schedule';
 
-describe('workers/branch/schedule', () => {
+describe(getName(__filename), () => {
   describe('hasValidTimezone(schedule)', () => {
     it('returns false for invalid timezone', () => {
       expect(schedule.hasValidTimezone('Asia')[0]).toBe(false);
diff --git a/lib/workers/branch/status-checks.spec.ts b/lib/workers/branch/status-checks.spec.ts
index ed9f3b31915e967e299d7ff98597a51d23843e81..8f1ec712b6ff809a9e21f82612893fe18d5c9c29 100644
--- a/lib/workers/branch/status-checks.spec.ts
+++ b/lib/workers/branch/status-checks.spec.ts
@@ -1,8 +1,8 @@
-import { defaultConfig, platform } from '../../../test/util';
+import { defaultConfig, getName, platform } from '../../../test/util';
 import { BranchStatus } from '../../types';
 import { StabilityConfig, setStability } from './status-checks';
 
-describe('workers/branch/status-checks', () => {
+describe(getName(__filename), () => {
   describe('setStability', () => {
     let config: StabilityConfig;
     beforeEach(() => {
diff --git a/lib/workers/global/autodiscover.spec.ts b/lib/workers/global/autodiscover.spec.ts
index 4023c2c4d4b821a211c2d6c8b1589f59bfa88baf..7779fcd41ff571a07318db31a3a1ab37a9e2e756 100644
--- a/lib/workers/global/autodiscover.spec.ts
+++ b/lib/workers/global/autodiscover.spec.ts
@@ -1,3 +1,4 @@
+import { getName } from '../../../test/util';
 import { RenovateConfig } from '../../config';
 import { PLATFORM_TYPE_GITHUB } from '../../constants/platforms';
 import * as platform from '../../platform';
@@ -12,7 +13,7 @@ jest.unmock('../../platform');
 const hostRules = _hostRules;
 const ghApi: jest.Mocked<typeof _ghApi> = _ghApi as never;
 
-describe('lib/workers/global/autodiscover', () => {
+describe(getName(__filename), () => {
   let config: RenovateConfig;
   beforeEach(async () => {
     jest.resetAllMocks();
diff --git a/lib/workers/global/index.spec.ts b/lib/workers/global/index.spec.ts
index f48ca89c306305cf912f4612a6f48fc90cf582b6..0ad22392d4bd1906a39256395425553f9a4b37cf 100644
--- a/lib/workers/global/index.spec.ts
+++ b/lib/workers/global/index.spec.ts
@@ -1,5 +1,5 @@
 import { ERROR, WARN } from 'bunyan';
-import { logger } from '../../../test/util';
+import { getName, logger } from '../../../test/util';
 import * as _configParser from '../../config';
 import {
   PLATFORM_TYPE_GITHUB,
@@ -19,7 +19,7 @@ const configParser: jest.Mocked<typeof _configParser> = _configParser as never;
 const platform: jest.Mocked<typeof _platform> = _platform as never;
 const limits = _limits;
 
-describe('lib/workers/global', () => {
+describe(getName(__filename), () => {
   beforeEach(() => {
     jest.resetAllMocks();
     logger.getProblems.mockImplementationOnce(() => []);
diff --git a/lib/workers/global/limits.spec.ts b/lib/workers/global/limits.spec.ts
index 8714b928698fd29c34797e777469725db0c25f3d..73a6b401f6575ec97db3eb7904054c34b164134d 100644
--- a/lib/workers/global/limits.spec.ts
+++ b/lib/workers/global/limits.spec.ts
@@ -1,3 +1,4 @@
+import { getName } from '../../../test/util';
 import {
   Limit,
   incLimitedValue,
@@ -6,7 +7,7 @@ import {
   setMaxLimit,
 } from './limits';
 
-describe('lib/workers/global/limits', () => {
+describe(getName(__filename), () => {
   beforeEach(() => {
     resetAllLimits();
   });
diff --git a/lib/workers/pr/__snapshots__/index.spec.ts.snap b/lib/workers/pr/__snapshots__/index.spec.ts.snap
index a56ca898a976df7875f9ea05777e6f38f0b06bb5..13361625d535468ae616031ca28d7ef706a91ab6 100644
--- a/lib/workers/pr/__snapshots__/index.spec.ts.snap
+++ b/lib/workers/pr/__snapshots__/index.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`workers/pr ensurePr should add and deduplicate additionalReviewers on new PR 1`] = `
+exports[`workers/pr/index ensurePr should add and deduplicate additionalReviewers on new PR 1`] = `
 Array [
   Array [
     undefined,
@@ -14,7 +14,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should add and deduplicate additionalReviewers to empty reviewers on new PR 1`] = `
+exports[`workers/pr/index ensurePr should add and deduplicate additionalReviewers to empty reviewers on new PR 1`] = `
 Array [
   Array [
     undefined,
@@ -28,7 +28,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should add assignees and reviewers to new PR 1`] = `
+exports[`workers/pr/index ensurePr should add assignees and reviewers to new PR 1`] = `
 Array [
   Array [
     undefined,
@@ -40,7 +40,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should add assignees and reviewers to new PR 2`] = `
+exports[`workers/pr/index ensurePr should add assignees and reviewers to new PR 2`] = `
 Array [
   Array [
     undefined,
@@ -52,7 +52,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should add note about Pin 1`] = `
+exports[`workers/pr/index ensurePr should add note about Pin 1`] = `
 Array [
   Object {
     "draftPR": false,
@@ -71,7 +71,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should combine assignees from code owners and config 1`] = `
+exports[`workers/pr/index ensurePr should combine assignees from code owners and config 1`] = `
 Array [
   Array [
     undefined,
@@ -84,7 +84,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should create PR if success 1`] = `
+exports[`workers/pr/index ensurePr should create PR if success 1`] = `
 Array [
   Object {
     "draftPR": false,
@@ -103,7 +103,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should create PR if success for gitlab deps 1`] = `
+exports[`workers/pr/index ensurePr should create PR if success for gitlab deps 1`] = `
 Array [
   Object {
     "draftPR": false,
@@ -122,7 +122,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should create group PR 1`] = `
+exports[`workers/pr/index ensurePr should create group PR 1`] = `
 Array [
   Object {
     "draftPR": false,
@@ -141,7 +141,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should create privateRepo PR if success 1`] = `
+exports[`workers/pr/index ensurePr should create privateRepo PR if success 1`] = `
 Array [
   Object {
     "draftPR": false,
@@ -160,7 +160,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should determine assignees from code owners 1`] = `
+exports[`workers/pr/index ensurePr should determine assignees from code owners 1`] = `
 Array [
   Array [
     undefined,
@@ -172,7 +172,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should determine reviewers from code owners 1`] = `
+exports[`workers/pr/index ensurePr should determine reviewers from code owners 1`] = `
 Array [
   Array [
     undefined,
@@ -184,7 +184,7 @@ Array [
 ]
 `;
 
-exports[`workers/pr ensurePr should return modified existing PR 1`] = `
+exports[`workers/pr/index ensurePr should return modified existing PR 1`] = `
 Object {
   "body": "This PR contains the following updates:\\n\\n| Package | Type | Update | Change |\\n|---|---|---|---|\\n| [dummy](https://dummy.com) ([source](https://github.com/renovateapp/dummy), [changelog](https://github.com/renovateapp/dummy/changelog.md)) | devDependencies | minor | \`1.0.0\` -> \`1.1.0\` |\\n\\n---\\n\\n### Release Notes\\n\\n<details>\\n<summary>renovateapp/dummy</summary>\\n\\n### [\`v1.1.0\`](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n[Compare Source](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n</details>\\n\\n---\\n\\n### Configuration\\n\\n:date: **Schedule**: \\"before 5am\\" (UTC).\\n\\n:vertical_traffic_light: **Automerge**: Enabled.\\n\\n:recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.\\n\\n:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.\\n\\n---\\n\\n - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.\\n\\n---\\n\\nThis PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).",
   "displayNumber": "Existing PR",
@@ -192,7 +192,7 @@ Object {
 }
 `;
 
-exports[`workers/pr ensurePr should return modified existing PR title 1`] = `
+exports[`workers/pr/index ensurePr should return modified existing PR title 1`] = `
 Object {
   "body": "This PR contains the following updates:\\n\\n| Package | Type | Update | Change |\\n|---|---|---|---|\\n| [dummy](https://dummy.com) ([source](https://github.com/renovateapp/dummy), [changelog](https://github.com/renovateapp/dummy/changelog.md)) | devDependencies | minor | \`1.0.0\` -> \`1.1.0\` |\\n\\n---\\n\\n### Release Notes\\n\\n<details>\\n<summary>renovateapp/dummy</summary>\\n\\n### [\`v1.1.0\`](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n[Compare Source](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n</details>\\n\\n---\\n\\n### Configuration\\n\\n:date: **Schedule**: \\"before 5am\\" (UTC).\\n\\n:vertical_traffic_light: **Automerge**: Enabled.\\n\\n:recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.\\n\\n:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.\\n\\n---\\n\\n - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.\\n\\n---\\n\\nThis PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).",
   "displayNumber": "Existing PR",
@@ -200,4 +200,4 @@ Object {
 }
 `;
 
-exports[`workers/pr ensurePr should return unmodified existing PR 1`] = `Array []`;
+exports[`workers/pr/index ensurePr should return unmodified existing PR 1`] = `Array []`;
diff --git a/lib/workers/pr/body/controls.spec.ts b/lib/workers/pr/body/controls.spec.ts
index 0f31b083b7d983252efdbd200f06f977f67bbb75..e9efa97beca5f81cd606c702dac6ad43b1fcc2f3 100644
--- a/lib/workers/pr/body/controls.spec.ts
+++ b/lib/workers/pr/body/controls.spec.ts
@@ -1,11 +1,11 @@
 import { mock } from 'jest-mock-extended';
-import { git } from '../../../../test/util';
+import { getName, git } from '../../../../test/util';
 import { BranchConfig } from '../../types';
 import { getControls } from './controls';
 
 jest.mock('../../../util/git');
 
-describe('workers/pr/body/controls', () => {
+describe(getName(__filename), () => {
   describe('getControls', () => {
     let branchConfig: BranchConfig;
     beforeEach(() => {
diff --git a/lib/workers/pr/code-owners.spec.ts b/lib/workers/pr/code-owners.spec.ts
index 8832dfddbd9f4ddae4f24217cced4e86bd47c453..b1c7ec28d84b37dc4d7078bd32310d07c5130d18 100644
--- a/lib/workers/pr/code-owners.spec.ts
+++ b/lib/workers/pr/code-owners.spec.ts
@@ -1,12 +1,12 @@
 import { mock } from 'jest-mock-extended';
-import { fs, git } from '../../../test/util';
+import { fs, getName, git } from '../../../test/util';
 import { Pr } from '../../platform';
 import { codeOwnersForPr } from './code-owners';
 
 jest.mock('../../util/fs');
 jest.mock('../../util/git');
 
-describe('workers/pr/code-owners', () => {
+describe(getName(__filename), () => {
   describe('codeOwnersForPr', () => {
     let pr: Pr;
     beforeEach(() => {
diff --git a/lib/workers/pr/index.spec.ts b/lib/workers/pr/index.spec.ts
index 67d2f61446fe2181e14d227d6f647bfbf01ef4b6..46be91afb6a552cf27c415bcfdb26295dc4f0394 100644
--- a/lib/workers/pr/index.spec.ts
+++ b/lib/workers/pr/index.spec.ts
@@ -1,4 +1,4 @@
-import { git, mocked, partial } from '../../../test/util';
+import { getName, git, mocked, partial } from '../../../test/util';
 import { getConfig } from '../../config/defaults';
 import { PLATFORM_TYPE_GITLAB } from '../../constants/platforms';
 import { Pr, platform as _platform } from '../../platform';
@@ -98,7 +98,7 @@ function setupGitlabChangelogMock() {
   gitlabChangelogHelper.getChangeLogJSON.mockResolvedValue(resultValue);
 }
 
-describe('workers/pr', () => {
+describe(getName(__filename), () => {
   describe('checkAutoMerge(pr, config)', () => {
     let config: BranchConfig;
     let pr: Pr;
diff --git a/lib/workers/repository/__snapshots__/dependency-dashboard.spec.ts.snap b/lib/workers/repository/__snapshots__/dependency-dashboard.spec.ts.snap
index 81ae0077b71d82d015db95af1a42647c6bab79c9..03aae83ed10094dcbd7806109cc3dea153163855 100644
--- a/lib/workers/repository/__snapshots__/dependency-dashboard.spec.ts.snap
+++ b/lib/workers/repository/__snapshots__/dependency-dashboard.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`workers/repository/master-issue ensureMasterIssue() contains logged problems 1`] = `
+exports[`workers/repository/dependency-dashboard ensureMasterIssue() contains logged problems 1`] = `
 "This issue contains a list of Renovate updates and their statuses.
 
 ## Repository problems
@@ -22,7 +22,7 @@ These updates await pending status checks. To force their creation now, check th
 "
 `;
 
-exports[`workers/repository/master-issue ensureMasterIssue() open or update Dependency Dashboard when all branches are closed and dependencyDashboardAutoclose is false 1`] = `
+exports[`workers/repository/dependency-dashboard ensureMasterIssue() open or update Dependency Dashboard when all branches are closed and dependencyDashboardAutoclose is false 1`] = `
 "This issue contains a list of Renovate updates and their statuses.
 
 This repository currently has no open or pending branches.
@@ -32,7 +32,7 @@ And this is a footer
 "
 `;
 
-exports[`workers/repository/master-issue ensureMasterIssue() open or update Dependency Dashboard when rules contain approvals 1`] = `
+exports[`workers/repository/dependency-dashboard ensureMasterIssue() open or update Dependency Dashboard when rules contain approvals 1`] = `
 "This issue contains a list of Renovate updates and their statuses.
 
 This repository currently has no open or pending branches.
diff --git a/lib/workers/repository/__snapshots__/index.spec.ts.snap b/lib/workers/repository/__snapshots__/index.spec.ts.snap
index 220f09db93b922ddb0af8cdc5ee30c7af77338af..b51587e46bcac562d14ec54a5ac03c61816b6910 100644
--- a/lib/workers/repository/__snapshots__/index.spec.ts.snap
+++ b/lib/workers/repository/__snapshots__/index.spec.ts.snap
@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`workers/repository renovateRepository() runs 1`] = `undefined`;
+exports[`workers/repository/index renovateRepository() runs 1`] = `undefined`;
diff --git a/lib/workers/repository/configured.spec.ts b/lib/workers/repository/configured.spec.ts
index 521af441239e1f6b613d1fc9fd705baa83d66ba1..e65152d94fc2bd30c70af0dd8fe50519d0bb0525 100644
--- a/lib/workers/repository/configured.spec.ts
+++ b/lib/workers/repository/configured.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig } from '../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../test/util';
 import { checkIfConfigured } from './configured';
 
 let config: RenovateConfig;
@@ -7,7 +7,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe('workers/repository/configured', () => {
+describe(getName(__filename), () => {
   describe('checkIfConfigured()', () => {
     it('returns', () => {
       expect(() => checkIfConfigured(config)).not.toThrow();
diff --git a/lib/workers/repository/dependency-dashboard.spec.ts b/lib/workers/repository/dependency-dashboard.spec.ts
index e53bd76101a488265391023acc812fff14998726..caaa22e9889dd29a43c5b705a442affcead7b3f0 100644
--- a/lib/workers/repository/dependency-dashboard.spec.ts
+++ b/lib/workers/repository/dependency-dashboard.spec.ts
@@ -4,6 +4,7 @@ import { mock } from 'jest-mock-extended';
 import {
   RenovateConfig,
   getConfig,
+  getName,
   logger,
   platform,
 } from '../../../test/util';
@@ -49,7 +50,7 @@ async function dryRun(
   expect(platform.findPr).toHaveBeenCalledTimes(findPrCalls);
 }
 
-describe('workers/repository/master-issue', () => {
+describe(getName(__filename), () => {
   describe('ensureMasterIssue()', () => {
     beforeEach(() => {
       setAdminConfig();
diff --git a/lib/workers/repository/error-config.spec.ts b/lib/workers/repository/error-config.spec.ts
index 499dd9065caf52d61c724613c5b9bd34c2143324..6c5f39d1a615f2ebe75eca2527ead94c8894e00c 100644
--- a/lib/workers/repository/error-config.spec.ts
+++ b/lib/workers/repository/error-config.spec.ts
@@ -1,5 +1,10 @@
 import { mock } from 'jest-mock-extended';
-import { RenovateConfig, getConfig, platform } from '../../../test/util';
+import {
+  RenovateConfig,
+  getConfig,
+  getName,
+  platform,
+} from '../../../test/util';
 import { setAdminConfig } from '../../config/admin';
 import { CONFIG_VALIDATION } from '../../constants/error-messages';
 import { Pr } from '../../platform';
@@ -14,7 +19,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe('workers/repository/error-config', () => {
+describe(getName(__filename), () => {
   describe('raiseConfigWarningIssue()', () => {
     beforeEach(() => {
       setAdminConfig();
diff --git a/lib/workers/repository/error.spec.ts b/lib/workers/repository/error.spec.ts
index 4d79735e3c2a2675992d2741062c3ae6564da301..6d59622d32aed4fe06a3947284fb4afcf47febb9 100644
--- a/lib/workers/repository/error.spec.ts
+++ b/lib/workers/repository/error.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig } from '../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../test/util';
 import {
   CONFIG_SECRETS_EXPOSED,
   CONFIG_VALIDATION,
@@ -38,7 +38,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe('workers/repository/error', () => {
+describe(getName(__filename), () => {
   describe('handleError()', () => {
     const errors = [
       REPOSITORY_UNINITIATED,
diff --git a/lib/workers/repository/extract/file-match.spec.ts b/lib/workers/repository/extract/file-match.spec.ts
index f9b100a59d6193a50d4117fc84ce3e70d820c492..982a9a61b3b239db9fecfa89db4dece0d1ead7cd 100644
--- a/lib/workers/repository/extract/file-match.spec.ts
+++ b/lib/workers/repository/extract/file-match.spec.ts
@@ -1,9 +1,9 @@
-import { RenovateConfig } from '../../../../test/util';
+import { RenovateConfig, getName } from '../../../../test/util';
 import * as fileMatch from './file-match';
 
 jest.mock('../../../util/git');
 
-describe('workers/repository/extract/file-match', () => {
+describe(getName(__filename), () => {
   const fileList = ['package.json', 'frontend/package.json'];
   describe('getIncludedFiles()', () => {
     it('returns fileList if no includePaths', () => {
diff --git a/lib/workers/repository/extract/index.spec.ts b/lib/workers/repository/extract/index.spec.ts
index fdfff9e5164c0c475330cfb3bbaeb07e686747a1..d4f3e54f95bd9969793853bcda0845f8f8f68bd5 100644
--- a/lib/workers/repository/extract/index.spec.ts
+++ b/lib/workers/repository/extract/index.spec.ts
@@ -1,4 +1,4 @@
-import { defaultConfig, git, mocked } from '../../../../test/util';
+import { defaultConfig, getName, git, mocked } from '../../../../test/util';
 import { RenovateConfig } from '../../../config';
 import * as _managerFiles from './manager-files';
 import { extractAllDependencies } from '.';
@@ -8,7 +8,7 @@ jest.mock('../../../util/git');
 
 const managerFiles = mocked(_managerFiles);
 
-describe('workers/repository/extract/index', () => {
+describe(getName(__filename), () => {
   describe('extractAllDependencies()', () => {
     let config: RenovateConfig;
     const fileList = ['README', 'package.json', 'tasks/ansible.yaml'];
diff --git a/lib/workers/repository/extract/manager-files.spec.ts b/lib/workers/repository/extract/manager-files.spec.ts
index 8a5e8402819f7b4ca2ff4d3215e65149404fcfff..8666f889219a3e1408dfc95c4a943a79b5b88c88 100644
--- a/lib/workers/repository/extract/manager-files.spec.ts
+++ b/lib/workers/repository/extract/manager-files.spec.ts
@@ -1,4 +1,4 @@
-import { fs, getConfig, mocked } from '../../../../test/util';
+import { fs, getConfig, getName, mocked } from '../../../../test/util';
 import { RenovateConfig } from '../../../config';
 import * as _html from '../../../manager/html';
 import * as _fileMatch from './file-match';
@@ -11,7 +11,7 @@ jest.mock('../../../util/fs');
 const fileMatch = mocked(_fileMatch);
 const html = mocked(_html);
 
-describe('workers/repository/extract/manager-files', () => {
+describe(getName(__filename), () => {
   describe('getManagerPackageFiles()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/finalise/prune.spec.ts b/lib/workers/repository/finalise/prune.spec.ts
index f4e78e436f87f3fb3dee817abf8e34b124eb08a5..e8cd000e469418323222a29ffcf925b8650ab2bc 100644
--- a/lib/workers/repository/finalise/prune.spec.ts
+++ b/lib/workers/repository/finalise/prune.spec.ts
@@ -1,6 +1,7 @@
 import {
   RenovateConfig,
   getConfig,
+  getName,
   git,
   platform,
 } from '../../../../test/util';
@@ -19,7 +20,7 @@ beforeEach(() => {
   config.warnings = [];
 });
 
-describe('workers/repository/finalise/prune', () => {
+describe(getName(__filename), () => {
   describe('pruneStaleBranches()', () => {
     beforeEach(() => {
       setAdminConfig();
diff --git a/lib/workers/repository/index.spec.ts b/lib/workers/repository/index.spec.ts
index 0768a1b5aff159c73b22f02c2368ab76e2cff7b3..0d5d50fa13855c883d1057e244ab42a1f22fbad8 100644
--- a/lib/workers/repository/index.spec.ts
+++ b/lib/workers/repository/index.spec.ts
@@ -1,6 +1,6 @@
 import { mock } from 'jest-mock-extended';
 
-import { RenovateConfig, getConfig, mocked } from '../../../test/util';
+import { RenovateConfig, getConfig, getName, mocked } from '../../../test/util';
 import * as _process from './process';
 import { ExtractResult } from './process/extract-update';
 import { renovateRepository } from '.';
@@ -12,7 +12,7 @@ jest.mock('./process');
 jest.mock('./result');
 jest.mock('./error');
 
-describe('workers/repository', () => {
+describe(getName(__filename), () => {
   describe('renovateRepository()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/init/__snapshots__/index.spec.ts.snap b/lib/workers/repository/init/__snapshots__/index.spec.ts.snap
index 639a7839bf67401330462667ca8bcc001a41dba5..802c8eb539672ef46f7dc6c6167e0701a8039d37 100644
--- a/lib/workers/repository/init/__snapshots__/index.spec.ts.snap
+++ b/lib/workers/repository/init/__snapshots__/index.spec.ts.snap
@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`workers/repository/init initRepo runs 1`] = `Object {}`;
+exports[`workers/repository/init/index initRepo runs 1`] = `Object {}`;
diff --git a/lib/workers/repository/init/apis.spec.ts b/lib/workers/repository/init/apis.spec.ts
index b35f28d6f2e8b3cd0137ca87c5df66d4ebe56637..6a24a20e8cd1ad147b49cdb22312784fc9ffe0e5 100644
--- a/lib/workers/repository/init/apis.spec.ts
+++ b/lib/workers/repository/init/apis.spec.ts
@@ -1,11 +1,16 @@
-import { RenovateConfig, getConfig, platform } from '../../../../test/util';
+import {
+  RenovateConfig,
+  getConfig,
+  getName,
+  platform,
+} from '../../../../test/util';
 import {
   REPOSITORY_DISABLED,
   REPOSITORY_FORKED,
 } from '../../../constants/error-messages';
 import { initApis } from './apis';
 
-describe('workers/repository/init/apis', () => {
+describe(getName(__filename), () => {
   describe('initApis', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/init/cache.spec.ts b/lib/workers/repository/init/cache.spec.ts
index 720e45e28c36bd6f3e86fcd463ce80eda1de4f56..56fcc98e793d0e1e831a440a2596ebf665e2aa02 100644
--- a/lib/workers/repository/init/cache.spec.ts
+++ b/lib/workers/repository/init/cache.spec.ts
@@ -1,7 +1,7 @@
-import { RenovateConfig, getConfig } from '../../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../../test/util';
 import { initializeCaches } from './cache';
 
-describe('workers/repository/init/cache', () => {
+describe(getName(__filename), () => {
   describe('initializeCaches()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/init/config.spec.ts b/lib/workers/repository/init/config.spec.ts
index a28ca94ba861e8a771138af2105421b28891e5f0..aa05fbf28ae731b205c3bc0853a7c1afaab02941 100644
--- a/lib/workers/repository/init/config.spec.ts
+++ b/lib/workers/repository/init/config.spec.ts
@@ -2,6 +2,7 @@ import {
   RenovateConfig,
   fs,
   getConfig,
+  getName,
   git,
   mocked,
 } from '../../../../test/util';
@@ -30,7 +31,7 @@ beforeEach(() => {
 jest.mock('../../../config/migration');
 jest.mock('../../../config/migrate-validate');
 
-describe('workers/repository/init/config', () => {
+describe(getName(__filename), () => {
   describe('detectRepoFileConfig()', () => {
     it('returns config if not found', () => {
       git.getFileList.mockResolvedValue(['package.json']);
diff --git a/lib/workers/repository/init/index.spec.ts b/lib/workers/repository/init/index.spec.ts
index c4a27665f6f7a53f98ae33cc094731fe524fafca..63a04cbcce162416fa2cd4d482a462211eb2bb0b 100644
--- a/lib/workers/repository/init/index.spec.ts
+++ b/lib/workers/repository/init/index.spec.ts
@@ -1,4 +1,4 @@
-import { mocked } from '../../../../test/util';
+import { getName, mocked } from '../../../../test/util';
 import * as _secrets from '../../../config/secrets';
 import * as _onboarding from '../onboarding/branch';
 import * as _apis from './apis';
@@ -18,7 +18,7 @@ const config = mocked(_config);
 const onboarding = mocked(_onboarding);
 const secrets = mocked(_secrets);
 
-describe('workers/repository/init', () => {
+describe(getName(__filename), () => {
   describe('initRepo', () => {
     it('runs', async () => {
       apis.initApis.mockResolvedValue({} as never);
diff --git a/lib/workers/repository/init/semantic.spec.ts b/lib/workers/repository/init/semantic.spec.ts
index 0a5b37fdd8e10286ba672a2813605065ce93dd81..ab6def7cd3c84912726ed4c82eabe7be58348f2b 100644
--- a/lib/workers/repository/init/semantic.spec.ts
+++ b/lib/workers/repository/init/semantic.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig, git } from '../../../../test/util';
+import { RenovateConfig, getConfig, getName, git } from '../../../../test/util';
 import { detectSemanticCommits } from './semantic';
 
 jest.mock('../../../util/git');
@@ -11,7 +11,7 @@ beforeEach(() => {
   config.warnings = [];
 });
 
-describe('workers/repository/init/semantic', () => {
+describe(getName(__filename), () => {
   describe('detectSemanticCommits()', () => {
     it('detects false if unknown', async () => {
       config.semanticCommits = null;
diff --git a/lib/workers/repository/init/vulnerability.spec.ts b/lib/workers/repository/init/vulnerability.spec.ts
index cec4f4fe194727725cbb2a3de12a76341393b62c..c3e648704da1c08d5104d0896133864599fe5e21 100644
--- a/lib/workers/repository/init/vulnerability.spec.ts
+++ b/lib/workers/repository/init/vulnerability.spec.ts
@@ -1,6 +1,7 @@
 import {
   RenovateConfig,
   defaultConfig,
+  getName,
   partial,
   platform,
 } from '../../../../test/util';
@@ -14,7 +15,7 @@ beforeEach(() => {
   config = JSON.parse(JSON.stringify(defaultConfig));
 });
 
-describe('workers/repository/init/vulnerability', () => {
+describe(getName(__filename), () => {
   describe('detectVulnerabilityAlerts()', () => {
     it('returns if alerts are missing', async () => {
       delete config.vulnerabilityAlerts;
diff --git a/lib/workers/repository/onboarding/branch/__snapshots__/index.spec.ts.snap b/lib/workers/repository/onboarding/branch/__snapshots__/index.spec.ts.snap
index eef4ff259d7f802e0c7d3e6433e545589e8c64b4..c9031a0ff8a37ec81b01d8b96528364b49c3aadd 100644
--- a/lib/workers/repository/onboarding/branch/__snapshots__/index.spec.ts.snap
+++ b/lib/workers/repository/onboarding/branch/__snapshots__/index.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`workers/repository/onboarding/branch checkOnboardingBranch has default onboarding config 1`] = `
+exports[`workers/repository/onboarding/branch/index checkOnboardingBranch has default onboarding config 1`] = `
 "{
   \\"$schema\\": \\"https://docs.renovatebot.com/renovate-schema.json\\"
 }
diff --git a/lib/workers/repository/onboarding/branch/config.spec.ts b/lib/workers/repository/onboarding/branch/config.spec.ts
index 3b4aee3773a9058e76cae004252fcd4d987d8cde..2755145829367947ceaba1021342b6c88484b035 100644
--- a/lib/workers/repository/onboarding/branch/config.spec.ts
+++ b/lib/workers/repository/onboarding/branch/config.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig } from '../../../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
 import * as presets from '../../../../config/presets/local';
 import { PRESET_DEP_NOT_FOUND } from '../../../../config/presets/util';
 import { getOnboardingConfig } from './config';
@@ -7,7 +7,7 @@ jest.mock('../../../../config/presets/local');
 
 const mockedPresets = presets as jest.Mocked<typeof presets>;
 
-describe('workers/repository/onboarding/branch', () => {
+describe(getName(__filename), () => {
   let config: RenovateConfig;
   let onboardingConfig: string;
   beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/branch/create.spec.ts b/lib/workers/repository/onboarding/branch/create.spec.ts
index 7f11597188c6f21844f8bd7b567774d3aff53c4f..3ebd563534dddada1edc914885e80c18b77e7d9e 100644
--- a/lib/workers/repository/onboarding/branch/create.spec.ts
+++ b/lib/workers/repository/onboarding/branch/create.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig } from '../../../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
 import { commitFiles } from '../../../../util/git';
 import { COMMIT_MESSAGE_PREFIX_SEPARATOR } from '../../util/commit-message';
 import { createOnboardingBranch } from './create';
@@ -25,7 +25,7 @@ const buildExpectedCommitFilesArgument = (
   message,
 });
 
-describe('workers/repository/onboarding/branch', () => {
+describe(getName(__filename), () => {
   let config: RenovateConfig;
   beforeEach(() => {
     jest.clearAllMocks();
diff --git a/lib/workers/repository/onboarding/branch/index.spec.ts b/lib/workers/repository/onboarding/branch/index.spec.ts
index 6d60cd69106fd271c2c19a3b70964428d288551a..52e92a19480934f173c29adcbdf5a16499a62ee9 100644
--- a/lib/workers/repository/onboarding/branch/index.spec.ts
+++ b/lib/workers/repository/onboarding/branch/index.spec.ts
@@ -3,6 +3,7 @@ import {
   RenovateConfig,
   fs,
   getConfig,
+  getName,
   git,
   platform,
 } from '../../../../../test/util';
@@ -17,7 +18,7 @@ jest.mock('../../../../workers/repository/onboarding/branch/rebase');
 jest.mock('../../../../util/fs');
 jest.mock('../../../../util/git');
 
-describe('workers/repository/onboarding/branch', () => {
+describe(getName(__filename), () => {
   describe('checkOnboardingBranch', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/branch/rebase.spec.ts b/lib/workers/repository/onboarding/branch/rebase.spec.ts
index 4d3ea90d7d84a79179601dfa2aa6f1aa52c1c977..90a802a0d2666a4bcfcf07c0a710656e80973383 100644
--- a/lib/workers/repository/onboarding/branch/rebase.spec.ts
+++ b/lib/workers/repository/onboarding/branch/rebase.spec.ts
@@ -1,9 +1,14 @@
-import { RenovateConfig, defaultConfig, git } from '../../../../../test/util';
+import {
+  RenovateConfig,
+  defaultConfig,
+  getName,
+  git,
+} from '../../../../../test/util';
 import { rebaseOnboardingBranch } from './rebase';
 
 jest.mock('../../../../util/git');
 
-describe('workers/repository/onboarding/branch/rebase', () => {
+describe(getName(__filename), () => {
   describe('rebaseOnboardingBranch()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/pr/base-branch.spec.ts b/lib/workers/repository/onboarding/pr/base-branch.spec.ts
index c1eec93f114d8e60e3d92970175d017efdc76d40..fae3c6123bd4fb86f837ab74502d2264012e6c12 100644
--- a/lib/workers/repository/onboarding/pr/base-branch.spec.ts
+++ b/lib/workers/repository/onboarding/pr/base-branch.spec.ts
@@ -1,8 +1,8 @@
-import { RenovateConfig, getConfig } from '../../../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
 
 import { getBaseBranchDesc } from './base-branch';
 
-describe('workers/repository/onboarding/pr/base-branch', () => {
+describe(getName(__filename), () => {
   describe('getBaseBranchDesc()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/pr/config-description.spec.ts b/lib/workers/repository/onboarding/pr/config-description.spec.ts
index 58562136a05851fdb5ebb48862f0004725dce0ea..583a6de799986a780e8b6f1ef221af3dc77b0caa 100644
--- a/lib/workers/repository/onboarding/pr/config-description.spec.ts
+++ b/lib/workers/repository/onboarding/pr/config-description.spec.ts
@@ -1,8 +1,8 @@
-import { RenovateConfig, getConfig } from '../../../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
 import type { PackageFile } from '../../../../manager/types';
 import { getConfigDesc } from './config-description';
 
-describe('workers/repository/onboarding/pr/config-description', () => {
+describe(getName(__filename), () => {
   describe('getConfigDesc()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts b/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts
index 0ef3fec403d7986dfd2f7c4d253999e16cbe2763..b4bf84b3a3845387e19008581336e365da5241d1 100644
--- a/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts
+++ b/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts
@@ -1,8 +1,8 @@
-import { RenovateConfig, getConfig } from '../../../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
 import type { PackageFile } from '../../../../manager/types';
 import { getDepWarnings, getErrors, getWarnings } from './errors-warnings';
 
-describe('workers/repository/onboarding/pr/errors-warnings', () => {
+describe(getName(__filename), () => {
   describe('getWarnings()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/pr/index.spec.ts b/lib/workers/repository/onboarding/pr/index.spec.ts
index 856bb7c39ddfcd50c68fbe8e08703c7a38e1cf9e..516e86f852bf5bc8f2b0110ab7c2220af2b2bb2b 100644
--- a/lib/workers/repository/onboarding/pr/index.spec.ts
+++ b/lib/workers/repository/onboarding/pr/index.spec.ts
@@ -1,6 +1,7 @@
 import {
   RenovateConfig,
   defaultConfig,
+  getName,
   git,
   partial,
   platform,
@@ -14,7 +15,7 @@ import { ensureOnboardingPr } from '.';
 
 jest.mock('../../../../util/git');
 
-describe('workers/repository/onboarding/pr', () => {
+describe(getName(__filename), () => {
   describe('ensureOnboardingPr()', () => {
     let config: RenovateConfig;
     let packageFiles: Record<string, PackageFile[]>;
diff --git a/lib/workers/repository/onboarding/pr/pr-list.spec.ts b/lib/workers/repository/onboarding/pr/pr-list.spec.ts
index 788597e158e0ef86c3d5b4d9952f72da530ae92f..742419fbce197633be9b263f0a46aad8bd210f17 100644
--- a/lib/workers/repository/onboarding/pr/pr-list.spec.ts
+++ b/lib/workers/repository/onboarding/pr/pr-list.spec.ts
@@ -1,8 +1,8 @@
-import { RenovateConfig, getConfig } from '../../../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
 import type { BranchConfig } from '../../../types';
 import { getPrList } from './pr-list';
 
-describe('workers/repository/onboarding/pr/pr-list', () => {
+describe(getName(__filename), () => {
   describe('getPrList()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/process/deprecated.spec.ts b/lib/workers/repository/process/deprecated.spec.ts
index 367163040d9e2f86615a23d686c72d442b24190d..d5bc7dd78b047cded40abca9a8902e8241373825 100644
--- a/lib/workers/repository/process/deprecated.spec.ts
+++ b/lib/workers/repository/process/deprecated.spec.ts
@@ -1,7 +1,7 @@
-import { RenovateConfig, platform } from '../../../../test/util';
+import { RenovateConfig, getName, platform } from '../../../../test/util';
 import { raiseDeprecationWarnings } from './deprecated';
 
-describe('workers/repository/process/deprecated', () => {
+describe(getName(__filename), () => {
   describe('raiseDeprecationWarnings()', () => {
     it('returns if onboarding', async () => {
       const config = {};
diff --git a/lib/workers/repository/process/extract-update.spec.ts b/lib/workers/repository/process/extract-update.spec.ts
index cf618de0855cca95143f3027b5ff741af82d92fe..bf0b61b4f4cddf7ea032922b05c41071ad1d1f18 100644
--- a/lib/workers/repository/process/extract-update.spec.ts
+++ b/lib/workers/repository/process/extract-update.spec.ts
@@ -1,5 +1,5 @@
 import hasha from 'hasha';
-import { git, mocked } from '../../../../test/util';
+import { getName, git, mocked } from '../../../../test/util';
 import type { PackageFile } from '../../../manager/types';
 import * as _repositoryCache from '../../../util/cache/repository';
 import * as _branchify from '../updates/branchify';
@@ -21,7 +21,7 @@ branchify.branchifyUpgrades.mockResolvedValueOnce({
   branchList: ['branchName'],
 });
 
-describe('workers/repository/process/extract-update', () => {
+describe(getName(__filename), () => {
   describe('extract()', () => {
     it('runs with no baseBranches', async () => {
       const config = {
diff --git a/lib/workers/repository/process/fetch.spec.ts b/lib/workers/repository/process/fetch.spec.ts
index 94a3842a2cfe836dff77ee9d40fef9fd6592d34f..d87cb4c3c12f252df80434c5ee1fb73bebf9e758 100644
--- a/lib/workers/repository/process/fetch.spec.ts
+++ b/lib/workers/repository/process/fetch.spec.ts
@@ -1,4 +1,9 @@
-import { RenovateConfig, getConfig, mocked } from '../../../../test/util';
+import {
+  RenovateConfig,
+  getConfig,
+  getName,
+  mocked,
+} from '../../../../test/util';
 import * as datasourceMaven from '../../../datasource/maven';
 import * as datasourceNpm from '../../../datasource/npm';
 import * as _npm from '../../../manager/npm';
@@ -11,7 +16,7 @@ const lookupUpdates = mocked(lookup).lookupUpdates;
 
 jest.mock('./lookup');
 
-describe('workers/repository/process/fetch', () => {
+describe(getName(__filename), () => {
   describe('fetchUpdates()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/process/index.spec.ts b/lib/workers/repository/process/index.spec.ts
index f7e75251090e6aeb69babd80cdb5809c91ac1831..e4fc2f7db3c7ff04aa252748d53f5c1be31e3596 100644
--- a/lib/workers/repository/process/index.spec.ts
+++ b/lib/workers/repository/process/index.spec.ts
@@ -1,4 +1,10 @@
-import { RenovateConfig, getConfig, git, mocked } from '../../../../test/util';
+import {
+  RenovateConfig,
+  getConfig,
+  getName,
+  git,
+  mocked,
+} from '../../../../test/util';
 import * as _extractUpdate from './extract-update';
 import { extractDependencies, updateRepo } from '.';
 
@@ -13,7 +19,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe('workers/repository/process/index', () => {
+describe(getName(__filename), () => {
   describe('processRepo()', () => {
     it('processes single branches', async () => {
       const res = await extractDependencies(config);
diff --git a/lib/workers/repository/process/limits.spec.ts b/lib/workers/repository/process/limits.spec.ts
index 0cf5d1c22bd19ba2a7c264b95c2c2b6401258afe..0d9b3ecc3cec85e54cc07e4899f504a4d96c7554 100644
--- a/lib/workers/repository/process/limits.spec.ts
+++ b/lib/workers/repository/process/limits.spec.ts
@@ -2,6 +2,7 @@ import { DateTime } from 'luxon';
 import {
   RenovateConfig,
   getConfig,
+  getName,
   git,
   platform,
 } from '../../../../test/util';
@@ -17,7 +18,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe('workers/repository/process/limits', () => {
+describe(getName(__filename), () => {
   describe('getPrHourlyRemaining()', () => {
     it('calculates hourly limit remaining', async () => {
       const time = DateTime.local();
diff --git a/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap b/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap
index 4949a7f74b6b6448376afbb1dd099524ee8f58f9..230bd11ec6d67e5a5f012c55af597fdaffb19b4b 100644
--- a/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap
+++ b/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`workers/repository/process/lookup .lookupUpdates() disables major release separation (major) 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() disables major release separation (major) 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -63,7 +63,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() disables major release separation (minor) 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() disables major release separation (minor) 1`] = `
 Array [
   Object {
     "bucket": "latest",
@@ -89,7 +89,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles PEP440 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles PEP440 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -141,7 +141,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles digest pin 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles digest pin 1`] = `
 Object {
   "changelogUrl": undefined,
   "dependencyUrl": undefined,
@@ -173,7 +173,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles digest pin for non-version 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles digest pin for non-version 1`] = `
 Object {
   "updates": Array [
     Object {
@@ -187,7 +187,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles digest pin for up to date version 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles digest pin for up to date version 1`] = `
 Object {
   "changelogUrl": undefined,
   "dependencyUrl": undefined,
@@ -206,7 +206,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles digest update 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles digest update 1`] = `
 Object {
   "changelogUrl": undefined,
   "dependencyUrl": undefined,
@@ -237,7 +237,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles digest update for non-version 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles digest update for non-version 1`] = `
 Object {
   "updates": Array [
     Object {
@@ -251,7 +251,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles git submodule update 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles git submodule update 1`] = `
 Object {
   "updates": Array [
     Object {
@@ -267,13 +267,13 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles github 404 1`] = `Array []`;
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles github 404 1`] = `Array []`;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles packagist 1`] = `Array []`;
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles packagist 1`] = `Array []`;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles pypi 404 1`] = `Array []`;
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles pypi 404 1`] = `Array []`;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles sourceUrl packageRules with version restrictions 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles sourceUrl packageRules with version restrictions 1`] = `
 Object {
   "changelogUrl": undefined,
   "dependencyUrl": undefined,
@@ -306,9 +306,9 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() handles unknown datasource 1`] = `Array []`;
+exports[`workers/repository/process/lookup/index .lookupUpdates() handles unknown datasource 1`] = `Array []`;
 
-exports[`workers/repository/process/lookup .lookupUpdates() ignores deprecated 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() ignores deprecated 1`] = `
 Object {
   "changelogUrl": undefined,
   "dependencyUrl": undefined,
@@ -337,7 +337,7 @@ Marking the latest version of an npm package as deprecated results in the entire
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() ignores pinning for ranges when other upgrade exists 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() ignores pinning for ranges when other upgrade exists 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -371,7 +371,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() is deprecated 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() is deprecated 1`] = `
 Object {
   "changelogUrl": undefined,
   "dependencyUrl": undefined,
@@ -399,7 +399,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() pins minor ranged versions 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() pins minor ranged versions 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -410,15 +410,15 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() rejects complex range in-range updates 1`] = `Array []`;
+exports[`workers/repository/process/lookup/index .lookupUpdates() rejects complex range in-range updates 1`] = `Array []`;
 
-exports[`workers/repository/process/lookup .lookupUpdates() rejects in-range unsupported operator 1`] = `Array []`;
+exports[`workers/repository/process/lookup/index .lookupUpdates() rejects in-range unsupported operator 1`] = `Array []`;
 
-exports[`workers/repository/process/lookup .lookupUpdates() rejects non-fully specified in-range updates 1`] = `Array []`;
+exports[`workers/repository/process/lookup/index .lookupUpdates() rejects non-fully specified in-range updates 1`] = `Array []`;
 
-exports[`workers/repository/process/lookup .lookupUpdates() rejects reverse ordered less than greater than 1`] = `Array []`;
+exports[`workers/repository/process/lookup/index .lookupUpdates() rejects reverse ordered less than greater than 1`] = `Array []`;
 
-exports[`workers/repository/process/lookup .lookupUpdates() replaces major complex ranged versions if configured 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() replaces major complex ranged versions if configured 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -454,7 +454,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() replaces minor complex ranged versions if configured 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() replaces minor complex ranged versions if configured 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -474,7 +474,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() replaces non-range in-range updates 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() replaces non-range in-range updates 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -500,7 +500,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns additional update if grouping but separateMinorPatch=true 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns additional update if grouping but separateMinorPatch=true 1`] = `
 Array [
   Object {
     "bucket": "patch",
@@ -583,7 +583,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns both updates if automerging minor 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns both updates if automerging minor 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -659,7 +659,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns complex object 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns complex object 1`] = `
 Object {
   "changelogUrl": undefined,
   "dependencyUrl": undefined,
@@ -686,7 +686,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns minor update if automerging both patch and minor 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns minor update if automerging both patch and minor 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -732,7 +732,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns minor update if separate patches not configured 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns minor update if separate patches not configured 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -778,7 +778,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns multiple updates if grouping but separateMajorMinor=true 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns multiple updates if grouping but separateMajorMinor=true 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -849,7 +849,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns one update if grouping and separateMajorMinor=false 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns one update if grouping and separateMajorMinor=false 1`] = `
 Array [
   Object {
     "bucket": "latest",
@@ -908,7 +908,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns patch minor and major 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns patch minor and major 1`] = `
 Array [
   Object {
     "bucket": "patch",
@@ -979,7 +979,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns patch update if separateMinorPatch 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns patch update if separateMinorPatch 1`] = `
 Array [
   Object {
     "bucket": "patch",
@@ -1025,7 +1025,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns rollback for pinned version 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns rollback for pinned version 1`] = `
 Array [
   Object {
     "branchName": "{{{branchPrefix}}}rollback-{{{depNameSanitized}}}-{{{newMajor}}}.x",
@@ -1061,7 +1061,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() returns rollback for ranged version 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() returns rollback for ranged version 1`] = `
 Array [
   Object {
     "branchName": "{{{branchPrefix}}}rollback-{{{depNameSanitized}}}-{{{newMajor}}}.x",
@@ -1075,7 +1075,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() should allow unstable versions if the current version is unstable 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() should allow unstable versions if the current version is unstable 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1101,7 +1101,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() should allow unstable versions if the ignoreUnstable=false 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() should allow unstable versions if the ignoreUnstable=false 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1117,7 +1117,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() should downgrade from missing versions 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() should downgrade from missing versions 1`] = `
 Object {
   "branchName": "{{{branchPrefix}}}rollback-{{{depNameSanitized}}}-{{{newMajor}}}.x",
   "commitMessageAction": "Roll back",
@@ -1129,7 +1129,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() should follow dist-tag even if newer version exists 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() should follow dist-tag even if newer version exists 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1145,7 +1145,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() should ignore unstable versions from datasource 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() should ignore unstable versions from datasource 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -1160,7 +1160,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() should jump unstable versions if followTag 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() should jump unstable versions if followTag 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1176,7 +1176,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() should not jump unstable versions 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() should not jump unstable versions 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1192,7 +1192,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() should roll back to dist-tag if current version is higher 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() should roll back to dist-tag if current version is higher 1`] = `
 Array [
   Object {
     "branchName": "{{{branchPrefix}}}rollback-{{{depNameSanitized}}}-{{{newMajor}}}.x",
@@ -1206,7 +1206,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() should treat zero zero caret ranges as pinned 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() should treat zero zero caret ranges as pinned 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1223,9 +1223,9 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() should warn if no version matches dist-tag 1`] = `Array []`;
+exports[`workers/repository/process/lookup/index .lookupUpdates() should warn if no version matches dist-tag 1`] = `Array []`;
 
-exports[`workers/repository/process/lookup .lookupUpdates() skips uncompatible versions for 8 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() skips uncompatible versions for 8 1`] = `
 Object {
   "changelogUrl": undefined,
   "dependencyUrl": undefined,
@@ -1248,7 +1248,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() skips uncompatible versions for 8.1 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() skips uncompatible versions for 8.1 1`] = `
 Object {
   "changelogUrl": undefined,
   "dependencyUrl": undefined,
@@ -1281,7 +1281,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() skips uncompatible versions for 8.1.0 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() skips uncompatible versions for 8.1.0 1`] = `
 Object {
   "changelogUrl": undefined,
   "dependencyUrl": undefined,
@@ -1308,7 +1308,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() skips undefined values 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() skips undefined values 1`] = `
 Object {
   "skipReason": "invalid-value",
   "updates": Array [],
@@ -1316,7 +1316,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() skips unsupported values 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() skips unsupported values 1`] = `
 Object {
   "skipReason": "invalid-value",
   "updates": Array [],
@@ -1324,7 +1324,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports > latest versions if configured 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports > latest versions if configured 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -1345,7 +1345,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports complex major hyphen ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports complex major hyphen ranges 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -1381,7 +1381,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports complex major ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports complex major ranges 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -1417,7 +1417,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports complex ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports complex ranges 1`] = `
 Object {
   "bucket": "non-major",
   "currentVersion": "0.8.12",
@@ -1441,7 +1441,7 @@ Object {
 }
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports complex tilde ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports complex tilde ranges 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1461,7 +1461,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports in-range caret updates 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports in-range caret updates 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1489,7 +1489,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports in-range gte updates 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports in-range gte updates 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1517,7 +1517,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports in-range tilde patch updates 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports in-range tilde patch updates 1`] = `
 Array [
   Object {
     "bucket": "patch",
@@ -1556,7 +1556,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports in-range tilde updates 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports in-range tilde updates 1`] = `
 Array [
   Object {
     "bucket": "patch",
@@ -1595,7 +1595,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports lock file updates mixed with regular updates 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports lock file updates mixed with regular updates 1`] = `
 Array [
   Object {
     "bucket": "patch",
@@ -1684,7 +1684,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports majorgte updates 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports majorgte updates 1`] = `
 Array [
   Object {
     "bucket": "latest",
@@ -1720,7 +1720,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports minor and major upgrades for ranged versions 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports minor and major upgrades for ranged versions 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -1796,7 +1796,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() supports minor and major upgrades for tilde ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() supports minor and major upgrades for tilde ranges 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -1872,7 +1872,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades .x complex minor ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades .x complex minor ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1892,7 +1892,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades .x major ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades .x major ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -1920,7 +1920,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades .x minor ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades .x minor ranges 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -1946,7 +1946,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades .x minor ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades .x minor ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1966,7 +1966,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades equal minor ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades equal minor ranges 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -1986,7 +1986,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades less than equal major ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades less than equal major ranges 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -2008,7 +2008,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades less than equal minor ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades less than equal minor ranges 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2028,7 +2028,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades less than equal ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades less than equal ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2090,7 +2090,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades less than major ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades less than major ranges 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -2118,7 +2118,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades less than ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades less than ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2181,7 +2181,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades major greater than less than ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades major greater than less than ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -2209,7 +2209,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades major less than equal ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades major less than equal ranges 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2236,7 +2236,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades major less than ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades major less than ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -2264,7 +2264,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades minor greater than less than equals ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades minor greater than less than equals ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2325,7 +2325,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades minor greater than less than ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades minor greater than less than ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2387,7 +2387,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades minor ranged versions 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades minor ranged versions 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -2419,7 +2419,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades multiple caret ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades multiple caret ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2481,7 +2481,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades multiple tilde ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades multiple tilde ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2543,7 +2543,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades shorthand major ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades shorthand major ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -2571,7 +2571,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades shorthand minor ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades shorthand minor ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2591,7 +2591,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades tilde ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades tilde ranges 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -2617,7 +2617,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() upgrades tilde ranges without pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() upgrades tilde ranges without pinning 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2637,7 +2637,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() uses minimum version for vulnerabilityAlerts 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() uses minimum version for vulnerabilityAlerts 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2653,7 +2653,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() uses the locked version for pinning 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() uses the locked version for pinning 1`] = `
 Array [
   Object {
     "isPin": true,
@@ -2686,7 +2686,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() widens .x OR ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() widens .x OR ranges 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -2722,7 +2722,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() widens major ranged versions if configured 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() widens major ranged versions if configured 1`] = `
 Array [
   Object {
     "bucket": "major",
@@ -2758,7 +2758,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() widens minor ranged versions if configured 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() widens minor ranged versions if configured 1`] = `
 Array [
   Object {
     "bucket": "non-major",
@@ -2778,7 +2778,7 @@ Array [
 ]
 `;
 
-exports[`workers/repository/process/lookup .lookupUpdates() widens stanndalone major OR ranges 1`] = `
+exports[`workers/repository/process/lookup/index .lookupUpdates() widens stanndalone major OR ranges 1`] = `
 Array [
   Object {
     "bucket": "major",
diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts
index fbee93dd5f69f85e3e33bc660de5b82e5a81a88f..8aecd513dd35ef406c1581331b3666bfa21ec397 100644
--- a/lib/workers/repository/process/lookup/index.spec.ts
+++ b/lib/workers/repository/process/lookup/index.spec.ts
@@ -1,5 +1,5 @@
 import nock from 'nock';
-import { getConfig, mocked, partial } from '../../../../../test/util';
+import { getConfig, getName, mocked, partial } from '../../../../../test/util';
 import qJson from '../../../../config/npm/__fixtures__/01.json';
 import helmetJson from '../../../../config/npm/__fixtures__/02.json';
 import coffeelintJson from '../../../../config/npm/__fixtures__/coffeelint.json';
@@ -40,7 +40,7 @@ Object.assign(githubReleases, { defaultRegistryUrls: ['https://github.com'] });
 
 let config: LookupUpdateConfig;
 
-describe('workers/repository/process/lookup', () => {
+describe(getName(__filename), () => {
   beforeEach(() => {
     // TODO: fix types
     config = partial<LookupUpdateConfig>(getConfig());
diff --git a/lib/workers/repository/process/sort.spec.ts b/lib/workers/repository/process/sort.spec.ts
index a7b523847c94b1d1634a43dcdcb91575485d7476..95612f625a171abd668f3b510592d682258594f7 100644
--- a/lib/workers/repository/process/sort.spec.ts
+++ b/lib/workers/repository/process/sort.spec.ts
@@ -1,7 +1,8 @@
+import { getName } from '../../../../test/util';
 import { UpdateType } from '../../../config';
 import { sortBranches } from './sort';
 
-describe('workers/repository/process/sort', () => {
+describe(getName(__filename), () => {
   describe('sortBranches()', () => {
     it('sorts based on updateType and prTitle', () => {
       const branches = [
diff --git a/lib/workers/repository/process/write.spec.ts b/lib/workers/repository/process/write.spec.ts
index 735a6d3a1c169974b50463551f4bc98432ec2dda..5a2c4ee63636e93af5c471e4577004bcc90c52cf 100644
--- a/lib/workers/repository/process/write.spec.ts
+++ b/lib/workers/repository/process/write.spec.ts
@@ -1,4 +1,10 @@
-import { RenovateConfig, getConfig, git, mocked } from '../../../../test/util';
+import {
+  RenovateConfig,
+  getConfig,
+  getName,
+  git,
+  mocked,
+} from '../../../../test/util';
 import * as _branchWorker from '../../branch';
 import { Limit, isLimitReached } from '../../global/limits';
 import { BranchConfig, ProcessBranchResult } from '../../types';
@@ -21,7 +27,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe('workers/repository/write', () => {
+describe(getName(__filename), () => {
   describe('writeUpdates()', () => {
     it('skips branches blocked by pin', async () => {
       const branches: BranchConfig[] = [
diff --git a/lib/workers/repository/result.spec.ts b/lib/workers/repository/result.spec.ts
index 1966de1cef4d49d13b72de317551aca70476c437..e005284bad7152a276ac6883cee57173c334e844 100644
--- a/lib/workers/repository/result.spec.ts
+++ b/lib/workers/repository/result.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig } from '../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../test/util';
 import { processResult } from './result';
 
 let config: RenovateConfig;
@@ -7,7 +7,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe('workers/repository/result', () => {
+describe(getName(__filename), () => {
   describe('processResult()', () => {
     it('runs', () => {
       const result = processResult(config, 'done');
diff --git a/lib/workers/repository/stats.spec.ts b/lib/workers/repository/stats.spec.ts
index a62796aa981944b6c0ae9ba7d567eff8f99dccb3..d4afe0aed98b1d20e517388e13b742a7dccd42e0 100644
--- a/lib/workers/repository/stats.spec.ts
+++ b/lib/workers/repository/stats.spec.ts
@@ -1,3 +1,4 @@
+import { getName } from '../../../test/util';
 import * as memCache_ from '../../util/cache/memory';
 import { printRequestStats } from './stats';
 
@@ -5,7 +6,7 @@ jest.mock('../../util/cache/memory');
 
 const memCache: any = memCache_ as any;
 
-describe('workers/repository/stats', () => {
+describe(getName(__filename), () => {
   describe('printRequestStats()', () => {
     it('runs', () => {
       memCache.get = jest.fn(() => [
diff --git a/lib/workers/repository/updates/branch-name.spec.ts b/lib/workers/repository/updates/branch-name.spec.ts
index 685174126df6270beb473b506ceb7ed39b2897fa..4a495f747bfb5fe6dc0473f9a0f63f77ab1bc61f 100644
--- a/lib/workers/repository/updates/branch-name.spec.ts
+++ b/lib/workers/repository/updates/branch-name.spec.ts
@@ -1,7 +1,8 @@
+import { getName } from '../../../../test/util';
 import type { RenovateConfig } from '../../../config/types';
 import { generateBranchName } from './branch-name';
 
-describe('workers/repository/updates/branch-name', () => {
+describe(getName(__filename), () => {
   describe('getBranchName()', () => {
     it('uses groupName if no slug defined', () => {
       const upgrade: RenovateConfig = {
diff --git a/lib/workers/repository/updates/branchify.spec.ts b/lib/workers/repository/updates/branchify.spec.ts
index 37ec32683888e4c4d7c01648c5f3fbf3a3516fda..d549938a9cbe2d85eaf035cea940e88acd485f8d 100644
--- a/lib/workers/repository/updates/branchify.spec.ts
+++ b/lib/workers/repository/updates/branchify.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, mocked } from '../../../../test/util';
+import { RenovateConfig, getName, mocked } from '../../../../test/util';
 import { getConfig } from '../../../config/defaults';
 import * as _changelog from '../changelog';
 import { branchifyUpgrades } from './branchify';
@@ -18,7 +18,7 @@ beforeEach(() => {
   config.warnings = [];
 });
 
-describe('workers/repository/updates/branchify', () => {
+describe(getName(__filename), () => {
   describe('branchifyUpgrades()', () => {
     it('returns empty', async () => {
       flattenUpdates.mockResolvedValueOnce([]);
diff --git a/lib/workers/repository/updates/flatten.spec.ts b/lib/workers/repository/updates/flatten.spec.ts
index 6312e0e025443d6a6fc44685a3351702f654d39a..4fb7190b04d926e3230921e5139de9c42bc34787 100644
--- a/lib/workers/repository/updates/flatten.spec.ts
+++ b/lib/workers/repository/updates/flatten.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig } from '../../../../test/util';
+import { RenovateConfig, getConfig, getName } from '../../../../test/util';
 
 import { LANGUAGE_DOCKER } from '../../../constants/languages';
 import { flattenUpdates } from './flatten';
@@ -11,7 +11,7 @@ beforeEach(() => {
   config.warnings = [];
 });
 
-describe('workers/repository/updates/flatten', () => {
+describe(getName(__filename), () => {
   describe('flattenUpdates()', () => {
     it('flattens', async () => {
       config.lockFileMaintenance.enabled = true;
diff --git a/lib/workers/repository/updates/generate.spec.ts b/lib/workers/repository/updates/generate.spec.ts
index ad56b9a8c38e4ca214302660c8b4edc962080af0..53d6b12674b6fc8c18a26393ec717b2d60f782bb 100644
--- a/lib/workers/repository/updates/generate.spec.ts
+++ b/lib/workers/repository/updates/generate.spec.ts
@@ -1,4 +1,4 @@
-import { defaultConfig, partial } from '../../../../test/util';
+import { defaultConfig, getName, partial } from '../../../../test/util';
 import type { UpdateType } from '../../../config/types';
 import * as datasourceNpm from '../../../datasource/npm';
 import type { BranchUpgradeConfig } from '../../types';
@@ -8,7 +8,7 @@ beforeEach(() => {
   jest.resetAllMocks();
 });
 
-describe('workers/repository/updates/generate', () => {
+describe(getName(__filename), () => {
   describe('generateBranchConfig()', () => {
     it('does not group single upgrade', () => {
       const branch = [
diff --git a/lib/workers/repository/util/commit-message.spec.ts b/lib/workers/repository/util/commit-message.spec.ts
index 2e04be8f6ac0d086e1cd2d13cccf9ddba8d54077..5219209c13424d8aa08a670a81147d35ce4cb75c 100644
--- a/lib/workers/repository/util/commit-message.spec.ts
+++ b/lib/workers/repository/util/commit-message.spec.ts
@@ -1,9 +1,10 @@
+import { getName } from '../../../../test/util';
 import {
   COMMIT_MESSAGE_PREFIX_SEPARATOR,
   formatCommitMessagePrefix,
 } from './commit-message';
 
-describe('workers/repository/util/commit-message', () => {
+describe(getName(__filename), () => {
   describe('COMMIT_MESSAGE_PREFIX_END_CHARACTER', () => {
     it('is a colon character', () => {
       expect(COMMIT_MESSAGE_PREFIX_SEPARATOR).toBe(':');