16

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
1
  • An important thing to note for anyone coming here because they can't get an environment variable to set in PowerShell: If you set the variable and then get it in the same step, it will not work. Apparently, the GITHUB_ENV file isn't updated in the same step. Commented Mar 7, 2023 at 0:05

2 Answers 2

31

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
Sign up to request clarification or add additional context in comments.

1 Comment

You might take a look at this issue: stackoverflow.com/questions/77700484/…
6

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

1 Comment

You might take a look at this issue: stackoverflow.com/questions/77700484/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.