S. Koshelnyk
S. Koshelnyk

Reputation: 506

Setting environment variable value from .ps1 script not working in Github Actions

I have two ps1 scripts in Github Actions. My scenario:

  1. The first script executes before build
  2. Project builds
  3. The second script executes after build.

I need to set the value inside the first script and use it inside the second script. So I decided to use BUILD_NUMBER environment variable and set it to 10 as a default value.

jobs:
  Droid:
    runs-on: windows-latest
    env:
      BUILD_NUMBER: "10"

Inside the first script I tried to set this variable in several ways but in the second script the value of BUILD_NUMBER was 10.

My attempts to set it:

[Environment]::SetEnvironmentVariable($env:BUILD_NUMBER, $buildNumber, 'Machine')

$env:BUILD_NUMBER: '123'

But inside the second script I was getting 10 value by this $newName = "${env:BUILD_NUMBER}"

The whole code of Github Actions side:

name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: 
    - 'master'
    - 'develop'
    - 'feature/*'
    - 'rc/*'
  pull_request:
    branches: 
    - 'master'
    - 'develop'
    - 'feature/*'
    - 'rc/*'


jobs:
  Droid:
    runs-on: windows-latest
    env:
      DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
      BUILD_NUMBER: "10"

    steps:
    - uses: actions/checkout@v1
    - name: Run a calculate version and set sign in password script
      run: .\Scripts\CalculateVersionAndSetSignPassword.ps1
      shell: powershell

# Build goes here. It is skipped by me for testing purposes

    - uses: actions/checkout@v1
    - name: Run a change apk name script
      run: |
       .\Scripts\ChangeApkName.ps1
      shell: powershell

Upvotes: 3

Views: 4319

Answers (3)

Krzysztof Madej
Krzysztof Madej

Reputation: 40603

set-env was depricated - please check GitHub Actions: Deprecating set-env and add-path commands

As a replacement you may use

echo "BUILD_NUMBER=yellow" >> $GITHUB_ENV

and then:

jobs:
  show:
    runs-on: ubuntu-latest
    steps:
      - name: Is variable exported?
        run: |
          echo "BUILD_NUMBER=yellow" >> $GITHUB_ENV
      - name: PowerShell script
        # You may pin to the exact commit or the version.
        # uses: Amadevus/pwsh-script@25a636480c7bc678a60bbf4e3e5ac03aca6cf2cd
        uses: Amadevus/[email protected]
        continue-on-error: true
        with: 
          # PowerShell script to execute in Actions-hydrated context
          script: | 
            Write-Host $env:BUILD_NUMBER
      - name: Read exported variable
        run: |
          echo "${{ env.BUILD_NUMBER}}"

Upvotes: 3

S. Koshelnyk
S. Koshelnyk

Reputation: 506

Found the resolution in Michael Stum`s repo that he provided in this question: The key was Get-ChildItem Env: | Where-Object {$_.Name -Match "^MH_"} | %{ echo "::set-output name=$($_.Name)::$($_.Value)" } in .yml and $Env:MH_BUILD_VERSION = $version in .ps1 script file in his repository. So I successfully retrieved an output from .ps1 script and used it in Github Actions.

Upvotes: 0

Lucas
Lucas

Reputation: 1341

To set environment variables in a step that can be referenced in another, you will need to use the ::set-env syntax.

In your case, your first script will have to run this command:

Write-Output "::set-env name=BUILD_NUMBER::$buildNumber"

And the second script should be able to reference it with $env:BUILD_NUMBER.


[6/20/20] Update with full example.

Action yaml file (Inline powershell will have similar behavior than with a ps1):

name: StackOverFlow

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: windows-latest

    steps:
    - run: | 
        $buildNumber = "12345"
        Write-Output "::set-env name=BUILD_NUMBER::$buildNumber"

    - run: Write-Output "Doing something else..."
      
    - run: Write-Output "The build number is $env:BUILD_NUMBER"

Output logs:

2020-06-20T23:13:23.3209811Z ##[section]Starting: Request a runner to run this job
2020-06-20T23:13:23.5144969Z Can't find any online and idle self-hosted runner in current repository that matches the required labels: 'windows-latest'
2020-06-20T23:13:23.5145013Z Can't find any online and idle self-hosted runner in current repository's account/organization that matches the required labels: 'windows-latest'
2020-06-20T23:13:23.5145038Z Found online and idle hosted runner in current repository's account/organization that matches the required labels: 'windows-latest'
2020-06-20T23:13:23.6348644Z ##[section]Finishing: Request a runner to run this job
2020-06-20T23:13:29.9867339Z Current runner version: '2.263.0'
2020-06-20T23:13:29.9982614Z ##[group]Operating System
2020-06-20T23:13:29.9983190Z Microsoft Windows Server 2019
2020-06-20T23:13:29.9983380Z 10.0.17763
2020-06-20T23:13:29.9983515Z Datacenter
2020-06-20T23:13:29.9983691Z ##[endgroup]
2020-06-20T23:13:29.9983875Z ##[group]Virtual Environment
2020-06-20T23:13:29.9984067Z Environment: windows-2019
2020-06-20T23:13:29.9984247Z Version: 20200608.1
2020-06-20T23:13:29.9984524Z Included Software: https://github.com/actions/virtual-environments/blob/win19/20200608.1/images/win/Windows2019-Readme.md
2020-06-20T23:13:29.9984752Z ##[endgroup]
2020-06-20T23:13:29.9985890Z Prepare workflow directory
2020-06-20T23:13:30.0151643Z Prepare all required actions
2020-06-20T23:13:30.9154166Z ##[group]Run $buildNumber = "12345"
2020-06-20T23:13:30.9154566Z [36;1m$buildNumber = "12345"[0m
2020-06-20T23:13:30.9154784Z [36;1mWrite-Output "::set-env name=BUILD_NUMBER::$buildNumber"[0m
2020-06-20T23:13:30.9820753Z shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
2020-06-20T23:13:30.9821156Z ##[endgroup]
2020-06-20T23:13:43.2981407Z ##[group]Run Write-Output "Doing something else..."
2020-06-20T23:13:43.2981812Z [36;1mWrite-Output "Doing something else..."[0m
2020-06-20T23:13:43.3022226Z shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
2020-06-20T23:13:43.3022501Z env:
2020-06-20T23:13:43.3022706Z   BUILD_NUMBER: 12345
2020-06-20T23:13:43.3022906Z ##[endgroup]
2020-06-20T23:13:43.8091340Z Doing something else...
2020-06-20T23:13:43.8671648Z ##[group]Run Write-Output "The build number is $env:BUILD_NUMBER"
2020-06-20T23:13:43.8671986Z [36;1mWrite-Output "The build number is $($env:BUILD_NUMBER)"[0m
2020-06-20T23:13:43.8717102Z shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
2020-06-20T23:13:43.8717288Z env:
2020-06-20T23:13:43.8718175Z   BUILD_NUMBER: 12345
2020-06-20T23:13:43.8718286Z ##[endgroup]
2020-06-20T23:13:44.4148124Z The build number is 12345
2020-06-20T23:13:44.4368449Z Cleaning up orphan processes

Upvotes: 2

Related Questions