CI Workflow Validator (Multi-CI)
Paste a CI workflow and validate it against its vendored SchemaStore schema — GitHub Actions, GitLab CI, CircleCI and more.
Paste a CI workflow file and it is checked against the vendored JSON Schema for its system — pinned SchemaStore-catalog schemas, validated entirely on this device. Nothing you paste is uploaded.
Paste a workflow file to validate it.
Press ? for shortcuts
Do it offline:$ find .github/workflows -name '*.yml' -o -name '*.yaml'
How to use it
- Paste the workflow YAML into the left pane, or load the sample — a GitHub Actions file with a deliberate mistake in it.
- Leave the picker on auto-detect while the shape is unambiguous, or choose a system explicitly; the detection line always names the schema being used.
- Read the findings: each one carries the validator's message verbatim, the JSON path it applies to, and the line and column in your paste.
- Copy or download the report to share a verdict. Share links carry only the picker choice — never the file itself.
Paste a CI workflow file and this page checks it against the vendored JSON Schema for its system — GitHub Actions, GitLab CI, CircleCI or Azure Pipelines — listing every violation with its line and column. Detection reads the file's shape and refuses to guess: an ambiguous paste asks you to pick the system yourself. The schemas are pinned copies from the SchemaStore catalog, and validation happens on this device — nothing you paste is uploaded.
Examples
name: CI
on:
push:
branches: [main]
jobs:
build:
steps:
- uses: actions/checkout@v4
- run: npm test
line 6:3 · /jobs/build — must have required property 'runs-on'A GitHub Actions job with steps but no runs-on. The finding names the job's own line, so the fix is one glance away — add a runs-on: ubuntu-latest (or a uses: reference for a reusable workflow).
stages:
- build
- test
build-job:
stage: build
script:
- echo "building"
test-job:
stage: test
script:
- echo "testing"
Valid — no schema violationsA two-stage GitLab CI pipeline that passes the schema cleanly. (The test suite replays this exact file against the vendored GitLab schema to keep the verdict honest.)
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
The schema checks structure, not logic
A file can validate cleanly here and still fail in the pipeline: a secret that does not exist, an image tag that will not pull, or a GitLab job pointing at a stage that was never declared are all schema-legal. The reverse is the useful direction — a violation listed here would have failed before your pipeline even started.
Expression syntax is opaque to the schema
Strings like ${{ matrix.node }} or $CI_COMMIT_SHA pass through as plain text; no schema evaluates them. For semantic checks inside GitHub Actions expressions, actionlint goes deeper, and GitLab's own CI Lint runs your file against the live instance — both are vendor-side tools this page deliberately does not imitate.
Four systems, pinned schemas, one honest gap
The four vendored schemas are copies at pinned commits: GitHub Actions from the SchemaStore repository (Apache-2.0), GitLab CI from gitlab-org/gitlab-foss (MIT), CircleCI from its language server (Apache-2.0) and Azure Pipelines from azure-pipelines-vscode (MIT) — exact URLs and commits are in the citations below. Bitbucket Pipelines files are recognized but not validated: Atlassian publishes no redistributable schema, and this page says so instead of guessing.
Common errors
Could not identify the CI system from this file — choose one in the picker above.- A fragment such as a bare jobs: map fits more than one system, so auto-detect declines. Choosing a system in the picker validates the same paste immediately.
This looks like a Bitbucket Pipelines file. No redistributable schema ships for it here, so it cannot be validated — the supported systems are listed in the picker.- The bitbucket-pipelines shape is detected so you get a straight answer rather than a wrong one: without a redistributable schema there is nothing sound to validate against.
This file is larger than the 1 MB limit for this tool — nothing was validated; the input is untouched.- Real workflow files sit far below this cap; the refusal exists so a runaway paste cannot lock the page, and any previous verdict is only marked stale, never replaced.
FAQ
Which CI systems are supported?
Four ship with vendored schemas: GitHub Actions workflows, GitLab CI pipelines, CircleCI configs and Azure Pipelines. Auto-detect ranks the file's shape and never guesses on a tie. Bitbucket Pipelines files are recognized and honestly declined, because Atlassian serves its schema without a license that permits shipping a copy here.
Why does a file that runs fine show violations here?
Schema and platform can disagree at the edges: vendors evolve faster than published schemas, some keys are validated more strictly in a schema's oneOf branches than the platform enforces, and templating tricks can produce shapes a schema never modeled. Read a surprising finding as a pointer to double-check, with your pipeline as the final authority.
Does my YAML leave the browser?
No. The schemas are vendored copies bundled with this site at pinned commits, so validating triggers no request to any schema host — the only downloads are this page's own code and schema chunks, and no request ever carries your paste.
Keyboard shortcuts
- /
- Focus the workflow paste pane
- ⌘/Ctrl + S
- Download the validation report
- ⌘/Ctrl + C
- Copy the report when nothing is selected
- ⌘/Ctrl + Shift + C
- Copy the report
- t
- Cycle the color theme
- ? or ⌘/Ctrl + /
- Open this shortcut list
- Esc
- Close dialogs