Skip to content

All Rules

The GitLab CI/CD lexicon provides 45 rules: 4 lint rules and 41 post-synth checks.

IDSeverityCategoryDescription
WGL001warningstyleDeprecated only/except keywords
WGL002errorcorrectnessMissing script
WGL003infostyleMissing stage
WGL004warningperformanceArtifacts without expiry

Post-synth checks validate the serialized output after the build pipeline completes.

IDDescription
WGL010Job references a stage not in the stages list
WGL011Job has rules that always evaluate to never (unreachable)
WGL012Deprecated property usage — flags properties marked as deprecated in the GitLab CI schema
WGL013Invalid needs: target — dangling reference or self-reference
WGL014Invalid extends: target — references a template not in the pipeline
WGL015Circular needs: chain — cycle in job dependency graph
WGL016Secrets in variables — hardcoded passwords or tokens in variables blocks
WGL017Insecure registry — Docker push/pull to non-HTTPS registry
WGL018Missing timeout — jobs without explicit timeout may run too long
WGL019Missing retry — deploy jobs without retry strategy
WGL020Duplicate job names — multiple jobs resolving to same name
WGL021Unused variables — global variables not referenced by any job
WGL022Missing artifacts expiry — artifacts without expire_in cause disk bloat
WGL023Overly broad rules — job with only when: always rule (no conditions)
WGL024Manual without allow_failure — manual jobs block pipeline without allow_failure: true
WGL025Missing cache key — cache without key causes collisions
WGL026Privileged services without TLS — DinD services without DOCKER_TLS_CERTDIR
WGL027Empty script — jobs with empty or blank script entries
WGL028Redundant needs — needs listing jobs already implied by stage ordering
WGL029include:project / component resolved by a moving ref instead of a pinned tag or SHA
WGL030include:remote is insecure (HTTP) or mutable
WGL031Container image not pinned to an immutable digest
WGL032Include/component source resembles a well-known project (possible impersonation)
WGL033OIDC id_token without a scoped audience
WGL034OIDC id_token mintable from a merge-request pipeline
WGL035Untrusted CI variable interpolated into a script command
WGL036Privileged service / DinD reachable from merge-request pipelines
WGL037Security gate on a regex match of an untrusted ref variable
WGL038Secret-like variable reachable from a merge-request pipeline
WGL039Secret-like variable printed to job logs
WGL040Hardcoded credential in a registry login command
WGL041Logically unsound (tautological) rules:if condition
WGL042Unreachable rules after an unconditional match
WGL043Match-anything regex gate in rules:if
WGL044Public artifacts expose build output
WGL045Artifact path that may capture a credential file
WGL046Cache populated in a merge-request pipeline (poisoning risk)
WGL047Software fetched and piped to a shell without verification
WGL048Pipeline defines workflow: but no workflow:name
WGL049Job installs dependencies with no cache: in scope
WGL050Merge-request-reachable job is not interruptible