前言
这篇看个简单的——tauri-action
tauri-apps/tauri-action: Build your Web application as a Tauri binary for macOS, Linux and Windowshttps://github.com/tauri-apps/tauri-action这是一个github的工作流,这个东西主要是用于发布tauri
这还是很好的,因为tauri项目一般比较大,再打包一下,非常占存储空间,使用这个工作流打包,不占空间,还能发布版本,还可以跨平台测试。
正文
工作流的参考
关于工作流及相关知识,笔者不细说,自行参考
GitHub 流 - GitHub 文档https://docs.github.com/zh/get-started/using-github/github-flow
准备
首先新建一个项目ta,过程什么的不必细说。直接打包,在github上创建仓库。
然后在根目录下,新建一个.github文件夹,然后在.github文件夹中新建一个workflows文件夹
最后在workflows文件夹里面新建一个yaml文件,这个yaml文件的名字任取。
笔者取名build.yaml文件
学习一下配置的内容
使用之前,看看配置,说了什么东西,笔者也顺便学习一下。
输入参数
项目初始化
名称 | 是否必需 | 描述 | 类型 | 默认值 |
---|---|---|---|---|
projectPath | 否 | Tauri 项目根目录相对于当前工作目录的路径 | 字符串 | . |
distPath | 否 | 包含 index.html 和 JS/CSS 的可分发文件夹路径 | 字符串 | |
iconPath | 否 | 用作应用图标的 PNG 文件路径,相对于 projectPath | 字符串 | |
bundleIdentifier | 是(如果未通过 --config 设置) | 初始化 Tauri 应用时注入的 bundle 标识符 | 字符串 | |
appName | 是(如果未通过 --config 设置) | 初始化 Tauri 应用时注入的应用名称 | 字符串 | |
appVersion | 是(如果未通过 --config 设置) | 初始化 Tauri 应用时注入的应用版本 | 字符串 |
构建选项
名称 | 是否必需 | 描述 | 类型 | 默认值 |
---|---|---|---|---|
projectPath | 否 | Tauri 项目根目录相对于当前工作目录的路径 | 字符串 | . |
includeDebug | 否 | 是否包含调试构建 | 布尔值 | false |
includeRelease | 否 | 是否包含发布构建 | 布尔值 | true |
includeUpdaterJson | 否 | 是否上传更新器的 JSON 文件(仅当配置了更新器时相关) | 布尔值 | true |
updaterJsonPreferNsis | 否 | 更新器 JSON 文件是否优先使用 NSIS(setup.exe)而非 WiX(.msi)bundle | 布尔值 | false(未来 Tauri v2 项目可能改为 true) |
updaterJsonKeepUniversal | 否 | 更新器 JSON 文件是否在 aarch64 和 x86_64 字段之外包含 macOS 通用构建 | 布尔值 | false |
tauriScript | 否 | 执行 Tauri CLI 的脚本,不应包含任何参数或命令(如 build) | 字符串 | npm run|pnpm|yarn tauri |
args | 否 | 当前构建命令的附加参数 | 字符串 | |
retryAttempts | 否 | 如果初始构建失败,重试构建的次数(目前仅影响 tauri build) | 数字 | 0 |
Release 配置
名称 | 是否必需 | 描述 | 类型 | 默认值 |
---|---|---|---|---|
releaseId | 否 | 要上传构建产物的 Release ID。如果设置,tagName 和 releaseName 将被忽略 | 数字 | |
tagName | 否 | 要上传或创建的 Release 的标签名称,或与 releaseId 对应的 Release 标签 | 字符串 | |
releaseName | 否 | 要创建的 Release 名称。如果 tagName 无对应 Release,则为必需 | 字符串 | |
releaseBody | 否 | 要创建的 Release 的描述内容 | 字符串 | |
releaseDraft | 否 | 要查找或创建的 Release 是否为草稿 | 布尔值 | false |
prerelease | 否 | 要创建的 Release 是否为预发布 | 布尔值 | false |
releaseCommitish | 否 | 创建 Git 标签的分支或提交 SHA,如果标签已存在则忽略 | 字符串 | 当前提交的 SHA |
owner | 否 | Release 上传到的仓库的账户所有者。需要 env 中的 GITHUB_TOKEN | 字符串 | 当前仓库的所有者 |
repo | 否 | Release 上传到的仓库名称。需要 env 中的 GITHUB_TOKEN | 字符串 | 当前仓库的名称 |
输出参数
名称 | 描述 |
---|---|
releaseId | 创建的 Release 的 ID |
releaseHtmlUrl | 用户可以导航查看创建的 Release 的 URL |
releaseUploadUrl | 上传资产到创建的 Release 的 URL |
artifactPaths | 生成的构建产物的路径 |
appVersion | 应用的版本 |
使用技巧和注意事项
-
无需 Tauri 配置的仓库:你可以在未配置 Tauri's 仓库中使用此 Action。Action 会在构建前自动初始化 Tauri,并配置为使用你的 Web 资产。
-
项目初始化配置:可通过
distPath
和iconPath
选项配置项目初始化。 -
自定义 tauri.conf.json:如果需要进一步自定义默认的
tauri.conf.json
文件,可以在构建时添加自定义配置文件并合并:args: --config custom-config.json
-
自定义 Tauri CLI 脚本:使用
tauriScript
选项运行自定义 Tauri CLI 脚本。例如,代替运行yarn tauri <COMMAND> <ARGS>
或npm run tauri <COMMAND> <ARGS>
,Action 将执行${tauriScript} <COMMAND> <ARGS>
。这在需要自定义构建功能(如desktop:build
脚本)时很有用。tauriScript
也可以是 tauri-cli 二进制文件的绝对路径,但路径当前不能包含空格。 -
附加构建参数:通过
args
选项为构建命令添加额外参数。例如,指定特定构建目标:args: --target your-target-arch
-
非根目录的 Tauri 项目:如果 Tauri 项目不在仓库根目录,使用
projectPath
输入参数。通常无需设置,但如果未设置,Action 将安装并使用全局的@tauri-apps/cli
,可能导致问题(例如配置了tauriScript
或仓库中有多个tauri.conf.json
文件)。此外,通过--config
标志提供的相对路径将相对于projectPath
解析,以匹配 Tauri's 行为。 -
Release 上传逻辑:
-
如果设置了
releaseId
,Action 将使用该 Release 上传。 -
如果设置了
tagName
,Action 将尝试查找该标签的现有 Release。如果不存在,Action 需要releaseName
来为指定的tagName
创建新 Release。 -
如果你手动创建 Release 并提供
releaseId
但未设置tagName
,更新器 bundle 的下载 URL 将指向releases/latest/download/<bundle>
,如果你的仓库包含不带更新器 bundle 的 Release,可能会导致问题。 -
如果为现有 Release 提供
tagName
,且该 Release 为草稿,则必须将releaseDraft
设置为true
。
-
-
仅构建不上传:如果只想构建应用而不上传(例如仅使用
actions/upload-artifact
),只需省略tagName
、releaseName
和releaseId
。
说实话、配置很多。
简单地打包——仅构建不上传
先试试这个。
需要使用actions/upload-artifact。
yaml文件的内容如下
name: 打包
on:
workflow_dispatch:
inputs:
version:
description: '打包'
required: true
type: boolean
jobs:
publish-tauri:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: 'windows-latest'
args: ''
runs-on: ${{ matrix.platform }}
steps:
- name: 读取仓库
uses: actions/checkout@v4
- name: 安装 node
uses: actions/setup-node@v4
with:
node-version: "23"
- name: 安装 rust
uses: dtolnay/rust-toolchain@stable
- name: 安装 pnpm
run: npm install -g pnpm
- name: 安装依赖
run: pnpm install
- name: 打包tauri
uses: tauri-apps/tauri-action@v0
- name: 上传构建产物
uses: actions/upload-artifact@v4
with:
name: tauri-app-${{ matrix.platform }}
path: src-tauri/target/release/bundle/
1、笔者手动触发工作流
2、笔者只打包了Windows系统,节约时间
每次触发工作流,打包感觉要6-8分钟。
打包上传没问题。
发布
大部分的内容都差不多
name: 发布
on:
push:
tags:
- "v*.*.*"
jobs:
publish-tauri:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: 'windows-latest'
args: ''
runs-on: ${{ matrix.platform }}
steps:
- name: 读取仓库
uses: actions/checkout@v4
- name: 安装 node
uses: actions/setup-node@v4
with:
node-version: "23"
- name: 安装 rust
uses: dtolnay/rust-toolchain@stable
- name: 安装 pnpm
run: npm install -g pnpm
- name: 安装依赖
run: pnpm install
- name: 发布tauri
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version.
releaseName: "App v__VERSION__"
releaseBody: "See the assets to download this version and install."
releaseDraft: false
prerelease: false
args: ${{ matrix.args }}
笔者使用tag触发工作流
触发
❯ git tag v1.0.0
❯ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To https://github.com/qe-present/ta.git
* [new tag] v1.0.0 -> v1.0.
打包的结果如下
发现自己创建了一个tag
笔者发现,这个版本号是以tauri.config.json里面的version为准
或者使用推送到releases分支时触发
name: 发布release
on:
push:
branches:
- releases
都行。
没有设置更新版本的操作,以后会使用的。
linux下的打包
笔者还从来没有在linux下运行tauri项目,正好可以试试
如下
name: linux打包
on:
workflow_dispatch:
inputs:
version:
description: '打包'
required: true
type: boolean
jobs:
build-linux:
runs-on: ubuntu-latest
steps:
- name: 读取仓库
uses: actions/checkout@v4
- name: 安装 node
uses: actions/setup-node@v4
with:
node-version: "23"
- name: 安装ubuntu依赖
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: 安装 rust
uses: dtolnay/rust-toolchain@stable
- name: 安装 pnpm
run: npm install -g pnpm
- name: 安装依赖
run: pnpm install
- name: 打包tauri
uses: tauri-apps/tauri-action@v0
- name: 上传构建产物
uses: actions/upload-artifact@v4
with:
name: tauri-app-linux
path: src-tauri/target/release/bundle/
在工作流中使用最新的ubantu,是24.04.2 LTS
打包的时候,报错了
说什么不能找到这个包,笔者搜了搜
libwebkit2gtk-4.0 not available in Ubuntu 24 & Debian 13 repositories · Issue #9662 · tauri-apps/taurihttps://github.com/tauri-apps/tauri/issues/9662Ubuntu 24.04 无法安装 libwebkit2gtk - 卡卡一点都不卡 - 博客园
https://www.cnblogs.com/gonzo/p/18249459dependencies - How to install the libwebkitgtk package on Ubuntu 20.04 LTS? - Stack Overflow
https://stackoverflow.com/questions/62301866/how-to-install-the-libwebkitgtk-package-on-ubuntu-20-04-lts修改一下source
因此,添加
- name: 添加软件源
run: |
sudo tee -a /etc/apt/sources.list <<< "deb http://cz.archive.ubuntu.com/ubuntu bionic main universe"
然后,又报错
需要添加一个公钥,
笔者不确定这个公钥是不是固定的,笔者没了解过
总之,按照提示,添加
- name: 导入公钥
run: |
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
然后打包,成功了
下载工件,并解压,笔者使用Windows 的wsl运行
适用于 Linux 的 Windows 子系统文档 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/windows/wsl/
wsl运行
wsl -d Ubantu
笔者在运行的时候,也报了前面的错
总之解决报错,好像需要安装下面这个
sudo apt-get install libwebkit2gtk-4.0-37
安装
sudo dpkg -i ta_0.1.1_amd64.deb
好像不需要安装,可以直接运行
总之
ta
可以看到如下结果
原来这就是在linux下的tauri,第一次见。哈哈哈哈
图标还带有一只企鹅。
还有rpm和appImage,就不展示了
总结
总之,使用工作流打包成功了。
wsl挺好用的。