Skip to content
check

GitHub Action

Get conclusion of last workflow

v1.0.0 Latest version

Get conclusion of last workflow

check

Get conclusion of last workflow

Query action API to find latest workflow execution and extract conclusion

Installation

Copy and paste the following snippet into your .yml file.

              

- name: Get conclusion of last workflow

uses: pinguet62/[email protected]

Learn more about this action in pinguet62/workflow-conclusion

Choose a version

Workflow Conclusion

GitHub Action to get last workflow conclusion.

Usage

on: # any
jobs:
  sample:
    runs-on: ubuntu-latest
    steps:
      - id: example
        uses: pinguet62/workflow-conclusion@main
        with:
          workflow_id: 'sample.yml'
          branch: 'main'
      - run: echo "${{steps.example.outputs.workflow_conclusion}}"

Inputs 📥

Name Required? Default Description
workflow_id true The ID of filename of workflow
branch false current branch Target branch
skip false 0 (latest) Number of workflow executions to exclude

Outputs 📤

Output Description
workflow_conclusion "success", "failure", "cancelled", or null if yet in progress

Example of real use cases

Block PR when main build failed

Add job to check last build, then status check to forbid merge...
# test.yml
on:
  push:
    branches: [ 'main' ]
  pull_request:
jobs:
  tests:
    runs-on: ubuntu-latest
    steps:
      - run: ./test.sh
  main-stable:
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    steps:
      - id: tests-main
        uses: pinguet62/workflow-conclusion@main
        with:
          workflow_id: 'test.yml'
          branch: 'main'
      - if: steps.tests-main.outputs.workflow_conclusion == 'failure'
        run: |
          echo "Fix main before next merges..."
          exit 1

Notify only when conclusion changed

Avoid multiple notifications when consecutive success or failure...
# test.yml
on:
  push:
    branches: [ 'main' ]
jobs:
  tests:
    runs-on: ubuntu-latest
    steps:
      - id: latest-execution
        run: ./test.sh

      - id: previous-execution
        uses: pinguet62/workflow-conclusion@main
        with:
          workflow_id: 'test.yml' # itself
          skip: 1 # ignore current

      # notification
      - if: always() && steps.previous-execution.outputs.workflow_conclusion == 'success' && steps.latest-execution.conclusion == 'failure'
        run: echo "Failure..."
      - if: always() && steps.previous-execution.outputs.workflow_conclusion == 'failure' && steps.latest-execution.conclusion == 'success'
        run: echo "Fixed..."

Deploy after success

Trigger new workflow after another success...
# deploy.yml
on:
  workflow_run:
    workflows: [ 'Build & Test' ]
    branches: [ 'main' ]
    types: [ 'completed' ]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - id: build_test-result
        uses: pinguet62/workflow-conclusion@main
        with:
          workflow_id: 'build_test.yml'
          branch: 'main'

      - if: steps.build_test-result.outputs.workflow_conclusion == 'success'
        run: echo "Deploy..."