GitHub ActionsでTauriアプリのSnapパッケージを自動ビルドする

Tauriでアプリを作っているんだけど,snapパッケージをビルドしてSnap Storeにアップロードしたいと思った.

しかしドキュメントにはsnapに関する記述がない.

tauri.app

また,Tauriは公式でGitHub Actionsを提供していて,こいつを使ってビルドできるのだが,こいつもsnapをサポートしている様子がない.

github.com

tauri-snap-packager

というわけで別のパッケージを使ってsnapをビルドするわけだが,

github.com

こいつを使ってみた.

ただし,これにはいくつか問題点がある.

  1. multipassが必要になる
  2. ビルドするとsnapcraft.ymlが生成されるが,grade: 'devel' 指定のため,このままだと snapcraft upload できない
  3. summarydescription もデフォルトのままなのでカスタマイズできない
  4. core18に依存しており,かなり古い

1の大きな問題点は,GitHub Actionsだ.GitHub Actionsでmultipassを動かすのはかなり難しい.

github.com

このため,使うのであれば,lxdの方を推奨されており,これはActionsが用意されている.

github.com

しかしここまでクリアしても, gradeの問題は残る. ローカルでやるのであれば,一度 tauri-snap-packager でビルドしたあと,snapcraft.ymlを修正し snapcraft コマンドを再度実行することで再ビルドされる.

しかし,GitHub Actionsでビルドされるとなると,これを毎回シェルスクリプトでやるのは虚しい.

というわけで作った

github.com

独自のtauri-snap-packagerを作った.

差分としては,

  1. core20にアップデート
  2. grade: 'stable'
  3. summarydescriptionはtauri.conf.jsonから取ってくる

状態にしたので,ビルドしたらそのままアップロードできる.

全体としてはこんな感じ

jobs:
  snap:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    env:
      SNAPCRAFT_BUILD_ENVIRONMENT: lxd
      SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Node.js setup
        uses: actions/setup-node@v4
        with:
          node-version: 20
      - uses: pnpm/action-setup@v2
        with:
          version: 8
      - name: Rust setup
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable

      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf
      - name: Setup LXD
        uses: canonical/setup-lxd@main
        with:
          channel: latest/stable
      - name: Install snapcraft
        run: |
          sudo snap install snapcraft --classic
      - name: Install app dependencies and build
        run: pnpm install --frozen-lockfile && pnpm tauri build

      - name: Build snap
        run: |
          pnpm run snap
      - name: Publish
        working-directory: src-tauri/target
        run: |
          snapcraft upload ./*.snap --release beta

これでGitHub Actionsから自動でsnapパッケージをビルドして,betaにアップロードするところまでやってくれる.