✨ GitHub Action for detecting and fixing lint errors
Note: The behavior of actions like this one is currently limited in the context of forks. See Limitations.
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: Linton: push
jobs: run-linters: name: Run linters runs-on: ubuntu-latest
steps: - name: Check out Git repository uses: actions/[email protected] # Install your linters here - name: Run linters uses: wearerequired/[email protected] 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: Linton: push
jobs: run-linters: name: Run linters runs-on: ubuntu-latest
steps: - name: Check out Git repository uses: actions/[email protected] - name: Set up Node.js uses: actions/[email protected] 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/[email protected] with: github_token: ${{ secrets.GITHUB_TOKEN }} # Enable linters eslint: true prettier: true
Important: Make sure to exclude the
.githubdirectory in your ESLint and Prettier configs as the default
GITHUB_TOKENcannot be used to update workflow files due to the missing
workflowpermission. See Limitations.
name: Linton: push
jobs: run-linters: name: Run linters runs-on: ubuntu-latest
steps: - name: Check out Git repository uses: actions/[email protected] - name: Set up PHP uses: shivammathur/[email protected] with: php-version: "7.4" coverage: none tools: phpcs - name: Run linters uses: wearerequired/[email protected] 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: Linton: push
jobs: run-linters: name: Run linters runs-on: ubuntu-latest
steps: - name: Check out Git repository uses: actions/[email protected] - name: Set up PHP uses: shivammathur/[email protected] 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/[email protected] with: github_token: ${{ secrets.GITHUB_TOKEN }} # Enable linters php_codesniffer: true
name: Linton: push
jobs: run-linters: name: Run linters runs-on: ubuntu-latest
steps: - name: Check out Git repository uses: actions/[email protected] - name: Set up Python uses: actions/[email protected] with: python-version: 3.8 - name: Install Python dependencies run: pip install black flake8 - name: Run linters uses: wearerequired/[email protected] 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,
swiftlintand
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 the
serversubdirectory. Default: Repository root
[linter]_extensions: Extensions of files to check with the linter. Example:
eslint_extensions: js,tsto lint JavaScript and TypeScript files with ESLint. Default: Varies by linter, see
action.yml
[linter]_command_prefix: Command prefix to be run before the linter command. Default:
"".
github_token: The
GITHUB_TOKENto 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:
"[email protected]"
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 | ✅ | ✅ | | phpcodesniffer | ❌ | ✅ | | prettier | ✅ | ✅ | | rubocop | ✅ | ❌ (rb) | | stylelint | ✅ | ✅ | | swiftformatofficial | ✅ | ✅ | | swiftformat_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_requestevents from forks:
pull_requestevent runs on the upstream repo, where the
github_tokenis lacking permissions for the fork. Source
For details and comments, please refer to #13.
If
auto_fixis enabled and the default
GITHUB_TOKENis used, none of the linters should be allowed to change files in
.github/workflowsas the token doesn't have the necessary
workflowpermission. This can be achieved by adding the directory to the ignore config of the used linter. Source
For details and comments, please refer to #65 and #74.