GitHub Actionsでelectronアプリの署名・公証を自動化する


前提

ローカルの開発マシンでは npm run build あたりのコマンドで署名・交渉できる状態を想定しています。

action

重要どころにコメントつけています。
結局キーチェーンの証明書を、GUIのダイアログなしで使えるようにするのが大事です。
GUIのダイアログが出てしまうとjobは先にすすまず、タイムアウトまでフリーズしてしまいます。
macは10倍のお値段なのであまり時間無駄にしないためにジョブにタイムアウトを設定しておいたほうがよいです。

jobs:
  build-mac:
    name: build
    runs-on: macos-latest
    env:
      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    # キーチェーン周りのシステムダイアログが出た場合など、ジョブが進まずデフォルトタイムアウト(6時間)まで時間を使ってしまうので、それを回避
    timeout-minutes: 30
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 12.18.1
      # 自由に使える my.keychainを作成
      - run: security create-keychain -p password my.keychain
      # my.keychainをデフォルトキーチェーンにする
      - run: security default-keychain -s my.keychain
      # p12をインポートできるようにロック解除
      - run: security unlock-keychain -p password my.keychain
      # キーチェーンのタイムアウトでのロックなどかけないようにする
      - run: security set-keychain-settings my.keychain
      # 必要な証明書などインポート
      # -Aオプションはどのプログラムからも利用できるようにするオプション
      # p12は本当は外部から取得している。(わかりやすくローカルにある風に記載)
      - run: security import ./certs/macDeveloperIDApplication.p12 -k my.keychain -A -P ${{ secrets.P12PASS }}
      - run: security import ./certs/macDeveloperIDInstaller.p12 -k my.keychain -A -P ${{ secrets.P12PASS }}
      - run: security import ./certs/developerIdApplication.p12 -k my.keychain -A -P ${{ secrets.P12PASS }}
      - run: security import ./certs/developerIDInstaller.p12 -k my.keychain -A -P ${{ secrets.P12PASS }}
      # codesignからmy.keychainへのアクセスを許可しておく
      - run: "security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k password my.keychain"
      # これをしないとインポートしたidentityが認識されない
      - run: security list-keychains -s my.keychain
      # identityが認識されているか確認
      - run: security find-identity -v
      - run: npm ci
      - name: Build App
        timeout-minutes: 15
        run: npm run build
      # この後はartifactに保存したりリリースしたり好きにしてください
      - run: echo DONE!