Go の CI を Github Actions に移行した

公開:2020/10/08
更新:2020/10/08
2 min読了の目安(約2600字TECH技術記事

概要

形態素解析器 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!