mu-epub-readerというElectron製のEpubビューアを作っていて、いつもどおりバイナリの配布に困っていましたが、GitHub Actionsを使うことで簡単にできたのでメモ書きです。

GitHub Actionsの設定

.github/workflows/electron.ymlを見るのが早いですが次のような設定をしています。

yarn run distpackage.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の例

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をサポートしたらもう少し楽になると思います。