GitHub Actions Workflow Validator

Paste a workflow from .github/workflows and find problems before CI does — invalid triggers, missing runs-on, broken needs, bad expressions, outdated actions and script-injection risks.

Runs in your browserUpdated
Report

Your data never leaves your computer. All processing happens 100% locally in your browser.

How to use the GitHub Actions Workflow Validator

  1. Paste a workflow file, open it, or load the sample.
  2. YAML errors are shown first, with line numbers.
  3. Then triggers, jobs, steps, needs, expressions, cron schedules and permissions are checked.
  4. Best-practice checks flag outdated action versions, unpinned third-party actions, missing timeouts and script-injection risks.

Common workflow mistakes this catches

  • Unknown events or keys — typos such as pull-request instead of pull_request, or run-on instead of runs-on.
  • Broken job graphs — needs pointing at a job that doesn’t exist, or jobs that depend on each other in a cycle.
  • Steps with both or neither of uses and run, and uses references without a version (@v4).
  • Expressions — unbalanced ${{ }}, unknown contexts and references to step outputs that don’t exist.
  • Invalid cron — schedules must have five fields; the tool explains when they run (in UTC).
  • Deprecated commands such as ::set-output and ::save-state, replaced by $GITHUB_OUTPUT and $GITHUB_STATE.

Security checks

Using ${{ github.event.pull_request.title }}, issue bodies or branch names directly inside run: lets anyone who opens a pull request inject shell commands. Pass them through an environment variable instead. The validator also flags pull_request_target combined with checking out PR code, missing permissions (the token then gets broad defaults) and third-party actions pinned to a mutable tag rather than a commit SHA.

Create a new workflow with the GitHub Actions generator, explain schedules with the cron expression generator and check other YAML with the YAML validator.

Tools that pair well with the GitHub Actions Workflow Validator

  • Kubernetes YAML Validator — Paste Deployments, Services, Ingresses, ConfigMaps or a whole multi-document file.
  • Git Cheat Sheet — Every Git command you use day to day — and the ones you need when something goes wrong — explained in one line.
  • .gitignore Generator — Tick your stack — Node, Python, React, Next.js, Docker, macOS, VS Code and 40 more — and get one clean, de-duplicated .gitignore with commented sections, ready to download.
  • Git Command Generator — Pick a task like “undo the last commit but keep my changes” or “rename a branch on GitHub”, fill in your branch names and get the exact Git commands — each line explained, risky steps flagged.

Frequently asked questions

Is this the same as actionlint?
It covers many of the same checks — syntax, job graph, expressions, cron, deprecated commands and injection risks — and runs in your browser with nothing to install. For CI enforcement, run actionlint in your pipeline as well.
Does it validate reusable workflows and composite actions?
Workflows with on: workflow_call and jobs that call reusable workflows (uses: at job level) are supported. action.yml files for composite actions are not checked yet.
Why pin actions to a commit SHA?
Tags like @v4 can be moved by the action’s owner — or an attacker who compromises it. A full commit SHA can’t change, so your workflow runs exactly the code you reviewed.

Related tools