はじめに
自作のlibwebrtcを使ったプログラムがあるのですが、これのGitHub Actionsを使ったDaily Buildをやってみました。
Windows、macOS、Ubuntuのいずれの環境でもビルドできたので、知見を記録しておこうと思います。
libwebrtcの最新のバイナリを取ってくる
libwebrtcのバイナリは自分でビルドしても良いですが、時間がかかるので時雨堂様が公開しているものを使用することにしました。
github.com
ここから最新のリリースバージョンのファイルをダウンロードして使用すればOKです。
GitHub Actionsで最新のリリースを取得する
GitHub Actionsで最新のリリース情報を取得するためには、GitHubのAPIを叩けばOKです。
GET https://api.github.com/repos/shiguredo-webrtc-build/webrtc-build/releases/latest
このAPIは認証無しで使うことができますが、GitHub Actions(特にmacOSの環境)から呼び出すと、制限がかかることがあります。これは、多くの人がGitHub Actionsから認証なしAPIを実行することでAPI呼び出し元のIPアドレスが同じになり、制限がかかっているものと思われます。
特にmacOSの環境はMacStadiumというプラットフォームを使用しているため、制限がかかりやすいと思われます。
回避策は、API呼び出し時にGitHubのトークンを追加し、認証を行うようにすればOKです。
一例として、curlコマンドを使う場合はこんな感じになります。
curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/shiguredo-webrtc-build/webrtc-build/releases/latest
secrets.GITHUB_TOKEN
はGitHub Actions側で予め設定されているので、自分で設定する必要はありません。
APIのレスポンスはこんな感じになります。(抜粋)
{ "url": "https://api.github.com/repos/shiguredo-webrtc-build/webrtc-build/releases/28767080", "assets_url": "https://api.github.com/repos/shiguredo-webrtc-build/webrtc-build/releases/28767080/assets", "upload_url": "https://uploads.github.com/repos/shiguredo-webrtc-build/webrtc-build/releases/28767080/assets{?name,label}", "html_url": "https://github.com/shiguredo-webrtc-build/webrtc-build/releases/tag/m85.4183.1.1", "id": 28767080, "node_id": "MDc6UmVsZWFzZTI4NzY3MDgw", "tag_name": "m85.4183.1.1", "target_commitish": "master", "name": "Release m85.4183.1.1",
ここからtag_name
を取得します。
curl
コマンドの結果をパイプでjq '.tag_name'
に流してあげます。
その後、sed s/\"//g
でダブルクオーテーションを消してあげればOKです。
あとはこれを変数に入れておいて、
wget https://github.com/shiguredo-webrtc-build/webrtc-build/releases/download/$LIBWEBRTC_VERSION/webrtc.ubuntu-18.04_x86_64.tar.gz
のようにしてあげれば、最新のバイナリをダウンロードすることができます。
Windows対応
上記の方法はmacOSとUbuntuでは動作しますが、Windowsでは少し対応を変える必要があります。
まず、いくつかのコマンドは使えないので、Chocolateyでインストールします。
choco install Wget choco install unzip choco install curl choco install jq
GitHub Actionsの環境には、Chocolateyが標準でインストールされています。
curl、jqはmacOSやUbuntuと同じように使えます。ダブルクオーテーションの削除は、curl、jqの結果を変数に入れておいて、 $LIBWEBRTC_VERSION=$LIBWEBRTC_VERSION -replace '"',''
のようにすればOKです。GitHub ActionsのWindowsのシェルはデフォルトではPowerShellが使われるようです。
あとは同様に、wgetでダウンロードすればOKです。
wget https://github.com/shiguredo-webrtc-build/webrtc-build/releases/download/${LIBWEBRTC_VERSION}/webrtc.windows.zip
おわりに
とりあえず、こんな感じでDaily Buildができるようになりました。今のところは順調に動いていますが、稀にWindowsだけでビルドが失敗することがあります。次の日にはちゃんと動いていたりするので、原因は謎です。
設定ファイルは、このリポジトリの.github/workflows/daily.ymlに書いてあるので、もしよかったら参考にしてみてください。
github.com