GolangリポジトリでGithub Actionsを使ってみた
早速、GithubでActionsを使おうとすると、言語を自動的に解析しておススメのワークフローが出てくるので、今回はGoに従ってみます。
Set up this workflow
をクリックするとワークフロー用ファイルが読み込まれ、カスタマイズしてコミットするように促されます。
とりあえず、そのままコミットするとファイルがコミットされると同時に最初のActionsが実行されています。
が、まずは先ほど作成したファイルの中身を見ていきましょう。
name: Go on: push: branches: [ master ] pull_request: branches: [ master ]
name
は特に捻りもなくワークフロー名を指定するだけのようです。
次にon
を指定することで、ワークフロー実行のトリガー・条件を設定できます。
今回はmaster
ブランチにPUSHまたはプルリクが発生した場合にこのワークフローが実行されるようになっています。ブランチ以外にもタグやファイルパスを指定し、より細かい条件にすることも可能です。
jobs: build: name: Build runs-on: ubuntu-latest steps:
ワークフローで実行する内容はjobs
以下に記述していきます。
最初のbuild
というのはjob_idと呼ばれるもので、英字から始まる任意の値を設定できます。次のname
はジョブの名前でGUIで表示されるときはここの値を使うようです。
runs-on
はジョブを実行する環境を設定するもので、現時点ではWindowsServer 2019、Ubuntu(16.04, 18.04)、macOS Catalina 10.15の4種類使えるようです。(セルフホストランナーは割愛)
steps
以下に具体的な環境変数やコマンドを記述していきますが、今回の例では込み入った設定はなさそうです。
- name: Set up Go 1.x uses: actions/setup-go@v2 with: go-version: ^1.13 id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Get dependencies run: | go get -v -t -d ./... if [ -f Gopkg.toml ]; then curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh dep ensure fi - name: Build run: go build -v . - name: Test run: go test -v .
YAML形式なので、ハイフン毎に処理が固まっていることは容易に判断できるようになっています。
最初のステップはname
に記載通りGoのセットアップを行っています。uses
では公開されているコードを利用するかを指定します。詳細は公式ドキュメントに記載されていますが、今回はテンプレ通り特に変更しません。
with
で実行するコンテナへ環境変数を渡すことができます。今回はGolangのバージョンを指定しています。
id
はステップに一意の識別子をつけることが出来るものです。これを設定しておくことで、コンテキストから参照することが出来るようです。
2番目のステップは公式ドキュメントによると、いくつかのパターン時にcheckoutアクションを実行する必要があり、今回はリポジトリをビルドしてテストするとき、または継続的インテグレーションを使用するとき、ワークフローにリポジトリのコードのコピーが必要な場合。
に当てはまるので呼び出します。
3番目のステップではrun
を使って具体的な処理を行っています。サンプルのワークフローファイルなので、この通り動かないですが、内容的にはgo get
後に指定のファイルがあればインストールスクリプトを実行する、という内容なので、自分のプログラムはModules機能を使っておりgo get
不要なので削除します。
4番目、5番目は単純にビルド及びテストコマンドを実行しているだけですね。
動作確認ということで、このままcommit, pushするとActionsが稼働するので、結果を見ていきます。
何回か失敗しているのはTypoとかなので気にせず、、、最上段をクリックすることで詳細が確認できます。
今回は特に成果物(Artifact)の設定を記述していないので、上記のような感じになります。
画面左側に設定したビルドが載ってくるので、クリックするとそのビルドのステップ毎にログが出力されるので、こちらでデバッグしていくことが出来ます。
ここまでで、Linux環境においてBuildとTestの実行を自動化することが出来ました。次回はビルド済みの物を配布出来るよう、Githubのリリースへ自動登録していきます。