Danger와 GitHub Actions에서 Pull Request 시 최소 리뷰 검토 자동화

개요



팀 개발에서 Pull Request 때 코드 검토가 필수적입니다.
코드 리뷰에는 물론, 리뷰어의 공수가 걸립니다.
따라서 리뷰어의 부담을 줄이기 위해,GitHub ActionsDanger에서 필요한 최소 리뷰를 자동화하고 본질적인 부분 만
리뷰어가 체크하고 싶습니다.

구현



디렉토리 구조 예



나무
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]'이 포함되어 있지 않습니까
  • 리뷰어가 선택되어 있습니까
  • PR 제목에 이슈 번호 (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가 실행되고,
    아래와 같이 결과가 댓글로 게시됩니다.



    마지막으로


    ESLint와 같이 설정을 사용자 지정할 수 있습니다.Pull Request 작성시에도 팀으로서 규칙을 마련해 보는 것은 어떨까요 ☺️

    refs


  • htps : // 단게 r. sys ms/레후오렌세. HTML
  • htps : // 단게 r. sys에서 ms / js /
  • 좋은 웹페이지 즐겨찾기