Skip to content

ezetech/pr-automation

Repository files navigation

PR automation

This is github action that auto assigns reviewers for PR, auto merges it based on your rules and many more

Auto assign

Usage for auto assigning reviewers

Create a workflow file in .github/workflows (e.g. .github/workflows/auto-assign.yml):

Required inputs:

  • token (GITHUB_TOKEN)
  • config (configuration path)

Example of workflow file

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

Configuration

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

Specify file groups

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/**/*'

Assign reviewer by who created a PR

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 review
  • required — amount of required approves for that list
  • assign — 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.

Default rules based on file groups.

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 review
  • required — amount of required approves for that list
  • assign — you can assign not whole list, but only, for example, 2 out of 3. These 2 will be randomly picked.

Options

You can skip auto assign action by labelling your PR. Also, it skips when PR is draft by default.

options:
  ignoredLabels:
    - bug
    - need help

Auto merge

This Github Action will check if all required reviewers approved PR and after that, it will merge automatically.

Usage for auto merge

Create a workflow file in .github/workflows (e.g. .github/workflows/auto-merge.yml):

Inputs

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

Example of workflow file

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

Required Checks

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/**/*'

Change Jira Issue Status

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 or TEST-2-bla-bla where TEST-2 is a Jira issue ID etc.

Inputs

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

Example of workflow file

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

Check Reviewers in Sage HR

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

Inputs

Name Required Description
check-reviewer-on-sage yes Default it's false
sage-url yes Sage HR URL
sage-token yes Sage HR token

Example of workflow file

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 }}

Configuration File

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

Local development

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

Commands

npm run test for running tests

npm run build for bundling whole code of action to 1 file. File will be placed to /dist/

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 5