序
GithubActionsでCICDフローを回せて便利!
でもrspecがこけたときに、エラー箇所をしらべるのに難儀する。
Github Checksでみられたらよさそう。
破
reviewdogでアップロードしようと思ったけれど、サポートされているエラーフォーマットはなかった。
https://github.com/reviewdog/reviewdog#available-pre-defined-errorformat
サポートするためのPRつくれるかなとおもってソースをみていたら、 Reviewdog Diagnostic Format
というものが提案されている。
https://github.com/reviewdog/reviewdog/tree/master/proto/rdf
パーサーを書くより、こっちのフォーマットに合わせて、rspecの出力を加工するほうが良さそう。
でもまだ正式版じゃないみたい。SARIF良さそう。
なのでRDFormatではなく、既存の入力フォーマットに合わせてrspecのフォーマッタを作ることにする。
https://github.com/reviewdog/reviewdog#input-format
errorformat
checkstyle XML format
を試作してみて、動作確認がしやすかった checkstyle にする。
XMLがなつかしい。
急
https://github.com/astronoka/rspec-checkstyle_formatter
フォーマッタをつくってgemにしました。
実装中、mysqlかなにかのエラーで出力される asciiのカラーコード \e[0;34m
的なやつでXMLのビルダー/パーサーがエラーになったりして
そういえばこういうことでエラーになったことあったなと、ますます懐かしい気持ちになる。
GithubActionsでの記述例
name: CI
on: push
jobs:
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7.1
- name: Restore gems
uses: actions/cache@v2
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gems-
- name: Run rspec
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
bundle exec rspec \
--no-fail-fast \
--format RSpec::CheckstyleFormatter \
--out /tmp/rspec_result.xml
- name: Upload rspec result
if: always()
uses: actions/upload-artifact@v2
with:
name: rspec_result.xml
path: /tmp/rspec_result.xml
- name: Install reviewdog
if: always()
uses: reviewdog/action-setup@v1
with:
reviewdog_version: latest
- name: Report rspec error
if: always()
env:
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cat /tmp/rspec_result.xml | reviewdog -name=rspec -f=checkstyle -reporter=github-check -filter-mode=nofilter
こんなかんじ。
reviewdog素晴らしい
linter向けのフォーマットで渡すのはどうなのだろうと思いつつ
了。