From e7ce772e94728a9665d592c08229e7fff72aad6b Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@keylocation.sg>
Date: Fri, 4 Aug 2017 12:34:42 +0200
Subject: [PATCH] feat: Make semanticPrefix implicit in templates (#608)

No need for {{semanticPrefix}} to be specified in templates now - it will be implicitly added to start of commit message and PR titles if semanticCommits=true
---
 docs/configuration.md                         | 12 ++--
 lib/config/definitions.js                     |  2 +-
 lib/config/migration.js                       | 13 +++++
 .../templates/default/commit-message.hbs      |  2 +-
 lib/config/templates/default/pr-title.hbs     |  2 +-
 lib/config/templates/group/commit-message.hbs |  2 +-
 lib/config/templates/group/pr-title.hbs       |  2 +-
 .../lock-file-maintenance/commit-message.hbs  |  2 +-
 .../lock-file-maintenance/pr-title.hbs        |  2 +-
 lib/workers/branch/index.js                   |  2 +-
 lib/workers/package/versions.js               |  6 +-
 lib/workers/repository/upgrades.js            | 10 +---
 test/config/__snapshots__/index.spec.js.snap  |  4 +-
 .../__snapshots__/migration.spec.js.snap      |  3 +
 test/config/migration.spec.js                 |  3 +
 .../package/__snapshots__/index.spec.js.snap  | 10 ++--
 .../__snapshots__/versions.spec.js.snap       | 50 ++++++++--------
 .../__snapshots__/upgrades.spec.js.snap       | 58 ++++++++++---------
 test/workers/repository/upgrades.spec.js      | 57 +++++++++---------
 19 files changed, 129 insertions(+), 113 deletions(-)

diff --git a/docs/configuration.md b/docs/configuration.md
index 5bfc7a5614..5d5af43a59 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -526,7 +526,7 @@ Obviously, you can't set repository or package file location with this method.
   <td>`commitMessage`</td>
   <td>Commit message template</td>
   <td>string</td>
-  <td><pre>"{{semanticPrefix}}Update dependency {{depName}} to version {{newVersion}}"</pre></td>
+  <td><pre>"Update dependency {{depName}} to version {{newVersion}}"</pre></td>
   <td>`RENOVATE_COMMIT_MESSAGE`</td>
   <td><td>
 </tr>
@@ -534,7 +534,7 @@ Obviously, you can't set repository or package file location with this method.
   <td>`prTitle`</td>
   <td>Pull Request title template</td>
   <td>string</td>
-  <td><pre>"{{semanticPrefix}}{{#if isPin}}Pin{{else}}{{#if isRollback}}Roll back{{else}}Update{{/if}}{{/if}} dependency {{depName}} to version {{#if isRange}}{{newVersion}}{{else}}{{#if isMajor}}{{newVersionMajor}}.x{{else}}{{newVersion}}{{/if}}{{/if}}"</pre></td>
+  <td><pre>"{{#if isPin}}Pin{{else}}{{#if isRollback}}Roll back{{else}}Update{{/if}}{{/if}} dependency {{depName}} to version {{#if isRange}}{{newVersion}}{{else}}{{#if isMajor}}{{newVersionMajor}}.x{{else}}{{newVersion}}{{/if}}{{/if}}"</pre></td>
   <td>`RENOVATE_PR_TITLE`</td>
   <td><td>
 </tr>
@@ -563,8 +563,8 @@ Obviously, you can't set repository or package file location with this method.
   "groupName": "Lock File Maintenance",
   "recreateClosed": true,
   "branchName": "{{branchPrefix}}lock-file-maintenance",
-  "commitMessage": "{{semanticPrefix}}Update lock file",
-  "prTitle": "{{semanticPrefix}}Lock file maintenance",
+  "commitMessage": "Update lock file",
+  "prTitle": "Lock file maintenance",
   "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} 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}}\n\n---\n\nThis {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://renovateapp.com).",
   "schedule": ["before 5am on monday"]
 }</pre></td>
@@ -602,8 +602,8 @@ Obviously, you can't set repository or package file location with this method.
   <td><pre>{
   "recreateClosed": true,
   "branchName": "{{branchPrefix}}{{groupSlug}}",
-  "commitMessage": "{{semanticPrefix}}Renovate {{groupName}} packages",
-  "prTitle": "{{semanticPrefix}}Renovate {{groupName}} packages",
+  "commitMessage": "Renovate {{groupName}} packages",
+  "prTitle": "Renovate {{groupName}} packages",
   "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} 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}}: from `{{upgrade.currentVersion}}` to `{{upgrade.newVersion}}`\n{{/each}}\n\n{{#unless isPin}}\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\n#### {{release.version}}\n{{#each release.commits as |commit|}}\n-   [`{{commit.shortSha}}`]({{commit.url}}){{commit.message}}\n{{/each}}\n{{/each}}\n\n</details>\n{{/if}}\n{{/each}}\n{{/unless}}\n<br />\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}}\n\n---\n\nThis {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://renovateapp.com)."
 }</pre></td>
   <td></td>
diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index a64e49b5c0..a7458b1a3a 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -322,7 +322,7 @@ const options = [
     name: 'semanticPrefix',
     description: 'Prefix to use if semantic commits are enabled',
     type: 'string',
-    default: 'chore(deps): ',
+    default: 'chore(deps):',
   },
   // PR Behaviour
   {
diff --git a/lib/config/migration.js b/lib/config/migration.js
index 04f1d9ba43..fabfaa4bfe 100644
--- a/lib/config/migration.js
+++ b/lib/config/migration.js
@@ -41,6 +41,19 @@ function migrateConfig(config) {
       isMigrated = true;
       migratedConfig.packagePatterns = [val];
       delete migratedConfig.packagePattern;
+    } else if (
+      typeof val === 'string' &&
+      val.indexOf('{{semanticPrefix}}') === 0
+    ) {
+      isMigrated = true;
+      migratedConfig[key] = val.replace('{{semanticPrefix}}', '');
+    } else if (key === 'semanticPrefix') {
+      console.log('Migrating semanticPrefix');
+      // strip trailing space
+      if (val && val[val.length - 1] === ' ') {
+        isMigrated = true;
+        migratedConfig[key] = val.substring(0, val.length - 1);
+      }
     } else if (key === 'depTypes' && Array.isArray(val)) {
       val.forEach(depType => {
         if (isObject(depType)) {
diff --git a/lib/config/templates/default/commit-message.hbs b/lib/config/templates/default/commit-message.hbs
index b5eb201bc7..f5f14d831a 100644
--- a/lib/config/templates/default/commit-message.hbs
+++ b/lib/config/templates/default/commit-message.hbs
@@ -1 +1 @@
-{{semanticPrefix}}Update dependency {{depName}} to v{{newVersion}}
+Update dependency {{depName}} to v{{newVersion}}
diff --git a/lib/config/templates/default/pr-title.hbs b/lib/config/templates/default/pr-title.hbs
index 8565257e77..e2cc17494d 100644
--- a/lib/config/templates/default/pr-title.hbs
+++ b/lib/config/templates/default/pr-title.hbs
@@ -1 +1 @@
-{{semanticPrefix}}{{#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}}
+{{#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}}
diff --git a/lib/config/templates/group/commit-message.hbs b/lib/config/templates/group/commit-message.hbs
index c6b194c27b..468a723413 100644
--- a/lib/config/templates/group/commit-message.hbs
+++ b/lib/config/templates/group/commit-message.hbs
@@ -1 +1 @@
-{{semanticPrefix}}Renovate {{groupName}} packages
+Renovate {{groupName}} packages
diff --git a/lib/config/templates/group/pr-title.hbs b/lib/config/templates/group/pr-title.hbs
index c6b194c27b..468a723413 100644
--- a/lib/config/templates/group/pr-title.hbs
+++ b/lib/config/templates/group/pr-title.hbs
@@ -1 +1 @@
-{{semanticPrefix}}Renovate {{groupName}} packages
+Renovate {{groupName}} packages
diff --git a/lib/config/templates/lock-file-maintenance/commit-message.hbs b/lib/config/templates/lock-file-maintenance/commit-message.hbs
index 0019519a69..4637bf90cd 100644
--- a/lib/config/templates/lock-file-maintenance/commit-message.hbs
+++ b/lib/config/templates/lock-file-maintenance/commit-message.hbs
@@ -1 +1 @@
-{{semanticPrefix}}Update lock file
+Update lock file
diff --git a/lib/config/templates/lock-file-maintenance/pr-title.hbs b/lib/config/templates/lock-file-maintenance/pr-title.hbs
index e441b42cf2..c5d18441be 100644
--- a/lib/config/templates/lock-file-maintenance/pr-title.hbs
+++ b/lib/config/templates/lock-file-maintenance/pr-title.hbs
@@ -1 +1 @@
-{{semanticPrefix}}Lock file maintenance
+Lock file maintenance
diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js
index dcbb653383..445d2ea07b 100644
--- a/lib/workers/branch/index.js
+++ b/lib/workers/branch/index.js
@@ -83,7 +83,7 @@ async function ensureBranch(config) {
 
   let commitMessage = handlebars.compile(config.commitMessage)(config);
   if (config.semanticCommits) {
-    commitMessage = commitMessage.toLowerCase();
+    commitMessage = `${config.semanticPrefix} ${commitMessage.toLowerCase()}`;
   }
   const api = config.api;
   const cacheFolder = config.yarnCacheFolder;
diff --git a/lib/workers/package/versions.js b/lib/workers/package/versions.js
index 87712a1f8e..92b5cfb619 100644
--- a/lib/workers/package/versions.js
+++ b/lib/workers/package/versions.js
@@ -40,8 +40,8 @@ function determineUpgrades(npmDep, config) {
       newVersionMajor: semver.major(maxSatisfying),
       groupName: 'Pin Dependencies',
       group: {
-        prTitle: '{{semanticPrefix}}{{groupName}}',
-        semanticPrefix: 'refactor(deps): ',
+        prTitle: '{{groupName}}',
+        semanticPrefix: 'refactor(deps):',
       },
     };
     changeLogFromVersion = maxSatisfying;
@@ -55,7 +55,7 @@ function determineUpgrades(npmDep, config) {
       isRollback: true,
       newVersion: rollbackVersion,
       newVersionMajor: semver.major(rollbackVersion),
-      semanticPrefix: 'fix(deps): ',
+      semanticPrefix: 'fix(deps):',
       branchName: '{{branchPrefix}}rollback-{{depName}}-{{newVersionMajor}}.x',
     };
   }
diff --git a/lib/workers/repository/upgrades.js b/lib/workers/repository/upgrades.js
index 8f6b11b9ed..48f3db78bb 100644
--- a/lib/workers/repository/upgrades.js
+++ b/lib/workers/repository/upgrades.js
@@ -54,19 +54,13 @@ function generateConfig(branchUpgrades) {
     // Delete group config regardless of whether it was applied
     delete upgrade.group;
     delete upgrade.lazyGrouping;
-    // Delete the semanticPrefix for this upgrade if not enabled
-    if (upgrade.semanticCommits) {
-      logger.debug('Upgrade has semantic commits enabled');
-    } else {
-      logger.debug('Upgrade has semantic commits disabled');
-      delete upgrade.semanticPrefix;
-    }
     // Use templates to generate strings
     logger.debug('Compiling branchName and prTitle');
     upgrade.branchName = handlebars.compile(upgrade.branchName)(upgrade);
     upgrade.prTitle = handlebars.compile(upgrade.prTitle)(upgrade);
     if (upgrade.semanticCommits) {
-      upgrade.prTitle = upgrade.prTitle.toLowerCase();
+      logger.debug('Upgrade has semantic commits enabled');
+      upgrade.prTitle = `${upgrade.semanticPrefix} ${upgrade.prTitle.toLowerCase()}`;
     }
     logger.debug(`${upgrade.branchName}, ${upgrade.prTitle}`);
     config.upgrades.push(upgrade);
diff --git a/test/config/__snapshots__/index.spec.js.snap b/test/config/__snapshots__/index.spec.js.snap
index 7e261d96f1..710412d130 100644
--- a/test/config/__snapshots__/index.spec.js.snap
+++ b/test/config/__snapshots__/index.spec.js.snap
@@ -3,7 +3,7 @@
 exports[`config/index mergeChildConfig(parentConfig, childConfig) merges 1`] = `
 Object {
   "branchName": "{{branchPrefix}}lock-file-maintenance",
-  "commitMessage": "{{semanticPrefix}}Update lock file",
+  "commitMessage": "Update lock file",
   "enabled": true,
   "groupName": "Lock File Maintenance",
   "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request updates \`package.json\` lock files to use the latest dependency versions.
@@ -41,7 +41,7 @@ Please make sure the following warnings are safe to ignore:
 ---
 
 This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://renovateapp.com).",
-  "prTitle": "{{semanticPrefix}}Lock file maintenance",
+  "prTitle": "Lock file maintenance",
   "recreateClosed": true,
   "schedule": Array [
     "on monday",
diff --git a/test/config/__snapshots__/migration.spec.js.snap b/test/config/__snapshots__/migration.spec.js.snap
index cafa25b24e..1624dd6e3c 100644
--- a/test/config/__snapshots__/migration.spec.js.snap
+++ b/test/config/__snapshots__/migration.spec.js.snap
@@ -2,6 +2,7 @@
 
 exports[`config/migration migrateConfig(config) it migrates config 1`] = `
 Object {
+  "commitMessage": "some commit message",
   "enabled": true,
   "optionalDependencies": Object {
     "respectLatest": false,
@@ -17,9 +18,11 @@ Object {
       ],
     },
   ],
+  "prTitle": "some pr title",
   "schedule": Array [
     "after 5pm",
   ],
+  "semanticPrefix": "fix(deps):",
 }
 `;
 
diff --git a/test/config/migration.spec.js b/test/config/migration.spec.js
index 0632f6ce47..42374ce0bb 100644
--- a/test/config/migration.spec.js
+++ b/test/config/migration.spec.js
@@ -7,6 +7,9 @@ describe('config/migration', () => {
         enabled: true,
         maintainYarnLock: true,
         schedule: 'after 5pm',
+        commitMessage: '{{semanticPrefix}}some commit message',
+        prTitle: '{{semanticPrefix}}some pr title',
+        semanticPrefix: 'fix(deps): ',
         packages: [
           {
             packageName: 'angular',
diff --git a/test/workers/package/__snapshots__/index.spec.js.snap b/test/workers/package/__snapshots__/index.spec.js.snap
index bf15efd703..78a9ad39ff 100644
--- a/test/workers/package/__snapshots__/index.spec.js.snap
+++ b/test/workers/package/__snapshots__/index.spec.js.snap
@@ -69,12 +69,12 @@ Array [
     "automergeType": "pr",
     "branchName": "{{branchPrefix}}{{depName}}-{{newVersionMajor}}.x",
     "branchPrefix": "renovate/",
-    "commitMessage": "{{semanticPrefix}}Update dependency {{depName}} to v{{newVersion}}",
+    "commitMessage": "Update dependency {{depName}} to v{{newVersion}}",
     "currentVersion": "1.0.0",
     "depName": "foo",
     "group": Object {
       "branchName": "{{branchPrefix}}{{groupSlug}}",
-      "commitMessage": "{{semanticPrefix}}Renovate {{groupName}} packages",
+      "commitMessage": "Renovate {{groupName}} packages",
       "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request renovates the package group \\"{{groupName}}\\".
 
 {{#if schedule}}
@@ -135,7 +135,7 @@ Please make sure the following warnings are safe to ignore:
 ---
 
 This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://renovateapp.com).",
-      "prTitle": "{{semanticPrefix}}Renovate {{groupName}} packages",
+      "prTitle": "Renovate {{groupName}} packages",
       "recreateClosed": true,
     },
     "groupName": null,
@@ -195,7 +195,7 @@ Please make sure the following warnings are safe to ignore:
 
 This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://renovateapp.com).",
     "prCreation": "immediate",
-    "prTitle": "{{semanticPrefix}}{{#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}}",
+    "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}}",
     "rebaseStalePrs": false,
     "recreateClosed": false,
     "repoIsOnboarded": true,
@@ -204,7 +204,7 @@ This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](ht
     "reviewers": Array [],
     "schedule": "some schedule",
     "semanticCommits": false,
-    "semanticPrefix": "chore(deps): ",
+    "semanticPrefix": "chore(deps):",
     "timezone": null,
     "type": "error",
   },
diff --git a/test/workers/package/__snapshots__/versions.spec.js.snap b/test/workers/package/__snapshots__/versions.spec.js.snap
index 5d9efb4af3..7352538b6f 100644
--- a/test/workers/package/__snapshots__/versions.spec.js.snap
+++ b/test/workers/package/__snapshots__/versions.spec.js.snap
@@ -5,8 +5,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -64,8 +64,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -81,8 +81,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -141,8 +141,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -183,8 +183,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -210,8 +210,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -338,7 +338,7 @@ Object {
   "isRollback": true,
   "newVersion": "1.16.0",
   "newVersionMajor": 1,
-  "semanticPrefix": "fix(deps): ",
+  "semanticPrefix": "fix(deps):",
   "type": "rollback",
 }
 `;
@@ -379,8 +379,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -431,8 +431,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -468,8 +468,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -511,8 +511,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -581,8 +581,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
@@ -694,8 +694,8 @@ Array [
   Object {
     "automergeEnabled": true,
     "group": Object {
-      "prTitle": "{{semanticPrefix}}{{groupName}}",
-      "semanticPrefix": "refactor(deps): ",
+      "prTitle": "{{groupName}}",
+      "semanticPrefix": "refactor(deps):",
     },
     "groupName": "Pin Dependencies",
     "isPin": true,
diff --git a/test/workers/repository/__snapshots__/upgrades.spec.js.snap b/test/workers/repository/__snapshots__/upgrades.spec.js.snap
index b76c0d02a9..5f131342b3 100644
--- a/test/workers/repository/__snapshots__/upgrades.spec.js.snap
+++ b/test/workers/repository/__snapshots__/upgrades.spec.js.snap
@@ -5,15 +5,43 @@ Object {
   "branchName": "some-branch",
   "depName": "some-dep",
   "foo": 1,
-  "prTitle": "some-title",
+  "prTitle": "some-prefix: some-title",
   "semanticCommits": true,
+  "semanticPrefix": "some-prefix:",
   "upgrades": Array [
     Object {
       "branchName": "some-branch",
       "depName": "some-dep",
       "foo": 1,
-      "prTitle": "some-title",
+      "prTitle": "some-prefix: some-title",
       "semanticCommits": true,
+      "semanticPrefix": "some-prefix:",
+    },
+  ],
+}
+`;
+
+exports[`workers/repository/upgrades generateConfig(branchUpgrades) groups multiple upgrades 1`] = `
+Object {
+  "branchName": "some-branch",
+  "depName": "some-dep",
+  "foo": 2,
+  "groupName": "some-group",
+  "prTitle": "some-title",
+  "upgrades": Array [
+    Object {
+      "branchName": "some-branch",
+      "depName": "some-dep",
+      "foo": 2,
+      "groupName": "some-group",
+      "prTitle": "some-title",
+    },
+    Object {
+      "branchName": "some-branch",
+      "depName": "some-other-dep",
+      "foo": 2,
+      "groupName": "some-group",
+      "prTitle": "some-title",
     },
   ],
 }
@@ -191,29 +219,3 @@ Object {
   "warnings": Array [],
 }
 `;
-
-exports[`workers/repository/upgrades groups multiple upgrades 1`] = `
-Object {
-  "branchName": "some-branch",
-  "depName": "some-dep",
-  "foo": 2,
-  "groupName": "some-group",
-  "prTitle": "some-title",
-  "upgrades": Array [
-    Object {
-      "branchName": "some-branch",
-      "depName": "some-dep",
-      "foo": 2,
-      "groupName": "some-group",
-      "prTitle": "some-title",
-    },
-    Object {
-      "branchName": "some-branch",
-      "depName": "some-other-dep",
-      "foo": 2,
-      "groupName": "some-group",
-      "prTitle": "some-title",
-    },
-  ],
-}
-`;
diff --git a/test/workers/repository/upgrades.spec.js b/test/workers/repository/upgrades.spec.js
index 629392e57d..1563b1eb8a 100644
--- a/test/workers/repository/upgrades.spec.js
+++ b/test/workers/repository/upgrades.spec.js
@@ -53,6 +53,7 @@ describe('workers/repository/upgrades', () => {
           branchName: 'some-branch',
           prTitle: 'some-title',
           semanticCommits: true,
+          semanticPrefix: 'some-prefix:',
           lazyGrouping: true,
           foo: 1,
           group: {
@@ -84,36 +85,36 @@ describe('workers/repository/upgrades', () => {
       expect(res.groupName).toBeDefined();
       expect(res).toMatchSnapshot();
     });
-  });
-  it('groups multiple upgrades', () => {
-    const branchUpgrades = [
-      {
-        depName: 'some-dep',
-        groupName: 'some-group',
-        branchName: 'some-branch',
-        prTitle: 'some-title',
-        lazyGrouping: true,
-        foo: 1,
-        group: {
-          foo: 2,
+    it('groups multiple upgrades', () => {
+      const branchUpgrades = [
+        {
+          depName: 'some-dep',
+          groupName: 'some-group',
+          branchName: 'some-branch',
+          prTitle: 'some-title',
+          lazyGrouping: true,
+          foo: 1,
+          group: {
+            foo: 2,
+          },
         },
-      },
-      {
-        depName: 'some-other-dep',
-        groupName: 'some-group',
-        branchName: 'some-branch',
-        prTitle: 'some-title',
-        lazyGrouping: true,
-        foo: 1,
-        group: {
-          foo: 2,
+        {
+          depName: 'some-other-dep',
+          groupName: 'some-group',
+          branchName: 'some-branch',
+          prTitle: 'some-title',
+          lazyGrouping: true,
+          foo: 1,
+          group: {
+            foo: 2,
+          },
         },
-      },
-    ];
-    const res = upgrades.generateConfig(branchUpgrades);
-    expect(res.foo).toBe(2);
-    expect(res.groupName).toBeDefined();
-    expect(res).toMatchSnapshot();
+      ];
+      const res = upgrades.generateConfig(branchUpgrades);
+      expect(res.foo).toBe(2);
+      expect(res.groupName).toBeDefined();
+      expect(res).toMatchSnapshot();
+    });
   });
   describe('groupByBranch(upgrades)', () => {
     it('returns empty object if no input array', async () => {
-- 
GitLab