cysamurai 2 months ago
parent 67f8b14ff6
commit 404b403f21

@ -5,7 +5,48 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
IMAGE_TAG="${IMAGE_TAG:-tauri-linux-deb:24.04}"
PROJECT_ARGS=("$@")
RUN_MODE="${RUN_MODE:-hybrid}" # hybrid: host amd64 + docker arm64; docker: docker all
PROJECT_ARGS=()
while (($# > 0)); do
case "$1" in
--docker-only)
RUN_MODE="docker"
shift
;;
--hybrid)
RUN_MODE="hybrid"
shift
;;
--help|-h)
cat <<EOF
用法:
$(basename "$0") [--docker-only|--hybrid] [项目名...]
说明:
--hybrid 宿主机构建 amd64容器构建 arm64默认
--docker-only 容器内同时构建 amd64 + arm64绕过宿主机依赖
EOF
exit 0
;;
--)
shift
break
;;
-*)
echo "错误: 未知参数 $1" >&2
exit 1
;;
*)
PROJECT_ARGS+=("$1")
shift
;;
esac
done
if (($# > 0)); then
PROJECT_ARGS+=("$@")
fi
cd "$REPO_ROOT"
@ -29,29 +70,38 @@ if ((${#SELECTED_PROJECTS[@]} == 0)); then
exit 1
fi
echo "==> host npm ci (${SELECTED_PROJECTS[*]})"
for d in "${SELECTED_PROJECTS[@]}"; do
if [[ ! -f "$REPO_ROOT/$d/package.json" ]]; then
echo "错误: 缺少 $REPO_ROOT/$d/package.json" >&2
exit 1
fi
(cd "$REPO_ROOT/$d" && npm ci)
done
if [[ "$RUN_MODE" == "hybrid" ]]; then
echo "==> host npm ci (${SELECTED_PROJECTS[*]})"
for d in "${SELECTED_PROJECTS[@]}"; do
if [[ ! -f "$REPO_ROOT/$d/package.json" ]]; then
echo "错误: 缺少 $REPO_ROOT/$d/package.json" >&2
exit 1
fi
(cd "$REPO_ROOT/$d" && npm ci)
done
echo "==> host build amd64 (${SELECTED_PROJECTS[*]})"
bash "$REPO_ROOT/scripts/build-linux-deb-all.sh" --arch amd64 "${SELECTED_PROJECTS[@]}"
echo "==> host build amd64 (${SELECTED_PROJECTS[*]})"
bash "$REPO_ROOT/scripts/build-linux-deb-all.sh" --arch amd64 "${SELECTED_PROJECTS[@]}"
fi
echo "==> docker build --platform linux/amd64 -f scripts/docker/Dockerfile -t $IMAGE_TAG $REPO_ROOT"
docker build --platform linux/amd64 -f scripts/docker/Dockerfile -t "$IMAGE_TAG" "$REPO_ROOT"
echo "==> docker run (arm64: npm ci + build-linux-deb-all.sh)"
if [[ "$RUN_MODE" == "docker" ]]; then
DOCKER_BUILD_ARCH="all"
echo "==> docker run (amd64+arm64: npm ci + build-linux-deb-all.sh)"
else
DOCKER_BUILD_ARCH="arm64"
echo "==> docker run (arm64: npm ci + build-linux-deb-all.sh)"
fi
docker run --rm \
--platform linux/amd64 \
-v "$REPO_ROOT:/work" \
-w /work \
-e RUSTUP_HOME=/opt/rustup \
-e CARGO_HOME=/opt/cargo \
-e BUILD_ARCH=arm64 \
-e BUILD_ARCH="$DOCKER_BUILD_ARCH" \
-e NPM_REGISTRY="${NPM_REGISTRY:-https://registry.npmjs.org/}" \
"$IMAGE_TAG" \
bash /work/scripts/docker/container-entry.sh "${SELECTED_PROJECTS[@]}"

Loading…
Cancel
Save