Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] Using tar on Windows should call $env:WINDIR/System32/tar and not the Git bash provided /usr/bin/tar #205

Closed
cderv opened this issue Jan 15, 2024 · 3 comments · Fixed by #206
Labels
bug Something isn't working

Comments

@cderv
Copy link

cderv commented Jan 15, 2024

Describe the bug

Recent change introduced the use of tar on Windows

Currently, it is calling tar through PowerShell using the program name only, thus relying on PATH resolution.

It happens that /usr/bin/tar is used (probably from Git Bash) and not the Windows internal $env:WINDIR/System32/tar.exe.
This is known to happen on github action (at least encountered in the past)

I encountered this because by modifying temp folder to be {{ runner.temp }} on Windows, it leads to having tar dealing with Windows path name with network drive letter. Only Windows's tar can handle that.

This is the issue I encountered using setup-julia action

$ Run julia-actions/setup-julia@v1.9.5
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "tar xf D:\a\_temp\f585e5f8-9502-4dc6-9544-d8ebf784ca06 --strip-components=1 -C C:\hostedtoolcache\windows\julia\1.10.0\x64"
/usr/bin/tar: Cannot connect to D: resolve failed
Error: The process 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' failed with exit code 1
  • This shows that /usr/bin/tar is the own throwing the error
  • The error is linked to network drive letter. It happens because in my context, Temp folder is modified to use {{ runner.temp }} which is on D: and it tries to untar on C:.

To Reproduce

I can create a simple example reproducing the Can't connect error but this is not the main issue I would like to report here. I believe any action using 1.9.5 is calling the /usr/bin/tar instead of Window's tar.exe

If you would like a workflow file anyway, I can provide.

Expected behavior

Windows' own tar is used when using tar on Windows, which allows to correctly handle Windows paths.

This change ensures it is, and it solves issue I encountered

diff --git a/dist/index.js b/dist/index.js
index 74d0f94..8acd5f4 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -268,7 +268,7 @@ function installJulia(dest, versionInfo, version, arch) {
                 }
                 else {
                     // This is the more common path. Using .tar.gz is much faster
-                    yield exec.exec('powershell', ['-Command', `tar xf ${juliaDownloadPath} --strip-components=1 -C ${dest}`]);
+                    yield exec.exec('powershell', ['-Command', `& "$env:WINDIR/System32/tar" xf ${juliaDownloadPath} --strip-components=1 -C ${dest}`]);
                 }
                 return dest;
             case 'darwin':

(I modified in Fork in dist by convenience for testing.

Screenshots/Build logs

With current 1.9.5

image

With a fork using Windows' tar

image

Additional context

Nothing more I can think of.

Happy to provide anything more needed. Please do tell me.

Thanks

@cderv cderv added the bug Something isn't working label Jan 15, 2024
@cderv
Copy link
Author

cderv commented Jan 16, 2024

More detailed information about this issue as more tests show that this is not linked to a change of temporary directory.
In fact, on github-hosted Windows runner, the default will always be on two drives and does not depend on TEMP env var

  • RUNNER_TEMP will be in D:
  • hostedtoolcache will be in C:

This means that currently, this action requires a tar that can handle Windows paths on two drives

yield exec.exec('powershell', ['-Command', `tar xf ${juliaDownloadPath} --strip-components=1 -C ${dest}`]);

More detailed answer in #206 and #207

I would sum up this issue this way.

  • Using a tar.exe that handles Windows paths with Drive later is required.
  • This action will use the first tar on PATH
  • Users need to insure the right tar is on PATH (it happens other actions can modify $GITHUB_PATH and mess this up)
  • If not, a workaround is to add the tar.exe that works first on PATH before running setup-julia

cderv added a commit to quarto-dev/quarto-cli that referenced this issue Jan 16, 2024
julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
@ViralBShah
Copy link
Contributor

#206

cderv added a commit to quarto-dev/quarto-cli that referenced this issue Jan 25, 2024
julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
cderv added a commit to quarto-dev/quarto-cli that referenced this issue Jan 26, 2024
julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
cderv added a commit to quarto-dev/quarto-cli that referenced this issue Jan 31, 2024
julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
cderv added a commit to quarto-dev/quarto-cli that referenced this issue Feb 1, 2024
julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
cderv added a commit to quarto-dev/quarto-cli that referenced this issue Feb 2, 2024
julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
cderv added a commit to quarto-dev/quarto-cli that referenced this issue Feb 2, 2024
- Python 3.12
- Julia 1.10
- R 4.3.2
- All versions of packages dependencies

- Update GHA workflow accordingly
- Add dev documentation

- Adapt for newer Julia action issue

julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
cderv added a commit to quarto-dev/quarto-cli that referenced this issue Feb 2, 2024
- Python 3.12
- Julia 1.10
- R 4.3.2
- All versions of packages dependencies

- Update GHA workflow accordingly
- Add dev documentation

- Adapt for newer Julia action issue

julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
cderv added a commit to quarto-dev/quarto-cli that referenced this issue Feb 19, 2024
- Python 3.12
- Julia 1.10
- R 4.3.2
- All versions of packages dependencies

- Update GHA workflow accordingly
- Add dev documentation

- Adapt for newer Julia action issue

julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
cderv added a commit to quarto-dev/quarto-cli that referenced this issue Feb 19, 2024
- Python 3.12
- Julia 1.10
- R 4.3.2
- All versions of packages dependencies

- Update GHA workflow accordingly
- Add dev documentation

- Adapt for newer Julia action issue

julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
cderv added a commit to quarto-dev/quarto-cli that referenced this issue Feb 19, 2024
- Python 3.12
- Julia 1.10
- R 4.3.2
- All versions of packages dependencies

- Update GHA workflow accordingly
- Add dev documentation

- Adapt for newer Julia action issue

julia-actions/setup-julia@v1.9.5 is using `tar` for Windows installation
now but uses any `tar` from PATH. However, it requires a `tar.exe` that
can handle Windows paths with drive letters.

In our workflow, `tar` is found in `/usr/bin/tar` from rtools being
added to PATH. This leads to error as it does not support the drive
letters.

Not adding rtools to PATH will solve, and should not impact the workflow
as pak is used for R packages installation.

More details about this issue at julia-actions/setup-julia#205
@SaschaMann SaschaMann removed their assignment Apr 1, 2024
@wzhorton
Copy link

wzhorton commented May 3, 2024

Big thanks to @cderv for making a fork that implements fixes from PR #206 , which have not been merged yet. I ran into this issue when running package tests that depend on R via RCall.jl. For my fellow inexperienced GitHub Actions folks, I have a matrix of OS configs that includes os: [ubuntu-latest, windows-latest, macOS-latest]. Instead of a single setup line with - uses:julia-actions/setup-julia@v2, I replaced it with this which worked wonderfully:

    - name: Setup Julia (Default)
     uses: julia-actions/setup-julia@v2
     if: matrix.os != 'windows-latest'
     with:
       version: ${{ matrix.julia-version }}
       arch: ${{ matrix.julia-arch }}
    - name: Setup Julia (Windows w/ TAR Fix)
     uses: cderv/setup-julia@fix-tar
     if: matrix.os == 'windows-latest'
     with:
       version: ${{ matrix.julia-version }}
       arch: ${{ matrix.julia-arch }}

Of course, if and when the PR is merged none of this will be necessary, but for now I hope this is helpful.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
4 participants