Unable to read Github Actions job's outputs from another job

Viewed 27

I have the following workflow in Github Actions, where I have a job that create some outputs and a dependant job that read those outputs, pretty similar to the example from the docs:

name: Sandbox

on:
  push:

env:
  POSTGRESQL_VERSION: "14.4.0-debian-11-r13"

jobs:
  setup:
    runs-on: ubuntu-latest
    outputs:
      prod_tag: "steps.prod_tag.outputs.prod_tag"
      postgresql_version: "steps.postgresql_version.outputs.postgresql_version"
    steps:
      - uses: actions/checkout@v3
      - id: prod_tag
        run: |
          if [[ ${{ github.ref_type }} == "tag" ]]; then
            echo "::set-output name=prod_tag::${{github.ref_name}}"
          else
            echo "::set-output name=prod_tag::latest"
          fi;
      - id: postgresql_version
        run: echo "::set-output name=postgresql_version::${POSTGRESQL_VERSION}"
      - name: Show output variables
        run: |
          echo "PROD TAG: ${{steps.prod_tag.outputs.prod_tag}}"
          echo "POSTGRESQL_VERSION: ${{steps.postgresql_version.outputs.postgresql_version}}"

  show_outputs:
    runs-on: ubuntu-latest
    needs: setup
    steps:
      - run: |
          echo "PROD TAG: ${{needs.setup.outputs.prod_tag}}"
          echo "POSTGRESQL_VERSION: ${{needs.setup.outputs.postgresql_version}}"

However, in my example, it doesn't work as expected and show_outputs shows PROD TAG: steps.prod_tag.outputs.prod_tag and POSTGRESQL_VERSION: steps.postgresql_version.outputs.postgresql_versioninstead of the values set in the setup job, that should be latest and 14.4.0-debian-11-r13. In the step Show output variables of the setup job I can see that the values are properly set, and I've tried several different approaches (setting the variables from the same step, not taking the value from the environment variable, etc) but with no success.

Any idea what can be wrong with my example?

1 Answers

You should surround the variables with ${{ and }} try with:

outputs:
  prod_tag: ${{ steps.prod_tag.outputs.prod_tag }}
  postgresql_version: ${{ steps.postgresql_version.outputs.postgresql_version }}

instead of:

outputs:
  prod_tag: "steps.prod_tag.outputs.prod_tag"
  postgresql_version: "steps.postgresql_version.outputs.postgresql_version"
Related