Jacko
Jacko

Reputation: 13195

Github actions: set environment variable for Windows build with PowerShell

I define GENERATOR_PLATFORM as an empty environment variable, and then I want to set it to something for my Windows build. But, the variable never gets set:

env:
  GENERATOR_PLATFORM:

 steps:
    - name: windows-dependencies
      if: startsWith(matrix.os, 'windows')
      run: |
         $generator= "-DCMAKE_GENERATOR_PLATFORM=x64"
        echo "Generator: ${generator}"
        echo "GENERATOR_PLATFORM=$generator" >> $GITHUB_ENV

   - name: Configure CMake
      shell: bash
      working-directory: ${{github.workspace}}/build
      run: cmake $GITHUB_WORKSPACE $GENERATOR_PLATFORM

Upvotes: 14

Views: 9742

Answers (2)

Marius
Marius

Reputation: 91

To follow up on @soltex answer: The proposed solution only works if the encoding is set to utf-8. If your runner is using Windows PowerShell (i.e. not PowerShell v7+, which uses utf-8 by default), utf16-le is written to the environment file, which causes the variable to not being set.

The correct solution is this:

echo "GENERATOR_PLATFORM=$generator" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

From: https://github.com/actions/runner-images/issues/5251#issuecomment-1071030822

Further reading: Changing PowerShell's default output encoding to UTF-8

Upvotes: 6

soltex
soltex

Reputation: 3521

If you are using a Windows/PowerShell environment, you have to use $env:GITHUB_ENV instead of $GITHUB_ENV:

    echo "GENERATOR_PLATFORM=$generator" >> $env:GITHUB_ENV

This way, you can access your env var through $env:GENERATOR_PLATFORM, eg:

    run: echo $env:GENERATOR_PLATFORM

Upvotes: 28

Related Questions