GitHub Actions YAML Validator

Validate GitHub Actions workflow YAML files. Check triggers, jobs, steps, version pinning, and deprecated commands.

Your data never leaves your browser Available via MCP
Examples:
Paste a GitHub Actions workflow and click Validate to check for errors.

How to Use

  1. Paste your .github/workflows/*.yml file content into the input area.
  2. Click Validate to analyze the workflow structure.
  3. Review errors (must fix), warnings (should fix), and info messages in the results panel.
  4. Use the Valid Workflow or With Errors examples to see the validator in action.

What Gets Validated

  • Required keys — Checks for the on trigger section and jobs section.
  • Trigger events — Validates that trigger events are recognized GitHub Actions events (push, pull_request, schedule, etc.).
  • Job structure — Each job must have runs-on (runner) and steps (unless it's a reusable workflow call).
  • Step requirements — Each step must have either uses (an action) or run (a command), but not both.
  • Action pinning — Warns when actions lack version tags or use unstable branch references like @main.
  • Job dependencies — Checks that needs references point to existing jobs in the same workflow.
  • Deprecated commands — Detects deprecated ::set-output, ::save-state, and similar commands.

Common GitHub Actions Mistakes

The most common mistake is missing the runs-on field for a job, which causes a confusing error in the Actions tab. Another frequent issue is using uses and run in the same step, which is not allowed. Steps must either call an action or run a shell command, not both.

Unpinned action versions are a security risk. When you write uses: actions/checkout@main, the action author can push breaking changes or malicious code at any time. Always pin to a specific version tag (@v4) or, for maximum security, a commit SHA.

Cron Schedule Validation

For scheduled workflows, the validator checks that cron expressions have exactly 5 fields (minute, hour, day-of-month, month, day-of-week). GitHub Actions uses POSIX cron syntax and runs schedules in UTC. Use the Cron Generator to build valid cron expressions.

Related Tools

Validate Docker Compose files with the Docker Compose Validator. Format YAML with the YAML Formatter. Convert between JSON and YAML with the JSON-YAML Converter. Build cron expressions with the Cron Generator.

Frequently Asked Questions

What does this validator check?
It validates GitHub Actions workflow YAML files for required top-level keys (name, on, jobs), job structure (runs-on, steps), step requirements (uses or run), action version pinning, invalid triggers, undefined job dependencies, and deprecated commands.
Does it check the full GitHub Actions schema?
It covers the most common structural requirements and catches the errors developers hit most frequently. For full schema validation, GitHub's built-in checks run when you push a workflow file.
What are the severity levels?
Errors indicate problems that will prevent the workflow from running. Warnings highlight best practice violations like unpinned action versions. Info messages provide status information like the total job count.
Why does it warn about unpinned actions?
Using actions without a version tag (e.g., actions/checkout instead of actions/checkout@v4) or with branch references (@main) makes your workflow non-reproducible and vulnerable to supply chain attacks. Always pin to a version tag or commit SHA.
What deprecated features does it detect?
The validator warns about deprecated workflow commands: set-output, save-state, set-env, and add-path. These should be replaced with their GITHUB_OUTPUT, GITHUB_STATE, GITHUB_ENV, and GITHUB_PATH environment file equivalents.
Is my workflow YAML sent to a server?
No. All parsing and validation runs entirely in your browser using JavaScript. Your workflow configuration never leaves your machine.

Use this tool from AI agents. The CodeTidy MCP Server lets Claude, Cursor, and other AI agents use this tool and 46 others directly. One command: npx @codetidy/mcp

Drop file to load