3

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
8
  • Did you restart in between these two scripts? Environment variables are loaded on startup so if you change existing variables, you do not have to restart, but if you create new ones a restart is required to render the variables usable. Commented Jun 19, 2020 at 20:48
  • @NekoMuseme Seems I do not restart between this steps if I understood correctly Commented Jun 19, 2020 at 20:50
  • Initializing new environment variables from Powershell requires restart. Try doing cmd /c "setx name value" instead Commented Jun 19, 2020 at 20:53
  • I do not need to initialize a new one. I need to set a value to existing one inside the first script. Should I try your solution? Commented Jun 19, 2020 at 20:55
  • If you are changing an existing one, just simply use $env:name = "value" instead of [Environment]::SetEnvironmentVariable($env:BUILD_NUMBER, $buildNumber, 'Machine') Commented Jun 19, 2020 at 20:55

3 Answers 3

3

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

1 Comment

I believe with Powershell on Windows it should be echo "BUILD_NUMBER=yellow" >> $env:GITHUB_ENV
2

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

11 Comments

Unfortunately it did not help. The second script still gets and old default value of BUILD_NUMBER
@Lukas any ideas?
Can you try try to remove the yml line where you set it to 10? It might override the value when loading the second last step ...
@Lukas I have found an answer here. 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. Thank you for the help.
You should write an answer to your question, just in case someone else run into something similar :)
|
0

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.

Comments

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.