GitHub Action
Lint Action
- Shows linting errors on GitHub commits and PRs
- Allows auto-fixing issues
- Supports many linters and formatters
Note: The behavior of actions like this one is currently limited in the context of forks. See Limitations.
- CSS:
- Go:
- JavaScript:
- PHP:
- Python:
- Ruby:
- Swift:
- swift-format (official)
- SwiftFormat (by Nick Lockwood)
- SwiftLint
Create a new GitHub Actions workflow in your project, e.g. at .github/workflows/lint.yml
. The content of the file should be in the following format:
name: Lint
on: push
jobs:
run-linters:
name: Run linters
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v2
# Install your linters here
- name: Run linters
uses: wearerequired/lint-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# Enable your linters here
All linters are disabled by default. To enable a linter, simply set the option with its name to true
, e.g. eslint: true
.
The action doesn't install the linters for you; you are responsible for installing them in your CI environment.
name: Lint
on: push
jobs:
run-linters:
name: Run linters
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: 12
# ESLint and Prettier must be in `package.json`
- name: Install Node.js dependencies
run: npm install
- name: Run linters
uses: wearerequired/lint-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# Enable linters
eslint: true
prettier: true
name: Lint
on: push
jobs:
run-linters:
name: Run linters
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v2
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: "7.4"
coverage: none
tools: phpcs
- name: Run linters
uses: wearerequired/lint-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# Enable linters
php_codesniffer: true
# Optional: Ignore warnings
php_codesniffer_args: "-n"
If you prefer to use Composer you can also use this:
name: Lint
on: push
jobs:
run-linters:
name: Run linters
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v2
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: "7.4"
coverage: none
tools: composer
- name: Install PHP dependencies
run: |
composer install --prefer-dist --no-suggest --no-progress --no-ansi --no-interaction
echo "${PWD}/vendor/bin" >> $GITHUB_PATH
- name: Run linters
uses: wearerequired/lint-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# Enable linters
php_codesniffer: true
name: Lint
on: push
jobs:
run-linters:
name: Run linters
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: 3.8
- name: Install Python dependencies
run: pip install black flake8
- name: Run linters
uses: wearerequired/lint-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# Enable linters
black: true
flake8: true
[linter]
can be one of black
, eslint
, flake8
, gofmt
, golint
, mypy
, php_codesniffer
, prettier
, rubocop
, stylelint
, swift_format_official
, swift_format_lockwood
, swiftlint
and xo
:
[linter]
: Enables the linter in your repository. Default:false
[linter]_args
: Additional arguments to pass to the linter. Example:eslint_args: "--max-warnings 0"
if ESLint checks should fail even if there are no errors and only warnings. Default:""
[linter]_dir
: Directory where the linting command should be run. Example:eslint_dir: server/
if ESLint is installed in theserver
subdirectory. Default: Repository root[linter]_extensions
: Extensions of files to check with the linter. Example:eslint_extensions: js,ts
to lint JavaScript and TypeScript files with ESLint. Default: Varies by linter, seeaction.yml
[linter]_command_prefix
: Command prefix to be run before the linter command. Default:""
.
-
github_token
: TheGITHUB_TOKEN
to authenticate on behalf of GitHub Actions. -
continue_on_error
: Whether the workflow run should also fail when linter failures are detected. Default:true
-
auto_fix
: Whether linters should try to fix code style issues automatically. If some issues can be fixed, the action will commit and push the changes to the corresponding branch. Default:false
-
git_name
: Username for auto-fix commits. Default:"Lint Action"
-
git_email
: Email address for auto-fix commits. Default:"lint-action@samuelmeuli.com"
-
commit_message
: Template for auto-fix commit messages. The${linter}
variable can be used to insert the name of the linter. Default:"Fix code style issues with ${linter}"
-
check_name
: Template for the name of the check run. Use this to ensure unique names when the action is used more than once in a workflow. The${linter}
and${dir}
variables can be used to insert the name and directory of the linter. Default:"${linter}"
Some options are not be available for specific linters:
Linter | auto-fixing | extensions |
---|---|---|
black | ✅ | ✅ |
eslint | ✅ | ✅ |
flake8 | ❌ | ✅ |
gofmt | ✅ | ❌ (go) |
golint | ❌ | ❌ (go) |
mypy | ✅ | ✅ |
php_codesniffer | ❌ | ✅ |
prettier | ✅ | ✅ |
rubocop | ✅ | ❌ (rb) |
stylelint | ✅ | ✅ |
swift_format_official | ✅ | ✅ |
swift_format_lockwood | ✅ | ❌ (swift) |
swiftlint | ✅ | ❌ (swift) |
xo | ✅ | ✅ |
There are currently some limitations as to how this action (or any other action) can be used in the context of pull_request
events from forks:
- The action doesn't have permission to push auto-fix changes to the fork. This is because the
pull_request
event runs on the upstream repo, where thegithub_token
is lacking permissions for the fork. Source - The action doesn't have permission to create annotations for commits on forks and can therefore not display linting errors. Source 1, source 2
For details and comments, please refer to #13.