Search code examples
github-actions

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 )?


Solution

  • 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