From 3f77d676cdec9507dd938384757e9c06fc925c6f Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Wed, 14 Mar 2018 12:49:47 +0100
Subject: [PATCH] fix: docker multi-stage duplicate replace (#1662)

Closes #1656
---
 lib/manager/docker/update.js                  |  8 +++----
 .../docker/__snapshots__/update.spec.js.snap  |  7 ++++++
 test/manager/docker/update.spec.js            | 22 +++++++++++++++++++
 3 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/lib/manager/docker/update.js b/lib/manager/docker/update.js
index b245ce8d4b..0a2c868d7f 100644
--- a/lib/manager/docker/update.js
+++ b/lib/manager/docker/update.js
@@ -10,11 +10,9 @@ function setNewValue(currentFileContent, upgrade) {
         upgrade.fromSuffix
       }\\n`
     );
-    let newLine = `$1${upgrade.fromPrefix}$2${upgrade.newFrom}$3`;
-    if (upgrade.fromSuffix.length) {
-      newLine += `${upgrade.fromSuffix}`;
-    }
-    newLine += '\n';
+    const newLine = `$1${upgrade.fromPrefix}$2${upgrade.newFrom}$3${
+      upgrade.fromSuffix
+    }\n`;
     const newFileContent = currentFileContent.replace(oldLine, newLine);
     return newFileContent;
   } catch (err) {
diff --git a/test/manager/docker/__snapshots__/update.spec.js.snap b/test/manager/docker/__snapshots__/update.spec.js.snap
index e060864e05..8c5bc5c570 100644
--- a/test/manager/docker/__snapshots__/update.spec.js.snap
+++ b/test/manager/docker/__snapshots__/update.spec.js.snap
@@ -1,5 +1,12 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`workers/branch/dockerfile setNewValue handles similar FROM 1`] = `
+"FROM debian:wheezy@sha256:abcdefghijklmnop as stage-1
+RUN something
+FROM debian:wheezy@sha256:abcdefghijklmnop
+RUN something else"
+`;
+
 exports[`workers/branch/dockerfile setNewValue handles strange whitespace 1`] = `
 "# comment FROM node:8
 FROM   node:8@sha256:abcdefghijklmnop as base
diff --git a/test/manager/docker/update.spec.js b/test/manager/docker/update.spec.js
index 59fd58ef02..ad3f847b21 100644
--- a/test/manager/docker/update.spec.js
+++ b/test/manager/docker/update.spec.js
@@ -53,5 +53,27 @@ describe('workers/branch/dockerfile', () => {
       const res = dockerfile.setNewValue(currentFileContent, upgrade);
       expect(res).toBe(null);
     });
+    it('handles similar FROM', () => {
+      const currentFileContent =
+        'FROM debian:wheezy as stage-1\nRUN something\nFROM debian:wheezy\nRUN something else';
+      const upgrade1 = {
+        depName: 'debian',
+        currentVersion: 'debian:wheezy',
+        fromPrefix: 'FROM',
+        fromSuffix: 'as stage-1',
+        newFrom: 'debian:wheezy@sha256:abcdefghijklmnop',
+      };
+      const upgrade2 = {
+        depName: 'debian',
+        currentVersion: 'debian:wheezy',
+        fromPrefix: 'FROM',
+        fromSuffix: '',
+        newFrom: 'debian:wheezy@sha256:abcdefghijklmnop',
+      };
+      let res = dockerfile.setNewValue(currentFileContent, upgrade1);
+      res = dockerfile.setNewValue(res, upgrade2);
+      expect(res).toMatchSnapshot();
+      expect(res.includes('as stage-1')).toBe(true);
+    });
   });
 });
-- 
GitLab