Go の CI を Github Actions に移行した
概要
形態素解析器 kagome の CI を Github Actions に移行したのでそのメモ。
Travis CI はよく出来てるなーとあらためて思いました。Github Actions に移行しても出来ることは変わらないので無理に移行するほどでもないなというのが率直なところ。Github Actions を使いたいから移行しただけで、得るものはあまりなかった。ただ、Github Actions の方が(無課金 Travis CI に比べて) CI が回るのははやい気がする。
Travis CI を移行する
matrix テストの移行
OS と Go のバージョンの組み合わせによる matrix テストをやっていたところの比較。
Travis CI
go:
  - "1.14.x"
  - "1.15.x"
  - tip
Github Actions
jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        go: ['1.13.x', '1.14.x', '1.15.x']
    runs-on: ${{ matrix.os }}
    steps:
      - name: Set up Go 1.x
        uses: actions/setup-go@v2
        with:
          go-version: ${{ matrix.go }}
だいぶめんどい。Travis CI の方は OS は UI で設定できた気がする。あと、Github Actions の方には tip がない。
Coveralls へのカバレッジデータの送信
テストが成功したら、Coveralls にカバレッジデータを送信していた部分の比較。
ここの手間はほぼ同じだった。というか、mattnさん謹製のgoverallsのおかげで簡単に設定できた。
Travis CI
after_success:
  - |
    if [[ $TRAVIS_GO_VERSION = 1.15.x ]]
    then
      /bin/sh ./go-coverall.sh
    else
      echo skip coverage test, $TRAVIS_GO_VERSION
    fi
Github Actions
      - name: Install goveralls
        run: go get github.com/mattn/goveralls
      - name: Coverage
        run: |
          go test -v -coverprofile=profile.cov -covermode=atomic ./...
          goveralls -coverprofile=profile.cov -service=github
        working-directory: src/github.com/ikawaha/kagome
        env:
          COVERALLS_TOKEN: ${{ github.token }}
基本的なところ
今回、Github Actions を初めて触ったので基本的なところのメモ。
PRに対してトリガーする
on:
  pull_request:
    types: [opened, synchronize]
これで、PR がオープンされたときと、PR への変更がされたときに Github Actions がトリガーされる。
最初、下のように書いていて、同じテストが2回まわってしまっていた。
on: [push, pull_request]
これは間違い。あと、念のため、PR がマージされたとき(kagome だと v2 ブランチ)にもテストを動かしたければ、それも追加しておく。
on:
  push:
    branches:
      - v2
  pull_request:
    types: [opened, synchronize]
他のジョブが成功したら実行する
今回はテストが通ったときだけカバレッジデータを送信したかった。jobs 直下が job の名前になるので、needs でそれを指定してやると前提条件となる。
jobs:
  test:
   ... snip
  coverage:
    needs: test
    runs-on: ubuntu-latest
    steps:
    ... snip
Happy hacking!
Discussion