GitHub Actionsで最新のlibwebrtcのバイナリを使ってビルドをする

はじめに

自作のlibwebrtcを使ったプログラムがあるのですが、これのGitHub Actionsを使ったDaily Buildをやってみました。
WindowsmacOSUbuntuのいずれの環境でもビルドできたので、知見を記録しておこうと思います。

libwebrtcの最新のバイナリを取ってくる

libwebrtcのバイナリは自分でビルドしても良いですが、時間がかかるので時雨堂様が公開しているものを使用することにしました。
github.com
ここから最新のリリースバージョンのファイルをダウンロードして使用すればOKです。

GitHub Actionsで最新のリリースを取得する

GitHub Actionsで最新のリリース情報を取得するためには、GitHubAPIを叩けば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_TOKENGitHub 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対応

上記の方法はmacOSUbuntuでは動作しますが、Windowsでは少し対応を変える必要があります。
まず、いくつかのコマンドは使えないので、Chocolateyでインストールします。

choco install Wget
choco install unzip
choco install curl
choco install jq

GitHub Actionsの環境には、Chocolateyが標準でインストールされています。
curl、jqはmacOSUbuntuと同じように使えます。ダブルクオーテーションの削除は、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