From e7ef20d33bdc01c930a9cf1127ddeceaa5a0676b Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 6 May 2018 11:59:33 +0200
Subject: [PATCH] refactor: simplify config stages

---
 lib/config/definitions.js                  | 50 ++++++++++++----------
 lib/config/index.js                        | 10 +----
 test/workers/package-file/dep-type.spec.js |  9 ----
 3 files changed, 28 insertions(+), 41 deletions(-)

diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index 57d7560816..7600539e49 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -30,6 +30,7 @@ const options = [
     name: 'description',
     description: 'Plain text description for a config or preset',
     type: 'list',
+    stage: 'repository',
     allowString: true,
     mergeable: true,
     cli: false,
@@ -221,7 +222,7 @@ const options = [
   {
     name: 'ignoreNpmrcFile',
     description: 'Whether to ignore any .npmrc file found in repository',
-    stage: 'packageFile',
+    stage: 'package',
     type: 'boolean',
     default: false,
   },
@@ -244,6 +245,7 @@ const options = [
     description:
       'An array of one or more custom base branches to be renovated. If left empty, the default branch will be renovate',
     type: 'list',
+    stage: 'package',
     cli: false,
     env: false,
   },
@@ -293,7 +295,7 @@ const options = [
   {
     name: 'engines',
     description: 'Configuration specifically for `package.json`>`engines`',
-    stage: 'packageFile',
+    stage: 'package',
     type: 'json',
     default: {},
     mergeable: true,
@@ -304,14 +306,14 @@ const options = [
     name: 'ignoreDeps',
     description: 'Dependencies to ignore',
     type: 'list',
-    stage: 'depType',
+    stage: 'package',
     mergeable: true,
   },
   {
     name: 'packageRules',
     description: 'Rules for matching package names',
     type: 'list',
-    stage: 'depType',
+    stage: 'package',
     mergeable: true,
     cli: false,
     env: false,
@@ -322,8 +324,8 @@ const options = [
       'List of depTypes to match (e.g. [`peerDependencies`]). Valid only within `packageRules` object',
     type: 'list',
     allowString: true,
-    stage: 'depType',
     parent: 'packageRules',
+    stage: 'package',
     mergeable: true,
     cli: false,
     env: false,
@@ -334,7 +336,7 @@ const options = [
       'Package names to match. Valid only within `packageRules` object',
     type: 'list',
     allowString: true,
-    stage: 'depType',
+    stage: 'package',
     parent: 'packageRules',
     mergeable: true,
     cli: false,
@@ -346,7 +348,7 @@ const options = [
       'Package names to exclude. Valid only within `packageRules` object',
     type: 'list',
     allowString: true,
-    stage: 'depType',
+    stage: 'package',
     parent: 'packageRules',
     mergeable: true,
     cli: false,
@@ -358,7 +360,7 @@ const options = [
       'Package name patterns to match. Valid only within `packageRules` object.',
     type: 'list',
     allowString: true,
-    stage: 'depType',
+    stage: 'package',
     parent: 'packageRules',
     mergeable: true,
     cli: false,
@@ -370,7 +372,7 @@ const options = [
       'Package name patterns to exclude. Valid only within `packageRules` object.',
     type: 'list',
     allowString: true,
-    stage: 'depType',
+    stage: 'package',
     parent: 'packageRules',
     mergeable: true,
     cli: false,
@@ -381,7 +383,7 @@ const options = [
     description:
       'A version or version range to match against the current version of a package. Valid only within `packageRules` object',
     type: 'string',
-    stage: 'depType',
+    stage: 'package',
     parent: 'packageRules',
     mergeable: true,
     cli: false,
@@ -739,7 +741,7 @@ const options = [
   {
     name: 'lockFileMaintenance',
     description: 'Configuration for lock file maintenance',
-    stage: 'packageFile',
+    stage: 'branch',
     type: 'json',
     default: {
       enabled: false,
@@ -813,6 +815,7 @@ const options = [
     name: 'fileMatch',
     description: 'JS RegExp pattern for matching manager files',
     type: 'list',
+    stage: 'repository',
     allowString: true,
     mergeable: true,
     cli: false,
@@ -821,7 +824,7 @@ const options = [
   {
     name: 'npm',
     description: 'Configuration object for npm package.json renovation',
-    stage: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       fileMatch: ['(^|/)package.json$'],
@@ -831,7 +834,7 @@ const options = [
   {
     name: 'meteor',
     description: 'Configuration object for meteor package.js renovation',
-    stage: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       fileMatch: ['(^|/)package.js$'],
@@ -841,7 +844,7 @@ const options = [
   {
     name: 'bazel',
     description: 'Configuration object for bazel WORKSPACE renovation',
-    stage: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       fileMatch: ['(^|/)WORKSPACE$'],
@@ -851,7 +854,7 @@ const options = [
   {
     name: 'buildkite',
     description: 'Configuration object for buildkite pipeline renovation',
-    stage: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       fileMatch: ['\\.buildkite/.+\\.yml$'],
@@ -867,12 +870,13 @@ const options = [
     description:
       'Dependency support policy, e.g. used for LTS vs non-LTS etc (node-only)',
     type: 'list',
+    stage: 'package',
     allowString: true,
   },
   {
     name: 'node',
     description: 'Configuration object for node version renovation',
-    stage: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       groupName: 'Node.js',
@@ -887,7 +891,7 @@ const options = [
   {
     name: 'travis',
     description: 'Configuration object for .travis.yml node version renovation',
-    stage: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       enabled: false,
@@ -899,7 +903,7 @@ const options = [
   {
     name: 'nvm',
     description: 'Configuration object for .nvmrc files',
-    state: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       fileMatch: ['^.nvmrc$'],
@@ -910,7 +914,7 @@ const options = [
   {
     name: 'docker',
     description: 'Configuration object for Dockerfile renovation',
-    stage: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       fileMatch: ['(^|/)Dockerfile$'],
@@ -950,7 +954,7 @@ const options = [
     name: 'docker-compose',
     description:
       'Configuration object for Docker Compose renovation. Also inherits settings from `docker` object.',
-    stage: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       fileMatch: ['(^|/)docker-compose[^/]*\\.ya?ml$'],
@@ -962,7 +966,7 @@ const options = [
     name: 'circleci',
     description:
       'Configuration object for CircleCI yml renovation. Also inherits settings from `docker` object.',
-    stage: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       fileMatch: ['^.circleci/config.yml$'],
@@ -973,7 +977,7 @@ const options = [
   {
     name: 'pip_requirements',
     description: 'Configuration object for requirements.txt files',
-    state: 'repository',
+    stage: 'package',
     type: 'json',
     default: {
       enabled: false,
@@ -985,7 +989,7 @@ const options = [
   {
     name: 'python',
     description: 'Configuration object for python',
-    state: 'repository',
+    stage: 'package',
     type: 'json',
     default: {},
     mergeable: true,
diff --git a/lib/config/index.js b/lib/config/index.js
index 8193d1d920..af3d4e7eb2 100644
--- a/lib/config/index.js
+++ b/lib/config/index.js
@@ -162,15 +162,7 @@ function mergeChildConfig(parent, child) {
 function filterConfig(inputConfig, targetStage) {
   logger.trace({ config: inputConfig }, `filterConfig('${targetStage}')`);
   const outputConfig = { ...inputConfig };
-  const stages = [
-    'global',
-    'repository',
-    'packageFile',
-    'depType',
-    'package',
-    'branch',
-    'pr',
-  ];
+  const stages = ['global', 'repository', 'package', 'branch', 'pr'];
   const targetIndex = stages.indexOf(targetStage);
   for (const option of definitions.getOptions()) {
     const optionIndex = stages.indexOf(option.stage);
diff --git a/test/workers/package-file/dep-type.spec.js b/test/workers/package-file/dep-type.spec.js
index c92bf6dfdf..0130124be0 100644
--- a/test/workers/package-file/dep-type.spec.js
+++ b/test/workers/package-file/dep-type.spec.js
@@ -156,7 +156,6 @@ describe('lib/workers/package-file/dep-type', () => {
       const res = depTypeWorker.getDepConfig(depTypeConfig, dep);
       expect(res.x).toBe(2);
       expect(res.y).toBe(2);
-      expect(res.packageRules).toBeUndefined();
     });
     it('applies both rules for b', () => {
       const dep = {
@@ -165,7 +164,6 @@ describe('lib/workers/package-file/dep-type', () => {
       const res = depTypeWorker.getDepConfig(depTypeConfig, dep);
       expect(res.x).toBe(2);
       expect(res.y).toBe(2);
-      expect(res.packageRules).toBeUndefined();
     });
     it('applies the second rule', () => {
       const dep = {
@@ -174,7 +172,6 @@ describe('lib/workers/package-file/dep-type', () => {
       const res = depTypeWorker.getDepConfig(depTypeConfig, dep);
       expect(res.x).toBeUndefined();
       expect(res.y).toBe(2);
-      expect(res.packageRules).toBeUndefined();
     });
     it('applies the second second rule', () => {
       const dep = {
@@ -183,7 +180,6 @@ describe('lib/workers/package-file/dep-type', () => {
       const res = depTypeWorker.getDepConfig(depTypeConfig, dep);
       expect(res.x).toBeUndefined();
       expect(res.y).toBe(2);
-      expect(res.packageRules).toBeUndefined();
     });
     it('excludes package name', () => {
       const dep = {
@@ -192,7 +188,6 @@ describe('lib/workers/package-file/dep-type', () => {
       const res = depTypeWorker.getDepConfig(depTypeConfig, dep);
       expect(res.x).toBeUndefined();
       expect(res.y).toBeUndefined();
-      expect(res.packageRules).toBeUndefined();
     });
     it('excludes package pattern', () => {
       const dep = {
@@ -201,7 +196,6 @@ describe('lib/workers/package-file/dep-type', () => {
       const res = depTypeWorker.getDepConfig(depTypeConfig, dep);
       expect(res.x).toBeUndefined();
       expect(res.y).toBeUndefined();
-      expect(res.packageRules).toBeUndefined();
     });
     it('filters depType', () => {
       const config = {
@@ -219,7 +213,6 @@ describe('lib/workers/package-file/dep-type', () => {
       };
       const res = depTypeWorker.getDepConfig(config, dep);
       expect(res.x).toBe(1);
-      expect(res.packageRules).toBeUndefined();
     });
     it('filters naked depType', () => {
       const config = {
@@ -236,7 +229,6 @@ describe('lib/workers/package-file/dep-type', () => {
       };
       const res = depTypeWorker.getDepConfig(config, dep);
       expect(res.x).toBe(1);
-      expect(res.packageRules).toBeUndefined();
     });
     it('filters depType', () => {
       const config = {
@@ -254,7 +246,6 @@ describe('lib/workers/package-file/dep-type', () => {
       };
       const res = depTypeWorker.getDepConfig(config, dep);
       expect(res.x).toBeUndefined();
-      expect(res.packageRules).toBeUndefined();
     });
     it('checks if matchCurrentVersion selector is valid and satisfies the condition on range overlap', () => {
       const config = {
-- 
GitLab