baitendbidz
baitendbidz

Reputation: 893

Is it possible to access step outputs from another Github actions job?

Given the following sample workflow

name: My workflow

on:
  push:
    branches:
      - 'main'

jobs:
  job_1:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Get next version
        id: get_next_version
        uses: thenativeweb/[email protected]

      - name: Echo for new version
        if: ${{ steps.get_next_version.outputs.hasNextVersion == 'true' }}
        run: echo there is a new version

      - name: Echo for no new version
        if: ${{ steps.get_next_version.outputs.hasNextVersion != 'true' }}
        run: echo there is no new version

  job_2:
    needs: job_1
    if: needs.job_1.steps.get_next_version.outputs.hasNextVersion == 'true'
    runs-on: ubuntu-latest

    steps:
      - name: First step
        run: echo job_2 is running

The action get-next-version analyzes my commit and calculates a new version. As you can see in job_1 I can access the calculated result.

job_2 depends on job_1 and should only run if there would be a new version. I tried to access the result in the if statement of job_2 but it seems that didn't work, I might be using the wrong syntax.

enter image description here

I get the echo

there is a new version

but job_2 was skipped. Is there a way to get access to the data of get_next_version.outputs ( I want the fields hasNextVersion and version )?

Upvotes: 1

Views: 2164

Answers (1)

Grzegorz Krukowski
Grzegorz Krukowski

Reputation: 19802

Yes - it's possible. Each job can define its output as an output of one of its steps.

The related documentation can be found here

name: My workflow

on:
  push:
    branches:
      - 'main'

jobs:
  job_1:
    runs-on: ubuntu-latest
    # define output for first job forwarding output of hasNextVersionOutput job
    outputs:
        hasNextVersion: ${{ steps.hasNextVersionOutput.outputs.hasNextVersion }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Get next version
        id: get_next_version
        uses: thenativeweb/[email protected]

      # add a step to generate the output that will be read by the job
      - name: Generate output
        run: echo "hasNextVersion=${{ 
 steps.get_next_version.outputs.hasNextVersion }}" >> $GITHUB_OUTPUT

      - name: Echo for new version
        if: ${{ steps.get_next_version.outputs.hasNextVersion == 'true' }}
        run: echo there is a new version

      - name: Echo for no new version
        if: ${{ steps.get_next_version.outputs.hasNextVersion != 'true' }}
        run: echo there is no new version

  job_2:
    needs: job_1
    # read output directly from job (you cannot access its steps
    if: needs.job_1.outputs.hasNextVersion == 'true'
    runs-on: ubuntu-latest

    steps:
      - name: First step
        run: echo job_2 is running

Upvotes: 2

Related Questions