Tauriでアプリを作っているんだけど,snapパッケージをビルドしてSnap Storeにアップロードしたいと思った.
しかしドキュメントにはsnapに関する記述がない.
また,Tauriは公式でGitHub Actionsを提供していて,こいつを使ってビルドできるのだが,こいつもsnapをサポートしている様子がない.
tauri-snap-packager
というわけで別のパッケージを使ってsnapをビルドするわけだが,
こいつを使ってみた.
ただし,これにはいくつか問題点がある.
- multipassが必要になる
- ビルドするとsnapcraft.ymlが生成されるが,
grade: 'devel'
指定のため,このままだとsnapcraft upload
できない summary
やdescription
もデフォルトのままなのでカスタマイズできない- core18に依存しており,かなり古い
1の大きな問題点は,GitHub Actionsだ.GitHub Actionsでmultipassを動かすのはかなり難しい.
このため,使うのであれば,lxdの方を推奨されており,これはActionsが用意されている.
しかしここまでクリアしても, grade
の問題は残る.
ローカルでやるのであれば,一度 tauri-snap-packager
でビルドしたあと,snapcraft.ymlを修正し snapcraft
コマンドを再度実行することで再ビルドされる.
しかし,GitHub Actionsでビルドされるとなると,これを毎回シェルスクリプトでやるのは虚しい.
というわけで作った
独自のtauri-snap-packagerを作った.
差分としては,
- core20にアップデート
grade: 'stable'
summary
とdescription
は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にアップロードするところまでやってくれる.