Bootstrap

tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录

这些error的坑,肯定是很多人不想看到的,我的开源软件PakePlus是使用tauri开发的,PakePlus是一个界面化将任何网站打包为轻量级跨平台软件的程序,利用Tauri轻松构建轻量级多端桌面应用和多端手机应用,为了实现发布的时候支持mac的inter芯片和arm芯片,还有windows的inter芯片和arm芯片,需要编写github action的编译文件build.yml,tauri官网支持的并不是很完善,需要手动添加额外的平台,官方文档:GitHub | Tauri

这里记录一下编译的时候报错的解决办法,以及一个可以直接复制过去使用的文件。

常见报错

1.没有给x86_64-pc-windows-msvc配置target就会报下面的错

D:\a\PakePlus\PakePlus\src-tauri\target\release\bundle\nsis\PakePlus_0.3.2_x64-setup.exe

86Found release with tag main.

87Deleting existing PakePlus_0.3.2_x64_en-US.msi...

88Uploading PakePlus_0.3.2_x64_en-US.msi...

89Error: Not Found - REST API endpoints for release assets - GitHub Docs

解决办法:添加target

2.没有添加target属性还会报这个错

Run rustup target add

4error: error: the following required arguments were not provided:

5 <target>...

7Usage: rustup target add <target>...

9For more information, try '--help'.

因为Install rust target阶段需要安装声明好的依赖,没有就会报错:

3.没有安装aarch64-pc-windows-msvc依赖导致的

✓ built in 10.25s

53 Error failed to build app: Target aarch64-pc-windows-msvc is not installed (installed targets: i686-pc-windows-msvc, x86_64-pc-windows-gnu, x86_64-pc-windows-msvc). Please run `rustup target add aarch64-pc-windows-msvc`.

54 ELIFECYCLE  Command failed with exit code 1.

55Error: Command failed with exit code 1: pnpm tauri build --target aarch64-pc-windows-msvc

要编译生成arm架构的windows安装包,就需要这个依赖支持,所以需要添加下面的步骤,然后配合matrix的平台一起使用:

4.在linux系统中安装依赖环境

Reading state information...

30E: Unable to locate package libwebkit2gtk-4.1-dev

31E: Couldn't find any package by glob 'libwebkit2gtk-4.1-dev'

32E: Couldn't find any package by regex 'libwebkit2gtk-4.1-dev'

33Error: Process completed with exit code 100.

Sync node version and setup cache

0s

install Rust stable

0s

Rust cache

0s

install frontend dependencies

0s

Run tauri-apps/tauri-action@v0

0s

Post Run pnpm/action-setup@v3

0s

Post Setup node

0s

Post Run actions/checkout@v4

0s

Complete job

0s

需要增加这一步:

分享一个直接可以使用的文件:

name: Release
on:
    push:
        tags:
            - 'v*'
    workflow_dispatch:
        inputs:
            branch:
                description: 'Branch to run the workflow on'
                required: true
                default: 'template'

jobs:
    publish-tauri:
        permissions:
            contents: write
        strategy:
            fail-fast: false
            matrix:
                include:
                    - platform: 'macos-latest' # for Arm based macs (M1 and above).
                      target: 'aarch64-apple-darwin'
                      args: '--target aarch64-apple-darwin'
                    - platform: 'macos-latest' # for Intel based macs.
                      target: 'x86_64-apple-darwin'
                      args: '--target x86_64-apple-darwin'
                    - platform: 'ubuntu-20.04'
                      target: 'x86_64-unknown-linux-gnu'
                      args: ''
                    - platform: 'windows-latest'
                      target: 'x86_64-pc-windows-msvc'

                    - platform: 'windows-latest'
                      target: 'i686-pc-windows-msvc'
                    - platform: 'windows-latest'
                      target: 'aarch64-pc-windows-msvc'
                      args: '--target aarch64-pc-windows-msvc'

        runs-on: ${{ matrix.platform }}
        steps:
            - name: Checkout repository
              uses: actions/checkout@v3

            - name: Install rust target
              run: rustup target add ${{ matrix.target }}

            - name: Install dependencies (ubuntu only)
              if: matrix.platform == 'ubuntu-20.04'
              # You can remove libayatana-appindicator3-dev if you don't use the system tray feature.
              run: |
                  sudo apt-get update
                  sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev

            - name: Setup node
              uses: actions/setup-node@v4
              with:
                  node-version: 20

            - uses: pnpm/action-setup@v3
              with:
                  version: latest

            # 获取 pnpm 缓存
            - name: Sync node version and setup cache
              uses: actions/setup-node@v4
              with:
                  node-version: 20
                  cache: pnpm

            - name: install Rust stable
              uses: dtolnay/rust-toolchain@stable # Set this to dtolnay/rust-toolchain@nightly
              with:
                  # Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds.
                  targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}

            - name: Rust cache
              uses: swatinem/rust-cache@v2
              with:
                  workspaces: './src-tauri -> target'

            - name: install frontend dependencies
              # If you don't have `beforeBuildCommand` configured you may want to build your frontend here too.
              run: pnpm install # change this to npm or pnpm depending on which one you use.

            - uses: tauri-apps/tauri-action@v0
              env:
                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
              with:
                  tagName: ${{ github.ref_name }} # This only works if your workflow triggers on new tags.
                  releaseName: 'PakePlus v__VERSION__' # tauri-action replaces \_\_VERSION\_\_ with the app version.
                  releaseBody: 'This is a workflow to help you automate the publishing of your PakePlus project to GitHub Packages.'
                  releaseDraft: false
                  prerelease: false
                  publish: true
                  args: ${{ matrix.args }}

;