diff --git a/scripts/docker/run-build.sh b/scripts/docker/run-build.sh index 600fbd8..cd9a505 100644 --- a/scripts/docker/run-build.sh +++ b/scripts/docker/run-build.sh @@ -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 <&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[@]}"