From 24422bf4e4e1e12b9a1e076b2f9e0a7b14c6f890 Mon Sep 17 00:00:00 2001
From: Ryan <me@hackerc.at>
Date: Tue, 29 Mar 2022 20:00:52 +0200
Subject: [PATCH] fix: don't overwrite with empty cmd/entrypoint (#1076)

Co-authored-by: ChristopherHX <christopher.homberger@web.de>

Signed-off-by: Ryan <me@hackerc.at>

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
---
 pkg/container/docker_run.go                  | 10 ++++++++--
 pkg/runner/step_docker.go                    |  7 ++++++-
 pkg/runner/testdata/uses-docker-url/push.yml | 12 ++++++++++++
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/pkg/container/docker_run.go b/pkg/container/docker_run.go
index cc8335d..2747c30 100644
--- a/pkg/container/docker_run.go
+++ b/pkg/container/docker_run.go
@@ -327,14 +327,20 @@ func (cr *containerReference) create(capAdd []string, capDrop []string) common.E
 
 		config := &container.Config{
 			Image:      input.Image,
-			Cmd:        input.Cmd,
-			Entrypoint: input.Entrypoint,
 			WorkingDir: input.WorkingDir,
 			Env:        input.Env,
 			Tty:        isTerminal,
 			Hostname:   input.Hostname,
 		}
 
+		if len(input.Cmd) != 0 {
+			config.Cmd = input.Cmd
+		}
+
+		if len(input.Entrypoint) != 0 {
+			config.Entrypoint = input.Entrypoint
+		}
+
 		mounts := make([]mount.Mount, 0)
 		for mountSource, mountTarget := range input.Mounts {
 			mounts = append(mounts, mount.Mount{
diff --git a/pkg/runner/step_docker.go b/pkg/runner/step_docker.go
index 5625a15..3a274d0 100644
--- a/pkg/runner/step_docker.go
+++ b/pkg/runner/step_docker.go
@@ -58,7 +58,12 @@ func (sd *stepDocker) runUsesContainer() common.Executor {
 		if err != nil {
 			return err
 		}
-		entrypoint := strings.Fields(eval.Interpolate(step.With["entrypoint"]))
+
+		var entrypoint []string
+		if entry := eval.Interpolate(step.With["entrypoint"]); entry != "" {
+			entrypoint = []string{entry}
+		}
+
 		stepContainer := sd.newStepContainer(ctx, image, cmd, entrypoint)
 
 		return common.NewPipelineExecutor(
diff --git a/pkg/runner/testdata/uses-docker-url/push.yml b/pkg/runner/testdata/uses-docker-url/push.yml
index 2eee36f..336134c 100644
--- a/pkg/runner/testdata/uses-docker-url/push.yml
+++ b/pkg/runner/testdata/uses-docker-url/push.yml
@@ -9,3 +9,15 @@ jobs:
         with:
           somekey: somevalue
           args: echo ${INPUT_SOMEKEY} | grep somevalue
+      - uses: docker://node:16-buster-slim
+        with:
+          args: -v
+      - uses: docker://node:16-buster-slim
+        with:
+          entrypoint: /bin/sh
+          args: -c -- uname -a
+      - uses: docker://node:16-buster-slim
+        with:
+          entrypoint: /bin/sh
+          args: -c 'uname -a'
+