新しい GitHub Actions で Go の lint と test と goreleaser によるリリースを行う
今話題の新しい GitHub Actions が私の手元でも使えるようになっていたので、今まで CircleCI で動かしてた workflow を GitHub Actions に移行してみたりしました。 多分テンプレート的に使い続けることになると思うのでブログ化。
新しい GitHub Actions そのものについては下のブログがまとまっていておすすめです。
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 に寄せていきたい。