|
|
|
@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
# 在 Ubuntu 24.04.x(x86_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 "$@"
|