This is github action that auto assigns reviewers for PR, auto merges it based on your rules and many more
Create a workflow file in .github/workflows
(e.g. .github/workflows/auto-assign.yml
):
Required inputs:
- token (GITHUB_TOKEN)
- config (configuration path)
name: Auto Request Review
on:
pull_request:
types: [opened, ready_for_review, reopened, synchronize]
jobs:
auto-request-review:
name: Auto Request Review
runs-on: ubuntu-latest
steps:
- name: Use PR auto assign action
uses: TBD
with:
token: ${{ secrets.GITHUB_TOKEN }}
config: .github/pr-automation-rules.yml
Whole configuration file looks like
options:
ignoredLabels:
- Feature Branch
rulesByCreator:
user1:
- reviewers:
- user2
required: 1
- reviewers:
- user3
- user4
required: 1
ifChanged:
- group-2-files
- common-files
- reviewers:
- user5
- user6
- user7
required: 1
assign: 2
- reviewers:
- user0
required: 1
fileChangesGroups:
common-files:
- README.md
- package-lock.json
- package.json
- 'src/common/**/*'
group-1-files:
- 'src/group-1/**/*'
group-2-files:
- 'src/group-2/**/*'
defaultRules:
byFileGroups:
group-1-files:
- reviewers:
- user0
required: 1
- reviewers:
- user1
- user2
required: 1
- reviewers:
- user5
- user6
- user7
required: 1
assign: 1
group-2-files:
- reviewers:
- user0
required: 1
- reviewers:
- user3
- user4
required: 1
- reviewers:
- user9
- user10
- user11
required: 1
assign: 1
common-files:
- reviewers:
- user0
required: 1
- reviewers:
- user1
- user2
required: 1
- reviewers:
- user3
- user4
required: 1
- reviewers:
- user5
- user6
- user7
required: 0
assign: 1
- reviewers:
- user9
- user10
- user11
required: 0
assign: 1
You can file groups based using glob expressions.
fileChangesGroups:
common-files:
- README.md
- .gitignore
- package.json
- 'src/common/**/*'
group-1-files:
- 'src/group-1/**/*'
group-2-files:
- 'src/group-2/**/*'
rulesByCreator:
user1:
- reviewers:
- user2
required: 1
- reviewers:
- user3
- user4
required: 1
ifChanged:
- group-2-files
- common-files
- reviewers:
- user5
- user6
- user7
required: 1
assign: 2
- reviewers:
- user0
required: 1
reviewers
— list of who will be asked for reviewrequired
— amount of required approves for that listassign
— you can assign not whole list, but only, for example, 2 out of 3. These 2 will be randomly picked.ifChanged
— apply the rule (assign reviewers) only if changed specific group(s) of file.
defaultRules:
byFileGroups:
group-1-files:
- reviewers:
- user0
required: 1
- reviewers:
- user1
- user2
required: 1
- reviewers:
- user5
- user6
- user7
required: 1
assign: 1
reviewers
— list of who will be asked for reviewrequired
— amount of required approves for that listassign
— you can assign not whole list, but only, for example, 2 out of 3. These 2 will be randomly picked.
You can skip auto assign action by labelling your PR. Also, it skips when PR is draft by default.
options:
ignoredLabels:
- bug
- need help
This Github Action will check if all required reviewers approved PR and after that, it will merge automatically.
Create a workflow file in .github/workflows
(e.g. .github/workflows/auto-merge.yml
):
Name | Required | Description |
---|---|---|
token |
yes | A GitHub Token other than the default GITHUB_TOKEN needs to be specified in order to be able to enable auto-merge. |
config |
yes | Configuration path. |
do-not-merge-labels |
no | Specify labels names when you don't want to merge automatically |
do-not-merge-on-base-branch |
no | Specify branch names where you don't want to merge automatically |
comment |
no | Before merging Github Action will add a comment in PR |
strategy |
no | Default it's merge strategy but you can specific also squash or rebase |
name: Auto Merge Request
on:
status:
pull_request:
types: [opened, ready_for_review, reopened, synchronize, edited, labeled, unlabeled]
pull_request_review:
types: [submitted, edited, dismissed]
jobs:
auto-merge-request:
name: Auto merge
runs-on: ubuntu-latest
steps:
- name: Use PR auto merge action
uses: ezetech/pr-automation/auto-merge@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
config: '.github/pr-automation-rules.yml'
comment: 'Test Commit After Merge'
do-not-merge-labels: do-not-merge,do-not-merge2
do-not-merge-on-base-branch: master,main
In the configuration file you can add the requiredChecks
parameter and specify the CI checks names that you want to wait before merging automatically.
options:
requiredChecks:
- Auto Request Review # CI Name
ignoredLabels:
- Feature Branch
rulesByCreator:
user1:
- reviewers:
- user2
required: 1
- reviewers:
- user3
- user4
required: 1
ifChanged:
- group-2-files
- common-files
- reviewers:
- user5
- user6
- user7
required: 1
assign: 2
- reviewers:
- user0
required: 1
fileChangesGroups:
common-files:
- README.md
- package-lock.json
- package.json
- 'src/common/**/*'
group-1-files:
- 'src/group-1/**/*'
group-2-files:
- 'src/group-2/**/*'
This Github Action can change Jira Issue after successfully merging PR.
To change Jira issue status, you need to give the PR a specific name like:
TEST-1-something
where TEST-1 is a Jira issue ID orTEST-2-bla-bla
where TEST-2 is a Jira issue ID etc.
Name | Required | Description |
---|---|---|
should-change-jira-issue-status |
yes | Default it's false |
jira-token |
yes | See this link to get more detail on how to generate token |
jira-account |
yes | See Using Jira API with Basic header scheme |
jira-endpoint |
yes | See Jira Rest API docs |
jira-move-issue-from |
yes | If the status does not found or the issue does not have this status, do nothing. |
jira-move-transition-name |
yes | Transition name in jira. Transition an issue |
name: Auto Merge Request
on:
status:
pull_request:
types: [opened, ready_for_review, reopened, synchronize, edited, labeled, unlabeled]
pull_request_review:
types: [submitted, edited, dismissed]
jobs:
auto-merge-request:
name: Auto merge
runs-on: ubuntu-latest
steps:
- name: Use PR auto merge action
uses: ezetech/pr-automation/auto-merge@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
config: '.github/pr-automation-rules.yml'
comment: 'Test Commit After Merge'
do-not-merge-labels: do-not-merge,do-not-merge2
do-not-merge-on-base-branch: master,main
should-change-jira-issue-status: true
jira-token: ${{ secrets.JIRA_TOKEN }}
jira-account: ${{ secrets.JIRA_ACCOUNT }}
jira-endpoint: https://example.atlassian.net
jira-move-issue-from: Code Review
This Github Action will check employees who don't work that day and don't assign as a reviewer in Sage HR In the configuration file
Name | Required | Description |
---|---|---|
check-reviewer-on-sage |
yes | Default it's false |
sage-url |
yes | Sage HR URL |
sage-token |
yes | Sage HR token |
name: Auto Request Review
on:
pull_request:
types: [opened, ready_for_review, reopened, synchronize]
jobs:
auto-request-review:
name: Auto Request Review
runs-on: ubuntu-latest
steps:
- name: Use PR auto merge action
uses: ezetech/pr-automation/auto-assign@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
config: '.github/pr-automation-rules.yml'
check-reviewer-on-sage: true
sage-url: https://test.sage.hr
sage-token: ${{ secrets.SAGE_TOKEN }}
In the configuration file you may add the sageUsers
parameter with GitHub logins and Sage HR emails.
options:
requiredChecks:
- Auto Request Reviews
ignoredLabels:
- Feature Branch
sageUsers:
user1: # GitHub Login
- email: user1@gmail.com # Sage HR Email
user2: # GitHub Login
- email: user2@gmail.com # Sage HR Email
user3: # GitHub Login
- email: user3@gmail.com # sage HR Email
For local development you can use act tool.
act -s GITHUB_TOKEN=yourtoken
act <workflow name> -s SECRET_NAME=SECRET_VALUE --input INPUT_NAME=INPUT_VALUE
Example: act workflow_dispatch -s GITHUB_TOKEN=<token> --input sha=<commit hash>
. It will trigger workflows which have on: workflow_dispatch
parameter
npm run test
for running tests
npm run build
for bundling whole code of action to 1 file. File will be placed to /dist/