From 126bae69216174302b6d82a4c338dfef6681d4b9 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Thu, 9 Apr 2020 23:34:47 +0200
Subject: [PATCH] fix: removeDockerContainer

---
 .../__snapshots__/artifacts.spec.ts.snap      |  8 +++---
 .../__snapshots__/artifacts.spec.ts.snap      |  2 +-
 .../__snapshots__/artifacts.spec.ts.snap      |  8 +++---
 .../__snapshots__/artifacts.spec.ts.snap      |  2 +-
 .../__snapshots__/artifacts.spec.ts.snap      |  8 +++---
 .../gradle/__snapshots__/index.spec.ts.snap   | 24 ++++++++++++++---
 .../__snapshots__/artifacts.spec.ts.snap      |  2 +-
 .../__snapshots__/artifacts.spec.ts.snap      |  2 +-
 lib/util/exec/__snapshots__/exec.spec.ts.snap |  8 +++---
 lib/util/exec/docker/index.ts                 | 27 +++++++++++--------
 lib/util/exec/exec.spec.ts                    |  2 +-
 11 files changed, 58 insertions(+), 35 deletions(-)

diff --git a/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap b/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap
index ce832abf7f..52534d46a3 100644
--- a/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap
@@ -20,7 +20,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_ruby -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_ruby -aq",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -65,7 +65,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_ruby -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_ruby -aq",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -110,7 +110,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_ruby -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_ruby -aq",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -156,7 +156,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_ruby -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_ruby -aq",
     "options": Object {
       "encoding": "utf-8",
     },
diff --git a/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap b/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap
index 687c058818..ef9ee459f6 100644
--- a/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap
@@ -64,7 +64,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_rust -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_rust -aq",
     "options": Object {
       "encoding": "utf-8",
     },
diff --git a/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap b/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap
index c1a5c53081..9cd4619c1a 100644
--- a/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap
@@ -28,7 +28,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_cocoapods -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_cocoapods -aq",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -68,7 +68,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_cocoapods -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_cocoapods -aq",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -182,7 +182,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_cocoapods -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_cocoapods -aq",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -245,7 +245,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_cocoapods -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_cocoapods -aq",
     "options": Object {
       "encoding": "utf-8",
     },
diff --git a/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap b/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap
index fe23b9deea..a747946623 100644
--- a/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap
@@ -100,7 +100,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_composer -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_composer -aq",
     "options": Object {
       "encoding": "utf-8",
     },
diff --git a/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap b/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
index 6def232ae6..245615173f 100644
--- a/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
@@ -76,7 +76,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_go -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_go -aq",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -114,7 +114,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_go -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_go -aq",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -141,7 +141,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_go -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_go -aq",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -179,7 +179,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_go -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_go -aq",
     "options": Object {
       "encoding": "utf-8",
     },
diff --git a/lib/manager/gradle/__snapshots__/index.spec.ts.snap b/lib/manager/gradle/__snapshots__/index.spec.ts.snap
index b979d1c730..4250c501d9 100644
--- a/lib/manager/gradle/__snapshots__/index.spec.ts.snap
+++ b/lib/manager/gradle/__snapshots__/index.spec.ts.snap
@@ -536,7 +536,13 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_gradle -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_gradle -aq",
+    "options": Object {
+      "encoding": "utf-8",
+    },
+  },
+  Object {
+    "cmd": "docker rm -f gradle output",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -570,7 +576,13 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_gradle -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_gradle -aq",
+    "options": Object {
+      "encoding": "utf-8",
+    },
+  },
+  Object {
+    "cmd": "docker rm -f gradle output",
     "options": Object {
       "encoding": "utf-8",
     },
@@ -604,7 +616,13 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_gradle -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_gradle -aq",
+    "options": Object {
+      "encoding": "utf-8",
+    },
+  },
+  Object {
+    "cmd": "docker rm -f gradle output",
     "options": Object {
       "encoding": "utf-8",
     },
diff --git a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
index 69c24bd4bc..e4f4a7327b 100644
--- a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
@@ -66,7 +66,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_pipenv -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_pipenv -aq",
     "options": Object {
       "encoding": "utf-8",
     },
diff --git a/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap b/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap
index 1dbbe193b9..bc01d94f1f 100644
--- a/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap
@@ -65,7 +65,7 @@ Array [
     },
   },
   Object {
-    "cmd": "docker ps --filter name=renovate_poetry -aq | xargs --no-run-if-empty docker rm -f",
+    "cmd": "docker ps --filter name=renovate_poetry -aq",
     "options": Object {
       "encoding": "utf-8",
     },
diff --git a/lib/util/exec/__snapshots__/exec.spec.ts.snap b/lib/util/exec/__snapshots__/exec.spec.ts.snap
index 139bf9040e..98e090c4ea 100644
--- a/lib/util/exec/__snapshots__/exec.spec.ts.snap
+++ b/lib/util/exec/__snapshots__/exec.spec.ts.snap
@@ -6,16 +6,16 @@ Array [
   "echo hello",
   "docker ps --filter label=renovate_child -aq | xargs --no-run-if-empty docker rm -f",
   "docker pull example/image",
-  "docker ps --filter name=example_image -aq | xargs --no-run-if-empty docker rm -f",
+  "docker ps --filter name=example_image -aq",
   "docker run --rm --name=example_image --label=renovate_child example/image bash -l -c \\"echo hello\\"",
-  "docker ps --filter name=example_image -aq | xargs --no-run-if-empty docker rm -f",
+  "docker ps --filter name=example_image -aq",
   "docker run --rm --name=example_image --label=renovate_child example/image bash -l -c \\"echo hello\\"",
   "echo hello",
   "echo hello",
   "docker ps --filter label=renovate_child -aq | xargs --no-run-if-empty docker rm -f",
-  "docker ps --filter name=example_image -aq | xargs --no-run-if-empty docker rm -f",
+  "docker ps --filter name=example_image -aq",
   "docker run --rm --name=example_image --label=renovate_child example/image bash -l -c \\"echo hello\\"",
-  "docker ps --filter name=example_image -aq | xargs --no-run-if-empty docker rm -f",
+  "docker ps --filter name=example_image -aq",
   "docker run --rm --name=example_image --label=renovate_child example/image bash -l -c \\"echo hello\\"",
 ]
 `;
diff --git a/lib/util/exec/docker/index.ts b/lib/util/exec/docker/index.ts
index eec51223d6..f8bda74ccb 100644
--- a/lib/util/exec/docker/index.ts
+++ b/lib/util/exec/docker/index.ts
@@ -114,23 +114,28 @@ function getContainerName(image: string): string {
 
 export async function removeDockerContainer(image): Promise<void> {
   const containerName = getContainerName(image);
+  let cmd = `docker ps --filter name=${containerName} -aq`;
   try {
-    const res = await rawExec(
-      `docker ps --filter name=${containerName} -aq | xargs --no-run-if-empty docker rm -f`,
-      { encoding: 'utf-8' }
-    );
-    if (res?.stdout?.trim().length) {
-      const containerId = res.stdout.trim();
-      logger.info(
-        { image, containerName, containerId },
-        'Finished Docker container removal'
-      );
+    const res = await rawExec(cmd, {
+      encoding: 'utf-8',
+    });
+    const containerId = res?.stdout?.trim() || '';
+    // istanbul ignore if
+    if (containerId.length) {
+      logger.debug({ containerId }, 'Removing container');
+      cmd = `docker rm -f ${containerId}`;
+      await rawExec(cmd, {
+        encoding: 'utf-8',
+      });
     } else {
       logger.trace({ image, containerName }, 'No running containers to remove');
     }
   } catch (err) /* istanbul ignore next */ {
     logger.trace({ err }, 'removeDockerContainer err');
-    logger.info({ image, containerName }, 'Could not remove Docker container');
+    logger.info(
+      { image, containerName, cmd },
+      'Could not remove Docker container'
+    );
   }
 }
 
diff --git a/lib/util/exec/exec.spec.ts b/lib/util/exec/exec.spec.ts
index b2a5446dc1..3dd6c80716 100644
--- a/lib/util/exec/exec.spec.ts
+++ b/lib/util/exec/exec.spec.ts
@@ -74,7 +74,7 @@ describe(`Child process execution wrapper`, () => {
   const docker = { image };
   const processEnv = envMock.full;
   const dockerPullCmd = `docker pull ${image}`;
-  const dockerRemoveCmd = `docker ps --filter name=${name} -aq | xargs --no-run-if-empty docker rm -f`;
+  const dockerRemoveCmd = `docker ps --filter name=${name} -aq`;
   const dockerPullOpts = { encoding };
   const dockerRemoveOpts = dockerPullOpts;
 
-- 
GitLab