Custom action to create a pull request that autocorrects offenses in .rubocop_todo.yml per cop.
Add the following workflow file to manually run the action:
# .github/workflows/rubocop-todo-corrector.yml
name: rubocop-todo-corrector
on:
workflow_dispatch:
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: r7kamura/rubocop-todo-corrector@v0
Now you can run it via actions page:
or if you want to do it from CLI, use GitHub CLI like this:
gh workflow run rubocop-todo-corrector
After the action is complete, a pull request is created as follows:
By adding on.pull_request
event to the workflow, you can automatically run it when all other labeled pull requests are merged or closed.
name: rubocop-todo-corrector
on:
+ pull_request:
+ types:
+ - closed
workflow_dispatch:
inputs:
cop_name:
description: Pass cop name if you want to pick a specific cop.
required: false
type: string
ignore:
description: Check this with cop_name if you want to ignore a specific cop.
required: false
type: boolean
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: r7kamura/rubocop-todo-corrector@v0
with:
ignore: ${{ inputs.ignore }}
+ label: rubocop-todo-corrector
Note that the label
input is required to use this feature.
Don't forget to create the label on your repository before you run the action.
If you pass ignore
as "true"
, the action will create a pull request that ignores the specified cop by appending specified cop_name
to .rubocop_todo_corrector_ignore
.
Note: You can ignore specific cops by adding a file named .rubocop_todo_corrector_ignore
to your repository. See the following page for more details:
- Pass
"true"
if you want it to rungh pr merge --auto --merge
after creating a pull request. - optional
- Pass cop name if you want to pick a specific cop.
- optional
- Required if
ignore
is"true"
- Required if
- e.g.
"Style/NegatedIf"
- Additional options for
gh pr create
command. - optional
- e.g.
"--reviewer r7kamura --draft"
- GitHub access token for GitHub API calls.
- optional
It uses the default GitHub access token, so it usually works well as is without any additional configuration. However, there is a known issue that the default access token does not have workflow
scope, so the pull request created by this action cannot run other GitHub Actions workflows. In that case, pass a custom access token with this option:
If a personal access token is used, the permission would look like this:
- repo
- workflow
If you use GitHub App to generate access tokens, the permission would look like this:
- Actions: Read/Write
- Contents: Read/Write
- Issues: Read (necessary for GitHub API permission bug)
- Members: Read (optional for reviewer assignment)
- Pull Requests: Read/Write
- Pass
"true"
if you want to create a pull request to ignore a specific cop instead. - optional
- Pull request label name.
- optional
- e.g.
"rubocop-todo-corrector"
- Note: You need to create a label with this name on your repository.
- Mode to select autocorrected cop.
- default:
"random"
- Choose from the following options:
"first"
"last"
"least_occurred"
"most_occurred"
"random"
- Pass
"false"
if you want it to include unsafe autocorrection. - optional
- Specify working directory.
- optional
- default:
"."
The below example is how we use this in our company:
on:
pull_request:
types:
- closed
workflow_dispatch:
inputs:
cop_name:
description: Pass cop name if you want to pick a specific cop.
required: false
type: string
ignore:
description: Check this with cop_name if you want to ignore a specific cop.
required: false
type: boolean
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: tibdex/github-app-token@v1
with:
app_id: ${{ secrets.OUR_GITHUB_APP_ID }}
private_key: ${{ secrets.OUR_GITHUB_APP_PRIVATE_KEY }}
id: github_app_token
- uses: r7kamura/rubocop-todo-corrector@v0
with:
cop_name: ${{ inputs.cop_name }}
gh_pr_create_options: "--reviewer our-org/rubocop-reviewers"
github_token: ${{ steps.github_app_token.outputs.token }}
ignore: ${{ inputs.ignore }}
label: rubocop-todo-corrector