# eslint-plugin-github-action

> Rules for consistent, readable, and valid GitHub Actions workflow files.

Latest version **0.4.0** (published 2026-08-31) · MIT license · 0 weekly downloads

## Install

```sh
npm install eslint-plugin-github-action
pnpm add eslint-plugin-github-action
yarn add eslint-plugin-github-action
bun add eslint-plugin-github-action
```

## Health

**Score 75/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads; pre 1.0.

## Facts

| | |
|---|---|
| Version | 0.4.0 |
| Published | 2026-08-31 |
| First published | 2024-11-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | ^22.13.0 \|\| >=24 |
| Dependencies | 3 |
| Unpacked size | 53.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 7 |
| Author | ntnyq |
| Maintainers | ntnyq |
| Keywords | eslint, eslint-plugin, github-action |

## Links

- npm: https://www.npmjs.com/package/eslint-plugin-github-action
- Repository: https://github.com/ntnyq/eslint-plugin-github-action
- Homepage: https://github.com/ntnyq/eslint-plugin-github-action#readme
- Issues: https://github.com/ntnyq/eslint-plugin-github-action/issues
- npm.io page: https://npm.io/package/eslint-plugin-github-action

## Dependencies (3)

- [uncase](https://npm.io/package/uncase.md) ^0.3.0
- [@ntnyq/utils](https://npm.io/package/@ntnyq/utils.md) ^0.22.0
- [yaml-eslint-parser](https://npm.io/package/yaml-eslint-parser.md) ^2.1.0

## Alternatives

- [eslint-plugin-sonarjs](https://npm.io/package/eslint-plugin-sonarjs.md) — 2.9M weekly downloads
- [eslint-config-expo](https://npm.io/package/eslint-config-expo.md) — 1.5M weekly downloads
- [@matter/protocol](https://npm.io/package/@matter/protocol.md) — 63.5K weekly downloads
- [@eventcatalog/linter](https://npm.io/package/@eventcatalog/linter.md) — 24.8K weekly downloads
- [@inrupt/eslint-config-base](https://npm.io/package/@inrupt/eslint-config-base.md) — 4.5K weekly downloads

## Recent versions

- 0.4.0 (latest) — 2026-08-31
- 0.3.0 — 2026-06-15
- 0.2.0 — 2026-02-28
- 0.1.0 — 2025-12-26
- 0.0.16 — 2025-05-06
- 0.0.15 — 2025-03-11
- 0.0.14 — 2025-02-10
- 0.0.13 — 2025-01-14
- 0.0.12 — 2024-12-07
- 0.0.11 — 2024-12-06
- 0.0.10 — 2024-12-04
- 0.0.9 — 2024-12-03
- 0.0.8 — 2024-12-02
- 0.0.7 — 2024-12-01
- 0.0.6 — 2024-11-28
- … 6 more at https://npm.io/package/eslint-plugin-github-action/versions

## README

# eslint-plugin-github-action

[![CI](https://github.com/ntnyq/eslint-plugin-github-action/workflows/CI/badge.svg)](https://github.com/ntnyq/eslint-plugin-github-action/actions)
[![NPM VERSION](https://img.shields.io/npm/v/eslint-plugin-github-action.svg)](https://www.npmjs.com/package/eslint-plugin-github-action)
[![NPM DOWNLOADS](https://img.shields.io/npm/dy/eslint-plugin-github-action.svg)](https://www.npmjs.com/package/eslint-plugin-github-action)
[![CODECOV](https://codecov.io/github/ntnyq/eslint-plugin-github-action/branch/main/graph/badge.svg)](https://codecov.io/github/ntnyq/eslint-plugin-github-action)
[![LICENSE](https://img.shields.io/github/license/ntnyq/eslint-plugin-github-action.svg)](https://github.com/ntnyq/eslint-plugin-github-action/blob/main/LICENSE)

> Rules for consistent, readable, and valid GitHub Actions workflow files.

## Requirements

- Node.js ^22.13.0 || >=24

## Install

```shell
npm install eslint-plugin-github-action -D
```

```shell
yarn add eslint-plugin-github-action -D
```

```shell
pnpm add eslint-plugin-github-action -D
```

## Usage

Configure in ESLint config files:

```ts
import { defineConfig } from 'eslint/config'
import pluginGitHubAction from 'eslint-plugin-github-action'

export default defineConfig([
  ...pluginGitHubAction.configs.recommended,
  // Other configs...
])
```

The recommended config targets `.github/workflows/*.yml` and `.yaml` files.

:apple: For advanced usage, please check [Advanced Usage](https://eslint-plugin-github-action.ntnyq.com/guide/#advanced-usage)

## Rules

💼 Configurations enabled in.\
✅ Set in the `recommended` preset.\
🔧 Automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/user-guide/command-line-interface#--fix).\
💡 Manually fixable by [editor suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).

| Name                                                                                                            | Description                                            | 💼  | 🔧  | 💡  |
| :-------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------- | :-: | :-: | :-: |
| [action-name-casing](https://eslint-plugin-github-action.ntnyq.com/rules/action-name-casing.html)               | Enforce naming convention for workflow name.           |     | 🔧  |     |
| [job-id-casing](https://eslint-plugin-github-action.ntnyq.com/rules/job-id-casing.html)                         | Enforce naming convention for job IDs.                 |     |     |     |
| [max-jobs-per-action](https://eslint-plugin-github-action.ntnyq.com/rules/max-jobs-per-action.html)             | Enforce maximum jobs per workflow file.                |     |     |     |
| [no-external-job](https://eslint-plugin-github-action.ntnyq.com/rules/no-external-job.html)                     | Disallow using external jobs.                          |     |     |     |
| [no-invalid-key](https://eslint-plugin-github-action.ntnyq.com/rules/no-invalid-key.html)                       | Disallow using invalid key.                            | ✅  |     |     |
| [no-top-level-env](https://eslint-plugin-github-action.ntnyq.com/rules/no-top-level-env.html)                   | Disallow using top-level env.                          |     |     |     |
| [no-top-level-permissions](https://eslint-plugin-github-action.ntnyq.com/rules/no-top-level-permissions.html)   | Disallow using top-level permissions.                  |     |     |     |
| [no-unpinned-uses](https://eslint-plugin-github-action.ntnyq.com/rules/no-unpinned-uses.html)                   | Disallow unpinned uses references.                     |     |     |     |
| [prefer-cancel-in-progress](https://eslint-plugin-github-action.ntnyq.com/rules/prefer-cancel-in-progress.html) | Prefer setting concurrency cancel-in-progress to true. |     |     |     |
| [prefer-fail-fast](https://eslint-plugin-github-action.ntnyq.com/rules/prefer-fail-fast.html)                   | Disallow setting fail-fast to false.                   |     |     |     |
| [prefer-file-extension](https://eslint-plugin-github-action.ntnyq.com/rules/prefer-file-extension.html)         | Enforce workflow file extension.                       | ✅  |     |     |
| [prefer-step-uses-style](https://eslint-plugin-github-action.ntnyq.com/rules/prefer-step-uses-style.html)       | Enforce the style of job step `uses`.                  |     |     |     |
| [require-action-name](https://eslint-plugin-github-action.ntnyq.com/rules/require-action-name.html)             | Require a string workflow name.                        | ✅  |     |     |
| [require-action-run-name](https://eslint-plugin-github-action.ntnyq.com/rules/require-action-run-name.html)     | Require a string workflow run-name.                    |     |     |     |
| [require-concurrency-group](https://eslint-plugin-github-action.ntnyq.com/rules/require-concurrency-group.html) | Require a workflow-level concurrency group.            |     |     |     |
| [require-job-name](https://eslint-plugin-github-action.ntnyq.com/rules/require-job-name.html)                   | Require a string job name.                             |     |     |     |
| [require-job-step-name](https://eslint-plugin-github-action.ntnyq.com/rules/require-job-step-name.html)         | Require a string job step name.                        |     |     |     |
| [valid-trigger-events](https://eslint-plugin-github-action.ntnyq.com/rules/valid-trigger-events.html)           | Disallow invalid trigger events.                       | ✅  | 🔧  |     |
| [valid-timeout-minutes](https://eslint-plugin-github-action.ntnyq.com/rules/valid-timeout-minutes.html)         | Disallow invalid timeout-minutes.                      | ✅  |     |     |

## Links

- [GitHub Actions documentation](https://docs.github.com/en/actions)
- [Understanding the workflow file](https://docs.github.com/en/actions/use-cases-and-examples/creating-an-example-workflow#understanding-the-workflow-file)
- [Workflow syntax for GitHub Actions](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions)

## License

[MIT](./LICENSE) License © 2024-PRESENT [ntnyq](https://github.com/ntnyq)

---
_Source: https://npm.io/package/eslint-plugin-github-action · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
