I have been previously using set-output for setting values, but we now get thee "deprecated feature" messages and I'm using $GITHUB_OUTPUT as prescribed.
I replace all instances of
   run: echo ::set-output name=Key::Value
with
   run: "Key=Value" >> $GITHUB_OUTPUT
but Key does not appear to be set.
My runner is on Windows, version 2.299.1 and the workflow is using CMD. All calls to set-output work, and all using $GITHUB_OUTPUT do not.
Simplified action code
defaults:
run:
shell: cmd
jobs:
  EnvSetup:
    name: Publish Base Environment Vars
    runs-on: [self-hosted, Windows, myLabel]
    outputs:
      var_Project: ${{ steps.set-Project.outputs.Project }}
      var_Val1: ${{ steps.set-Val1.outputs.Val1 }}
      var_Val2: ${{ steps.set-Val2.outputs.Val2 }}
    steps:
      - name: Project
        id: set-Project
        run: echo ::set-output name=Project::Larry
      - name: Val1
        id: set-Val1
        run: echo "Val1=Curly" >> $GITHUB_OUTPUT
      - name: Val2
        id: set-Val2
        run: echo "Val2=Moe" >> $GITHUB_OUTPUT
...
  Testing:
    name: ShowStuff
    runs-on: [self-hosted, Windows, myLabel]
    needs: [EnvSetup]
    env:
      MyProject: ${{ needs.EnvSetup.outputs.var_Project }}_ABC
    steps:
      - name: Print environment variables
        run: |
          echo "Project: ${{ needs.EnvSetup.outputs.var_Project }}" ^
          echo "MyProject: ${{ env.MyProject }}" ^
          echo "Val1: ${{ needs.EnvSetup.outputs.var_Val1 }}" ^
          echo "Val2: ${{ needs.EnvSetup.outputs.var_Val2 }}"
The output:
echo "Project: Larry"
echo "MyProject: Larry_ABC"
echo "Val1: "
echo "Val2: "
From everything I've seen, the way to reference the values hasn't changed, just the set.
Has anyone else tried it using CMD? I'll go to PowerShell if I have to, but that's not a small change if I can avoid it.
The official docs have since been updated, but you need to switch to "PowerShell" at the top of the page to see all the examples in PowerShell syntax:

If you're looking for the Windows Shell Syntax to issue GitHub Actions commands, I've written a blog to cover that syntax.
Windows runs the script task using PowerShell Core by default, not bash. So, you need to use PowerShell syntax, or set the shell: bash property on the script action.
- name: Val2
  id: set-Val2
  shell: bash
  run: echo "Val2=Moe" >> $GITHUB_OUTPUT
  
When using these commands with PowerShell, make sure you redirect to $env:GITHUB_OUTPUT:
- name: Val2
  id: set-Val2
  run: echo "Val2=Moe" >> $env:GITHUB_OUTPUT
  shell: pwsh
Note: You can omit
echoif you do not want to see the output being printed. Ex:run: "Val2=Moe" >> $env:GITHUB_OUTPUTworks too.
I also explicitly added shell: pwsh above, as the "old PowerShell" needs to be told to write UTF-8:
- shell: powershell
  run: |
    "mypath" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
When using shell: cmd you'd need to use %GITHUB_OUTPUT%, and change the codepage to Unicode:
@chcp 65001>nul
echo Val2=Moe >> %GITHUB_OUTPUT%

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With