ACTIONLINT(1)
π actionlint(1) β the manual page, but make it a group chat
okay so bestie, welcome to the actionlint manual (yes that's the ACTIONLINT(1) you saw, that's just the manual-page flex, we don't gotta copy it) π this is the General Commands Manual page for her, and she's about to become your new favorite. Sit down, grab a strawberry π, let's go.
β¨ NAME β¨
actionlint β a static checker for GitHub Actions workflow files. she reads your YAML so your CI doesn't have to find out the hard way π
β¨ SYNOPSIS β¨
actionlint [flags]
actionlint [flags] file...
actionlint [flags] -
three moods. no files, some files, or the lil - icon that means "read my stdin" π«Ά
π¦ DESCRIPTION π¦
actionlint is a linter for GitHub Actions workflow files. she's the friend who reads your text messages back to you and goes "babe, this doesn't say what you think it says" π
Features (the whole menu, no cap):
- Syntax check for workflow files β catches unexpected or missing keys following workflow syntax. iykyk.
- Strong type check for
${{ }}expressions β catches several semantic errors like access to not existing property, type mismatches, ... π₯ - Actions usage check β makes sure inputs at
with:and outputs insteps.{id}.outputsare actually correct. shellcheckandpyflakesintegrations β for scripts atrun:π§- Security checks β script injection by untrusted inputs, hard-coded credentials π
- Other several useful checks β glob syntax validation, dependencies check for
needs:, runner label validation, cron syntax validation, ...
it's giving "she does it all" π
πΈ USAGE πΈ
To check all workflow files in the current repository, just run actionlint without arguments. It automatically finds the nearest .github/workflows directory:
$ actionlint
To check specific workflow files, pass the file paths as arguments:
$ actionlint file1.yaml file2.yaml
To check a content which is not saved in file yet (e.g. output from some command), pass - argument. It reads stdin and checks it as workflow file:
$ actionlint -
To serialize errors into JSON, use -format option. It allows you to format error messages flexibly with Go template syntax:
$ actionlint -format '{{json .}}'
look at her go β¨
π FLAGS π
-colorβ Always enable colorful output. This is useful to force colorful outputs (yes she's serving color by default, this is for forcing it π )-config-file PATHβ File path to config file-debugβ Enable debug output (for development)-format FORMATβ Custom template to format error messages in Go template syntax. See the usage documentation for more details.-ignore PATTERNβ Regular expression matching to error messages you want to ignore. This flag is repeatable. For example,-ignore A -ignore Bignores errors whose message includes "A" OR "B".-init-configβ Generate default config file at.github/actionlint.yamlin current project-no-colorβ Disable colorful output (for when you're feeling monochrome π€)-onelineβ Use one line per one error. Useful for reading error messages from programs-pyflakes EXECUTABLEβ Command name or file path of "pyflakes" external command. If empty, pyflakes integration will be disabled (default"pyflakes")-shellcheck EXECUTABLEβ Command name or file path of "shellcheck" external command. If empty, shellcheck integration will be disabled (default"shellcheck")-verboseβ Enable verbose output-stdin-filename NAMEβ File name when reading input from stdin (default"β yeah the manpage literally trails off there, we don't know what the full default is either π it's written exactly like that, not my fault bestie)-versionβ Show version and how this binary was installed-help,-hβ Show help
fr fr:-ignorestacks.-ignore A -ignore B= A OR B. don't forget.
π DOCUMENTS π
Documents for more details are available online. links below, all of them, no skipping π«Ά
π Checks
https://github.com/rhysd/actionlint/blob/v1.7.12/docs/checks.md
Full list of all checks done by actionlint with example inputs, outputs, and playground links.
π Installation
https://github.com/rhysd/actionlint/blob/v1.7.12/docs/install.md
Installation instructions. Prebuilt binaries, Homebrew package, building from source, a Docker image, a download script (for CI) are available.
π Usage
https://github.com/rhysd/actionlint/blob/v1.7.12/docs/usage.md
How to use actionlint command locally or on GitHub Actions, the online playground, an official Docker image, and integrations with reviewdog, Problem Matchers, super-linter, pre-commit.
π Configuration
https://github.com/rhysd/actionlint/blob/v1.7.12/docs/config.md
How to configure actionlint behavior by the configuration file actionlint.yaml.
π Go API
https://github.com/rhysd/actionlint/blob/v1.7.12/docs/api.md
How to use actionlint as Go library.
π References
https://github.com/rhysd/actionlint/blob/v1.7.12/docs/reference.md
Links to resources.
π USAGE ON GITHUB ACTIONS π
Please try the download script. seriously. please. she's begging (affectionately) π₯Ί
https://github.com/rhysd/actionlint/blob/main/scripts/download-actionlint.bash
It downloads the latest version of actionlint executable to the current directory automatically. On GitHub Actions environment, it sets a file path to executable to the executable output for using the executable in the following steps easily. yes that sentence is a little cursed, but the vibe is: it hands you the path so later steps can just use it π
Here is an example of simple workflow to run actionlint on GitHub Actions. Please ensure shell: bash since the default shell for Windows runners is pwsh. (this is the part where everyone gets got π)
name: Lint GitHub Actions workflows
on: [push, pull_request]
jobs:
actionlint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download actionlint
id: get_actionlint
run: bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
shell: bash
- name: Check workflow files
run: ${{ steps.get_actionlint.outputs.executable }} -color
shell: bash
or simply run
- name: Check workflow files
run: |
bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
./actionlint -color
shell: bash
see? iconic. low effort, high payoff β¨
π EXIT STATUS π
actionlint command exits with one of the following exit statuses. learn them, they're literally communicating with you:
0: It ran successfully and no problem was found. π slay.1: It ran successfully and some problem was found. π she found something.2: It failed due to invalid command line option. π that one's on you.3: It failed due to some fatal error. π oh no.
π§ PLAYGROUND π§
Thanks to WebAssembly, actionlint playground is available on your browser. It never sends any data to outside of the browser. (privacy queen, no cap π)
https://rhysd.github.io/actionlint/
Paste your workflow content to the code editor at left pane. It automatically shows the results at right pane. When editing the workflow content at the left pane, the results will be updated on the fly in the right pane. Clicking an error message in the results table moves a cursor to the position of the error in the code editor. it's so satisfying, go try it π¦
π BUGS π
Please visit issues page to see known bugs. If you found a new bug or have some feature request, please report by making a new issue. she wants to hear from you π«Ά
https://github.com/rhysd/actionlint/issues
π COPYRIGHT π
actionlint is licensed under the MIT License: Copyright (c) 2021 rhysd
https://github.com/rhysd/actionlint/blob/main/LICENSE.txt
okay that's the whole page bestie, go lint something and make it immaculate π β¨
with love, this was actionlint, version v1.7.12 (that's the version woven through all the doc links up there), dated October 2026 β mwah, take care of her πΈππ¦π
π¦ where this page comes from
- alpine 3.24: actionlint-doc 1.7.12-r3 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms