#!/usr/bin/env bash # 在宿主机上:先打 amd64,再在容器中打 arm64(均支持自动发现项目)。 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}" 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 <&2 exit 1 ;; *) PROJECT_ARGS+=("$1") shift ;; esac done if (($# > 0)); then PROJECT_ARGS+=("$@") fi cd "$REPO_ROOT" if ((${#PROJECT_ARGS[@]} == 0)); then mapfile -t SELECTED_PROJECTS < <(bash "$REPO_ROOT/scripts/build-linux-deb-all.sh" --list-projects) else SELECTED_PROJECTS=("${PROJECT_ARGS[@]}") fi # 防御性过滤空行,避免出现未知项目 "" FILTERED_PROJECTS=() for d in "${SELECTED_PROJECTS[@]}"; do if [[ -n "$d" ]]; then FILTERED_PROJECTS+=("$d") fi done SELECTED_PROJECTS=("${FILTERED_PROJECTS[@]}") if ((${#SELECTED_PROJECTS[@]} == 0)); then echo "错误: 没有可构建项目" >&2 exit 1 fi 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[@]}" 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" 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="$DOCKER_BUILD_ARCH" \ -e NPM_REGISTRY="${NPM_REGISTRY:-https://registry.npmjs.org/}" \ "$IMAGE_TAG" \ bash /work/scripts/docker/container-entry.sh "${SELECTED_PROJECTS[@]}"