Skip to content

All Rules

The GitHub Actions lexicon provides 68 rules: 13 lint rules and 55 post-synth checks.

IDSeverityCategoryDescription
GHA001warningstyleUse Typed Action Composites
GHA002warningstyleUse Condition Builders
GHA003errorsecurityNo Hardcoded Secrets
GHA004infostyleUse Matrix Builder
GHA005infostyleExtract Inline Structs
GHA007warningstyleFile Job Limit
GHA008infostyleNo Raw Expressions
GHA010warningcorrectnessMissing Recommended Inputs
GHA012warningcorrectnessDeprecated Action Version
GHA014warningcorrectnessJob Timeout
GHA015warningperformanceSuggest Cache
GHA016warningcorrectnessValidate Concurrency
GHA020errorsecurityDetect Secrets

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

IDDescription
GHA006Multiple workflows share the same name
GHA009Matrix dimension has empty values array
GHA011Job needs: references non-existent job
GHA013Missing job-level permissions for sensitive triggers
GHA017Workflow without explicit permissions block
GHA018pull_request_target with checkout action is a security risk
GHA019Circular needs: chain — cycle in job dependency graph
GHA021actions/checkout used without pinned SHA
GHA022Job without timeout-minutes
GHA023Deprecated ::set-output command usage
GHA024Missing concurrency block for deploy workflow
GHA025Using pull_request_target without restrictions
GHA026Secret passed to action without environment protection
GHA027Missing if: always() on cleanup steps
GHA028Workflow with no on triggers
GHA029Action or reusable workflow not pinned to a commit SHA
GHA030Container image not pinned to an immutable digest
GHA031Action reference resembles a well-known action (possible impersonation)
GHA032Action is archived/abandoned or has a disclosed security issue
GHA033Blanket write-all token permissions
GHA034Write permissions granted workflow-wide instead of per-job
GHA035Elevated token scope on a trigger that can run untrusted code
GHA036Untrusted input interpolated into a run: shell command
GHA037Untrusted input written to GITHUB_ENV / GITHUB_PATH
GHA038workflow_run trigger with checkout runs untrusted code in a privileged context
GHA039Authorization gate on a spoofable commit-author identity field
GHA040Self-hosted runner on a trigger that can run untrusted code
GHA041Blanket secrets: inherit into a reusable workflow
GHA042Entire secrets context passed where specific secrets would do
GHA043Secret consumed in a job without an environment gate
GHA044Hardcoded registry/container credential
GHA045Secret interpolated directly into a run: shell command
GHA046Logically unsound (constant) guard condition
GHA047Ineffective contains() guard with reversed arguments
GHA048Obfuscated guard condition (operand built by indirection)
GHA049Persisted checkout credentials reachable by an uploaded artifact
GHA050Cache populated in a privileged context (poisoning risk)
GHA051Publish/release step using a long-lived token instead of OIDC
GHA052Software fetched and piped to a shell without verification
GHA053Re-enables unsafe set-env / add-path workflow commands
GHA054Use of a feature with a known security footgun
GHA055Runtime install of a tool already present on the runner
GHA056Workflow without a name
GHA057Dependency update allows executing untrusted external code
GHA058Dependency update has no cooldown window
GHA059SHA-pinned action reference has a missing or internally-inconsistent version annotation
GHA060Generated GitHub App token granted broader scope than its consuming steps evidence
GHA061Action reference outside the configured usage policy (opt-in)
GHA062Pinned action reference matches a known-vulnerability advisory (feed-driven)
GHA063Dependency setup action without caching enabled
GHA064Job hardcoded onto an expensive runner with no sign it needs that OS
GHA065Matrix combines dimensions into an uncapped, large fan-out
GHA066Uploaded artifact has no explicit retention-days
GHA067Unconditional docker build with no path filter or guard
GHA068Pull-request workflow missing a concurrency group