From d467322ebef532964a5f3cac070a4c7e445c796b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=9B=BD=E9=94=8B?= Date: Thu, 12 Mar 2026 19:00:21 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20fix(release/macos):=20=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=20macOS=20=E6=89=93=E5=8C=85=E9=93=BE=E8=B7=AF?= =?UTF-8?q?=E7=9A=84=20UPX=20=E5=8E=8B=E7=BC=A9=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除 release 与手动测试工作流中的 macOS UPX 安装与压缩步骤 - build-release.sh 不再对 macOS arm64/amd64 主程序执行 UPX - 保留 Windows 与 Linux 的 UPX 压缩策略 --- .github/workflows/release.yml | 20 ++--------------- .../workflows/test-build-all-platforms.yml | 20 ++--------------- build-release.sh | 22 +++++-------------- 3 files changed, 9 insertions(+), 53 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 62fe17e..08171df 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -91,12 +91,6 @@ jobs: with: node-version: '20' - - name: Install UPX (macOS) - if: contains(matrix.platform, 'darwin') - run: | - brew install upx - upx --version - - name: Install UPX (Windows) if: contains(matrix.platform, 'windows') shell: pwsh @@ -304,20 +298,10 @@ jobs: APP_BIN=$(find "$APP_PATH/Contents/MacOS" -maxdepth 1 -type f | head -n 1) if [ -z "$APP_BIN" ]; then - echo "❌ 未找到 macOS 应用主程序,无法进行 UPX 压缩!" + echo "❌ 未找到 macOS 应用主程序!" exit 1 fi - BEFORE_BYTES=$(wc -c <"$APP_BIN" | tr -d '[:space:]') - echo "🗜️ 正在使用 UPX 压缩 macOS 可执行文件: $APP_BIN ..." - upx --best --lzma --force --force-macos "$APP_BIN" - upx -t "$APP_BIN" - AFTER_BYTES=$(wc -c <"$APP_BIN" | tr -d '[:space:]') - if [ "$AFTER_BYTES" -lt "$BEFORE_BYTES" ]; then - SAVED_BYTES=$((BEFORE_BYTES - AFTER_BYTES)) - awk -v b="$BEFORE_BYTES" -v a="$AFTER_BYTES" -v s="$SAVED_BYTES" 'BEGIN { printf "✅ macOS UPX 压缩完成:%.2fMB -> %.2fMB,减少 %.2fMB\n", b/1024/1024, a/1024/1024, s/1024/1024 }' - else - awk -v b="$BEFORE_BYTES" -v a="$AFTER_BYTES" 'BEGIN { printf "ℹ️ macOS UPX 压缩完成:%.2fMB -> %.2fMB\n", b/1024/1024, a/1024/1024 }' - fi + echo "ℹ️ macOS 产物不执行 UPX 压缩,保留原始主程序。" echo "🔏 正在进行 Ad-hoc 签名..." # 注意:Ad-hoc + hardened runtime(--options runtime)在未配置 entitlements 时, diff --git a/.github/workflows/test-build-all-platforms.yml b/.github/workflows/test-build-all-platforms.yml index d978dfe..17ba77c 100644 --- a/.github/workflows/test-build-all-platforms.yml +++ b/.github/workflows/test-build-all-platforms.yml @@ -96,12 +96,6 @@ jobs: with: node-version: '20' - - name: Install UPX (macOS) - if: contains(matrix.platform, 'darwin') - run: | - brew install upx - upx --version - - name: Install UPX (Windows) if: contains(matrix.platform, 'windows') shell: pwsh @@ -268,20 +262,10 @@ jobs: APP_NAME=$(basename "$APP_PATH") APP_BIN=$(find "$APP_PATH/Contents/MacOS" -maxdepth 1 -type f | head -n 1) if [ -z "$APP_BIN" ]; then - echo "未找到 macOS 应用主程序,无法进行 UPX 压缩" + echo "未找到 macOS 应用主程序" exit 1 fi - BEFORE_BYTES=$(wc -c <"$APP_BIN" | tr -d '[:space:]') - echo "🗜️ 使用 UPX 压缩 macOS 可执行文件: $APP_BIN ..." - upx --best --lzma --force --force-macos "$APP_BIN" - upx -t "$APP_BIN" - AFTER_BYTES=$(wc -c <"$APP_BIN" | tr -d '[:space:]') - if [ "$AFTER_BYTES" -lt "$BEFORE_BYTES" ]; then - SAVED_BYTES=$((BEFORE_BYTES - AFTER_BYTES)) - awk -v b="$BEFORE_BYTES" -v a="$AFTER_BYTES" -v s="$SAVED_BYTES" 'BEGIN { printf "✅ macOS UPX 压缩完成:%.2fMB -> %.2fMB,减少 %.2fMB\n", b/1024/1024, a/1024/1024, s/1024/1024 }' - else - awk -v b="$BEFORE_BYTES" -v a="$AFTER_BYTES" 'BEGIN { printf "ℹ️ macOS UPX 压缩完成:%.2fMB -> %.2fMB\n", b/1024/1024, a/1024/1024 }' - fi + echo "ℹ️ macOS 产物不执行 UPX 压缩,保留原始主程序。" codesign --force --deep --sign - "$APP_NAME" ZIP_NAME="GoNavi-${LABEL}-${{ matrix.os_name }}-${{ matrix.arch_name }}-run${GITHUB_RUN_NUMBER}.zip" DMG_NAME="GoNavi-${LABEL}-${{ matrix.os_name }}-${{ matrix.arch_name }}-run${GITHUB_RUN_NUMBER}.dmg" diff --git a/build-release.sh b/build-release.sh index 8e4a4a7..d60cad5 100755 --- a/build-release.sh +++ b/build-release.sh @@ -45,7 +45,6 @@ format_size_mb() { try_compress_binary_with_upx() { local exe_path="$1" local label="$2" - local is_macos_binary="${3:-false}" if [ ! -f "$exe_path" ]; then echo -e "${RED} ❌ 未找到 ${label} 文件:$exe_path${NC}" exit 1 @@ -64,21 +63,10 @@ try_compress_binary_with_upx() { exit 1 fi - local upx_cmd=(upx --best --lzma --force) - if [ "$is_macos_binary" = "true" ]; then - if upx --help 2>&1 | grep -q -- "--force-macos"; then - upx_cmd+=(--force-macos) - else - echo -e "${RED} ❌ 当前 upx 不支持 --force-macos,无法压缩 ${label}。${NC}" - echo " 请升级 upx 到支持 macOS 压缩的版本(UPX 5+)。" - exit 1 - fi - fi - local before_bytes after_bytes before_bytes=$(get_file_size_bytes "$exe_path") echo " 🗜️ 正在使用 UPX 压缩 ${label}..." - if "${upx_cmd[@]}" "$exe_path" >/dev/null 2>&1; then + if upx --best --lzma --force "$exe_path" >/dev/null 2>&1; then if ! upx -t "$exe_path" >/dev/null 2>&1; then echo -e "${RED} ❌ UPX 校验失败:${label}${NC}" exit 1 @@ -120,9 +108,9 @@ if [ $? -eq 0 ]; then APP_BIN_PATH=$(find "$DIST_DIR/$APP_DEST_NAME/Contents/MacOS" -maxdepth 1 -type f -print -quit) if [ -n "$APP_BIN_PATH" ] && [ -f "$APP_BIN_PATH" ]; then - try_compress_binary_with_upx "$APP_BIN_PATH" "macOS arm64 应用主程序" "true" + echo -e "${YELLOW} ⚠️ macOS arm64 不再执行 UPX 压缩,保留原始主程序。${NC}" else - echo -e "${RED} ❌ 未找到 macOS arm64 主程序文件,无法执行 UPX 压缩。${NC}" + echo -e "${RED} ❌ 未找到 macOS arm64 主程序文件。${NC}" exit 1 fi @@ -227,9 +215,9 @@ if [ $? -eq 0 ]; then APP_BIN_PATH=$(find "$DIST_DIR/$APP_DEST_NAME/Contents/MacOS" -maxdepth 1 -type f -print -quit) if [ -n "$APP_BIN_PATH" ] && [ -f "$APP_BIN_PATH" ]; then - try_compress_binary_with_upx "$APP_BIN_PATH" "macOS amd64 应用主程序" "true" + echo -e "${YELLOW} ⚠️ macOS amd64 不再执行 UPX 压缩,保留原始主程序。${NC}" else - echo -e "${RED} ❌ 未找到 macOS amd64 主程序文件,无法执行 UPX 压缩。${NC}" + echo -e "${RED} ❌ 未找到 macOS amd64 主程序文件。${NC}" exit 1 fi