添加打包脚本

master
cysamurai 2 months ago
parent b17dcbe8d0
commit 6a8217f608

@ -0,0 +1,28 @@
在 Ubuntu 24.04.xx86_64 上:
cd /path/to/TauriClient
chmod +x scripts/build-linux-deb-all.sh
./scripts/build-linux-deb-all.sh
不带参数:按 PROJECTS 数组依次构建 所有 项目(当前为 call-client、broadcast-client
只构建部分项目:
./scripts/build-linux-deb-all.sh call-client
./scripts/build-linux-deb-all.sh call-client broadcast-client
各子项目里仍可执行(只打 当前项目 的 amd64 + arm64
call-client: npm run build:deb:all
broadcast-client: npm run build:deb:all
输出目录(你要的两类路径)
集中拷贝目录(推荐拿包)
TauriClient/dist/linux-deb/<项目名>/amd64/_.deb
TauriClient/dist/linux-deb/<项目名>/arm64/_.deb
Tauri 原始输出(未改路径)
<项目>/src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/deb/
<项目>/src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/deb/
脚本在每次 npm run build:deb:x64 / build:deb:arm64 成功后,会把对应目录下的 .deb 复制到 dist/linux-deb/...。
后续加新项目
在 scripts/build-linux-deb-all.sh 里 PROJECTS 数组 增加一行目录名即可(与 call-client 同级),并保证该项目 package.json 里仍有:
build:deb:x64、build:deb:arm64与现有一致

@ -9,7 +9,7 @@
"build:deb": "tauri build --bundles deb --target x86_64-unknown-linux-gnu", "build:deb": "tauri build --bundles deb --target x86_64-unknown-linux-gnu",
"build:deb:x64": "tauri build --bundles deb --target x86_64-unknown-linux-gnu", "build:deb:x64": "tauri build --bundles deb --target x86_64-unknown-linux-gnu",
"build:deb:arm64": "tauri build --bundles deb --target aarch64-unknown-linux-gnu", "build:deb:arm64": "tauri build --bundles deb --target aarch64-unknown-linux-gnu",
"build:deb:all": "npm run build:deb:x64 && npm run build:deb:arm64", "build:deb:all": "bash ../scripts/build-linux-deb-all.sh broadcast-client",
"build:appimage": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu", "build:appimage": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu",
"build:appimage:x64": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu", "build:appimage:x64": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu",
"build:appimage:arm64": "tauri build --bundles appimage --target aarch64-unknown-linux-gnu", "build:appimage:arm64": "tauri build --bundles appimage --target aarch64-unknown-linux-gnu",

@ -33,7 +33,22 @@
} }
}, },
"bundle": { "bundle": {
"active": false, "active": true,
"targets": "all" "targets": ["deb"],
"linux": {
"deb": {
"depends": []
},
"appimage": {
"bundleMediaFramework": false
}
},
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
]
} }
} }

@ -9,7 +9,7 @@
"build:deb": "tauri build --bundles deb --target x86_64-unknown-linux-gnu", "build:deb": "tauri build --bundles deb --target x86_64-unknown-linux-gnu",
"build:deb:x64": "tauri build --bundles deb --target x86_64-unknown-linux-gnu", "build:deb:x64": "tauri build --bundles deb --target x86_64-unknown-linux-gnu",
"build:deb:arm64": "tauri build --bundles deb --target aarch64-unknown-linux-gnu", "build:deb:arm64": "tauri build --bundles deb --target aarch64-unknown-linux-gnu",
"build:deb:all": "npm run build:deb:x64 && npm run build:deb:arm64", "build:deb:all": "bash ../scripts/build-linux-deb-all.sh call-client",
"build:appimage": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu", "build:appimage": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu",
"build:appimage:x64": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu", "build:appimage:x64": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu",
"build:appimage:arm64": "tauri build --bundles appimage --target aarch64-unknown-linux-gnu", "build:appimage:arm64": "tauri build --bundles appimage --target aarch64-unknown-linux-gnu",

@ -0,0 +1,125 @@
#!/usr/bin/env bash
# 在 Ubuntu 24.04.xx86_64 宿主机)上为多个 Tauri 2 + Vue 项目打出 amd64 与 arm64 的 .deb。
#
# 依赖(示例,按 Tauri Linux 文档补齐):
# - Node/npm、Rust、@tauri-apps/cli
# - rustup target add aarch64-unknown-linux-gnu
# - 本机 amd64 与交叉 arm64 的 libwebkit2gtk、gtk 等 -dev 包及 pkg-config 布局
#
# 用法:
# ./scripts/build-linux-deb-all.sh # 构建 PROJECTS 中全部项目
# ./scripts/build-linux-deb-all.sh call-client # 仅构建指定项目(可多个)
#
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# ---------------------------------------------------------------------------
# 同框架项目列表(相对 REPO_ROOT 的目录名)。后续新增项目在此追加一行即可。
# ---------------------------------------------------------------------------
PROJECTS=(
"call-client"
"broadcast-client"
# "another-tauri-app"
)
# 统一收集 .deb 的根目录(相对 REPO_ROOT
OUTPUT_ROOT="$REPO_ROOT/dist/linux-deb"
build_one_target() {
local project_dir="$1"
local npm_cmd="$2"
local abs_project="$REPO_ROOT/$project_dir"
if [[ ! -f "$abs_project/package.json" ]]; then
echo "错误: 未找到项目 $project_dir(缺少 package.json" >&2
exit 1
fi
echo "==> [$project_dir] $npm_cmd"
(cd "$abs_project" && npm run "$npm_cmd")
}
collect_debs() {
local project_dir="$1"
local arch_label="$2"
local triple="$3"
local src="$REPO_ROOT/$project_dir/src-tauri/target/$triple/release/bundle/deb"
local dest="$OUTPUT_ROOT/$project_dir/$arch_label"
if [[ ! -d "$src" ]]; then
echo "警告: 未找到输出目录 $src(跳过复制)" >&2
return 0
fi
mkdir -p "$dest"
shopt -s nullglob
local files=( "$src"/*.deb )
shopt -u nullglob
if (( ${#files[@]} == 0 )); then
echo "警告: $src 下没有 .deb 文件" >&2
return 0
fi
cp -v "${files[@]}" "$dest/"
}
build_project() {
local project_dir="$1"
echo ""
echo "######## $project_dir: amd64 ########"
unset PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PKG_CONFIG_SYSROOT_DIR PKG_CONFIG_ALLOW_CROSS 2>/dev/null || true
build_one_target "$project_dir" "build:deb:x64"
collect_debs "$project_dir" "amd64" "x86_64-unknown-linux-gnu"
echo ""
echo "######## $project_dir: arm64 (cross) ########"
export PKG_CONFIG_ALLOW_CROSS=1
export PKG_CONFIG_SYSROOT_DIR=/
export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig
export PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig
build_one_target "$project_dir" "build:deb:arm64"
collect_debs "$project_dir" "arm64" "aarch64-unknown-linux-gnu"
unset PKG_CONFIG_ALLOW_CROSS PKG_CONFIG_SYSROOT_DIR PKG_CONFIG_PATH PKG_CONFIG_LIBDIR
}
select_projects() {
if (($# == 0)); then
printf '%s\n' "${PROJECTS[@]}"
return
fi
local name ok
for name in "$@"; do
ok=0
for p in "${PROJECTS[@]}"; do
if [[ "$p" == "$name" ]]; then
ok=1
break
fi
done
if [[ "$ok" -eq 0 ]]; then
echo "错误: 未知项目 \"$name\"(请加入 scripts/build-linux-deb-all.sh 的 PROJECTS 数组)" >&2
exit 1
fi
echo "$name"
done
}
main() {
mapfile -t to_build < <(select_projects "$@")
mkdir -p "$OUTPUT_ROOT"
for p in "${to_build[@]}"; do
build_project "$p"
done
echo ""
echo "==> 全部完成"
echo " 统一输出目录: $OUTPUT_ROOT"
echo " 每项目下: <项目名>/amd64/*.deb 与 <项目名>/arm64/*.deb"
echo " Tauri 原始路径仍在各项目:"
echo " src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/deb/"
echo " src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/deb/"
}
main "$@"
Loading…
Cancel
Save