From 126b6b28832aa86fde08e0973ec3207df64db60b Mon Sep 17 00:00:00 2001
From: Steven Hargrove <steven.hargrove@weather.com>
Date: Wed, 4 Apr 2018 15:27:39 -0400
Subject: [PATCH] test: added test for presets definend global and repo in
 config.js

---
 .../config/file-with-repo-presets.js          |   21 +
 test/config/__snapshots__/index.spec.js.snap  | 1591 +++++++++++++++++
 test/config/index.spec.js                     |   30 +
 3 files changed, 1642 insertions(+)
 create mode 100644 test/_fixtures/config/file-with-repo-presets.js

diff --git a/test/_fixtures/config/file-with-repo-presets.js b/test/_fixtures/config/file-with-repo-presets.js
new file mode 100644
index 0000000000..77100dd6fb
--- /dev/null
+++ b/test/_fixtures/config/file-with-repo-presets.js
@@ -0,0 +1,21 @@
+module.exports = {
+  logLevel: 'error',
+  extends: [':disablePeerDependencies', ':prHourlyLimit1', ':automergePatch'],
+  upgradeInRange: true,
+  separatePatchReleases: true,
+  repositories: [
+    'bar/baz',
+    {
+      repository: 'foo/bar',
+      upgradeInRange: false,
+    },
+    {
+      repository: 'renovateapp/renovate',
+      extends: [':pinVersions']
+    },
+    {
+      repository: 'rennovateapp/github-app-cli',
+      extends: [':base', ':prHourlyLimit2']
+    }
+  ],
+};
diff --git a/test/config/__snapshots__/index.spec.js.snap b/test/config/__snapshots__/index.spec.js.snap
index 44bd2905ca..58d9a6c8c9 100644
--- a/test/config/__snapshots__/index.spec.js.snap
+++ b/test/config/__snapshots__/index.spec.js.snap
@@ -1,5 +1,1596 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`config/index .parseConfigs(env, defaultArgv) resolves all presets: foo/bar 1`] = `
+Object {
+  "repository": "foo/bar",
+  "upgradeInRange": false,
+}
+`;
+
+exports[`config/index .parseConfigs(env, defaultArgv) resolves all presets: globalConfig 1`] = `
+Object {
+  "allowedVersions": null,
+  "assignees": Array [],
+  "autodiscover": false,
+  "automerge": false,
+  "automergeType": "pr",
+  "baseBranches": Array [],
+  "bazel": Object {
+    "enabled": true,
+  },
+  "branchName": "{{{branchPrefix}}}{{{depNameSanitized}}}-{{{newVersionMajor}}}.x",
+  "branchPrefix": "renovate/",
+  "bumpVersion": null,
+  "circleci": Object {
+    "enabled": true,
+  },
+  "commitBody": null,
+  "commitMessage": "Update dependency {{{depName}}} to {{#unless isRange}}v{{/unless}}{{{newVersion}}}",
+  "copyLocalLibs": false,
+  "dependencies": Object {
+    "semanticCommitType": "fix",
+  },
+  "description": Array [
+    "Do not renovate <code>peerDependencies</code> versions/ranges",
+    "Rate limit PR creation to a maximum of one per hour",
+    "Automerge patch upgrades if they pass tests",
+  ],
+  "devDependencies": Object {},
+  "digest": Object {},
+  "docker": Object {
+    "branchName": "{{{branchPrefix}}}docker-{{{depNameSanitized}}}-{{{newVersionMajor}}}.x",
+    "commitMessage": "Update {{{depName}}} to tag {{{newTag}}}",
+    "digest": Object {
+      "branchName": "{{{branchPrefix}}}docker-{{{depNameSanitized}}}-{{{currentTag}}}",
+      "commitMessage": "Update {{{depName}}}:{{{currentTag}}} digest",
+      "prBody": "This Pull Request updates Docker base image \`{{{depName}}}:{{{currentTag}}}\` to the latest digest (\`{{{newDigest}}}\`). For details on Renovate's Docker support, please visit https://renovateapp.com/docs/language-support/docker\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+      "prTitle": "Update {{{depName}}} Docker image {{{currentTag}}} digest ({{{newDigestShort}}})",
+    },
+    "enabled": true,
+    "group": Object {
+      "prBody": "This Pull Request updates Dockerfiles to use image digests.\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#each upgrades as |upgrade|}}\\n-   {{#if repositoryUrl}}[{{upgrade.depName}}]({{upgrade.repositoryUrl}}){{else}}\`{{{depName}}}\`{{/if}}: \`{{upgrade.newDigest}}\`\\n{{/each}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+      "prTitle": "Update Docker {{{groupName}}} digests",
+    },
+    "major": Object {
+      "enabled": false,
+    },
+    "pin": Object {
+      "branchName": "{{{branchPrefix}}}docker-pin-{{{depNameSanitized}}}-{{{currentTag}}}",
+      "group": Object {
+        "prBody": "This Pull Request pins Dockerfiles to use image digests. For details on Renovate's Docker support, please visit https://renovateapp.com/docs/language-support/docker\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#each upgrades as |upgrade|}}\\n-   {{#if repositoryUrl}}[{{upgrade.depName}}]({{upgrade.repositoryUrl}}){{else}}\`{{{depName}}}\`{{/if}}: \`{{upgrade.newDigest}}\`\\n{{/each}}\\n\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+        "prTitle": "Pin Docker digests",
+      },
+      "groupName": "Pin Docker Digests",
+      "prBody": "This Pull Request pins Docker base image \`{{{depName}}}:{{{currentTag}}}\` to use a digest (\`{{{newDigest}}}\`).\\nThis digest will then be kept updated via Pull Requests whenever the image is updated on the Docker registry. For details on Renovate's Docker support, please visit https://renovateapp.com/docs/language-support/docker\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+      "prTitle": "Pin Docker {{{depName}}}:{{{currentTag}}} image digest",
+    },
+    "prBody": "This Pull Request updates Docker base image \`{{{depName}}}\` from tag \`{{{currentTag}}}\` to new tag \`{{{newTag}}}\`. For details on Renovate's Docker support, please visit https://renovateapp.com/docs/language-support/docker\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+    "prTitle": "Update {{{depName}}} Docker tag to {{#if isMajor}}v{{{newVersionMajor}}}{{else}}v{{{newTag}}}{{/if}}",
+  },
+  "docker-compose": Object {
+    "enabled": true,
+  },
+  "enabled": true,
+  "enabledManagers": Array [],
+  "encrypted": null,
+  "endpoint": null,
+  "engines": Object {
+    "packageRules": Array [
+      Object {
+        "groupName": "Node.js",
+        "lazyGrouping": false,
+        "packageNames": Array [
+          "node",
+        ],
+      },
+    ],
+  },
+  "excludePackageNames": Array [],
+  "excludePackagePatterns": Array [],
+  "exposeEnv": false,
+  "forkMode": false,
+  "gitAuthor": null,
+  "gitPrivateKey": null,
+  "group": Object {
+    "branchName": "{{{branchPrefix}}}{{groupSlug}}",
+    "commitMessage": "Update {{{groupName}}} packages",
+    "prBody": "This Pull Request renovates the package group \\"{{{groupName}}}\\".\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#each upgrades as |upgrade|}}\\n-   {{#if repositoryUrl}}[{{{upgrade.depName}}}]({{upgrade.repositoryUrl}}){{else}}\`{{{depName}}}\`{{/if}} (\`{{{depType}}}\`): from \`{{{upgrade.currentVersion}}}\` to \`{{{upgrade.newVersion}}}\`\\n{{/each}}\\n\\n{{#if hasReleaseNotes}}\\n# Release Notes\\n{{#each upgrades as |upgrade|}}\\n{{#if upgrade.hasReleaseNotes}}\\n<details>\\n<summary>{{upgrade.githubName}}</summary>\\n\\n{{#each upgrade.releases as |release|}}\\n{{#if release.releaseNotes}}\\n### [\`v{{{release.version}}}\`]({{{release.releaseNotes.url}}})\\n\\n{{{release.releaseNotes.body}}}\\n\\n---\\n\\n{{/if}}\\n{{/each}}\\n\\n</details>\\n{{/if}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasCommits}}\\n# Commits\\n\\n{{#each upgrades as |upgrade|}}\\n{{#if upgrade.releases.length}}\\n<details>\\n<summary>{{upgrade.githubName}}</summary>\\n{{#each upgrade.releases as |release|}}\\n{{#if release.hasCommits}}\\n\\n#### v{{{release.version}}}\\n{{#each release.commits as |commit|}}\\n-   [\`{{commit.shortSha}}\`]({{commit.url}}){{commit.message}}\\n{{/each}}\\n{{/if}}\\n{{/each}}\\n\\n</details>\\n\\n{{/if}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if isPin}}\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+    "prTitle": "Update {{{groupName}}} packages{{#if singleVersion}} to {{#unless isRange}}v{{/unless}}{{{singleVersion}}}{{/if}}",
+  },
+  "groupName": null,
+  "groupSlug": null,
+  "ignoreDeps": Array [],
+  "ignoreNpmrcFile": false,
+  "ignorePaths": Array [
+    "**/node_modules/**",
+    "**/bower_components/**",
+  ],
+  "ignoreUnstable": true,
+  "labels": Array [],
+  "lazyGrouping": true,
+  "lockFileMaintenance": Object {
+    "branchName": "{{{branchPrefix}}}lock-file-maintenance",
+    "commitMessage": "Update lock file",
+    "enabled": false,
+    "groupName": null,
+    "prBody": "This Pull Request updates \`package.json\` lock files to use the latest dependency versions.\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+    "prTitle": "Lock file maintenance",
+    "rebaseStalePrs": true,
+    "recreateClosed": true,
+    "schedule": Array [
+      "before 5am on monday",
+    ],
+  },
+  "logLevel": "error",
+  "major": Object {},
+  "meteor": Object {
+    "enabled": true,
+  },
+  "minor": Object {},
+  "mirrorMode": false,
+  "multipleMajorPrs": false,
+  "node": Object {
+    "groupName": "Node.js",
+    "lazyGrouping": false,
+  },
+  "npm": Object {
+    "enabled": true,
+  },
+  "npmToken": null,
+  "npmrc": null,
+  "nvm": Object {
+    "enabled": true,
+  },
+  "onboarding": true,
+  "onboardingConfig": Object {
+    "automerge": false,
+    "branchPrefix": "renovate/",
+    "dependencies": Object {
+      "description": Array [
+        "Use <code>fix</code> as semantic commit type for commit messages and PR titles",
+      ],
+      "semanticCommitType": "fix",
+    },
+    "description": Array [
+      "Separate major versions of dependencies into individual branches/PRs",
+      "Combine any patch and minor upgrades together into same branch/PR",
+      "Upgrade to unstable versions only if the existing version is unstable",
+      "Raise PRs immediately (after branch is created)",
+      "Use <code>renovate/</code> as prefix for all branch names",
+      "If semantic commits detected, use semantic commit type <code>fix</code> for dependencies and <code>chore</code> for all others",
+      "Keep existing branches updated even when not scheduled",
+      "Disable automerging feature - wait for humans to merge all PRs",
+      "Ignore \`node_modules\`, \`bower_components\`, and various test/tests directories",
+      "Update existing lock files only when <code>package.json</code> is modified",
+      "Autodetect whether to pin dependencies or maintain ranges",
+      "Rate limit PR creation to a maximum of two per hour",
+      "Limit to maximum 20 concurrent Renovate PRs at any time",
+      "Preconfigure dependencies where an odd major version indicates unstable (Docker-only)",
+    ],
+    "devDependencies": Object {
+      "description": Array [
+        "Use <code>chore</code> as semantic commit type for commit messages and PR titles",
+      ],
+      "semanticCommitType": "chore",
+    },
+    "ignorePaths": Array [
+      "**/node_modules/**",
+      "**/bower_components/**",
+      "**/examples/**",
+      "**/__tests__/**",
+      "**/test/**",
+      "**/tests/**",
+    ],
+    "ignoreUnstable": true,
+    "lockFileMaintenance": Object {
+      "enabled": false,
+    },
+    "optionalDependencies": Object {
+      "description": Array [
+        "Use <code>chore</code> as semantic commit type for commit messages and PR titles",
+      ],
+      "semanticCommitType": "chore",
+    },
+    "packageNames": Array [
+      "mhart/alpine-node",
+      "node",
+      "ubuntu",
+    ],
+    "packageRules": Array [
+      Object {
+        "description": Array [
+          "Group packages from accounts monorepo together",
+        ],
+        "groupName": "accounts monorepo",
+        "packageNames": Array [
+          "@accounts/client",
+          "@accounts/common",
+          "@accounts/mongo",
+          "@accounts/error",
+          "@accounts/oauth-instagram",
+          "@accounts/oauth-twitter",
+          "@accounts/oauth",
+          "@accounts/password",
+          "@accounts/rest-client",
+          "@accounts/rest-express",
+          "@accounts/server",
+          "@accounts/two-factor",
+          "@accounts/types",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from angular monorepo together",
+        ],
+        "groupName": "angular monorepo",
+        "packageNames": Array [
+          "@angular/animations",
+          "@angular/bazel",
+          "@angular/benchpress",
+          "@angular/common",
+          "@angular/compiler-cli",
+          "@angular/compiler",
+          "@angular/core",
+          "@angular/elements",
+          "@angular/forms",
+          "@angular/http",
+          "@angular/language-service",
+          "@angular/platform-browser-dynamic",
+          "@angular/platform-browser",
+          "@angular/platform-server",
+          "@angular/platform-webworker-dynamic",
+          "@angular/platform-webworker",
+          "@angular/router",
+          "@angular/service-worker",
+          "@angular/upgrade",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from angular1 monorepo together",
+        ],
+        "groupName": "angular1 monorepo",
+        "packageNames": Array [
+          "angular",
+          "angular-animate",
+          "angular-aria",
+          "angular-cookies",
+          "angular-loader",
+          "angular-message-format",
+          "angular-messages",
+          "angular-mocks",
+          "angular-parse-ext",
+          "angular-resource",
+          "angular-route",
+          "angular-sanitize",
+          "angular-scenario",
+          "angular-touch",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from babel monorepo together",
+        ],
+        "groupName": "babel monorepo",
+        "packageNames": Array [
+          "@babel/cli",
+          "@babel/code-frame",
+          "@babel/core",
+          "@babel/generator",
+          "@babel/helper-annotate-as-pure",
+          "@babel/helper-bindify-decorators",
+          "@babel/helper-builder-binary-assignment-operator-visitor",
+          "@babel/helper-builder-react-jsx",
+          "@babel/helper-call-delegate",
+          "@babel/helper-define-map",
+          "@babel/helper-explode-assignable-expression",
+          "@babel/helper-explode-class",
+          "@babel/helper-fixtures",
+          "@babel/helper-function-name",
+          "@babel/helper-get-function-arity",
+          "@babel/helper-hoist-variables",
+          "@babel/helper-module-imports",
+          "@babel/helper-module-transforms",
+          "@babel/helper-optimise-call-expression",
+          "@babel/helper-plugin-test-runner",
+          "@babel/helper-plugin-utils",
+          "@babel/helper-regex",
+          "@babel/helper-remap-async-to-generator",
+          "@babel/helper-replace-supers",
+          "@babel/helper-simple-access",
+          "@babel/helper-split-export-declaration",
+          "@babel/helper-transform-fixture-test-runner",
+          "@babel/helper-wrap-function",
+          "@babel/helpers",
+          "@babel/highlight",
+          "@babel/node",
+          "@babel/plugin-external-helpers",
+          "@babel/plugin-proposal-async-generator-functions",
+          "@babel/plugin-proposal-class-properties",
+          "@babel/plugin-proposal-decorators",
+          "@babel/plugin-proposal-do-expressions",
+          "@babel/plugin-proposal-export-default-from",
+          "@babel/plugin-proposal-export-namespace-from",
+          "@babel/plugin-proposal-function-bind",
+          "@babel/plugin-proposal-function-sent",
+          "@babel/plugin-proposal-logical-assignment-operators",
+          "@babel/plugin-proposal-nullish-coalescing-operator",
+          "@babel/plugin-proposal-numeric-separator",
+          "@babel/plugin-proposal-object-rest-spread",
+          "@babel/plugin-proposal-optional-catch-binding",
+          "@babel/plugin-proposal-optional-chaining",
+          "@babel/plugin-proposal-pipeline-operator",
+          "@babel/plugin-proposal-throw-expressions",
+          "@babel/plugin-proposal-unicode-property-regex",
+          "@babel/plugin-syntax-async-generators",
+          "@babel/plugin-syntax-class-properties",
+          "@babel/plugin-syntax-decorators",
+          "@babel/plugin-syntax-do-expressions",
+          "@babel/plugin-syntax-dynamic-import",
+          "@babel/plugin-syntax-export-default-from",
+          "@babel/plugin-syntax-export-namespace-from",
+          "@babel/plugin-syntax-flow",
+          "@babel/plugin-syntax-function-bind",
+          "@babel/plugin-syntax-function-sent",
+          "@babel/plugin-syntax-import-meta",
+          "@babel/plugin-syntax-jsx",
+          "@babel/plugin-syntax-logical-assignment-operators",
+          "@babel/plugin-syntax-nullish-coalescing-operator",
+          "@babel/plugin-syntax-numeric-separator",
+          "@babel/plugin-syntax-object-rest-spread",
+          "@babel/plugin-syntax-optional-catch-binding",
+          "@babel/plugin-syntax-optional-chaining",
+          "@babel/plugin-syntax-pipeline-operator",
+          "@babel/plugin-syntax-throw-expressions",
+          "@babel/plugin-syntax-typescript",
+          "@babel/plugin-transform-arrow-functions",
+          "@babel/plugin-transform-async-to-generator",
+          "@babel/plugin-transform-block-scoped-functions",
+          "@babel/plugin-transform-block-scoping",
+          "@babel/plugin-transform-classes",
+          "@babel/plugin-transform-computed-properties",
+          "@babel/plugin-transform-destructuring",
+          "@babel/plugin-transform-dotall-regex",
+          "@babel/plugin-transform-duplicate-keys",
+          "@babel/plugin-transform-exponentiation-operator",
+          "@babel/plugin-transform-flow-comments",
+          "@babel/plugin-transform-flow-strip-types",
+          "@babel/plugin-transform-for-of",
+          "@babel/plugin-transform-function-name",
+          "@babel/plugin-transform-instanceof",
+          "@babel/plugin-transform-jscript",
+          "@babel/plugin-transform-literals",
+          "@babel/plugin-transform-member-expression-literals",
+          "@babel/plugin-transform-modules-amd",
+          "@babel/plugin-transform-modules-commonjs",
+          "@babel/plugin-transform-modules-systemjs",
+          "@babel/plugin-transform-modules-umd",
+          "@babel/plugin-transform-new-target",
+          "@babel/plugin-transform-object-assign",
+          "@babel/plugin-transform-object-set-prototype-of-to-assign",
+          "@babel/plugin-transform-object-super",
+          "@babel/plugin-transform-parameters",
+          "@babel/plugin-transform-property-literals",
+          "@babel/plugin-transform-property-mutators",
+          "@babel/plugin-transform-proto-to-assign",
+          "@babel/plugin-transform-react-constant-elements",
+          "@babel/plugin-transform-react-display-name",
+          "@babel/plugin-transform-react-inline-elements",
+          "@babel/plugin-transform-react-jsx-compat",
+          "@babel/plugin-transform-react-jsx-self",
+          "@babel/plugin-transform-react-jsx-source",
+          "@babel/plugin-transform-react-jsx",
+          "@babel/plugin-transform-regenerator",
+          "@babel/plugin-transform-reserved-words",
+          "@babel/plugin-transform-runtime",
+          "@babel/plugin-transform-shorthand-properties",
+          "@babel/plugin-transform-spread",
+          "@babel/plugin-transform-sticky-regex",
+          "@babel/plugin-transform-strict-mode",
+          "@babel/plugin-transform-template-literals",
+          "@babel/plugin-transform-typeof-symbol",
+          "@babel/plugin-transform-typescript",
+          "@babel/plugin-transform-unicode-regex",
+          "@babel/polyfill",
+          "@babel/preset-env-standalone",
+          "@babel/preset-env",
+          "@babel/preset-es2015",
+          "@babel/preset-es2016",
+          "@babel/preset-es2017",
+          "@babel/preset-flow",
+          "@babel/preset-react",
+          "@babel/preset-stage-0",
+          "@babel/preset-stage-1",
+          "@babel/preset-stage-2",
+          "@babel/preset-stage-3",
+          "@babel/preset-typescript",
+          "@babel/register",
+          "@babel/runtime",
+          "@babel/standalone",
+          "@babel/template",
+          "@babel/traverse",
+          "@babel/types",
+          "babylon",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from babel6 monorepo together",
+        ],
+        "groupName": "babel6 monorepo",
+        "packageNames": Array [
+          "babel-cli",
+          "babel-code-frame",
+          "babel-core",
+          "babel-generator",
+          "babel-helper-bindify-decorators",
+          "babel-helper-builder-binary-assignment-operator-visitor",
+          "babel-helper-builder-react-jsx",
+          "babel-helper-call-delegate",
+          "babel-helper-define-map",
+          "babel-helper-explode-assignable-expression",
+          "babel-helper-explode-class",
+          "babel-helper-fixtures",
+          "babel-helper-function-name",
+          "babel-helper-get-function-arity",
+          "babel-helper-hoist-variables",
+          "babel-helper-optimise-call-expression",
+          "babel-helper-plugin-test-runner",
+          "babel-helper-regex",
+          "babel-helper-remap-async-to-generator",
+          "babel-helper-replace-supers",
+          "babel-helper-transform-fixture-test-runner",
+          "babel-helpers",
+          "babel-plugin-external-helpers",
+          "babel-plugin-syntax-async-generators",
+          "babel-plugin-syntax-class-properties",
+          "babel-plugin-syntax-decorators",
+          "babel-plugin-syntax-do-expressions",
+          "babel-plugin-syntax-dynamic-import",
+          "babel-plugin-syntax-flow",
+          "babel-plugin-syntax-function-bind",
+          "babel-plugin-syntax-function-sent",
+          "babel-plugin-syntax-jsx",
+          "babel-plugin-syntax-object-rest-spread",
+          "babel-plugin-transform-async-to-generator",
+          "babel-plugin-transform-exponentiation-operator",
+          "babel-plugin-transform-flow-comments",
+          "babel-plugin-transform-flow-strip-types",
+          "babel-plugin-transform-jscript",
+          "babel-plugin-transform-object-assign",
+          "babel-plugin-transform-object-set-prototype-of-to-assign",
+          "babel-plugin-transform-proto-to-assign",
+          "babel-plugin-transform-react-constant-elements",
+          "babel-plugin-transform-react-display-name",
+          "babel-plugin-transform-react-inline-elements",
+          "babel-plugin-transform-react-jsx-compat",
+          "babel-plugin-transform-react-jsx-self",
+          "babel-plugin-transform-react-jsx-source",
+          "babel-plugin-transform-react-jsx",
+          "babel-plugin-transform-regenerator",
+          "babel-plugin-transform-runtime",
+          "babel-plugin-transform-strict-mode",
+          "babel-polyfill",
+          "babel-preset-es2015",
+          "babel-preset-es2016",
+          "babel-preset-es2017",
+          "babel-preset-flow",
+          "babel-preset-react",
+          "babel-preset-stage-0",
+          "babel-preset-stage-1",
+          "babel-preset-stage-2",
+          "babel-preset-stage-3",
+          "babel-register",
+          "babel-runtime",
+          "babel-template",
+          "babel-traverse",
+          "babel-types",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from commitlint monorepo together",
+        ],
+        "groupName": "commitlint monorepo",
+        "packageNames": Array [
+          "commitlint",
+        ],
+        "packagePatterns": Array [
+          "^@commitlint/",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from gatsby monorepo together",
+        ],
+        "groupName": "gatsby monorepo",
+        "packageNames": Array [
+          "gatsby-1-config-css-modules",
+          "gatsby-1-config-extract-plugin",
+          "gatsby-cli",
+          "gatsby-dev-cli",
+          "gatsby-image",
+          "gatsby-link",
+          "gatsby-module-loader",
+          "gatsby-plugin-aphrodite",
+          "gatsby-plugin-canonical-urls",
+          "gatsby-plugin-catch-links",
+          "gatsby-plugin-coffeescript",
+          "gatsby-plugin-create-client-paths",
+          "gatsby-plugin-cxs",
+          "gatsby-plugin-emotion",
+          "gatsby-plugin-facebook-analytics",
+          "gatsby-plugin-feed",
+          "gatsby-plugin-fullstory",
+          "gatsby-plugin-glamor",
+          "gatsby-plugin-glamorous",
+          "gatsby-plugin-google-analytics",
+          "gatsby-plugin-google-tagmanager",
+          "gatsby-plugin-jss",
+          "gatsby-plugin-less",
+          "gatsby-plugin-lodash",
+          "gatsby-plugin-manifest",
+          "gatsby-plugin-netlify-cms",
+          "gatsby-plugin-netlify",
+          "gatsby-plugin-no-sourcemaps",
+          "gatsby-plugin-nprogress",
+          "gatsby-plugin-offline",
+          "gatsby-plugin-postcss-sass",
+          "gatsby-plugin-preact",
+          "gatsby-plugin-react-css-modules",
+          "gatsby-plugin-react-helmet",
+          "gatsby-plugin-react-next",
+          "gatsby-plugin-remove-trailing-slashes",
+          "gatsby-plugin-sass",
+          "gatsby-plugin-sharp",
+          "gatsby-plugin-sitemap",
+          "gatsby-plugin-styled-components",
+          "gatsby-plugin-styled-jsx",
+          "gatsby-plugin-styletron",
+          "gatsby-plugin-stylus",
+          "gatsby-plugin-twitter",
+          "gatsby-plugin-typescript",
+          "gatsby-plugin-typography",
+          "gatsby-react-router-scroll",
+          "gatsby-remark-autolink-headers",
+          "gatsby-remark-code-repls",
+          "gatsby-remark-copy-linked-files",
+          "gatsby-remark-custom-blocks",
+          "gatsby-remark-embed-snippet",
+          "gatsby-remark-images",
+          "gatsby-remark-katex",
+          "gatsby-remark-prismjs",
+          "gatsby-remark-responsive-iframe",
+          "gatsby-remark-smartypants",
+          "gatsby-source-contentful",
+          "gatsby-source-drupal",
+          "gatsby-source-faker",
+          "gatsby-source-filesystem",
+          "gatsby-source-hacker-news",
+          "gatsby-source-lever",
+          "gatsby-source-medium",
+          "gatsby-source-mongodb",
+          "gatsby-source-wordpress-com",
+          "gatsby-source-wordpress",
+          "gatsby-transformer-csv",
+          "gatsby-transformer-documentationjs",
+          "gatsby-transformer-docx",
+          "gatsby-transformer-excel",
+          "gatsby-transformer-hjson",
+          "gatsby-transformer-javascript-frontmatter",
+          "gatsby-transformer-javascript-static-exports",
+          "gatsby-transformer-json",
+          "gatsby-transformer-pdf",
+          "gatsby-transformer-pdfimages",
+          "gatsby-transformer-react-docgen",
+          "gatsby-transformer-remark",
+          "gatsby-transformer-screenshot",
+          "gatsby-transformer-sharp",
+          "gatsby-transformer-toml",
+          "gatsby-transformer-xml",
+          "gatsby-transformer-yaml",
+          "gatsby",
+          "graphql-skip-limit",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from jest monorepo together",
+        ],
+        "groupName": "jest monorepo",
+        "packageNames": Array [
+          "babel-jest",
+          "babel-plugin-jest-hoist",
+          "babel-preset-jest",
+          "diff-sequences",
+          "eslint-config-fb-strict",
+          "expect",
+          "jest-changed-files",
+          "jest-circus",
+          "jest-cli",
+          "jest-config",
+          "jest-diff",
+          "jest-docblock",
+          "jest-editor-support",
+          "jest-environment-jsdom",
+          "jest-environment-node",
+          "jest-get-type",
+          "jest-haste-map",
+          "jest-jasmine2",
+          "jest-leak-detector",
+          "jest-matcher-utils",
+          "jest-message-util",
+          "jest-mock",
+          "jest-phabricator",
+          "jest-regex-util",
+          "jest-repl",
+          "jest-resolve-dependencies",
+          "jest-resolve",
+          "jest-runner",
+          "jest-runtime",
+          "jest-serializer",
+          "jest-snapshot",
+          "jest-test-typescript-parser",
+          "jest-util",
+          "jest-validate",
+          "jest-worker",
+          "jest",
+          "pretty-format",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from lodash monorepo together",
+        ],
+        "groupName": "lodash monorepo",
+        "packageNames": Array [
+          "babel-plugin-lodash",
+          "lodash-webpack-plugin",
+          "lodash-es",
+        ],
+        "packagePatterns": Array [
+          "^lodash",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from material monorepo together",
+        ],
+        "groupName": "material monorepo",
+        "packageNames": Array [
+          "material-components-web",
+          "@material/animation",
+          "@material/auto-init",
+          "@material/base",
+          "@material/button",
+          "@material/card",
+          "@material/checkbox",
+          "@material/chips",
+          "@material/dialog",
+          "@material/drawer",
+          "@material/elevation",
+          "@material/fab",
+          "@material/floating-label",
+          "@material/form-field",
+          "@material/grid-list",
+          "@material/icon-toggle",
+          "@material/image-list",
+          "@material/layout-grid",
+          "@material/line-ripple",
+          "@material/linear-progress",
+          "@material/list",
+          "@material/menu",
+          "@material/notched-outline",
+          "@material/radio",
+          "@material/ripple",
+          "@material/rtl",
+          "@material/select",
+          "@material/selection-control",
+          "@material/slider",
+          "@material/snackbar",
+          "@material/switch",
+          "@material/tabs",
+          "@material/textfield",
+          "@material/theme",
+          "@material/toolbar",
+          "@material/top-app-bar",
+          "@material/typography",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from neutrino monorepo together",
+        ],
+        "groupName": "neutrino monorepo",
+        "packageNames": Array [
+          "neutrino",
+        ],
+        "packagePatterns": Array [
+          "^@neutrinojs/",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from ngrx monorepo together",
+        ],
+        "groupName": "ngrx monorepo",
+        "packageNames": Array [
+          "ngrx",
+        ],
+        "packagePatterns": Array [
+          "^@ngrx/",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from nrwl monorepo together",
+        ],
+        "groupName": "nrwl monorepo",
+        "packageNames": Array [
+          "nrwl",
+        ],
+        "packagePatterns": Array [
+          "^@nrwl/",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from pouchdb monorepo together",
+        ],
+        "groupName": "pouchdb monorepo",
+        "packageNames": Array [
+          "pouchdb-abstract-mapreduce",
+          "pouchdb-adapter-fruitdown",
+          "pouchdb-adapter-http",
+          "pouchdb-adapter-idb",
+          "pouchdb-adapter-leveldb-core",
+          "pouchdb-adapter-leveldb",
+          "pouchdb-adapter-localstorage",
+          "pouchdb-adapter-memory",
+          "pouchdb-adapter-node-websql",
+          "pouchdb-adapter-utils",
+          "pouchdb-adapter-websql-core",
+          "pouchdb-adapter-websql",
+          "pouchdb-binary-utils",
+          "pouchdb-browser",
+          "pouchdb-changes-filter",
+          "pouchdb-checkpointer",
+          "pouchdb-collate",
+          "pouchdb-collections",
+          "pouchdb-core",
+          "pouchdb-debug",
+          "pouchdb-errors",
+          "pouchdb-fetch",
+          "pouchdb-find",
+          "pouchdb-generate-replication-id",
+          "pouchdb-json",
+          "pouchdb-mapreduce-utils",
+          "pouchdb-mapreduce",
+          "pouchdb-md5",
+          "pouchdb-merge",
+          "pouchdb-node",
+          "pouchdb-replication",
+          "pouchdb-selector-core",
+          "pouchdb-utils",
+          "pouchdb",
+          "sublevel-pouchdb",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from react monorepo together",
+        ],
+        "groupName": "react monorepo",
+        "packageNames": Array [
+          "create-subscription",
+          "react-art",
+          "react-call-return",
+          "react-dom",
+          "react-is",
+          "react-reconciler",
+          "react-test-renderer",
+          "react",
+          "simple-cache-provider",
+        ],
+      },
+      Object {
+        "description": Array [
+          "Group packages from storybook monorepo together",
+        ],
+        "groupName": "storybook monorepo",
+        "packagePatterns": Array [
+          "^@storybook/",
+        ],
+      },
+      Object {
+        "major": Object {
+          "enabled": false,
+        },
+        "packageNames": Array [
+          "@types/node",
+        ],
+      },
+    ],
+    "peerDependencies": Object {
+      "description": Array [
+        "Use <code>chore</code> as semantic commit type for commit messages and PR titles",
+      ],
+      "semanticCommitType": "chore",
+    },
+    "pinVersions": null,
+    "prConcurrentLimit": 20,
+    "prCreation": "immediate",
+    "prHourlyLimit": 2,
+    "separateMajorReleases": true,
+    "separatePatchReleases": false,
+    "unstablePattern": "^\\\\d*[13579]($|.)",
+    "updateNotScheduled": true,
+  },
+  "optionalDependencies": Object {},
+  "packageFiles": Array [],
+  "packageNames": Array [],
+  "packagePatterns": Array [],
+  "packageRules": Array [],
+  "patch": Object {
+    "automerge": true,
+    "branchName": "{{{branchPrefix}}}{{{depNameSanitized}}}-{{{newVersionMajor}}}.{{{newVersionMinor}}}.x",
+  },
+  "pathRules": Array [],
+  "paths": Array [],
+  "peerDependencies": Object {
+    "enabled": false,
+    "pinVersions": false,
+  },
+  "pin": Object {
+    "group": Object {
+      "commitMessage": "Pin Dependencies",
+      "prTitle": "{{{groupName}}}",
+    },
+    "groupName": "Pin Dependencies",
+    "rebaseStalePrs": true,
+    "recreateClosed": true,
+    "unpublishSafe": false,
+  },
+  "pinDigests": true,
+  "pinVersions": null,
+  "platform": "github",
+  "prBody": "This Pull Request {{#if isRollback}}rolls back{{else}}updates{{/if}} dependency {{#if repositoryUrl}}[{{{depName}}}]({{{repositoryUrl}}}){{else}}\`{{{depName}}}\`{{/if}} from \`{{#unless isRange}}{{#unless isPin}}v{{/unless}}{{/unless}}{{{currentVersion}}}\` to \`{{#unless isRange}}v{{/unless}}{{{newVersion}}}\`{{#if isRollback}}. This is necessary and important because \`v{{{currentVersion}}}\` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}\\n{{#if hasTypes}}\\n\\nThis PR also includes an upgrade to the corresponding [@types/{{{depName}}}](https://npmjs.com/package/@types/{{{depName}}}) package.\\n{{/if}}\\n{{#if releases.length}}\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if isPin}}\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n{{/if}}\\n{{#if hasReleaseNotes}}\\n\\n<details>\\n<summary>Release Notes</summary>\\n\\n{{#each releases as |release|}}\\n{{#if release.releaseNotes}}\\n### [\`v{{{release.version}}}\`]({{{release.releaseNotes.url}}})\\n\\n{{{release.releaseNotes.body}}}\\n\\n---\\n\\n{{/if}}\\n{{/each}}\\n</details>\\n{{/if}}\\n\\n{{#if hasCommits}}\\n\\n<details>\\n<summary>Commits</summary>\\n\\n{{#each releases as |release|}}\\n{{#if release.hasCommits}}\\n#### v{{{release.version}}}\\n{{#each release.commits as |commit|}}\\n-   [\`{{commit.shortSha}}\`]({{commit.url}}) {{commit.message}}\\n{{/each}}\\n{{/if}}\\n{{/each}}\\n\\n</details>\\n{{/if}}\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+  "prConcurrentLimit": 0,
+  "prCreation": "immediate",
+  "prFooter": "This PR has been generated by [Renovate Bot](https://renovateapp.com).",
+  "prHourlyLimit": 10,
+  "prNotPendingHours": 25,
+  "prTitle": "{{#if isPin}}Pin{{else}}{{#if isRollback}}Roll back{{else}}Update{{/if}}{{/if}} dependency {{{depName}}} to {{#if isRange}}{{{newVersion}}}{{else}}{{#if isMajor}}v{{{newVersionMajor}}}{{else}}v{{{newVersion}}}{{/if}}{{/if}}",
+  "privateKey": null,
+  "rebaseStalePrs": null,
+  "recreateClosed": false,
+  "renovateFork": false,
+  "requireConfig": false,
+  "requiredStatusChecks": Array [],
+  "respectLatest": true,
+  "reviewers": Array [],
+  "schedule": Array [],
+  "semanticCommitScope": "deps",
+  "semanticCommitType": "chore",
+  "semanticCommits": null,
+  "separateMajorReleases": true,
+  "separatePatchReleases": true,
+  "statusCheckVerify": false,
+  "supportPolicy": Array [],
+  "timezone": null,
+  "token": null,
+  "travis": Object {
+    "enabled": false,
+  },
+  "unpublishSafe": false,
+  "unstablePattern": null,
+  "updateLockFiles": true,
+  "updateNotScheduled": true,
+  "upgradeInRange": false,
+  "versionStrategy": "auto",
+  "yarnrc": null,
+}
+`;
+
+exports[`config/index .parseConfigs(env, defaultArgv) resolves all presets: rennovateapp/github-app-cli 1`] = `
+Object {
+  "automerge": false,
+  "branchPrefix": "renovate/",
+  "dependencies": Object {
+    "description": Array [
+      "Use <code>fix</code> as semantic commit type for commit messages and PR titles",
+    ],
+    "semanticCommitType": "fix",
+  },
+  "description": Array [
+    "Separate major versions of dependencies into individual branches/PRs",
+    "Combine any patch and minor upgrades together into same branch/PR",
+    "Upgrade to unstable versions only if the existing version is unstable",
+    "Raise PRs immediately (after branch is created)",
+    "Use <code>renovate/</code> as prefix for all branch names",
+    "If semantic commits detected, use semantic commit type <code>fix</code> for dependencies and <code>chore</code> for all others",
+    "Keep existing branches updated even when not scheduled",
+    "Disable automerging feature - wait for humans to merge all PRs",
+    "Ignore \`node_modules\`, \`bower_components\`, and various test/tests directories",
+    "Update existing lock files only when <code>package.json</code> is modified",
+    "Autodetect whether to pin dependencies or maintain ranges",
+    "Rate limit PR creation to a maximum of two per hour",
+    "Limit to maximum 20 concurrent Renovate PRs at any time",
+    "Preconfigure dependencies where an odd major version indicates unstable (Docker-only)",
+    "Rate limit PR creation to a maximum of two per hour",
+  ],
+  "devDependencies": Object {
+    "description": Array [
+      "Use <code>chore</code> as semantic commit type for commit messages and PR titles",
+    ],
+    "semanticCommitType": "chore",
+  },
+  "ignorePaths": Array [
+    "**/node_modules/**",
+    "**/bower_components/**",
+    "**/examples/**",
+    "**/__tests__/**",
+    "**/test/**",
+    "**/tests/**",
+  ],
+  "ignoreUnstable": true,
+  "lockFileMaintenance": Object {
+    "enabled": false,
+  },
+  "optionalDependencies": Object {
+    "description": Array [
+      "Use <code>chore</code> as semantic commit type for commit messages and PR titles",
+    ],
+    "semanticCommitType": "chore",
+  },
+  "packageNames": Array [
+    "mhart/alpine-node",
+    "node",
+    "ubuntu",
+  ],
+  "packageRules": Array [
+    Object {
+      "description": Array [
+        "Group packages from accounts monorepo together",
+      ],
+      "groupName": "accounts monorepo",
+      "packageNames": Array [
+        "@accounts/client",
+        "@accounts/common",
+        "@accounts/mongo",
+        "@accounts/error",
+        "@accounts/oauth-instagram",
+        "@accounts/oauth-twitter",
+        "@accounts/oauth",
+        "@accounts/password",
+        "@accounts/rest-client",
+        "@accounts/rest-express",
+        "@accounts/server",
+        "@accounts/two-factor",
+        "@accounts/types",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from angular monorepo together",
+      ],
+      "groupName": "angular monorepo",
+      "packageNames": Array [
+        "@angular/animations",
+        "@angular/bazel",
+        "@angular/benchpress",
+        "@angular/common",
+        "@angular/compiler-cli",
+        "@angular/compiler",
+        "@angular/core",
+        "@angular/elements",
+        "@angular/forms",
+        "@angular/http",
+        "@angular/language-service",
+        "@angular/platform-browser-dynamic",
+        "@angular/platform-browser",
+        "@angular/platform-server",
+        "@angular/platform-webworker-dynamic",
+        "@angular/platform-webworker",
+        "@angular/router",
+        "@angular/service-worker",
+        "@angular/upgrade",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from angular1 monorepo together",
+      ],
+      "groupName": "angular1 monorepo",
+      "packageNames": Array [
+        "angular",
+        "angular-animate",
+        "angular-aria",
+        "angular-cookies",
+        "angular-loader",
+        "angular-message-format",
+        "angular-messages",
+        "angular-mocks",
+        "angular-parse-ext",
+        "angular-resource",
+        "angular-route",
+        "angular-sanitize",
+        "angular-scenario",
+        "angular-touch",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from babel monorepo together",
+      ],
+      "groupName": "babel monorepo",
+      "packageNames": Array [
+        "@babel/cli",
+        "@babel/code-frame",
+        "@babel/core",
+        "@babel/generator",
+        "@babel/helper-annotate-as-pure",
+        "@babel/helper-bindify-decorators",
+        "@babel/helper-builder-binary-assignment-operator-visitor",
+        "@babel/helper-builder-react-jsx",
+        "@babel/helper-call-delegate",
+        "@babel/helper-define-map",
+        "@babel/helper-explode-assignable-expression",
+        "@babel/helper-explode-class",
+        "@babel/helper-fixtures",
+        "@babel/helper-function-name",
+        "@babel/helper-get-function-arity",
+        "@babel/helper-hoist-variables",
+        "@babel/helper-module-imports",
+        "@babel/helper-module-transforms",
+        "@babel/helper-optimise-call-expression",
+        "@babel/helper-plugin-test-runner",
+        "@babel/helper-plugin-utils",
+        "@babel/helper-regex",
+        "@babel/helper-remap-async-to-generator",
+        "@babel/helper-replace-supers",
+        "@babel/helper-simple-access",
+        "@babel/helper-split-export-declaration",
+        "@babel/helper-transform-fixture-test-runner",
+        "@babel/helper-wrap-function",
+        "@babel/helpers",
+        "@babel/highlight",
+        "@babel/node",
+        "@babel/plugin-external-helpers",
+        "@babel/plugin-proposal-async-generator-functions",
+        "@babel/plugin-proposal-class-properties",
+        "@babel/plugin-proposal-decorators",
+        "@babel/plugin-proposal-do-expressions",
+        "@babel/plugin-proposal-export-default-from",
+        "@babel/plugin-proposal-export-namespace-from",
+        "@babel/plugin-proposal-function-bind",
+        "@babel/plugin-proposal-function-sent",
+        "@babel/plugin-proposal-logical-assignment-operators",
+        "@babel/plugin-proposal-nullish-coalescing-operator",
+        "@babel/plugin-proposal-numeric-separator",
+        "@babel/plugin-proposal-object-rest-spread",
+        "@babel/plugin-proposal-optional-catch-binding",
+        "@babel/plugin-proposal-optional-chaining",
+        "@babel/plugin-proposal-pipeline-operator",
+        "@babel/plugin-proposal-throw-expressions",
+        "@babel/plugin-proposal-unicode-property-regex",
+        "@babel/plugin-syntax-async-generators",
+        "@babel/plugin-syntax-class-properties",
+        "@babel/plugin-syntax-decorators",
+        "@babel/plugin-syntax-do-expressions",
+        "@babel/plugin-syntax-dynamic-import",
+        "@babel/plugin-syntax-export-default-from",
+        "@babel/plugin-syntax-export-namespace-from",
+        "@babel/plugin-syntax-flow",
+        "@babel/plugin-syntax-function-bind",
+        "@babel/plugin-syntax-function-sent",
+        "@babel/plugin-syntax-import-meta",
+        "@babel/plugin-syntax-jsx",
+        "@babel/plugin-syntax-logical-assignment-operators",
+        "@babel/plugin-syntax-nullish-coalescing-operator",
+        "@babel/plugin-syntax-numeric-separator",
+        "@babel/plugin-syntax-object-rest-spread",
+        "@babel/plugin-syntax-optional-catch-binding",
+        "@babel/plugin-syntax-optional-chaining",
+        "@babel/plugin-syntax-pipeline-operator",
+        "@babel/plugin-syntax-throw-expressions",
+        "@babel/plugin-syntax-typescript",
+        "@babel/plugin-transform-arrow-functions",
+        "@babel/plugin-transform-async-to-generator",
+        "@babel/plugin-transform-block-scoped-functions",
+        "@babel/plugin-transform-block-scoping",
+        "@babel/plugin-transform-classes",
+        "@babel/plugin-transform-computed-properties",
+        "@babel/plugin-transform-destructuring",
+        "@babel/plugin-transform-dotall-regex",
+        "@babel/plugin-transform-duplicate-keys",
+        "@babel/plugin-transform-exponentiation-operator",
+        "@babel/plugin-transform-flow-comments",
+        "@babel/plugin-transform-flow-strip-types",
+        "@babel/plugin-transform-for-of",
+        "@babel/plugin-transform-function-name",
+        "@babel/plugin-transform-instanceof",
+        "@babel/plugin-transform-jscript",
+        "@babel/plugin-transform-literals",
+        "@babel/plugin-transform-member-expression-literals",
+        "@babel/plugin-transform-modules-amd",
+        "@babel/plugin-transform-modules-commonjs",
+        "@babel/plugin-transform-modules-systemjs",
+        "@babel/plugin-transform-modules-umd",
+        "@babel/plugin-transform-new-target",
+        "@babel/plugin-transform-object-assign",
+        "@babel/plugin-transform-object-set-prototype-of-to-assign",
+        "@babel/plugin-transform-object-super",
+        "@babel/plugin-transform-parameters",
+        "@babel/plugin-transform-property-literals",
+        "@babel/plugin-transform-property-mutators",
+        "@babel/plugin-transform-proto-to-assign",
+        "@babel/plugin-transform-react-constant-elements",
+        "@babel/plugin-transform-react-display-name",
+        "@babel/plugin-transform-react-inline-elements",
+        "@babel/plugin-transform-react-jsx-compat",
+        "@babel/plugin-transform-react-jsx-self",
+        "@babel/plugin-transform-react-jsx-source",
+        "@babel/plugin-transform-react-jsx",
+        "@babel/plugin-transform-regenerator",
+        "@babel/plugin-transform-reserved-words",
+        "@babel/plugin-transform-runtime",
+        "@babel/plugin-transform-shorthand-properties",
+        "@babel/plugin-transform-spread",
+        "@babel/plugin-transform-sticky-regex",
+        "@babel/plugin-transform-strict-mode",
+        "@babel/plugin-transform-template-literals",
+        "@babel/plugin-transform-typeof-symbol",
+        "@babel/plugin-transform-typescript",
+        "@babel/plugin-transform-unicode-regex",
+        "@babel/polyfill",
+        "@babel/preset-env-standalone",
+        "@babel/preset-env",
+        "@babel/preset-es2015",
+        "@babel/preset-es2016",
+        "@babel/preset-es2017",
+        "@babel/preset-flow",
+        "@babel/preset-react",
+        "@babel/preset-stage-0",
+        "@babel/preset-stage-1",
+        "@babel/preset-stage-2",
+        "@babel/preset-stage-3",
+        "@babel/preset-typescript",
+        "@babel/register",
+        "@babel/runtime",
+        "@babel/standalone",
+        "@babel/template",
+        "@babel/traverse",
+        "@babel/types",
+        "babylon",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from babel6 monorepo together",
+      ],
+      "groupName": "babel6 monorepo",
+      "packageNames": Array [
+        "babel-cli",
+        "babel-code-frame",
+        "babel-core",
+        "babel-generator",
+        "babel-helper-bindify-decorators",
+        "babel-helper-builder-binary-assignment-operator-visitor",
+        "babel-helper-builder-react-jsx",
+        "babel-helper-call-delegate",
+        "babel-helper-define-map",
+        "babel-helper-explode-assignable-expression",
+        "babel-helper-explode-class",
+        "babel-helper-fixtures",
+        "babel-helper-function-name",
+        "babel-helper-get-function-arity",
+        "babel-helper-hoist-variables",
+        "babel-helper-optimise-call-expression",
+        "babel-helper-plugin-test-runner",
+        "babel-helper-regex",
+        "babel-helper-remap-async-to-generator",
+        "babel-helper-replace-supers",
+        "babel-helper-transform-fixture-test-runner",
+        "babel-helpers",
+        "babel-plugin-external-helpers",
+        "babel-plugin-syntax-async-generators",
+        "babel-plugin-syntax-class-properties",
+        "babel-plugin-syntax-decorators",
+        "babel-plugin-syntax-do-expressions",
+        "babel-plugin-syntax-dynamic-import",
+        "babel-plugin-syntax-flow",
+        "babel-plugin-syntax-function-bind",
+        "babel-plugin-syntax-function-sent",
+        "babel-plugin-syntax-jsx",
+        "babel-plugin-syntax-object-rest-spread",
+        "babel-plugin-transform-async-to-generator",
+        "babel-plugin-transform-exponentiation-operator",
+        "babel-plugin-transform-flow-comments",
+        "babel-plugin-transform-flow-strip-types",
+        "babel-plugin-transform-jscript",
+        "babel-plugin-transform-object-assign",
+        "babel-plugin-transform-object-set-prototype-of-to-assign",
+        "babel-plugin-transform-proto-to-assign",
+        "babel-plugin-transform-react-constant-elements",
+        "babel-plugin-transform-react-display-name",
+        "babel-plugin-transform-react-inline-elements",
+        "babel-plugin-transform-react-jsx-compat",
+        "babel-plugin-transform-react-jsx-self",
+        "babel-plugin-transform-react-jsx-source",
+        "babel-plugin-transform-react-jsx",
+        "babel-plugin-transform-regenerator",
+        "babel-plugin-transform-runtime",
+        "babel-plugin-transform-strict-mode",
+        "babel-polyfill",
+        "babel-preset-es2015",
+        "babel-preset-es2016",
+        "babel-preset-es2017",
+        "babel-preset-flow",
+        "babel-preset-react",
+        "babel-preset-stage-0",
+        "babel-preset-stage-1",
+        "babel-preset-stage-2",
+        "babel-preset-stage-3",
+        "babel-register",
+        "babel-runtime",
+        "babel-template",
+        "babel-traverse",
+        "babel-types",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from commitlint monorepo together",
+      ],
+      "groupName": "commitlint monorepo",
+      "packageNames": Array [
+        "commitlint",
+      ],
+      "packagePatterns": Array [
+        "^@commitlint/",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from gatsby monorepo together",
+      ],
+      "groupName": "gatsby monorepo",
+      "packageNames": Array [
+        "gatsby-1-config-css-modules",
+        "gatsby-1-config-extract-plugin",
+        "gatsby-cli",
+        "gatsby-dev-cli",
+        "gatsby-image",
+        "gatsby-link",
+        "gatsby-module-loader",
+        "gatsby-plugin-aphrodite",
+        "gatsby-plugin-canonical-urls",
+        "gatsby-plugin-catch-links",
+        "gatsby-plugin-coffeescript",
+        "gatsby-plugin-create-client-paths",
+        "gatsby-plugin-cxs",
+        "gatsby-plugin-emotion",
+        "gatsby-plugin-facebook-analytics",
+        "gatsby-plugin-feed",
+        "gatsby-plugin-fullstory",
+        "gatsby-plugin-glamor",
+        "gatsby-plugin-glamorous",
+        "gatsby-plugin-google-analytics",
+        "gatsby-plugin-google-tagmanager",
+        "gatsby-plugin-jss",
+        "gatsby-plugin-less",
+        "gatsby-plugin-lodash",
+        "gatsby-plugin-manifest",
+        "gatsby-plugin-netlify-cms",
+        "gatsby-plugin-netlify",
+        "gatsby-plugin-no-sourcemaps",
+        "gatsby-plugin-nprogress",
+        "gatsby-plugin-offline",
+        "gatsby-plugin-postcss-sass",
+        "gatsby-plugin-preact",
+        "gatsby-plugin-react-css-modules",
+        "gatsby-plugin-react-helmet",
+        "gatsby-plugin-react-next",
+        "gatsby-plugin-remove-trailing-slashes",
+        "gatsby-plugin-sass",
+        "gatsby-plugin-sharp",
+        "gatsby-plugin-sitemap",
+        "gatsby-plugin-styled-components",
+        "gatsby-plugin-styled-jsx",
+        "gatsby-plugin-styletron",
+        "gatsby-plugin-stylus",
+        "gatsby-plugin-twitter",
+        "gatsby-plugin-typescript",
+        "gatsby-plugin-typography",
+        "gatsby-react-router-scroll",
+        "gatsby-remark-autolink-headers",
+        "gatsby-remark-code-repls",
+        "gatsby-remark-copy-linked-files",
+        "gatsby-remark-custom-blocks",
+        "gatsby-remark-embed-snippet",
+        "gatsby-remark-images",
+        "gatsby-remark-katex",
+        "gatsby-remark-prismjs",
+        "gatsby-remark-responsive-iframe",
+        "gatsby-remark-smartypants",
+        "gatsby-source-contentful",
+        "gatsby-source-drupal",
+        "gatsby-source-faker",
+        "gatsby-source-filesystem",
+        "gatsby-source-hacker-news",
+        "gatsby-source-lever",
+        "gatsby-source-medium",
+        "gatsby-source-mongodb",
+        "gatsby-source-wordpress-com",
+        "gatsby-source-wordpress",
+        "gatsby-transformer-csv",
+        "gatsby-transformer-documentationjs",
+        "gatsby-transformer-docx",
+        "gatsby-transformer-excel",
+        "gatsby-transformer-hjson",
+        "gatsby-transformer-javascript-frontmatter",
+        "gatsby-transformer-javascript-static-exports",
+        "gatsby-transformer-json",
+        "gatsby-transformer-pdf",
+        "gatsby-transformer-pdfimages",
+        "gatsby-transformer-react-docgen",
+        "gatsby-transformer-remark",
+        "gatsby-transformer-screenshot",
+        "gatsby-transformer-sharp",
+        "gatsby-transformer-toml",
+        "gatsby-transformer-xml",
+        "gatsby-transformer-yaml",
+        "gatsby",
+        "graphql-skip-limit",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from jest monorepo together",
+      ],
+      "groupName": "jest monorepo",
+      "packageNames": Array [
+        "babel-jest",
+        "babel-plugin-jest-hoist",
+        "babel-preset-jest",
+        "diff-sequences",
+        "eslint-config-fb-strict",
+        "expect",
+        "jest-changed-files",
+        "jest-circus",
+        "jest-cli",
+        "jest-config",
+        "jest-diff",
+        "jest-docblock",
+        "jest-editor-support",
+        "jest-environment-jsdom",
+        "jest-environment-node",
+        "jest-get-type",
+        "jest-haste-map",
+        "jest-jasmine2",
+        "jest-leak-detector",
+        "jest-matcher-utils",
+        "jest-message-util",
+        "jest-mock",
+        "jest-phabricator",
+        "jest-regex-util",
+        "jest-repl",
+        "jest-resolve-dependencies",
+        "jest-resolve",
+        "jest-runner",
+        "jest-runtime",
+        "jest-serializer",
+        "jest-snapshot",
+        "jest-test-typescript-parser",
+        "jest-util",
+        "jest-validate",
+        "jest-worker",
+        "jest",
+        "pretty-format",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from lodash monorepo together",
+      ],
+      "groupName": "lodash monorepo",
+      "packageNames": Array [
+        "babel-plugin-lodash",
+        "lodash-webpack-plugin",
+        "lodash-es",
+      ],
+      "packagePatterns": Array [
+        "^lodash",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from material monorepo together",
+      ],
+      "groupName": "material monorepo",
+      "packageNames": Array [
+        "material-components-web",
+        "@material/animation",
+        "@material/auto-init",
+        "@material/base",
+        "@material/button",
+        "@material/card",
+        "@material/checkbox",
+        "@material/chips",
+        "@material/dialog",
+        "@material/drawer",
+        "@material/elevation",
+        "@material/fab",
+        "@material/floating-label",
+        "@material/form-field",
+        "@material/grid-list",
+        "@material/icon-toggle",
+        "@material/image-list",
+        "@material/layout-grid",
+        "@material/line-ripple",
+        "@material/linear-progress",
+        "@material/list",
+        "@material/menu",
+        "@material/notched-outline",
+        "@material/radio",
+        "@material/ripple",
+        "@material/rtl",
+        "@material/select",
+        "@material/selection-control",
+        "@material/slider",
+        "@material/snackbar",
+        "@material/switch",
+        "@material/tabs",
+        "@material/textfield",
+        "@material/theme",
+        "@material/toolbar",
+        "@material/top-app-bar",
+        "@material/typography",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from neutrino monorepo together",
+      ],
+      "groupName": "neutrino monorepo",
+      "packageNames": Array [
+        "neutrino",
+      ],
+      "packagePatterns": Array [
+        "^@neutrinojs/",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from ngrx monorepo together",
+      ],
+      "groupName": "ngrx monorepo",
+      "packageNames": Array [
+        "ngrx",
+      ],
+      "packagePatterns": Array [
+        "^@ngrx/",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from nrwl monorepo together",
+      ],
+      "groupName": "nrwl monorepo",
+      "packageNames": Array [
+        "nrwl",
+      ],
+      "packagePatterns": Array [
+        "^@nrwl/",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from pouchdb monorepo together",
+      ],
+      "groupName": "pouchdb monorepo",
+      "packageNames": Array [
+        "pouchdb-abstract-mapreduce",
+        "pouchdb-adapter-fruitdown",
+        "pouchdb-adapter-http",
+        "pouchdb-adapter-idb",
+        "pouchdb-adapter-leveldb-core",
+        "pouchdb-adapter-leveldb",
+        "pouchdb-adapter-localstorage",
+        "pouchdb-adapter-memory",
+        "pouchdb-adapter-node-websql",
+        "pouchdb-adapter-utils",
+        "pouchdb-adapter-websql-core",
+        "pouchdb-adapter-websql",
+        "pouchdb-binary-utils",
+        "pouchdb-browser",
+        "pouchdb-changes-filter",
+        "pouchdb-checkpointer",
+        "pouchdb-collate",
+        "pouchdb-collections",
+        "pouchdb-core",
+        "pouchdb-debug",
+        "pouchdb-errors",
+        "pouchdb-fetch",
+        "pouchdb-find",
+        "pouchdb-generate-replication-id",
+        "pouchdb-json",
+        "pouchdb-mapreduce-utils",
+        "pouchdb-mapreduce",
+        "pouchdb-md5",
+        "pouchdb-merge",
+        "pouchdb-node",
+        "pouchdb-replication",
+        "pouchdb-selector-core",
+        "pouchdb-utils",
+        "pouchdb",
+        "sublevel-pouchdb",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from react monorepo together",
+      ],
+      "groupName": "react monorepo",
+      "packageNames": Array [
+        "create-subscription",
+        "react-art",
+        "react-call-return",
+        "react-dom",
+        "react-is",
+        "react-reconciler",
+        "react-test-renderer",
+        "react",
+        "simple-cache-provider",
+      ],
+    },
+    Object {
+      "description": Array [
+        "Group packages from storybook monorepo together",
+      ],
+      "groupName": "storybook monorepo",
+      "packagePatterns": Array [
+        "^@storybook/",
+      ],
+    },
+    Object {
+      "major": Object {
+        "enabled": false,
+      },
+      "packageNames": Array [
+        "@types/node",
+      ],
+    },
+  ],
+  "peerDependencies": Object {
+    "description": Array [
+      "Use <code>chore</code> as semantic commit type for commit messages and PR titles",
+    ],
+    "semanticCommitType": "chore",
+  },
+  "pinVersions": null,
+  "prConcurrentLimit": 20,
+  "prCreation": "immediate",
+  "prHourlyLimit": 2,
+  "repository": "rennovateapp/github-app-cli",
+  "separateMajorReleases": true,
+  "separatePatchReleases": false,
+  "unstablePattern": "^\\\\d*[13579]($|.)",
+  "updateNotScheduled": true,
+}
+`;
+
+exports[`config/index .parseConfigs(env, defaultArgv) resolves all presets: renovateapp/renovate 1`] = `
+Object {
+  "description": Array [
+    "Use version pinning (maintain a single version only and not semver ranges)",
+  ],
+  "pinVersions": true,
+  "repository": "renovateapp/renovate",
+}
+`;
+
 exports[`config/index mergeChildConfig(parentConfig, childConfig) merges 1`] = `
 Object {
   "branchName": "{{{branchPrefix}}}lock-file-maintenance",
diff --git a/test/config/index.spec.js b/test/config/index.spec.js
index 582a3cddd9..9aebc83ec5 100644
--- a/test/config/index.spec.js
+++ b/test/config/index.spec.js
@@ -164,6 +164,36 @@ describe('config/index', () => {
       expect(ghGot.mock.calls.length).toBe(1);
       expect(get.mock.calls.length).toBe(0);
     });
+    it('resolves all presets', async () => {
+      defaultArgv.push('--pr-hourly-limit=10', '--upgrade-in-range=false');
+      const env = {
+        GITHUB_TOKEN: 'abc',
+        RENOVATE_CONFIG_FILE: require.resolve(
+          '../_fixtures/config/file-with-repo-presets.js'
+        ),
+      };
+      ghGot.mockImplementationOnce(() =>
+        Promise.resolve({
+          headers: {},
+          body: [],
+        })
+      );
+      const actual = await configParser.parseConfigs(env, defaultArgv);
+      expect(actual.peerDependencies.enabled).toBe(false);
+      expect(actual.separatePatchReleases).toBe(true);
+      expect(actual.patch.automerge).toBe(true);
+      expect(actual.minor.automerge).toBeUndefined();
+      expect(actual.major.automerge).toBeUndefined();
+      expect(actual.prHourlyLimit).toBe(10);
+      expect(actual.upgradeInRange).toBe(false);
+      actual.repositories.forEach(repo => {
+        if (typeof repo === 'object') {
+          expect(repo).toMatchSnapshot(repo.repository);
+        }
+      });
+      delete actual.repositories;
+      expect(actual).toMatchSnapshot('globalConfig');
+    });
   });
   describe('mergeChildConfig(parentConfig, childConfig)', () => {
     it('merges', () => {
-- 
GitLab