7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DangerとGitHub ActionsでPull Request時に最低限のレビューを自動化する

Posted at

概要

チーム開発において Pull Request 時のコードレビューは必要不可欠です。
コードレビューにはもちろん、レビューワーの工数がかかります。
そこで、レビューワーの負担を少なくするために、
GitHub ActionsDanger で必要最低限のレビューを自動化し、本質的な部分のみ
レビューワーがチェックするようにしたいと思います。

実装

ディレクトリ構造例

tree
danger-github-actions
├── .eslintrc.js
├── .github
|  └── workflows
|    └── actions.yml
├── src
|  ├── greeting.js
|  └── greeting.test.js
├── dangerfile.js
├── package.json
└── yarn.lock

Danger

dangerfile.js をルートディレクトリ配下に作成します。
DangerTypeScript にも対応しているため、 dangerfile.ts としても問題ありません。

danger.js
let isAllCheckPassed = true;

if (danger.github.pr.title.includes('[WIP]')) {
  fail("Should NOT inclued 'WIP' in your PR title");
}

if (!danger.github.pr.assignee) {
  warn("Should select PR reviewer");
  isAllCheckPassed = false;
}

const hasIssuesNumber = /#[0-9]/.test(danger.github.pr.title);
if (!hasIssuesNumber) {
  warn("Should include issues number in your PR title");
  isAllCheckPassed = false;
}

const diffSize = Math.max(danger.github.pr.additions, danger.github.pr.deletions);
if (diffSize > 500) {
  warn("Should reduce diffs less than 500");
  isAllCheckPassed = false;
}

if (danger.github.pr.changed_files > 10 ) {
  warn("Should reduce change files less than 10");
  isAllCheckPassed = false;
}

if (isAllCheckPassed) markdown('## All checkes have passed :tada:')

チェック項目

  • PR タイトルに'[WIP]'が含まれていないか
  • レビューワー(assignree)が選択されているか
  • PR タイトルにIssues番号(ex. #123)が含まれているか
  • 追加行と削除行の合計が500行以下か
  • 編集ファイル数が10ファイル以下か

fail() を呼び出すと ci は失敗し、マージできないようになります。
warn() の場合は警告を表示しますが、マージは可能です。

今回は使用していませんが message() でメッセージ表示ができます。
markdown() とすることで markdown にも対応できます。

package.json

GitHub Actions で実行したいコマンドを package.json に登録しておくと良いでしょう。

package.json
{
  "scripts": {
    "lint": "eslint --ext .js ./src",
    "test": "jest",
    "danger": "danger ci"
  }
}

actions.yml

GitHub Actions で実行したい workflow を記述します。

.github/workflows/actions.yml
name: actions
on: [pull_request]

jobs:
  actions-ci:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v2

    - name: Prepare Node Env
      uses: actions/setup-node@v1
      with:
        node-version: '12.x'
    
    - name: Install yarn
      run: npm i -g yarn

    - name: Install Dependencies
      run: yarn

    - name: Run ESLint
      run: yarn lint

    - name: Run Jest
      run: yarn test

    - name: Run Danger
      run: yarn danger:ci
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

実行結果

Pull Request を作成すると GitHub Actions が実行され、
下記のように結果がコメントとして投稿されます。

スクリーンショット 2020-03-22 16.18.31.png

最後に

ESLint のように設定をカスタマイズすることができます。
Pull Request 作成時にもチームとしてルールを設けて見てはいかがでしょうか ☺️

refs

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?