There are 2 options of doing this:
- Use a second job inside the same
workflow.yml
together with the needs
keyword
- Create a separate
notify.yml
workflow that uses the workflow_run
event as a trigger
1. Same workflow, separate job with needs
keyword
In your workflow.yml
file you simply define two jobs like this (leveraging the needs: build
configuration in the second job):
name: CI build and notify
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy Docker image to Google Cloud Run
run: ...
notify:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Notify Slack and send eMail
run: ...
As the docs state, the second notify
job will only start if the first build
job succeeded:
Identifies any jobs that must complete successfully before this job
will run.
Here's a screenshot of how this approach can look like practically from my own project (I have a second publish-snapshot
job instead of your notify
job - but the concept stays the same):
There's also a way to always let the notify
job run, even if the build
job failed. You have to enhance the needs
with a if: always()
configuration then.
2. Separate workflow, using the workflow_run
event as a trigger
Using the workflow_run
event as a trigger we end up having 2 separate GitHub Actions workflow yaml files:
build.yml
name: CI build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy Docker image to Google Cloud Run
run: ...
notify.yml
name: CI notify
# Only trigger, when the build workflow succeeded
on:
workflow_run:
workflows: ["CI build"]
types:
- completed
jobs:
notify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Notify Slack and send eMail
run: ...
A crucial point here is that the name: CI build
definition of the first yaml file must exactly match the workflow_run: workflows: ["CI build"]
definition in the second yaml file. Another point is that this approach needs to be done on the default branch (which is mostly main
or master
) as the docs state:
Note: This event will only trigger a workflow run if the workflow file
is on the default branch.
Here's also a full example project using the 1st option if you're interested.