Post

GitHub Actions - setup-actions use versions preinstalled on runner

tl;dr

setup-actions uses versions preinstalled on a self-hosted runner. If a version is specified in the GitHub Actions workflow yml file but it’s not preinstalled on the self-hosted runner, then GitHub Actions returns an error.

Fix: use a specific sdk version or update the preinstalled versions.

Details

Recently, while on a self-hosted runner, and I ran into a problem where using setup-actions with a 6.0.x version of dotnet returned the error below:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dotnet-install: Adding to current process PATH: "C:\Program Files\dotnet\". Note: This change will not be visible if PowerShell was run as a child process.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command "& 'C:\actions-runner\_work\_actions\actions\setup-dotnet\v2\externals\install-dotnet.ps1' -Version 6.0.405"
dotnet-install: Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:
dotnet-install: - The SDK needs to be installed without user interaction and without admin rights.
dotnet-install: - The SDK installation doesn't need to persist across multiple CI runs.
dotnet-install: To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer.

dotnet-install: Extracting the archive.
C:\actions-runner\_work\_actions\actions\setup-dotnet\v2\externals\install-dotnet.ps1 : Exception calling 
"ExtractToFile" with "3" argument(s): "Access to the path 'C:\Program Files\dotnet\dotnet.exe' is denied."
At line:1 char:1
+ & 'C:\actions-runner\_work\_actions\actions\setup-dotnet\v2\externals ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [install-dotnet.ps1], MethodInvocationException
    + FullyQualifiedErrorId : UnauthorizedAccessException,install-dotnet.ps1
 
Error: The process 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' failed with exit code 1

The corresponding workflow yml looked like this:

1
2
3
4
5
6
7
8
9
. . .
jobs:
  jobA:
    steps:
      - name: Setup .NET 6.0.x 
        uses: actions/setup-dotnet@v2
        with:
          dotnet-version: |
            '6.0.x'

setup-actions tries to install the latest patch version, say 6.0.410. But if the runner only has patch version 6.404, then we see the error above.

Fixe(s)

One fix is to use a more specific version that’s on the runner, such that the yml looks like:

1
2
3
4
5
6
7
8
9
. . .
jobs:
  jobA:
    steps:
      - name: Setup .NET 6.0.x 
        uses: actions/setup-dotnet@v2
        with:
          dotnet-version: |
            '6.0.404'

Another one is to upgrade the self-hosted runner with newer versions of the SDK.

This post is licensed under CC BY 4.0 by the author.