You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
3.4 KiB
Bash

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env bash
# 在容器内执行:为各子项目 npm ci再调用仓库根脚本路径挂载为 /work
set -euo pipefail
cd /work
BUILD_ARCH="${BUILD_ARCH:-all}"
# npm 网络增强:默认使用官方 registry可通过 NPM_REGISTRY 覆盖;增加超时与重试,减少 ECONNRESET 失败概率。
npm config set registry "${NPM_REGISTRY:-https://registry.npmjs.org/}"
npm config set fetch-retries 5
npm config set fetch-retry-factor 2
npm config set fetch-retry-mintimeout 20000
npm config set fetch-retry-maxtimeout 120000
npm config set fetch-timeout 300000
ensure_amd64_deps() {
local x64_pc_dir="/usr/lib/x86_64-linux-gnu/pkgconfig"
local missing=0
for f in glib-2.0.pc gdk-3.0.pc webkit2gtk-4.0.pc; do
if [[ ! -f "$x64_pc_dir/$f" ]]; then
missing=1
break
fi
done
if [[ "$missing" -eq 0 ]]; then
return
fi
echo "==> 补齐 amd64 依赖(当前容器缺少 x86_64 pkg-config 文件)"
apt-get update
apt-get install -y --no-install-recommends \
build-essential:amd64 pkg-config:amd64 patchelf:amd64 \
libglib2.0-dev:amd64 libgtk-3-dev:amd64 \
libbrotli-dev:amd64 \
libsoup2.4-dev:amd64 \
libwebkit2gtk-4.0-dev:amd64 libjavascriptcoregtk-4.0-dev:amd64 \
libayatana-appindicator3-dev:amd64 librsvg2-dev:amd64 libssl-dev:amd64
}
ensure_arm64_deps() {
local arm64_pc_dir="/usr/lib/aarch64-linux-gnu/pkgconfig"
local missing=0
for f in glib-2.0.pc gdk-3.0.pc webkit2gtk-4.0.pc; do
if [[ ! -f "$arm64_pc_dir/$f" ]]; then
missing=1
break
fi
done
if [[ "$missing" -eq 0 ]]; then
return
fi
echo "==> 补齐 arm64 交叉依赖(当前容器缺少 aarch64 pkg-config 文件)"
apt-get update
apt-get install -y --no-install-recommends \
-o Dpkg::Options::="--force-overwrite" \
gcc-aarch64-linux-gnu \
libglib2.0-dev:arm64 libgtk-3-dev:arm64 \
libbrotli-dev:arm64 \
libsoup2.4-dev:arm64 \
libcairo2-dev:arm64 libpango1.0-dev:arm64 \
libgdk-pixbuf2.0-dev:arm64 libatk1.0-dev:arm64 libepoxy-dev:arm64 \
libwebkit2gtk-4.0-dev:arm64 libjavascriptcoregtk-4.0-dev:arm64 \
libssl-dev:arm64 libayatana-appindicator3-dev:arm64 librsvg2-dev:arm64
}
case "$BUILD_ARCH" in
amd64)
ensure_amd64_deps
;;
arm64)
ensure_arm64_deps
;;
all)
ensure_amd64_deps
ensure_arm64_deps
;;
*)
echo "错误: BUILD_ARCH 仅支持 all|amd64|arm64当前为 \"$BUILD_ARCH\"" >&2
exit 1
;;
esac
if (($# == 0)); then
mapfile -t projects < <(bash /work/scripts/build-linux-deb-all.sh --list-projects)
else
projects=("$@")
fi
if (( ${#projects[@]} == 0 )); then
echo "错误: 没有可构建项目" >&2
exit 1
fi
for d in "${projects[@]}"; do
if [[ ! -f "$d/package.json" ]]; then
echo "错误: 缺少 /work/$d/package.json" >&2
exit 1
fi
if [[ "${CLEAN_TAURI_TARGET:-1}" == "1" && -d "$d/src-tauri/target" ]]; then
echo "==> 清理 $d/src-tauri/target避免复用损坏缓存"
rm -rf "$d/src-tauri/target"
fi
(
cd "$d"
# npm ci 网络偶发抖动时最多重试 3 次
for i in 1 2 3; do
if npm ci; then
break
fi
if [[ "$i" -eq 3 ]]; then
echo "错误: $d npm ci 连续 3 次失败" >&2
exit 1
fi
echo "警告: $d npm ci 失败10 秒后重试($i/3..." >&2
sleep 10
done
)
done
exec bash /work/scripts/build-linux-deb-all.sh --arch "$BUILD_ARCH" "${projects[@]}"