From 0bb8be345eef436a96de3b51f28907e2fbbd8e72 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Mon, 22 Jul 2019 08:57:28 +0200
Subject: [PATCH] refactor: docker-based datasources use managerData

---
 docs/adding-a-package-manager.md              |   2 +-
 lib/manager/ansible/extract.js                |   2 +-
 lib/manager/ansible/update.js                 |   4 +-
 lib/manager/circleci/extract.js               |   2 +-
 lib/manager/circleci/update.js                |   6 +-
 lib/manager/docker-compose/extract.js         |   2 +-
 lib/manager/docker-compose/update.js          |   4 +-
 lib/manager/dockerfile/extract.js             |  20 +-
 lib/manager/dockerfile/update.js              |   4 +-
 lib/manager/github-actions/extract.js         |   2 +-
 lib/manager/github-actions/update.js          |   4 +-
 lib/manager/gitlabci/extract.js               |   6 +-
 lib/manager/gitlabci/update.js                |   6 +-
 lib/manager/kubernetes/extract.js             |   2 +-
 lib/manager/kubernetes/update.js              |   4 +-
 .../__snapshots__/extract.spec.js.snap        |  78 +++---
 test/manager/ansible/update.spec.js           |   8 +-
 .../__snapshots__/extract.spec.js.snap        |  60 ++--
 test/manager/circleci/update.spec.js          |  14 +-
 .../__snapshots__/extract.spec.js.snap        |  46 ++--
 test/manager/docker-compose/update.spec.js    |   6 +-
 .../__snapshots__/extract.spec.js.snap        | 260 +++++++++---------
 test/manager/dockerfile/extract.spec.js       |   4 +-
 test/manager/dockerfile/update.spec.js        |  57 ++--
 .../__snapshots__/extract.spec.js.snap        |  12 +-
 test/manager/github-actions/update.spec.js    |   6 +-
 .../__snapshots__/extract.spec.js.snap        |  36 +--
 test/manager/gitlabci/update.spec.js          |  16 +-
 .../__snapshots__/extract.spec.js.snap        |  18 +-
 test/manager/kubernetes/update.spec.js        |   8 +-
 30 files changed, 353 insertions(+), 346 deletions(-)

diff --git a/docs/adding-a-package-manager.md b/docs/adding-a-package-manager.md
index c9bac8643f..522d68bc02 100644
--- a/docs/adding-a-package-manager.md
+++ b/docs/adding-a-package-manager.md
@@ -37,7 +37,7 @@ This function is mandatory unless you use `extractAllPackageFiles` instead. It t
 - currentValue
 - version scheme used (e.g. semver, pep440)
 
-The fields returned here can be customised to suit the package manager, e.g. Docker uses `currentFrom`
+The fields returned here can be customised to suit the package manager, e.g. Dockerfile uses `lineNumber`. Custom fields should be added within a `managerData` object.
 
 This function doesn't necessarily need to _understand_ the file or even syntax that it is passed, instead it just needs to understand enough to extract the list of dependencies.
 
diff --git a/lib/manager/ansible/extract.js b/lib/manager/ansible/extract.js
index 78e5951231..44f38ebe5a 100644
--- a/lib/manager/ansible/extract.js
+++ b/lib/manager/ansible/extract.js
@@ -22,7 +22,7 @@ function extractPackageFile(content) {
         },
         'Docker image inside ansible'
       );
-      dep.lineNumber = lineNumber;
+      dep.managerData = { lineNumber };
       dep.versionScheme = 'docker';
       deps.push(dep);
     }
diff --git a/lib/manager/ansible/update.js b/lib/manager/ansible/update.js
index 3f7640961a..ac2727a519 100644
--- a/lib/manager/ansible/update.js
+++ b/lib/manager/ansible/update.js
@@ -10,7 +10,7 @@ function updateDependency(fileContent, upgrade) {
     const newFrom = getNewFrom(upgrade);
     logger.debug(`ansible.updateDependency(): ${newFrom}`);
     const lines = fileContent.split('\n');
-    const lineToChange = lines[upgrade.lineNumber];
+    const lineToChange = lines[upgrade.managerData.lineNumber];
     const imageLine = new RegExp(/^(\s*image:\s*'?"?)[^\s'"]+('?"?\s*)$/);
     if (!lineToChange.match(imageLine)) {
       logger.debug('No image line found');
@@ -21,7 +21,7 @@ function updateDependency(fileContent, upgrade) {
       logger.debug('No changes necessary');
       return fileContent;
     }
-    lines[upgrade.lineNumber] = newLine;
+    lines[upgrade.managerData.lineNumber] = newLine;
     return lines.join('\n');
   } catch (err) {
     logger.info({ err }, 'Error setting new Dockerfile value');
diff --git a/lib/manager/circleci/extract.js b/lib/manager/circleci/extract.js
index 461a0fffcc..ba5c971b48 100644
--- a/lib/manager/circleci/extract.js
+++ b/lib/manager/circleci/extract.js
@@ -54,7 +54,7 @@ function extractPackageFile(content) {
           'CircleCI docker image'
         );
         dep.depType = 'docker';
-        dep.lineNumber = lineNumber;
+        dep.managerData = { lineNumber };
         deps.push(dep);
       }
     }
diff --git a/lib/manager/circleci/update.js b/lib/manager/circleci/update.js
index 47c523f629..b81237f8b3 100644
--- a/lib/manager/circleci/update.js
+++ b/lib/manager/circleci/update.js
@@ -8,7 +8,7 @@ module.exports = {
 function updateDependency(fileContent, upgrade) {
   try {
     const lines = fileContent.split('\n');
-    const lineToChange = lines[upgrade.lineNumber];
+    const lineToChange = lines[upgrade.managerData.lineNumber];
     if (upgrade.depType === 'docker') {
       const newFrom = getNewFrom(upgrade);
       logger.debug(`circleci.updateDependency(): ${newFrom}`);
@@ -22,7 +22,7 @@ function updateDependency(fileContent, upgrade) {
         logger.debug('No changes necessary');
         return fileContent;
       }
-      lines[upgrade.lineNumber] = newLine;
+      lines[upgrade.managerData.lineNumber] = newLine;
       return lines.join('\n');
     }
     if (upgrade.depType === 'orb') {
@@ -36,7 +36,7 @@ function updateDependency(fileContent, upgrade) {
         logger.debug('No changes necessary');
         return fileContent;
       }
-      lines[upgrade.lineNumber] = newLine;
+      lines[upgrade.managerData.lineNumber] = newLine;
       return lines.join('\n');
     }
     logger.error('Unknown circleci depType');
diff --git a/lib/manager/docker-compose/extract.js b/lib/manager/docker-compose/extract.js
index aceaef115c..5fb1b5f53f 100644
--- a/lib/manager/docker-compose/extract.js
+++ b/lib/manager/docker-compose/extract.js
@@ -22,7 +22,7 @@ function extractPackageFile(content) {
         },
         'Docker Compose image'
       );
-      dep.lineNumber = lineNumber;
+      dep.managerData = { lineNumber };
       deps.push(dep);
     }
     lineNumber += 1;
diff --git a/lib/manager/docker-compose/update.js b/lib/manager/docker-compose/update.js
index 0d1f76ac87..3fd31907f5 100644
--- a/lib/manager/docker-compose/update.js
+++ b/lib/manager/docker-compose/update.js
@@ -10,7 +10,7 @@ function updateDependency(fileContent, upgrade) {
     const newFrom = getNewFrom(upgrade);
     logger.debug(`docker-compose.updateDependency(): ${newFrom}`);
     const lines = fileContent.split('\n');
-    const lineToChange = lines[upgrade.lineNumber];
+    const lineToChange = lines[upgrade.managerData.lineNumber];
     const imageLine = new RegExp(/^(\s*image:\s*'?"?)[^\s'"]+('?"?\s*)$/);
     if (!lineToChange.match(imageLine)) {
       logger.debug('No image line found');
@@ -21,7 +21,7 @@ function updateDependency(fileContent, upgrade) {
       logger.debug('No changes necessary');
       return fileContent;
     }
-    lines[upgrade.lineNumber] = newLine;
+    lines[upgrade.managerData.lineNumber] = newLine;
     return lines.join('\n');
   } catch (err) {
     logger.info({ err }, 'Error setting new Dockerfile value');
diff --git a/lib/manager/dockerfile/extract.js b/lib/manager/dockerfile/extract.js
index 9786b23ede..46e4e67f15 100644
--- a/lib/manager/dockerfile/extract.js
+++ b/lib/manager/dockerfile/extract.js
@@ -27,10 +27,8 @@ function splitImageParts(currentFrom) {
   }
   const dep = {
     depName,
-    currentDigest,
-    currentFrom,
-    currentDepTag,
     currentValue,
+    currentDigest,
   };
   return dep;
 }
@@ -77,9 +75,11 @@ function extractPackageFile(content) {
           },
           'Dockerfile FROM'
         );
-        dep.lineNumber = lineNumber;
-        dep.fromPrefix = fromPrefix;
-        dep.fromSuffix = fromSuffix;
+        dep.managerData = {
+          lineNumber,
+          fromPrefix,
+          fromSuffix,
+        };
         deps.push(dep);
       }
     }
@@ -102,9 +102,11 @@ function extractPackageFile(content) {
           },
           'Dockerfile COPY --from'
         );
-        dep.lineNumber = lineNumber;
-        dep.fromPrefix = fromPrefix;
-        dep.fromSuffix = fromSuffix;
+        dep.managerData = {
+          lineNumber,
+          fromPrefix,
+          fromSuffix,
+        };
         deps.push(dep);
       }
     }
diff --git a/lib/manager/dockerfile/update.js b/lib/manager/dockerfile/update.js
index 2b9a55036a..b10f798e71 100644
--- a/lib/manager/dockerfile/update.js
+++ b/lib/manager/dockerfile/update.js
@@ -19,8 +19,8 @@ function getNewFrom(upgrade) {
 
 function updateDependency(fileContent, upgrade) {
   try {
-    const { lineNumber, fromSuffix } = upgrade;
-    let { fromPrefix } = upgrade;
+    const { lineNumber, fromSuffix } = upgrade.managerData;
+    let { fromPrefix } = upgrade.managerData;
     const newFrom = getNewFrom(upgrade);
     logger.debug(`docker.updateDependency(): ${newFrom}`);
     const lines = fileContent.split('\n');
diff --git a/lib/manager/github-actions/extract.js b/lib/manager/github-actions/extract.js
index 3e668af665..bcd6d38f28 100644
--- a/lib/manager/github-actions/extract.js
+++ b/lib/manager/github-actions/extract.js
@@ -23,7 +23,7 @@ function extractPackageFile(content) {
         },
         'Docker image inside GitHub Actions'
       );
-      dep.lineNumber = lineNumber;
+      dep.managerData = { lineNumber };
       dep.versionScheme = 'docker';
       deps.push(dep);
     }
diff --git a/lib/manager/github-actions/update.js b/lib/manager/github-actions/update.js
index eab5134103..1f35a2697f 100644
--- a/lib/manager/github-actions/update.js
+++ b/lib/manager/github-actions/update.js
@@ -10,7 +10,7 @@ function updateDependency(fileContent, upgrade) {
     const newFrom = getNewFrom(upgrade);
     logger.debug(`github-actions.updateDependency(): ${newFrom}`);
     const lines = fileContent.split('\n');
-    const lineToChange = lines[upgrade.lineNumber];
+    const lineToChange = lines[upgrade.managerData.lineNumber];
     const imageLine = new RegExp(/^(\s+uses = "docker:\/\/)[^"]+("\s*)$/);
     if (!lineToChange.match(imageLine)) {
       logger.debug('No image line found');
@@ -21,7 +21,7 @@ function updateDependency(fileContent, upgrade) {
       logger.debug('No changes necessary');
       return fileContent;
     }
-    lines[upgrade.lineNumber] = newLine;
+    lines[upgrade.managerData.lineNumber] = newLine;
     return lines.join('\n');
   } catch (err) {
     logger.info({ err }, 'Error setting new github-actions value');
diff --git a/lib/manager/gitlabci/extract.js b/lib/manager/gitlabci/extract.js
index ff3480247c..1c663445a8 100644
--- a/lib/manager/gitlabci/extract.js
+++ b/lib/manager/gitlabci/extract.js
@@ -26,7 +26,7 @@ function extractPackageFile(content) {
               const currentFrom = imageNameMatch[1];
               /** @type any */
               const dep = getDep(currentFrom);
-              dep.lineNumber = lineNumber;
+              dep.managerData = { lineNumber };
               dep.depType = 'image-name';
               deps.push(dep);
             }
@@ -37,7 +37,7 @@ function extractPackageFile(content) {
             const currentFrom = imageMatch[1];
             /** @type any */
             const dep = getDep(currentFrom);
-            dep.lineNumber = lineNumber;
+            dep.managerData = { lineNumber };
             dep.depType = 'image';
             deps.push(dep);
           }
@@ -61,7 +61,7 @@ function extractPackageFile(content) {
             lineNumber += 1;
             /** @type any */
             const dep = getDep(currentFrom);
-            dep.lineNumber = lineNumber;
+            dep.managerData = { lineNumber };
             dep.depType = 'service-image';
             deps.push(dep);
           }
diff --git a/lib/manager/gitlabci/update.js b/lib/manager/gitlabci/update.js
index 734ac96838..4e16b2e62d 100644
--- a/lib/manager/gitlabci/update.js
+++ b/lib/manager/gitlabci/update.js
@@ -9,7 +9,7 @@ function updateDependency(currentFileContent, upgrade) {
   try {
     const newFrom = getNewFrom(upgrade);
     const lines = currentFileContent.split('\n');
-    const lineToChange = lines[upgrade.lineNumber];
+    const lineToChange = lines[upgrade.managerData.lineNumber];
     if (['image', 'image-name'].includes(upgrade.depType)) {
       const imageLine = new RegExp(
         /^(\s*(?:image|name):\s*'?"?)[^\s'"]+('?"?\s*)$/
@@ -23,7 +23,7 @@ function updateDependency(currentFileContent, upgrade) {
         logger.debug('No changes necessary');
         return currentFileContent;
       }
-      lines[upgrade.lineNumber] = newLine;
+      lines[upgrade.managerData.lineNumber] = newLine;
       return lines.join('\n');
     }
     const serviceLine = new RegExp(/^(\s*-\s*'?"?)[^\s'"]+('?"?\s*)$/);
@@ -36,7 +36,7 @@ function updateDependency(currentFileContent, upgrade) {
       logger.debug('No changes necessary');
       return currentFileContent;
     }
-    lines[upgrade.lineNumber] = newLine;
+    lines[upgrade.managerData.lineNumber] = newLine;
     return lines.join('\n');
   } catch (err) {
     logger.info({ err }, 'Error setting new Dockerfile value');
diff --git a/lib/manager/kubernetes/extract.js b/lib/manager/kubernetes/extract.js
index 4e79fae8ca..8473b284de 100644
--- a/lib/manager/kubernetes/extract.js
+++ b/lib/manager/kubernetes/extract.js
@@ -30,7 +30,7 @@ function extractPackageFile(content) {
         },
         'Kubernetes image'
       );
-      dep.lineNumber = lineNumber;
+      dep.managerData = { lineNumber };
       deps.push(dep);
     }
     lineNumber += 1;
diff --git a/lib/manager/kubernetes/update.js b/lib/manager/kubernetes/update.js
index e932d380c4..6487c20573 100644
--- a/lib/manager/kubernetes/update.js
+++ b/lib/manager/kubernetes/update.js
@@ -10,7 +10,7 @@ function updateDependency(fileContent, upgrade) {
     const newFrom = getNewFrom(upgrade);
     logger.debug(`kubernetes.updateDependency(): ${newFrom}`);
     const lines = fileContent.split('\n');
-    const lineToChange = lines[upgrade.lineNumber];
+    const lineToChange = lines[upgrade.managerData.lineNumber];
     const imageLine = new RegExp(/^(\s*-?\s*image:\s*'?"?)[^\s'"]+('?"?\s*)$/);
     if (!lineToChange.match(imageLine)) {
       logger.debug('No image line found');
@@ -21,7 +21,7 @@ function updateDependency(fileContent, upgrade) {
       logger.debug('No changes necessary');
       return fileContent;
     }
-    lines[upgrade.lineNumber] = newLine;
+    lines[upgrade.managerData.lineNumber] = newLine;
     return lines.join('\n');
   } catch (err) {
     logger.info({ err }, 'Error setting new Kubernetes value');
diff --git a/test/manager/ansible/__snapshots__/extract.spec.js.snap b/test/manager/ansible/__snapshots__/extract.spec.js.snap
index 9fff5627d9..e4abe9090d 100644
--- a/test/manager/ansible/__snapshots__/extract.spec.js.snap
+++ b/test/manager/ansible/__snapshots__/extract.spec.js.snap
@@ -3,93 +3,93 @@
 exports[`lib/manager/ansible/extract extractPackageFile() extracts multiple image lines from docker_container 1`] = `
 Array [
   Object {
-    "currentDepTag": "busybox",
     "currentDigest": undefined,
-    "currentFrom": "busybox",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "busybox",
-    "lineNumber": 4,
+    "managerData": Object {
+      "lineNumber": 4,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "redis",
     "currentDigest": undefined,
-    "currentFrom": "redis",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "redis",
-    "lineNumber": 11,
+    "managerData": Object {
+      "lineNumber": 11,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "someuser/appimage",
     "currentDigest": undefined,
-    "currentFrom": "someuser/appimage",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "someuser/appimage",
-    "lineNumber": 23,
+    "managerData": Object {
+      "lineNumber": 23,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "ubuntu:14.04",
     "currentDigest": undefined,
-    "currentFrom": "ubuntu:14.04",
     "currentValue": "14.04",
     "datasource": "docker",
     "depName": "ubuntu",
-    "lineNumber": 40,
+    "managerData": Object {
+      "lineNumber": 40,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "someuser/anotherappimage",
     "currentDigest": undefined,
-    "currentFrom": "someuser/anotherappimage",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "someuser/anotherappimage",
-    "lineNumber": 52,
+    "managerData": Object {
+      "lineNumber": 52,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "busybox",
     "currentDigest": undefined,
-    "currentFrom": "busybox",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "busybox",
-    "lineNumber": 64,
+    "managerData": Object {
+      "lineNumber": 64,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "postgres:latest",
     "currentDigest": undefined,
-    "currentFrom": "postgres:latest",
     "currentValue": "latest",
     "datasource": "docker",
     "depName": "postgres",
-    "lineNumber": 76,
+    "managerData": Object {
+      "lineNumber": 76,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "ubuntu:14.04",
     "currentDigest": undefined,
-    "currentFrom": "ubuntu:14.04",
     "currentValue": "14.04",
     "datasource": "docker",
     "depName": "ubuntu",
-    "lineNumber": 83,
+    "managerData": Object {
+      "lineNumber": 83,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "ubuntu:14.04",
     "currentDigest": undefined,
-    "currentFrom": "ubuntu:14.04",
     "currentValue": "14.04",
     "datasource": "docker",
     "depName": "ubuntu",
-    "lineNumber": 96,
+    "managerData": Object {
+      "lineNumber": 96,
+    },
     "versionScheme": "docker",
   },
 ]
@@ -98,43 +98,43 @@ Array [
 exports[`lib/manager/ansible/extract extractPackageFile() extracts multiple image lines from docker_service 1`] = `
 Array [
   Object {
-    "currentDepTag": "sameersbn/gitlab:11.5.1",
     "currentDigest": undefined,
-    "currentFrom": "sameersbn/gitlab:11.5.1",
     "currentValue": "11.5.1",
     "datasource": "docker",
     "depName": "sameersbn/gitlab",
-    "lineNumber": 8,
+    "managerData": Object {
+      "lineNumber": 8,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "sameersbn/postgresql:10",
     "currentDigest": undefined,
-    "currentFrom": "sameersbn/postgresql:10",
     "currentValue": "10",
     "datasource": "docker",
     "depName": "sameersbn/postgresql",
-    "lineNumber": 30,
+    "managerData": Object {
+      "lineNumber": 30,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "sameersbn/redis:4.0.9-1",
     "currentDigest": undefined,
-    "currentFrom": "sameersbn/redis:4.0.9-1",
     "currentValue": "4.0.9-1",
     "datasource": "docker",
     "depName": "sameersbn/redis",
-    "lineNumber": 38,
+    "managerData": Object {
+      "lineNumber": 38,
+    },
     "versionScheme": "docker",
   },
   Object {
-    "currentDepTag": "registry:2.6.2",
     "currentDigest": undefined,
-    "currentFrom": "registry:2.6.2",
     "currentValue": "2.6.2",
     "datasource": "docker",
     "depName": "registry",
-    "lineNumber": 43,
+    "managerData": Object {
+      "lineNumber": 43,
+    },
     "versionScheme": "docker",
   },
 ]
diff --git a/test/manager/ansible/update.spec.js b/test/manager/ansible/update.spec.js
index b71eb25fa8..b00f9e2ae3 100644
--- a/test/manager/ansible/update.spec.js
+++ b/test/manager/ansible/update.spec.js
@@ -14,7 +14,7 @@ describe('manager/ansible/update', () => {
   describe('updateDependency', () => {
     it('replaces existing value from docker_container', () => {
       const upgrade = {
-        lineNumber: 4,
+        managerData: { lineNumber: 4 },
         depName: 'busybox',
         newValue: '1.29.3',
         newDigest: 'sha256:abcdefghijklmnop',
@@ -25,7 +25,7 @@ describe('manager/ansible/update', () => {
     });
     it('replaces existing value from docker_service', () => {
       const upgrade = {
-        lineNumber: 8,
+        managerData: { lineNumber: 8 },
         depName: 'sameersbn/gitlab',
         newValue: '11.5.1',
         newDigest: 'sha256:abcdefghijklmnop',
@@ -36,7 +36,7 @@ describe('manager/ansible/update', () => {
     });
     it('returns same', () => {
       const upgrade = {
-        lineNumber: 38,
+        managerData: { lineNumber: 38 },
         depName: 'sameersbn/redis',
         newValue: '4.0.9-1',
       };
@@ -45,7 +45,7 @@ describe('manager/ansible/update', () => {
     });
     it('returns null if mismatch', () => {
       const upgrade = {
-        lineNumber: 52,
+        managerData: { lineNumber: 52 },
         newFrom: 'registry:2.6.2@sha256:abcdefghijklmnop',
       };
       const res = dcUpdate.updateDependency(yamlFile2, upgrade);
diff --git a/test/manager/circleci/__snapshots__/extract.spec.js.snap b/test/manager/circleci/__snapshots__/extract.spec.js.snap
index 676008d5ef..c39eea60db 100644
--- a/test/manager/circleci/__snapshots__/extract.spec.js.snap
+++ b/test/manager/circleci/__snapshots__/extract.spec.js.snap
@@ -4,47 +4,47 @@ exports[`lib/manager/circleci/extract extractPackageFile() extracts multiple ima
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node",
     "currentDigest": undefined,
-    "currentFrom": "node",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "node",
     "depType": "docker",
-    "lineNumber": 12,
+    "managerData": Object {
+      "lineNumber": 12,
+    },
   },
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:4",
     "currentDigest": undefined,
-    "currentFrom": "node:4",
     "currentValue": "4",
     "datasource": "docker",
     "depName": "node",
     "depType": "docker",
-    "lineNumber": 57,
+    "managerData": Object {
+      "lineNumber": 57,
+    },
   },
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:6",
     "currentDigest": undefined,
-    "currentFrom": "node:6",
     "currentValue": "6",
     "datasource": "docker",
     "depName": "node",
     "depType": "docker",
-    "lineNumber": 61,
+    "managerData": Object {
+      "lineNumber": 61,
+    },
   },
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:8.9.0",
     "currentDigest": undefined,
-    "currentFrom": "node:8.9.0",
     "currentValue": "8.9.0",
     "datasource": "docker",
     "depName": "node",
     "depType": "docker",
-    "lineNumber": 65,
+    "managerData": Object {
+      "lineNumber": 65,
+    },
   },
 ]
 `;
@@ -85,64 +85,64 @@ Array [
     "versionScheme": "npm",
   },
   Object {
-    "currentDepTag": "python:3.7",
     "currentDigest": "sha256:3870d35b962a943df72d948580fc66ceaaee1c4fbd205930f32e0f0760eb1077",
-    "currentFrom": "python:3.7@sha256:3870d35b962a943df72d948580fc66ceaaee1c4fbd205930f32e0f0760eb1077",
     "currentValue": "3.7",
     "datasource": "docker",
     "depName": "python",
     "depType": "docker",
-    "lineNumber": 20,
+    "managerData": Object {
+      "lineNumber": 20,
+    },
   },
   Object {
-    "currentDepTag": "python:3.7",
     "currentDigest": "sha256:3870d35b962a943df72d948580fc66ceaaee1c4fbd205930f32e0f0760eb1077",
-    "currentFrom": "python:3.7@sha256:3870d35b962a943df72d948580fc66ceaaee1c4fbd205930f32e0f0760eb1077",
     "currentValue": "3.7",
     "datasource": "docker",
     "depName": "python",
     "depType": "docker",
-    "lineNumber": 27,
+    "managerData": Object {
+      "lineNumber": 27,
+    },
   },
   Object {
-    "currentDepTag": "python:3.7",
     "currentDigest": "sha256:3870d35b962a943df72d948580fc66ceaaee1c4fbd205930f32e0f0760eb1077",
-    "currentFrom": "python:3.7@sha256:3870d35b962a943df72d948580fc66ceaaee1c4fbd205930f32e0f0760eb1077",
     "currentValue": "3.7",
     "datasource": "docker",
     "depName": "python",
     "depType": "docker",
-    "lineNumber": 34,
+    "managerData": Object {
+      "lineNumber": 34,
+    },
   },
   Object {
-    "currentDepTag": "python:3.7",
     "currentDigest": "sha256:3870d35b962a943df72d948580fc66ceaaee1c4fbd205930f32e0f0760eb1077",
-    "currentFrom": "python:3.7@sha256:3870d35b962a943df72d948580fc66ceaaee1c4fbd205930f32e0f0760eb1077",
     "currentValue": "3.7",
     "datasource": "docker",
     "depName": "python",
     "depType": "docker",
-    "lineNumber": 41,
+    "managerData": Object {
+      "lineNumber": 41,
+    },
   },
   Object {
-    "currentDepTag": "pypy:3-6",
     "currentDigest": "sha256:eb6325b75c1c70b4992eaa1bdd29e24e5f14d5324b4714a49f3e67783473214b",
-    "currentFrom": "pypy:3-6@sha256:eb6325b75c1c70b4992eaa1bdd29e24e5f14d5324b4714a49f3e67783473214b",
     "currentValue": "3-6",
     "datasource": "docker",
     "depName": "pypy",
     "depType": "docker",
-    "lineNumber": 50,
+    "managerData": Object {
+      "lineNumber": 50,
+    },
   },
   Object {
-    "currentDepTag": "python:3.7",
     "currentDigest": "sha256:3870d35b962a943df72d948580fc66ceaaee1c4fbd205930f32e0f0760eb1077",
-    "currentFrom": "python:3.7@sha256:3870d35b962a943df72d948580fc66ceaaee1c4fbd205930f32e0f0760eb1077",
     "currentValue": "3.7",
     "datasource": "docker",
     "depName": "python",
     "depType": "docker",
-    "lineNumber": 57,
+    "managerData": Object {
+      "lineNumber": 57,
+    },
   },
 ]
 `;
diff --git a/test/manager/circleci/update.spec.js b/test/manager/circleci/update.spec.js
index a633840b07..a4357ba3b6 100644
--- a/test/manager/circleci/update.spec.js
+++ b/test/manager/circleci/update.spec.js
@@ -14,7 +14,7 @@ describe('manager/circleci/update', () => {
   describe('updateDependency', () => {
     it('replaces existing value', () => {
       const upgrade = {
-        lineNumber: 65,
+        managerData: { lineNumber: 65 },
         depType: 'docker',
         depName: 'node',
         newValue: '8.10.0',
@@ -26,7 +26,7 @@ describe('manager/circleci/update', () => {
     });
     it('returns same', () => {
       const upgrade = {
-        lineNumber: 12,
+        managerData: { lineNumber: 12 },
         depType: 'docker',
         depName: 'node',
       };
@@ -35,7 +35,7 @@ describe('manager/circleci/update', () => {
     });
     it('returns null if mismatch', () => {
       const upgrade = {
-        lineNumber: 17,
+        managerData: { lineNumber: 17 },
         depType: 'docker',
         depName: 'postgres',
         newValue: '9.6.8',
@@ -53,7 +53,7 @@ describe('manager/circleci/update', () => {
         currentValue: '4.1.0',
         depName: 'release-workflows',
         depType: 'orb',
-        lineNumber: 3,
+        managerData: { lineNumber: 3 },
         newValue: '4.2.0',
       };
       const res = dcUpdate.updateDependency(yamlFile2, upgrade);
@@ -65,7 +65,7 @@ describe('manager/circleci/update', () => {
         currentValue: '4.0.0',
         depName: 'release-workflows',
         depType: 'orb',
-        lineNumber: 3,
+        managerData: { lineNumber: 3 },
         newValue: '4.1.0',
       };
       const res = dcUpdate.updateDependency(yamlFile2, upgrade);
@@ -76,7 +76,7 @@ describe('manager/circleci/update', () => {
         currentValue: '4.1.0',
         depName: 'release-workflows',
         depType: 'orb',
-        lineNumber: 2,
+        managerData: { lineNumber: 2 },
         newValue: '4.2.0',
       };
       const res = dcUpdate.updateDependency(yamlFile2, upgrade);
@@ -86,7 +86,7 @@ describe('manager/circleci/update', () => {
       const upgrade = {
         currentValue: '4.1.0',
         depName: 'release-workflows',
-        lineNumber: 3,
+        managerData: { lineNumber: 3 },
         newValue: '4.2.0',
       };
       const res = dcUpdate.updateDependency(yamlFile2, upgrade);
diff --git a/test/manager/docker-compose/__snapshots__/extract.spec.js.snap b/test/manager/docker-compose/__snapshots__/extract.spec.js.snap
index 3dd49b2a20..9939d59bea 100644
--- a/test/manager/docker-compose/__snapshots__/extract.spec.js.snap
+++ b/test/manager/docker-compose/__snapshots__/extract.spec.js.snap
@@ -3,72 +3,74 @@
 exports[`lib/manager/docker-compose/extract extractPackageFile() extracts multiple image lines 1`] = `
 Array [
   Object {
-    "currentDepTag": "quay.io/something/redis:alpine",
     "currentDigest": undefined,
-    "currentFrom": "quay.io/something/redis:alpine",
     "currentValue": "alpine",
     "datasource": "docker",
     "depName": "quay.io/something/redis",
-    "lineNumber": 4,
+    "managerData": Object {
+      "lineNumber": 4,
+    },
   },
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:10.0.0",
     "currentDigest": undefined,
-    "currentFrom": "node:10.0.0",
     "currentValue": "10.0.0",
     "datasource": "docker",
     "depName": "node",
-    "lineNumber": 18,
+    "managerData": Object {
+      "lineNumber": 18,
+    },
   },
   Object {
-    "currentDepTag": "postgres:9.4.0",
     "currentDigest": undefined,
-    "currentFrom": "postgres:9.4.0",
     "currentValue": "9.4.0",
     "datasource": "docker",
     "depName": "postgres",
-    "lineNumber": 21,
+    "managerData": Object {
+      "lineNumber": 21,
+    },
   },
   Object {
-    "currentDepTag": "dockersamples/examplevotingapp_vote:before",
     "currentDigest": undefined,
-    "currentFrom": "dockersamples/examplevotingapp_vote:before",
     "currentValue": "before",
     "datasource": "docker",
     "depName": "dockersamples/examplevotingapp_vote",
-    "lineNumber": 31,
+    "managerData": Object {
+      "lineNumber": 31,
+    },
   },
   Object {
-    "currentDepTag": "dockersamples/examplevotingapp_result:before",
     "currentDigest": undefined,
-    "currentFrom": "dockersamples/examplevotingapp_result:before",
     "currentValue": "before",
     "datasource": "docker",
     "depName": "dockersamples/examplevotingapp_result",
-    "lineNumber": 46,
+    "managerData": Object {
+      "lineNumber": 46,
+    },
   },
   Object {
-    "currentDepTag": "dockersamples/examplevotingapp_worker",
     "currentDigest": undefined,
-    "currentFrom": "dockersamples/examplevotingapp_worker",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "dockersamples/examplevotingapp_worker",
-    "lineNumber": 62,
+    "managerData": Object {
+      "lineNumber": 62,
+    },
   },
   Object {
-    "currentDepTag": "dockersamples/visualizer:stable",
     "currentDigest": undefined,
-    "currentFrom": "dockersamples/visualizer:stable",
     "currentValue": "stable",
     "datasource": "docker",
     "depName": "dockersamples/visualizer",
-    "lineNumber": 79,
+    "managerData": Object {
+      "lineNumber": 79,
+    },
   },
   Object {
     "datasource": "docker",
-    "lineNumber": 90,
+    "managerData": Object {
+      "lineNumber": 90,
+    },
     "skipReason": "contains-variable",
   },
 ]
diff --git a/test/manager/docker-compose/update.spec.js b/test/manager/docker-compose/update.spec.js
index daa239b6ca..b23a1543ad 100644
--- a/test/manager/docker-compose/update.spec.js
+++ b/test/manager/docker-compose/update.spec.js
@@ -10,7 +10,7 @@ describe('manager/docker-compose/update', () => {
   describe('updateDependency', () => {
     it('replaces existing value', () => {
       const upgrade = {
-        lineNumber: 18,
+        managerData: { lineNumber: 18 },
         depName: 'postgres',
         newValue: '9.6.8',
         newDigest: 'sha256:abcdefghijklmnop',
@@ -21,7 +21,7 @@ describe('manager/docker-compose/update', () => {
     });
     it('returns same', () => {
       const upgrade = {
-        lineNumber: 4,
+        managerData: { lineNumber: 4 },
         depName: 'quay.io/something/redis',
         newValue: 'alpine',
       };
@@ -30,7 +30,7 @@ describe('manager/docker-compose/update', () => {
     });
     it('returns null if mismatch', () => {
       const upgrade = {
-        lineNumber: 17,
+        managerData: { lineNumber: 17 },
         newFrom: 'postgres:9.6.8@sha256:abcdefghijklmnop',
       };
       const res = dcUpdate.updateDependency(yamlFile, upgrade);
diff --git a/test/manager/dockerfile/__snapshots__/extract.spec.js.snap b/test/manager/dockerfile/__snapshots__/extract.spec.js.snap
index c3d4d0f497..38ba0fa9c4 100644
--- a/test/manager/dockerfile/__snapshots__/extract.spec.js.snap
+++ b/test/manager/dockerfile/__snapshots__/extract.spec.js.snap
@@ -4,40 +4,40 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() detects ["stage"] a
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:8.15.1-alpine",
     "currentDigest": undefined,
-    "currentFrom": "node:8.15.1-alpine",
     "currentValue": "8.15.1-alpine",
     "datasource": "docker",
     "depName": "node",
     "depType": "stage",
-    "fromPrefix": "FROM",
-    "fromSuffix": "as skippedfrom",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "as skippedfrom",
+      "lineNumber": 0,
+    },
   },
   Object {
-    "currentDepTag": "golang:1.7.3",
     "currentDigest": undefined,
-    "currentFrom": "golang:1.7.3",
     "currentValue": "1.7.3",
     "datasource": "docker",
     "depName": "golang",
     "depType": "stage",
-    "fromPrefix": "FROM",
-    "fromSuffix": "as builder",
-    "lineNumber": 1,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "as builder",
+      "lineNumber": 1,
+    },
   },
   Object {
-    "currentDepTag": "alpine:latest",
     "currentDigest": undefined,
-    "currentFrom": "alpine:latest",
     "currentValue": "latest",
     "datasource": "docker",
     "depName": "alpine",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 9,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 9,
+    },
   },
 ]
 `;
@@ -46,28 +46,28 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() extracts images on
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:8.11.3-alpine",
     "currentDigest": "sha256:d743b4141b02fcfb8beb68f92b4cd164f60ee457bf2d053f36785bf86de16b0d",
-    "currentFrom": "node:8.11.3-alpine@sha256:d743b4141b02fcfb8beb68f92b4cd164f60ee457bf2d053f36785bf86de16b0d",
     "currentValue": "8.11.3-alpine",
     "datasource": "docker",
     "depName": "node",
     "depType": "stage",
-    "fromPrefix": "FROM",
-    "fromSuffix": "AS node",
-    "lineNumber": 2,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "AS node",
+      "lineNumber": 2,
+    },
   },
   Object {
-    "currentDepTag": "buildkite/puppeteer:1.1.1",
     "currentDigest": undefined,
-    "currentFrom": "buildkite/puppeteer:1.1.1",
     "currentValue": "1.1.1",
     "datasource": "docker",
     "depName": "buildkite/puppeteer",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "AS puppeteer",
-    "lineNumber": 3,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "AS puppeteer",
+      "lineNumber": 3,
+    },
   },
 ]
 `;
@@ -76,28 +76,28 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() extracts multiple F
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:6.12.3",
     "currentDigest": undefined,
-    "currentFrom": "node:6.12.3",
     "currentValue": "6.12.3",
     "datasource": "docker",
     "depName": "node",
     "depType": "stage",
-    "fromPrefix": "FROM",
-    "fromSuffix": "as frontend",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "as frontend",
+      "lineNumber": 0,
+    },
   },
   Object {
-    "currentDepTag": "python:3.6-slim",
     "currentDigest": undefined,
-    "currentFrom": "python:3.6-slim",
     "currentValue": "3.6-slim",
     "datasource": "docker",
     "depName": "python",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 4,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 4,
+    },
   },
 ]
 `;
@@ -105,16 +105,16 @@ Array [
 exports[`lib/manager/dockerfile/extract extractPackageFile() handles COPY --from 1`] = `
 Array [
   Object {
-    "currentDepTag": "gcr.io/k8s-skaffold/skaffold:v0.11.0",
     "currentDigest": undefined,
-    "currentFrom": "gcr.io/k8s-skaffold/skaffold:v0.11.0",
     "currentValue": "v0.11.0",
     "datasource": "docker",
     "depName": "gcr.io/k8s-skaffold/skaffold",
     "depType": "final",
-    "fromPrefix": "COPY --from=",
-    "fromSuffix": "/usr/bin/skaffold /usr/bin/skaffold",
-    "lineNumber": 1,
+    "managerData": Object {
+      "fromPrefix": "COPY --from=",
+      "fromSuffix": "/usr/bin/skaffold /usr/bin/skaffold",
+      "lineNumber": 1,
+    },
   },
 ]
 `;
@@ -123,16 +123,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles abnoral spa
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "registry.allmine.info:5005/node:8.7.0",
     "currentDigest": undefined,
-    "currentFrom": "registry.allmine.info:5005/node:8.7.0",
     "currentValue": "8.7.0",
     "datasource": "docker",
     "depName": "registry.allmine.info:5005/node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -140,16 +140,16 @@ Array [
 exports[`lib/manager/dockerfile/extract extractPackageFile() handles calico/node 1`] = `
 Array [
   Object {
-    "currentDepTag": "calico/node",
     "currentDigest": undefined,
-    "currentFrom": "calico/node",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "calico/node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -158,16 +158,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles comments 1`
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node",
     "currentDigest": undefined,
-    "currentFrom": "node",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 3,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 3,
+    },
   },
 ]
 `;
@@ -176,16 +176,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles custom host
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "registry2.something.info/node:8",
     "currentDigest": undefined,
-    "currentFrom": "registry2.something.info/node:8",
     "currentValue": "8",
     "datasource": "docker",
     "depName": "registry2.something.info/node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -194,16 +194,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles custom host
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "registry2.something.info/node:8-alpine",
     "currentDigest": undefined,
-    "currentFrom": "registry2.something.info/node:8-alpine",
     "currentValue": "8-alpine",
     "datasource": "docker",
     "depName": "registry2.something.info/node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -212,16 +212,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles custom host
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "registry2.something.info/someaccount/node:8",
     "currentDigest": undefined,
-    "currentFrom": "registry2.something.info/someaccount/node:8",
     "currentValue": "8",
     "datasource": "docker",
     "depName": "registry2.something.info/someaccount/node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -230,16 +230,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles custom host
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "registry2.something.info:5005/node:8",
     "currentDigest": undefined,
-    "currentFrom": "registry2.something.info:5005/node:8",
     "currentValue": "8",
     "datasource": "docker",
     "depName": "registry2.something.info:5005/node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -248,16 +248,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles custom host
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "registry2.something.info:5005/node",
     "currentDigest": undefined,
-    "currentFrom": "registry2.something.info:5005/node",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "registry2.something.info:5005/node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -266,16 +266,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles digest 1`]
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node",
     "currentDigest": "sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063",
-    "currentFrom": "node@sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -284,16 +284,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles from as 1`]
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:8.9.0-alpine",
     "currentDigest": undefined,
-    "currentFrom": "node:8.9.0-alpine",
     "currentValue": "8.9.0-alpine",
     "datasource": "docker",
     "depName": "node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "as base",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "as base",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -302,16 +302,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles naked dep 1
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node",
     "currentDigest": undefined,
-    "currentFrom": "node",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -320,16 +320,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles namespaced
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "mynamespace/node:8",
     "currentDigest": undefined,
-    "currentFrom": "mynamespace/node:8",
     "currentValue": "8",
     "datasource": "docker",
     "depName": "mynamespace/node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -338,16 +338,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles tag 1`] = `
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:8.9.0-alpine",
     "currentDigest": undefined,
-    "currentFrom": "node:8.9.0-alpine",
     "currentValue": "8.9.0-alpine",
     "datasource": "docker",
     "depName": "node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -356,16 +356,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() handles tag and dig
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:8.9.0",
     "currentDigest": "sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063",
-    "currentFrom": "node:8.9.0@sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063",
     "currentValue": "8.9.0",
     "datasource": "docker",
     "depName": "node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -374,16 +374,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() is case insensitive
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node",
     "currentDigest": undefined,
-    "currentFrom": "node",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "node",
     "depType": "final",
-    "fromPrefix": "From",
-    "fromSuffix": "",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "From",
+      "fromSuffix": "",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -392,16 +392,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() skips index referen
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:6.12.3",
     "currentDigest": undefined,
-    "currentFrom": "node:6.12.3",
     "currentValue": "6.12.3",
     "datasource": "docker",
     "depName": "node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "as frontend",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "as frontend",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -410,16 +410,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() skips named multist
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:6.12.3",
     "currentDigest": undefined,
-    "currentFrom": "node:6.12.3",
     "currentValue": "6.12.3",
     "datasource": "docker",
     "depName": "node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "as frontend",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "as frontend",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
@@ -428,16 +428,16 @@ exports[`lib/manager/dockerfile/extract extractPackageFile() skips named multist
 Array [
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:6.12.3",
     "currentDigest": undefined,
-    "currentFrom": "node:6.12.3",
     "currentValue": "6.12.3",
     "datasource": "docker",
     "depName": "node",
     "depType": "final",
-    "fromPrefix": "FROM",
-    "fromSuffix": "as frontend",
-    "lineNumber": 0,
+    "managerData": Object {
+      "fromPrefix": "FROM",
+      "fromSuffix": "as frontend",
+      "lineNumber": 0,
+    },
   },
 ]
 `;
diff --git a/test/manager/dockerfile/extract.spec.js b/test/manager/dockerfile/extract.spec.js
index 19dec3b0fa..e348ea6fc2 100644
--- a/test/manager/dockerfile/extract.spec.js
+++ b/test/manager/dockerfile/extract.spec.js
@@ -136,8 +136,8 @@ describe('lib/manager/dockerfile/extract', () => {
         res[2].depType === 'final',
         res[1].depType === 'stage',
         res[0].depType === 'stage',
-        res[2].lineNumber > res[1].lineNumber,
-        res[2].lineNumber > res[0].lineNumber,
+        res[2].managerData.lineNumber > res[1].managerData.lineNumber,
+        res[2].managerData.lineNumber > res[0].managerData.lineNumber,
       ].every(Boolean);
       expect(passed).toBe(true);
     });
diff --git a/test/manager/dockerfile/update.spec.js b/test/manager/dockerfile/update.spec.js
index db2836befa..5a9280a942 100644
--- a/test/manager/dockerfile/update.spec.js
+++ b/test/manager/dockerfile/update.spec.js
@@ -5,11 +5,9 @@ describe('manager/dockerfile/update', () => {
     it('replaces existing value', () => {
       const fileContent = '# comment FROM node:8\nFROM node:8\nRUN something\n';
       const upgrade = {
-        lineNumber: 1,
+        managerData: { lineNumber: 1, fromPrefix: 'FROM', fromSuffix: '' },
         depName: 'node',
         newValue: '8.1-alpine',
-        fromPrefix: 'FROM',
-        fromSuffix: '',
         newDigest: 'sha256:abcdefghijklmnop',
       };
       const res = dockerfile.updateDependency(fileContent, upgrade);
@@ -19,11 +17,13 @@ describe('manager/dockerfile/update', () => {
       const fileContent =
         '# comment FROM node:8\nFROM node:8 as base\nRUN something\n';
       const upgrade = {
-        lineNumber: 1,
+        managerData: {
+          lineNumber: 1,
+          fromPrefix: 'FROM',
+          fromSuffix: 'as base',
+        },
         depName: 'node',
         newValue: '8',
-        fromPrefix: 'FROM',
-        fromSuffix: 'as base',
         newDigest: 'sha256:abcdefghijklmnop',
       };
       const res = dockerfile.updateDependency(fileContent, upgrade);
@@ -33,11 +33,14 @@ describe('manager/dockerfile/update', () => {
       const fileContent =
         '# comment FROM node:8\nFROM   node:8 as base\nRUN something\n';
       const upgrade = {
-        lineNumber: 1,
+        managerData: {
+          lineNumber: 1,
+          fromPrefix: 'FROM',
+          fromSuffix: 'as base',
+        },
         depName: 'node',
         newValue: '8',
-        fromPrefix: 'FROM',
-        fromSuffix: 'as base',
+
         newDigest: 'sha256:abcdefghijklmnop',
       };
       const res = dockerfile.updateDependency(fileContent, upgrade);
@@ -47,11 +50,9 @@ describe('manager/dockerfile/update', () => {
       const fileContent =
         '# comment FROM node:8\nFROM   node:8 as base\nRUN something\n';
       const upgrade = {
-        lineNumber: 0,
+        managerData: { lineNumber: 0, fromPrefix: 'FROM', fromSuffix: '' },
         depName: 'node',
         newValue: '8',
-        fromPrefix: 'FROM',
-        fromSuffix: '',
         newDigest: 'sha256:abcdefghijklmnop',
       };
       const res = dockerfile.updateDependency(fileContent, upgrade);
@@ -61,11 +62,13 @@ describe('manager/dockerfile/update', () => {
       const fileContent =
         '# comment FROM node:8\nFROM node:8 as base\nRUN something\n';
       const upgrade = {
-        lineNumber: 1,
+        managerData: {
+          lineNumber: 1,
+          fromPrefix: 'FROM',
+          fromSuffix: 'as base',
+        },
         depName: 'node',
         newValue: '8',
-        fromPrefix: 'FROM',
-        fromSuffix: 'as base',
       };
       const res = dockerfile.updateDependency(fileContent, upgrade);
       expect(res).toBe(fileContent);
@@ -73,11 +76,9 @@ describe('manager/dockerfile/update', () => {
     it('returns null on error', () => {
       const fileContent = null;
       const upgrade = {
-        lineNumber: 1,
+        managerData: { lineNumber: 1, fromPrefix: 'FROM', fromSuffix: '' },
         depName: 'node',
         newValue: '8',
-        fromPrefix: 'FROM',
-        fromSuffix: '',
         newDigest: 'sha256:abcdefghijklmnop',
       };
       const res = dockerfile.updateDependency(fileContent, upgrade);
@@ -87,19 +88,19 @@ describe('manager/dockerfile/update', () => {
       const fileContent =
         'FROM debian:wheezy as stage-1\nRUN something\nFROM debian:wheezy\nRUN something else';
       const upgrade1 = {
-        lineNumber: 0,
+        managerData: {
+          lineNumber: 0,
+          fromPrefix: 'FROM',
+          fromSuffix: 'as stage-1',
+        },
         depName: 'debian',
         newValue: 'wheezy',
-        fromPrefix: 'FROM',
-        fromSuffix: 'as stage-1',
         newDigest: 'sha256:abcdefghijklmnop',
       };
       const upgrade2 = {
-        lineNumber: 2,
+        managerData: { lineNumber: 2, fromPrefix: 'FROM', fromSuffix: '' },
         depName: 'debian',
         newValue: 'wheezy',
-        fromPrefix: 'FROM',
-        fromSuffix: '',
         newDigest: 'sha256:abcdefghijklmnop',
       };
       let res = dockerfile.updateDependency(fileContent, upgrade1);
@@ -111,11 +112,13 @@ describe('manager/dockerfile/update', () => {
       const fileContent =
         'FROM scratch\nCOPY --from=gcr.io/k8s-skaffold/skaffold:v0.11.0 /usr/bin/skaffold /usr/bin/skaffold\n';
       const upgrade = {
-        lineNumber: 1,
+        managerData: {
+          lineNumber: 1,
+          fromPrefix: 'COPY --from=',
+          fromSuffix: '/usr/bin/skaffold /usr/bin/skaffold',
+        },
         depName: 'gcr.io/k8s-skaffold/skaffold',
         newValue: 'v0.12.0',
-        fromPrefix: 'COPY --from=',
-        fromSuffix: '/usr/bin/skaffold /usr/bin/skaffold',
       };
       const res = dockerfile.updateDependency(fileContent, upgrade);
       expect(res).toMatchSnapshot();
diff --git a/test/manager/github-actions/__snapshots__/extract.spec.js.snap b/test/manager/github-actions/__snapshots__/extract.spec.js.snap
index 5bf8cc6dc9..350f74b4f3 100644
--- a/test/manager/github-actions/__snapshots__/extract.spec.js.snap
+++ b/test/manager/github-actions/__snapshots__/extract.spec.js.snap
@@ -3,24 +3,24 @@
 exports[`lib/manager/github-actions/extract extractPackageFile() extracts multiple image lines from docker_container 1`] = `
 Array [
   Object {
-    "currentDepTag": "replicated/dockerfilelint",
     "currentDigest": undefined,
-    "currentFrom": "replicated/dockerfilelint",
     "currentValue": undefined,
     "datasource": "docker",
     "depName": "replicated/dockerfilelint",
-    "lineNumber": 11,
+    "managerData": Object {
+      "lineNumber": 11,
+    },
     "versionScheme": "docker",
   },
   Object {
     "commitMessageTopic": "Node.js",
-    "currentDepTag": "node:6",
     "currentDigest": "sha256:7b65413af120ec5328077775022c78101f103258a1876ec2f83890bce416e896",
-    "currentFrom": "node:6@sha256:7b65413af120ec5328077775022c78101f103258a1876ec2f83890bce416e896",
     "currentValue": "6",
     "datasource": "docker",
     "depName": "node",
-    "lineNumber": 36,
+    "managerData": Object {
+      "lineNumber": 36,
+    },
     "versionScheme": "docker",
   },
 ]
diff --git a/test/manager/github-actions/update.spec.js b/test/manager/github-actions/update.spec.js
index 986079533c..1022c4e3be 100644
--- a/test/manager/github-actions/update.spec.js
+++ b/test/manager/github-actions/update.spec.js
@@ -10,7 +10,7 @@ describe('manager/github-actions/update', () => {
   describe('updateDependency', () => {
     it('replaces existing uses value', () => {
       const upgrade = {
-        lineNumber: 11,
+        managerData: { lineNumber: 11 },
         depName: 'replicated/dockerfilelint',
         newDigest: 'sha256:abcdefghijklmnop',
       };
@@ -20,7 +20,7 @@ describe('manager/github-actions/update', () => {
     });
     it('returns same', () => {
       const upgrade = {
-        lineNumber: 11,
+        managerData: { lineNumber: 11 },
         depName: 'replicated/dockerfilelint',
       };
       const res = dcUpdate.updateDependency(workflow1, upgrade);
@@ -28,7 +28,7 @@ describe('manager/github-actions/update', () => {
     });
     it('returns null if mismatch', () => {
       const upgrade = {
-        lineNumber: 12,
+        managerData: { lineNumber: 12 },
         newFrom: 'registry:2.6.2@sha256:abcdefghijklmnop',
       };
       const res = dcUpdate.updateDependency(workflow1, upgrade);
diff --git a/test/manager/gitlabci/__snapshots__/extract.spec.js.snap b/test/manager/gitlabci/__snapshots__/extract.spec.js.snap
index 400ffc3800..63aee2df56 100644
--- a/test/manager/gitlabci/__snapshots__/extract.spec.js.snap
+++ b/test/manager/gitlabci/__snapshots__/extract.spec.js.snap
@@ -3,64 +3,64 @@
 exports[`lib/manager/gitlabci/extract extractPackageFile() extracts multiple image lines 1`] = `
 Array [
   Object {
-    "currentDepTag": "hadolint/hadolint:latest",
     "currentDigest": undefined,
-    "currentFrom": "hadolint/hadolint:latest",
     "currentValue": "latest",
     "datasource": "docker",
     "depName": "hadolint/hadolint",
     "depType": "image",
-    "lineNumber": 36,
+    "managerData": Object {
+      "lineNumber": 36,
+    },
   },
   Object {
-    "currentDepTag": "docker:latest",
     "currentDigest": undefined,
-    "currentFrom": "docker:latest",
     "currentValue": "latest",
     "datasource": "docker",
     "depName": "docker",
     "depType": "image",
-    "lineNumber": 53,
+    "managerData": Object {
+      "lineNumber": 53,
+    },
   },
   Object {
-    "currentDepTag": "docker:dind",
     "currentDigest": undefined,
-    "currentFrom": "docker:dind",
     "currentValue": "dind",
     "datasource": "docker",
     "depName": "docker",
     "depType": "service-image",
-    "lineNumber": 55,
+    "managerData": Object {
+      "lineNumber": 55,
+    },
   },
   Object {
-    "currentDepTag": "docker:latest",
     "currentDigest": undefined,
-    "currentFrom": "docker:latest",
     "currentValue": "latest",
     "datasource": "docker",
     "depName": "docker",
     "depType": "image",
-    "lineNumber": 75,
+    "managerData": Object {
+      "lineNumber": 75,
+    },
   },
   Object {
-    "currentDepTag": "docker:dind",
     "currentDigest": undefined,
-    "currentFrom": "docker:dind",
     "currentValue": "dind",
     "datasource": "docker",
     "depName": "docker",
     "depType": "service-image",
-    "lineNumber": 77,
+    "managerData": Object {
+      "lineNumber": 77,
+    },
   },
   Object {
-    "currentDepTag": "image-name-test:1.15",
     "currentDigest": undefined,
-    "currentFrom": "image-name-test:1.15",
     "currentValue": "1.15",
     "datasource": "docker",
     "depName": "image-name-test",
     "depType": "image-name",
-    "lineNumber": 102,
+    "managerData": Object {
+      "lineNumber": 102,
+    },
   },
 ]
 `;
diff --git a/test/manager/gitlabci/update.spec.js b/test/manager/gitlabci/update.spec.js
index 2707900248..b08a0b5832 100644
--- a/test/manager/gitlabci/update.spec.js
+++ b/test/manager/gitlabci/update.spec.js
@@ -10,7 +10,7 @@ describe('manager/gitlabci/update', () => {
   describe('updateDependency', () => {
     it('replaces existing value', () => {
       const upgrade = {
-        lineNumber: 36,
+        managerData: { lineNumber: 36 },
         depType: 'image',
         depName: 'hadolint/hadolint',
         newValue: '7.0.0',
@@ -23,7 +23,7 @@ describe('manager/gitlabci/update', () => {
     it('returns same', () => {
       const upgrade = {
         depType: 'image',
-        lineNumber: 36,
+        managerData: { lineNumber: 36 },
         depName: 'hadolint/hadolint',
         newValue: 'latest',
       };
@@ -32,7 +32,7 @@ describe('manager/gitlabci/update', () => {
     });
     it('returns null if mismatch', () => {
       const upgrade = {
-        lineNumber: 17,
+        managerData: { lineNumber: 17 },
         depType: 'image',
         depName: 'postgres',
         newValue: '9.6.8',
@@ -43,7 +43,7 @@ describe('manager/gitlabci/update', () => {
     });
     it('replaces image-name value', () => {
       const upgrade = {
-        lineNumber: 102,
+        managerData: { lineNumber: 102 },
         depType: 'image-name',
         depName: 'image-name-test',
         newValue: '1.35',
@@ -53,7 +53,7 @@ describe('manager/gitlabci/update', () => {
     });
     it('returns same image-name value', () => {
       const upgrade = {
-        lineNumber: 102,
+        managerData: { lineNumber: 102 },
         depType: 'image-name',
         depName: 'image-name-test',
         newValue: '1.15',
@@ -63,7 +63,7 @@ describe('manager/gitlabci/update', () => {
     });
     it('replaces service-image update', () => {
       const upgrade = {
-        lineNumber: 55,
+        managerData: { lineNumber: 55 },
         depType: 'service-image',
         depName: 'hadolint/hadolint',
         newValue: '7.0.0',
@@ -75,7 +75,7 @@ describe('manager/gitlabci/update', () => {
     });
     it('returns null if service-image mismatch', () => {
       const upgrade = {
-        lineNumber: 17,
+        managerData: { lineNumber: 17 },
         depType: 'service-image',
         depName: 'postgres',
         newValue: '9.6.8',
@@ -87,7 +87,7 @@ describe('manager/gitlabci/update', () => {
     it('returns service-image same', () => {
       const upgrade = {
         depType: 'serviceimage',
-        lineNumber: 55,
+        managerData: { lineNumber: 55 },
         depName: 'docker',
         newValue: 'dind',
       };
diff --git a/test/manager/kubernetes/__snapshots__/extract.spec.js.snap b/test/manager/kubernetes/__snapshots__/extract.spec.js.snap
index 3ba76e6222..7454d333c0 100644
--- a/test/manager/kubernetes/__snapshots__/extract.spec.js.snap
+++ b/test/manager/kubernetes/__snapshots__/extract.spec.js.snap
@@ -3,13 +3,13 @@
 exports[`lib/manager/kubernetes/extract extractPackageFile() extracts image line in a YAML array 1`] = `
 Array [
   Object {
-    "currentDepTag": "quay.io/external_storage/local-volume-provisioner:v2.1.0",
     "currentDigest": undefined,
-    "currentFrom": "quay.io/external_storage/local-volume-provisioner:v2.1.0",
     "currentValue": "v2.1.0",
     "datasource": "docker",
     "depName": "quay.io/external_storage/local-volume-provisioner",
-    "lineNumber": 14,
+    "managerData": Object {
+      "lineNumber": 14,
+    },
   },
 ]
 `;
@@ -17,22 +17,22 @@ Array [
 exports[`lib/manager/kubernetes/extract extractPackageFile() extracts multiple image lines 1`] = `
 Array [
   Object {
-    "currentDepTag": "nginx:1.7.9",
     "currentDigest": undefined,
-    "currentFrom": "nginx:1.7.9",
     "currentValue": "1.7.9",
     "datasource": "docker",
     "depName": "nginx",
-    "lineNumber": 18,
+    "managerData": Object {
+      "lineNumber": 18,
+    },
   },
   Object {
-    "currentDepTag": "k8s.gcr.io/kube-proxy-amd64:v1.11.1",
     "currentDigest": undefined,
-    "currentFrom": "k8s.gcr.io/kube-proxy-amd64:v1.11.1",
     "currentValue": "v1.11.1",
     "datasource": "docker",
     "depName": "k8s.gcr.io/kube-proxy-amd64",
-    "lineNumber": 46,
+    "managerData": Object {
+      "lineNumber": 46,
+    },
   },
 ]
 `;
diff --git a/test/manager/kubernetes/update.spec.js b/test/manager/kubernetes/update.spec.js
index b9699e90a1..df19b6fb6b 100644
--- a/test/manager/kubernetes/update.spec.js
+++ b/test/manager/kubernetes/update.spec.js
@@ -15,7 +15,7 @@ describe('manager/kubernetes/update', () => {
   describe('updateDependency', () => {
     it('replaces existing value', () => {
       const upgrade = {
-        lineNumber: 18,
+        managerData: { lineNumber: 18 },
         depName: 'nginx',
         newValue: '1.15.1',
         newDigest: 'sha256:abcdefghijklmnop',
@@ -26,7 +26,7 @@ describe('manager/kubernetes/update', () => {
     });
     it('returns same', () => {
       const upgrade = {
-        lineNumber: 46,
+        managerData: { lineNumber: 46 },
         depName: 'k8s.gcr.io/kube-proxy-amd64',
         newValue: 'v1.11.1',
       };
@@ -35,7 +35,7 @@ describe('manager/kubernetes/update', () => {
     });
     it('returns null if mismatch', () => {
       const upgrade = {
-        lineNumber: 1,
+        managerData: { lineNumber: 1 },
         newFrom: 'k8s.gcr.io/kube-proxy-amd64:v1.11.1',
       };
       const res = dcUpdate.updateDependency(yamlFile, upgrade);
@@ -47,7 +47,7 @@ describe('manager/kubernetes/update', () => {
     });
     it('replaces image inside YAML array', () => {
       const upgrade = {
-        lineNumber: 14,
+        managerData: { lineNumber: 14 },
         depName: 'quay.io/external_storage/local-volume-provisioner',
         newValue: 'v2.2.0',
       };
-- 
GitLab