GitHub ActionsでElectronアプリのクロスプラットフォームバイナリを配布する
mu-epub-readerというElectron製のEpubビューアを作っていて、いつもどおりバイナリの配布に困っていましたが、GitHub Actionsを使うことで簡単にできたのでメモ書きです。
英語の本を色々読もうと思ったのでepubビューア作った。
— azu (@azu_re) September 14, 2019
Oreilly MediaのSafari見てたらGoogle翻訳にまかせてしまうのが良さそうと思って、epub.jsを使ったElectronアプリにしてみた。
ざっくり眺めるのに便利な気がする。https://t.co/ZA0Urh2JTj pic.twitter.com/qMtISN5Y64
GitHub Actionsの設定
.github/workflows/electron.ymlを見るのが早いですが次のような設定をしています。
yarn run dist
はpackage.jsonに設定した次のようなelectron-builderを使ったバイナリの生成するコマンドを呼び出しているだけです。
"scripts": {
"start": "electron .",
"electron": "electron index.js",
"pack": "electron-builder --dir",
"dist": "electron-builder"
},
この設定だけでWindow/Linux/macOSのバイナリでgit tagでリリースごとに自動的にアップロードされます。 またGitHub Actionsには成果物をアップロードできるartifacts機能があるため、コミットごとにバイナリを生成してアップロードできます。(Canary Releaseみたいのも簡単にできる。)
artifactへのアップロードはactions/upload-artifactで行っています。 GitHub Releaseへのアップロードはsoftprops/action-gh-releaseで行っています。 どちらも、指定ディレクトリのファイルをアップロードするだけなので単純です。
GitHub Actionsにはリポジトリに紐づくトークンが自動的に発行されてsecrets.GITHUB_TOKENという変数で取得できます。 これを使うことでGitHub ActionsからGitHub APIを使ってGitHub Releasesにバイナリをアップロードしています。
おわりに
今回設定したクロスプラットフォームビルドがだいたい5分以内にアップロードまで終わるので、今まで他のCIでやってたより大分楽になりました。 GitHub Tokenの生成と設定が不要な点も大きいです。
electron-builder自体が、GitHub Actionsをサポートしたらもう少し楽になると思います。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。