Skip to content
Latchkey

How to Use set -euo pipefail in GitHub Actions Scripts

set -euo pipefail turns silent bugs into loud failures: exit on error, error on unset vars, and fail a pipeline if any stage fails.

Start each multi-line bash step (or your script file) with set -euo pipefail. -e exits on error, -u errors on unset variables, and -o pipefail propagates failures through pipes.

Steps

  • Put set -euo pipefail as the first line of the script or run block.
  • Quote variable expansions so word-splitting does not defeat -u.
  • Use ${VAR:-default} where an unset value is legitimately allowed.

Workflow

.github/workflows/ci.yml
steps:
  - run: |
      set -euo pipefail
      curl -fsSL https://example.com/data.json | jq '.version' > version.txt
      test -s version.txt

Gotchas

  • GitHub bash already sets -e and pipefail, but not -u; add it yourself to catch typos in variable names.
  • With -e, a command whose non-zero exit is expected needs || true so it does not abort the step.

Frequently asked questions

How do I use set -euo pipefail in GitHub Actions Scripts?
Start each multi-line bash step (or your script file) with set -euo pipefail. -e exits on error, -u errors on unset variables, and -o pipefail propagates failures through pipes.

Related guides

References

Run this faster and cheaper on Latchkey managed runners - self-healing included. Start free → 30-day trial · No credit card