概要
チーム開発において Pull Request
時のコードレビューは必要不可欠です。
コードレビューにはもちろん、レビューワーの工数がかかります。
そこで、レビューワーの負担を少なくするために、
GitHub Actions
と Danger
で必要最低限のレビューを自動化し、本質的な部分のみ
レビューワーがチェックするようにしたいと思います。
実装
ディレクトリ構造例
danger-github-actions
├── .eslintrc.js
├── .github
| └── workflows
| └── actions.yml
├── src
| ├── greeting.js
| └── greeting.test.js
├── dangerfile.js
├── package.json
└── yarn.lock
Danger
dangerfile.js
をルートディレクトリ配下に作成します。
Danger
は TypeScript
にも対応しているため、 dangerfile.ts
としても問題ありません。
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
に登録しておくと良いでしょう。
{
"scripts": {
"lint": "eslint --ext .js ./src",
"test": "jest",
"danger": "danger ci"
}
}
actions.yml
GitHub Actions
で実行したい workflow
を記述します。
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
が実行され、
下記のように結果がコメントとして投稿されます。
最後に
ESLint
のように設定をカスタマイズすることができます。
Pull Request
作成時にもチームとしてルールを設けて見てはいかがでしょうか ☺️