あふん

ぷろぐらむとか

新しい GitHub Actions で Go の lint と test と goreleaser によるリリースを行う

github.blog

今話題の新しい GitHub Actions が私の手元でも使えるようになっていたので、今まで CircleCI で動かしてた workflow を GitHub Actions に移行してみたりしました。 多分テンプレート的に使い続けることになると思うのでブログ化。

新しい GitHub Actions そのものについては下のブログがまとまっていておすすめです。

www.kaizenprogrammer.com

lint と test を実行する workflow

name: Go
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go:
        - 1.12.9
    name: Go ${{ matrix.go }} build
    steps:
    - uses: actions/checkout@master
    - name: Setup Go
      uses: actions/setup-go@v1
      with:
        version: ${{ matrix.go }}
    - name: Run go mod download
      run: go mod download
    - name: Install golangci-lint
      run: |
        curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s v1.17.1
        # https://github.com/golangci/golangci-lint/issues/250
        sudo mv ./bin/golangci-lint $GOPATH/bin/
    - name: Run golangci-lint
      run: >
        golangci-lint run \
          --tests \
          --enable-all \
          --disable gochecknoglobals \
          --disable gochecknoinits
    - name: Run tests
      run: go test -race -v ./...

goreleaser を実行する workflow

name: Release
on:
  push:
    branches:
      - "!*"
    tags:
      - "v*"
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go:
        - 1.12.9
    name: GoReleaser
    steps:
    - uses: actions/checkout@master
    - name: Setup Go
      uses: actions/setup-go@v1
      with:
        version: ${{ matrix.go }}
    - name: Run go mod download
      run: go mod download
    - name: Run GoReleaser
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: curl -sL https://git.io/goreleaser | bash

だいたいの使い方とかは CircleCI の頃と同じ感じで書けるんですけど、トリガーとする event ごとに (ただの push なのか, tag の push なのかなど) workflow を記載する YAML ファイルが別れることになるので数千行ある闇の .circleci/config.yml みたいにはなりづらそうなのはいいかもって思いました。

あとはこの部分。

- name: Run GoReleaser
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

これだけの記述で GitHub の token をいい感じに取得することができるので、今まで token 発行して CircleCI に登録して〜 みたいな作業から解放されるのはめっちゃいいですね。

全体的に GitHub Actions、よさそうという印象でした。積極的に他の CI サービスから移行することはないかもしれませんが新しく作ったリポジトリとかは今後 GitHub Actions に寄せていきたい。