Skip to content
Latchkey

GitHub Actions "No event triggers defined in 'on'" in CI

A workflow must list at least one event under on. When on is empty, null, or its events failed to parse, the validator reports no triggers are defined.

What this error means

The run fails with "Invalid workflow file" and "No event triggers defined in 'on'". The workflow never starts on push or pull_request.

GitHub Actions
Invalid workflow file: .github/workflows/ci.yml
(Line: 3, Col: 1): No event triggers defined in 'on'

Diagnose it: print the context before you change anything

Most workflow-expression bugs are not syntax errors, they are an expression reading something that is empty. GitHub resolves a missing property to an empty string instead of failing the run, so a wrong reference looks like a logic bug rather than a mistake. Dump the contexts first and you will usually see the answer immediately.

.github/workflows/ci.yml
- name: Dump contexts
  run: |
    echo '--- github ---'   ; echo '${{ toJSON(github) }}'
    echo '--- needs ---'    ; echo '${{ toJSON(needs) }}'
    echo '--- steps ---'    ; echo '${{ toJSON(steps) }}'
    echo '--- matrix ---'   ; echo '${{ toJSON(matrix) }}'
    echo '--- inputs ---'   ; echo '${{ toJSON(inputs) }}'

Check the context is allowed where you used it

Contexts are not available everywhere. The same expression can be valid in a step if and invalid in a job if, which is why an expression that works in one workflow fails when moved.

Where you wrote itContexts available there
run-namegithub, inputs, vars
concurrencygithub, inputs, vars
Top-level envgithub, secrets, inputs, vars
jobs.<id>.ifgithub, needs, vars, inputs
jobs.<id>.steps.ifgithub, needs, strategy, matrix, job, runner, env, vars, steps, inputs
jobs.<id>.outputsFull access, including secrets
Reusable workflow outputsgithub, jobs, vars, inputs

Common causes

The on key is empty or null

Writing on: with nothing after it leaves the trigger list empty.

on was quoted away by YAML

Unquoted on: can be read as the boolean true in some YAML loaders, so the events go missing. Quoting "on": avoids this.

How to fix it

List concrete events under on

  1. Add at least one event such as push or pull_request.
  2. Quote the key as "on": if your tooling coerces it to a boolean.
  3. Re-run by pushing or opening a PR.
.github/workflows/ci.yml
"on":
  push:
    branches: [main]
  pull_request:

Use the list form for simple triggers

For multiple events without filters, a flow sequence is concise and unambiguous.

.github/workflows/ci.yml
on: [push, pull_request]

Catch it before it reaches CI

Every failure in this cluster is statically detectable. actionlint parses workflow expressions, checks context availability against the same rules above, and validates needs references, so these bugs never need to cost you a run.

Terminal
# one-off
docker run --rm -v "$(pwd):/repo" --workdir /repo rhysd/actionlint:latest -color

# as a job, before anything expensive runs
- uses: actions/checkout@v4
- run: |
    bash <(curl -s https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
    ./actionlint -color

How to prevent it

  • Always define at least one event under on.
  • Quote "on" when YAML boolean coercion is a risk.
  • Validate the workflow before pushing.

Frequently asked questions

What causes GitHub Actions "No event triggers defined in 'on'" in CI?
There are 2 common causes: the on key is empty or null and on was quoted away by yaml. Writing on: with nothing after it leaves the trigger list empty.
How do I fix GitHub Actions "No event triggers defined in 'on'" in CI?
There are 2 fixes depending on which cause you have: list concrete events under on and use the list form for simple triggers. Work through them in order, since the first is the most common.
What does GitHub Actions "No event triggers defined in 'on'" in CI actually mean?
The run fails with "Invalid workflow file" and "No event triggers defined in 'on'".
How do I stop GitHub Actions "No event triggers defined in 'on'" in CI happening again?
Always define at least one event under on. The prevention section lists 3 changes that keep it from recurring.

Related guides

References

Not every red build is your code. Latchkey repairs the ones that are not, on the runner. Start free → 30-day trial · No credit card