On , I learnt ...
Github actions need a shell specified to avoid silent pipeline failures
I learnt the hard way that the default shell settings for Github actions don’t catch command pipeline failures.
That is, this workflow does not fail:
---
name: Pipeline SILENT failure
jobs:
my-silently-failing-job:
runs-on: ubuntu-latest
steps:
- name: Pipeline fail
run: false | true
In my case, I was doing something like:
python main.py $args | tee output.txt
and didn’t realise that the Python command was crashing as the pipeline exit code was zero.
The solution is to specify shell: bash
which causes Github to run the command
with set -eo pipefail
and hence pipeline failures are caught.
This workflow will fail:
---
name: Pipeline NOISY failure
jobs:
my-failing-job:
runs-on: ubuntu-latest
steps:
- name: Pipeline fail
shell: bash
run: false | true