Github Actionsでビルドしてリリースにアップロードしてみた
前回の続きです。
前回は自動ビルドとテストが出来ることを確認したので、今回はよくある以下のような状態を自動で行われるようにします。
流れとしては
・バージョンのタグ付けをする
・GithubActionsが動く
・完了
となります。
タグ付けは置いておいて、リリースへアップロードする用に新しくワークフローを作ります。
name: release on: push: tags: - 'v*.*'
まず、特定文字列のタグがPushされた場合にこのワークフローが動くように条件設定します。今回は「v1.0」「v2.1」くらいの粒度にしてます。
jobs: release: name: release runs-on: ubuntu-latest 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: Create artifact dir run: | cd src mkdir -p artifacts/Linux - name: Build for Linux run: | cd src GOOS=linux GOARCH=amd64 go build -o artifacts/Linux - name: Zip artifacts run: | cd src/artifacts zip -r Linux Linux/
ここのステップに記述されていることはスクリプトなどにしてしまうのも手かと思いますが、今回はActionsで完結するようにします。
一つ目のステップは、Golangなのでプラットフォーム毎にビルドしたモノを出力するディレクトリを作成しています。今回はLinuxのみにしてます。
二つ目のステップは、OSとアーキテクチャの指定を行いビルドを実施します。
三つ目のステップは、ビルドされたモノをZIPで圧縮しているだけです。
- name: Create release id: create_release uses: actions/create-release@v1.0.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: Release ${{ github.ref }} body: | Changes in this Release - First Change - Second Change draft: false prerelease: false - name: Upload Release Asset id: upload-release-asset-linux uses: actions/upload-release-asset@v1.0.2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./src/artifacts/Linux.zip asset_name: go_linux_amd64.zip asset_content_type: application/zip
次のステップ群はActionsオフィシャルの公開アクションを利用して、リリースの作成と成果物のアップロードを実施しています。
一つ目のステップは、リリース作成のステップとなっていますが、公式のREADMEをそのままコピペして動きます。途中出てきている変数についてはGithub側で定義されている情報なので、我々が何か設定してやる必要はないようです。 body
部分は独自に変えたほうが良いと思いますが、今回自分は削除してます。
二つ目のステップは、作成したリリースにファイルをアップロードします。with
にあるupload_url
をみると、stepsからIDを指定して情報を取得しているので、URLがわかるのであれば静的に同じところへアップロードすることもできます。逆に同じワークフローで公開アクションを使ってリリースを作成していないと、コピペでは動かないでしょう。
asset_path
は先ほどZIP圧縮したファイルのパスを指定します。ここで注意なのは、ステップ毎にホームディレクトリへ戻っている為、パスの指定はホームディレクトリからとなります。
asset_name
はアップロードされ、リリースページで見える名前になります。なので、圧縮時までは適当な名前でも、ここで修正できます。
あとはこのファイルをcommitし、ブラウザやGitクライアントからタグをつけてやると、Actionsが動いて記事の頭にある画像のようにファイルがアップロードされます。
公式がアクションを用意してくれているため、非常に簡単に事が進みました。
次はGolang限定ですが、これらの流れがもっと簡素に出来るという「GoReleaser Action」というものに置き換えてみます。