Rails의 코드를 합리적으로 자동 코드 검토를 받기 위한 Github Actions

소개



GitHub Actions 에는 Market Place 로 여러가지 Action이 공개되어 있어, 도입하는 것만으로 Rails 프로젝트로 즉시 사용할 수 있습니다. 다만… 그대로라면 가상 머신을 몇 대나 사용하므로, 개인적인 리포지토리에서는 순식간에 크레딧을 소비해 버립니다… 거기서, 자신들의 프로젝트용으로 만들기로 했습니다.

대상 프로젝트 전체를 해석해, 항상 깨끗하게 유지하도록 할 수 있으면 됩니다만, 도중부터 넣은 탓도 있어, 좀처럼 할 수 없고… 그래서 최소한 각각이 낸 풀 리퀘스트에 대해 깨끗하게 하자는 방침입니다.

시도한 코드는 여기입니다.
htps : // 기주 b. 코 m / 켄 1f ぁ / st_u th_re ゔ ぃ

이번에 사용하는 도구 (감사합니다!)



  • reviewdog
  • ↓의 각 정적 해석 툴의 출력으로부터 풀 요구의 분만큼 추출해, 보고해 줍니다.


  • rubocop
  • 커뮤니티 내에서 좋다고 여겨지는 Ruby의 작성 방법을 따르는지 확인해 줍니다.


  • reek
  • Ruby로 작성된 코드의 가독성/보수성/확장성이 좋지 않은지 확인해 줍니다.


  • brakeman
  • Rails 애플리케이션의 보안 스캐너입니다.


  • haml-lint
  • HAML이 유지 보수하기 쉬워졌는지 확인하십시오.


  • eslint
  • Javascript가 유지보수하기 쉬운지 등을 체크해 줍니다.


  • stylelint
  • CSS나 SCSS가 메인터넌스하기 쉬운지 등을 체크해 줍니다.


  • 코드



    하고 있는 것은 대략적으로 쓰면 이런 느낌입니다.
    reviewdog가 내부적으로 실행하는 정적 해석 툴에 대해서는 .reviewdog.yml 에 써 있습니다.
  • 정적 분석 도구를 실행하는 데 필요한 Ruby 및 Node.js 설치
  • 프로젝트에 필요한 라이브러리 세트 설치
  • reviewdog 설치
  • reviewdog 실행

  • .github/workflows/code_analysis.yml
    name: code_analysis
    on: [pull_request]
    jobs:
      code_analysis:
        name: runner
        runs-on: ubuntu-latest
        env:
          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        steps:
          - uses: actions/checkout@v2
          - uses: ruby/setup-ruby@v1
            with:
              ruby-version: 2.7.1
          - uses: actions/setup-node@v1
            with:
              node-version: 12.x
          - name: cache vendor/bundle
            uses: actions/cache@v1
            with:
              path: vendor/bundle
              key: bundle-${{ hashFiles('**/Gemfile.lock') }}
          - name: cache node_modules
            uses: actions/cache@v1
            with:
              path: node_modules
              key: yarn-${{ hashFiles('**/yarn.lock') }}
          - name: bundle install
            run: bundle check || bundle install --jobs=4 --retry=3 --path vendor/bundle
          - name: yarn install
            run: yarn install
          - name: install reviewdog
            uses: reviewdog/action-setup@v1
          - name: reviewdog
            run: reviewdog -reporter=github-pr-check
    

    .reviewdog.yml
    runner:
      rubocop:
        cmd: bundle exec rubocop
      brakeman:
        cmd: bundle exec brakeman --quiet --format tabs
      reek:
        cmd: bundle exec reek --single-line
      haml-lint:
        cmd: bundle exec haml-lint
      eslint:
        cmd: yarn run eslint app/**/*.js
      stylelint:
        cmd: yarn run stylelint app/**/*.{css,scss}
    

    출력



    이런 식 로 출력됩니다.
    끌어오기 요청에서 찾은 내용은 쉽게 볼 수 있습니다.Filtered Findings 에 프로젝트내에서 발견된 것이 모두 쓰여져 있기 때문에… 얼마나 과제가 쌓여 있을지도 볼 수 있으므로, 신경쓰고 있으면 좋을지도 모릅니다.



    빠진 곳



    Ruby 설정은 ruby/setup-ruby를!



    GitHub 근사한 actions/ruby은 패치 버전을 지정할 수 없으며 최신이 조금 늦게 사용되고 있습니다.
    Gemfile에서 Ruby의 버전을 지정하고 싶다고 생각합니다만, 이것과 궁합이 나빠, 버전이 어긋나 버리는 일이 종종 있어, bundle install에 실패해 버립니다.

    루비 커뮤니티가 유지 보수하고 있습니다.

    부끄럽기 때문에 풀 요청에 내기 전에 고치고 싶다!



    자신의 PC에 reviewdog를 설치하고 ↓와 같이하면 사전에 확인할 수 있습니다.
    $ reviewdog --diff='git diff main'
    

    마지막으로



    이런 것은 인간에게 부탁하면 자신도 레뷰워도 트라이 때문에, 기계에 부탁하는 것이 제일입니다. 지적되면 분명히…

    좋은 웹페이지 즐겨찾기