Danger와 GitHub Actions에서 Pull Request 시 최소 리뷰 검토 자동화
개요
팀 개발에서 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
로 문제가 없습니다.
danger.jslet 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:')
체크 항목
디렉토리 구조 예
나무
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
로 문제가 없습니다.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:')
체크 항목
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
가 실행되고,
아래와 같이 결과가 댓글로 게시됩니다.
마지막으로
ESLint
와 같이 설정을 사용자 지정할 수 있습니다.Pull Request
작성시에도 팀으로서 규칙을 마련해 보는 것은 어떨까요 ☺️
refs
ESLint
와 같이 설정을 사용자 지정할 수 있습니다.Pull Request
작성시에도 팀으로서 규칙을 마련해 보는 것은 어떨까요 ☺️refs
Reference
이 문제에 관하여(Danger와 GitHub Actions에서 Pull Request 시 최소 리뷰 검토 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ut0n/items/7fbb0f8977d43de88792텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)