Search code examples
github-actions

Github Action: Next job was skipped even though the previous one was successful


  generate_build_number:
    needs: [ aws, azure, gcp ]
    name: Generate Build Number
    runs-on: ubuntu-latest
    if: ${{ always() && contains(join(needs.*.result, ','), 'success') }}
    outputs:
      build_number: ${{ steps.buildnumber.outputs.build_number }}
    steps:
    - name: Generate build number
      id: buildnumber
      uses: einaregilsson/build-number@v3 
      with:
        token: ${{secrets.github_token}}

  zip_files:
    needs: generate_build_number
    name: Generate Zip File
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: echo ${{needs.generate_build_number.outputs.build_number}} > world.txt
      - uses: montudor/action-zip@v1
        with:
          args: zip -qq -r terraform-latest.zip aws azure gcp world.txt
      - uses: actions/upload-artifact@v1
        with:
          name: terraform-latest
          path: ${{ github.workspace }}/terraform-latest.zip

I want to run zip_files only after generate_build_number is completed successfully. How using the above code, even though generate_build_number finished, zip_files was skipped.

For more details on the workflow


Solution

  • By default, when "needs" is set, Github actions will interpret the condition if: success(). So if there are any failures in steps, GH will treat the job as not successful.

    Either you can add continue-on-error: true for each step in generate_build_number job

    or

    add a condition like below

     generate_build_number:
        needs: [ aws, azure, gcp ]
        name: Generate Build Number
        runs-on: ubuntu-latest
        if: ${{ always() && contains(join(needs.*.result, ','), 'success') }}
        outputs:
          build_number: ${{ steps.buildnumber.outputs.build_number }}
        steps:
        - name: Generate build number
          id: buildnumber
          uses: einaregilsson/build-number@v3 
          with:
            token: ${{secrets.github_token}}
    
      zip_files:
        needs: generate_build_number
        if: always()
        name: Generate Zip File
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - run: echo ${{needs.generate_build_number.outputs.build_number}} > world.txt
          - uses: montudor/action-zip@v1
            with:
              args: zip -qq -r terraform-latest.zip aws azure gcp world.txt
          - uses: actions/upload-artifact@v1
            with:
              name: terraform-latest
              path: ${{ github.workspace }}/terraform-latest.zip