From 949229594b5cfb69812d842583b1b59e5b5f0e62 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Wed, 15 May 2019 11:40:58 +0200
Subject: [PATCH] fix(docker): handle host with port correctly

Closes #3698
---
 lib/manager/dockerfile/extract.js             | 13 ++++++++-
 .../__snapshots__/extract.spec.js.snap        | 28 ++++++++++++++++---
 test/manager/dockerfile/extract.spec.js       | 10 +++++++
 3 files changed, 46 insertions(+), 5 deletions(-)

diff --git a/lib/manager/dockerfile/extract.js b/lib/manager/dockerfile/extract.js
index b510ea4df6..8496ae72d7 100644
--- a/lib/manager/dockerfile/extract.js
+++ b/lib/manager/dockerfile/extract.js
@@ -11,7 +11,18 @@ function splitImageParts(currentFrom) {
     };
   }
   const [currentDepTag, currentDigest] = currentFrom.split('@');
-  const [depName, currentValue] = currentDepTag.split(':');
+  const depTagSplit = currentDepTag.split(':');
+  let depName;
+  let currentValue;
+  if (
+    depTagSplit.length === 1 ||
+    depTagSplit[depTagSplit.length - 1].includes('/')
+  ) {
+    depName = currentDepTag;
+  } else {
+    currentValue = depTagSplit.pop();
+    depName = depTagSplit.join(':');
+  }
   const dep = {
     depName,
     currentDigest,
diff --git a/test/manager/dockerfile/__snapshots__/extract.spec.js.snap b/test/manager/dockerfile/__snapshots__/extract.spec.js.snap
index 97741eb7d8..c3d4d0f497 100644
--- a/test/manager/dockerfile/__snapshots__/extract.spec.js.snap
+++ b/test/manager/dockerfile/__snapshots__/extract.spec.js.snap
@@ -122,12 +122,13 @@ Array [
 exports[`lib/manager/dockerfile/extract extractPackageFile() handles abnoral spacing 1`] = `
 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": "5005/node",
+    "currentValue": "8.7.0",
     "datasource": "docker",
-    "depName": "registry.allmine.info",
+    "depName": "registry.allmine.info:5005/node",
     "depType": "final",
     "fromPrefix": "FROM",
     "fromSuffix": "",
@@ -228,12 +229,31 @@ Array [
 exports[`lib/manager/dockerfile/extract extractPackageFile() handles custom hosts with port 1`] = `
 Array [
   Object {
+    "commitMessageTopic": "Node.js",
     "currentDepTag": "registry2.something.info:5005/node:8",
     "currentDigest": undefined,
     "currentFrom": "registry2.something.info:5005/node:8",
-    "currentValue": "5005/node",
+    "currentValue": "8",
+    "datasource": "docker",
+    "depName": "registry2.something.info:5005/node",
+    "depType": "final",
+    "fromPrefix": "FROM",
+    "fromSuffix": "",
+    "lineNumber": 0,
+  },
+]
+`;
+
+exports[`lib/manager/dockerfile/extract extractPackageFile() handles custom hosts with port without tag 1`] = `
+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",
+    "depName": "registry2.something.info:5005/node",
     "depType": "final",
     "fromPrefix": "FROM",
     "fromSuffix": "",
diff --git a/test/manager/dockerfile/extract.spec.js b/test/manager/dockerfile/extract.spec.js
index 77dd61b602..5033414b69 100644
--- a/test/manager/dockerfile/extract.spec.js
+++ b/test/manager/dockerfile/extract.spec.js
@@ -76,6 +76,16 @@ describe('lib/manager/dockerfile/extract', () => {
         config
       ).deps;
       expect(res).toMatchSnapshot();
+      expect(res[0].depName).toEqual('registry2.something.info:5005/node');
+      expect(res[0].currentValue).toEqual('8');
+    });
+    it('handles custom hosts with port without tag', () => {
+      const res = extractPackageFile(
+        'FROM registry2.something.info:5005/node\n',
+        config
+      ).deps;
+      expect(res).toMatchSnapshot();
+      expect(res[0].depName).toEqual('registry2.something.info:5005/node');
     });
     it('handles namespaced images', () => {
       const res = extractPackageFile('FROM mynamespace/node:8\n', config).deps;
-- 
GitLab