Skip to content

Instantly share code, notes, and snippets.

@xlune
Created August 17, 2019 05:20
Show Gist options
  • Save xlune/51e38d874a91b3598a8fef97f0691c7c to your computer and use it in GitHub Desktop.
Save xlune/51e38d874a91b3598a8fef97f0691c7c to your computer and use it in GitHub Desktop.
Danger-JSのルールセットファイル
/**
* dangerfile.js
* Danger-JS: https://github.com/danger/danger-js
*/
import { danger, fail, message, warn } from 'danger'
const limitDiffSize = 500;
const limitFileCount = 10;
const failArr = [];
const warnArr = [];
const _fail = (message) => {
failArr.push(message);
fail(message);
}
const _warn = (message) => {
warnArr.push(message);
warn(message);
}
/**
* 変更が必須、または推奨される項目
*/
// WIP判定(タイトル先頭に`[WIP]`がある場合。若干空白を許容する)
if (/^ *\[ ?WIP ?\]/i.test(danger.github.pr.title)) {
_warn(
`このPRは作業進行中(WIP)です。マージしないように注意してください。`
);
}
// 担当者がセットされていない場合は警告
if ((danger.github.pr.assignees || []).length === 0) {
_warn(
`担当者が設定されいません。忘れずに設定してください。`
);
}
// レビュアー必須、複数の場合は警告
const reviewers = danger.github.requested_reviewers;
const reviewersCount = (reviewers.users || []).length + (reviewers.teams || []).length;
if (reviewersCount === 0) {
_fail(`レビュアーがいません。忘れずに追加してください。`);
} else if (reviewersCount > 1) {
_warn(
`多くのレビュアーがいるのは素晴らしいことです。ただし、個々のレビュアーの担当意識が低下することに注意しましょう。`
);
}
// マイルストーンがセットされていない場合は警告
if (danger.github.pr.milestone === null) {
_warn(
`マイルストーンが設定されいません。設定して進捗を確認しやすくしましょう。`
);
}
// 指定行以上の差分がある場合、警告を出す
const diffSize = Math.max(danger.github.pr.additions, danger.github.pr.deletions);
if (diffSize > limitDiffSize) {
_warn(
`変更箇所が${limitDiffSize}行を超えています。可能であればPRを分割しましょう。`
);
}
// 指定個以上のファイルを編集している場合、警告を出す
if (danger.github.pr.changed_files > limitFileCount) {
_warn(
`変更ファイルが${limitFileCount}ファイルを超えています。可能であればPRを分割しましょう。`
);
}
/**
* アチーブメント項目
*/
// 無駄なコードを削れた場合
if (danger.github.pr.deletions > danger.github.pr.additions) {
message(
`素晴らしい!より多くの無駄なコードを減らせましたね。ありがとう!`
);
}
// 問題が一つもなかった場合
if (failArr.length === 0 && warnArr.length === 0) {
message(
`未対応の問題はありません。お疲れさまです。`
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment