GitHub Actions で push の度にテストを動かす
GitHub Actions が public repository でも使えるようになりました!
(2018/12/24現在まだ public beta 版での提供です。)
早速、現在アクティブに開発しているリポジトリで試してみました。
対象のリポジトリには既に以下の様な Dockerfile
があります。
FROM golang:1.11-alpine MAINTAINER shunsuke maeda <duck8823@gmail.com> RUN apk --update add --no-cache alpine-sdk WORKDIR /go/src/github.com/duck8823/duci ADD . . ENV CC=gcc ENV CI=duci ENV GO111MODULE=on ENTRYPOINT ["make"] CMD ["test"]
必要な依存ライブラリなどをインストールし、 Makefile
で定義されたタスクを実行するだけです。
ちなみに Golang で開発しているリポジトリなので、 Makefile
では以下のようにテストの実行を定義しています。
test: go test -coverprofile cover.out $$(go list ./... | grep -v mock_) go tool cover -html cover.out -o cover.html
タスクランナーでタスクを定義し、 Dockerfile で実行環境を定義するという方針で開発をしています。
さて、この Dockerfile
を GitHub Actions で実行すれば、 Push の度にテストを実行してくれるということになりますね。
設定したいリポジトリの Actions
タブをクリックすると、GUIで編集できる画面になります。
Create a new workflow
をクリックして編集してみましょう。
直感的に操作できるようになっています。
最初からあるのはトリガーです。今はパブリックリポジトリでは pushしか選べません(2018/12/20 現在)。 本能に従いトリガーの青い部分をドラッグ&ドロップすると、 Action を定義する箇所が現れます。
ここで、Dockerfile
が存在するディレクトリの相対パスを指定することで、リポジトリ内の Dockerfile
を利用することができます。
.duci/Dockerfile
を実行したいとすると、 ./.duci/
となります。
use
をクリックすると更に詳細を設定できます。
GitHubの各リポジトリではSecrets が登録できるようになっており、ここで指定することでコンテナに渡すことができます。
また、Dockerflle
の ENTRYPOINT
や CMD
を上書きもできるようです。
ここではシンプルに何も上書き・設定しません。
GUI で編集したものは、定義ファイルとして保存されることになります。
workflow "New workflow" { on = "push" resolves = ["./duci/"] } action "./duci/" { uses = "./duci/" }
なにやら見慣れない形式ですね。
リポジトリの .github/main.workflow
というファイルが作成され、GUI上からコミットやブランチ&PRの作成までできてしまいます。
これをコミットして実際に push すると、 Commit Status もつけてくれます。
また、 Commit Status の details や Actions の log から、実行時のログを見ることもできます。
本来、色々な Action を組み合わせて workflow を組み立てていくものですが、ここでは push の度にテストを回す方法を紹介しました。
テスト実行用の Dockerfile を用意してGitHub上でちょっと操作するだけで CIでテストが回せる時代になってしまいましたね。
書いたテストはガンガン実行していきましょう。