From 8c290994c1b84153d2b9f911ac3bb64858fb5e35 Mon Sep 17 00:00:00 2001
From: Casey Lee <cplee@nektos.com>
Date: Wed, 22 Apr 2020 23:24:31 -0700
Subject: [PATCH] fix: #182 - support symlinks in workspace

---
 pkg/container/docker_run.go             | 10 ++++++++--
 pkg/runner/testdata/workdir/canary-link |  1 +
 pkg/runner/testdata/workdir/push.yml    |  1 +
 3 files changed, 10 insertions(+), 2 deletions(-)
 create mode 120000 pkg/runner/testdata/workdir/canary-link

diff --git a/pkg/container/docker_run.go b/pkg/container/docker_run.go
index 26b81ee..19b8a47 100644
--- a/pkg/container/docker_run.go
+++ b/pkg/container/docker_run.go
@@ -350,12 +350,18 @@ func (cr *containerReference) copyDir(dstPath string, srcPath string) common.Exe
 			}
 
 			// return on non-regular files (thanks to [kumo](https://medium.com/@komuw/just-like-you-did-fbdd7df829d3) for this suggested update)
-			if !fi.Mode().IsRegular() {
+			linkName := fi.Name()
+			if fi.Mode()&os.ModeSymlink == os.ModeSymlink {
+				linkName, err = os.Readlink(file)
+				if err != nil {
+					return errors.WithMessagef(err, "unable to readlink %s", file)
+				}
+			} else if !fi.Mode().IsRegular() {
 				return nil
 			}
 
 			// create a new dir/file header
-			header, err := tar.FileInfoHeader(fi, fi.Name())
+			header, err := tar.FileInfoHeader(fi, linkName)
 			if err != nil {
 				return err
 			}
diff --git a/pkg/runner/testdata/workdir/canary-link b/pkg/runner/testdata/workdir/canary-link
new file mode 120000
index 0000000..0c5e42f
--- /dev/null
+++ b/pkg/runner/testdata/workdir/canary-link
@@ -0,0 +1 @@
+canary
\ No newline at end of file
diff --git a/pkg/runner/testdata/workdir/push.yml b/pkg/runner/testdata/workdir/push.yml
index 16c7fe4..9e6eaad 100644
--- a/pkg/runner/testdata/workdir/push.yml
+++ b/pkg/runner/testdata/workdir/push.yml
@@ -6,6 +6,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
     - uses: actions/checkout@v2
+    - run: ls -alFt /github/workspace/workdir
     - run: '[[ "$(pwd)" == "/github/workspace/workdir" ]]'
       working-directory: workdir