TIL: how to disable cron for GitHub forks
Table of Contents
GitHub Actions has a useful feature to trigger workflows on a cron schedule. For example:
name: Test
on:
push:
pull_request:
schedule:
- cron: "0 6 * * *" # daily at 6am
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
But if a contributor has enabled GitHub Actions on their fork (which I recommend: test your contributions before opening a PR), it also runs the cron on their fork. This not only uses up extra CI resources on the fork:
It also sends a regular email to the contributor when the workflow fails:
Instead, we only need to run the cron for the upstream. For example, for a
https://github.com/octocat/hello-world
repo, add:
jobs:
test:
+ if: ${{ github.repository_owner == 'octocat' || github.event_name != 'schedule' }}
runs-on: ubuntu-latest
This only runs the schedule
trigger for the octocat
upstream, and all other triggers
run for both upstream and forks.
Also #
For simpler workflows that only trigger on a cron, such as stalebot or CodeQL runs, we can add a simpler condition.
For example:
name: Close stale issues
on:
schedule:
- cron: "10 0 * * *" # daily at 12:10am
jobs:
stale:
runs-on: ubuntu-latest
steps:
- name: "Check issues"
uses: actions/stale@v8
We can completely disable it for forks:
jobs:
stale:
+ if: github.repository_owner == 'octocat'
runs-on: ubuntu-latest
PS #
Use single quotes in these lines, double quotes are invalid here (Unexpected symbol
).
Thanks #
To Alex Waygood for the tip.
To the British Library and Flickr Commons for the illustration of a chronograph.