From 8c290994c1b84153d2b9f911ac3bb64858fb5e35 Mon Sep 17 00:00:00 2001 From: Casey Lee 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