From dc9a41ed04e88f01f7541a799915046f30585f52 Mon Sep 17 00:00:00 2001 From: pompurin404 Date: Wed, 16 Oct 2024 21:05:00 +0800 Subject: [PATCH] provide the catalina installation package separately --- .github/workflows/build.yml | 59 ++++++++++++++++++++++++++++++--- changelog.md | 11 ++---- electron-builder.yml | 1 - scripts/artifact.mjs | 29 +++++++++++++++- scripts/telegram.mjs | 7 ++-- scripts/updater.mjs | 6 ++-- src/main/resolve/autoUpdater.ts | 10 +++++- 7 files changed, 103 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index caf3891..a1c1ee2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -191,7 +191,6 @@ jobs: run: | pnpm install pnpm add @mihomo-party/sysproxy-darwin-${{ matrix.arch }} - pnpm add -D electron@32.2.0 pnpm prepare --${{ matrix.arch }} - name: Build env: @@ -222,9 +221,61 @@ jobs: body_path: changelog.md token: ${{ secrets.GITHUB_TOKEN }} + macos10: + strategy: + fail-fast: false + matrix: + arch: + - x64 + - arm64 + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup pnpm + run: npm install -g pnpm + - name: Install Dependencies + env: + npm_config_arch: ${{ matrix.arch }} + npm_config_target_arch: ${{ matrix.arch }} + run: | + pnpm install + pnpm add @mihomo-party/sysproxy-darwin-${{ matrix.arch }} + pnpm add -D electron@32.2.0 + pnpm prepare --${{ matrix.arch }} + - name: Build + env: + npm_config_arch: ${{ matrix.arch }} + npm_config_target_arch: ${{ matrix.arch }} + run: | + sed -i "" -e "s/productName: mihomo-party/productName: Mihomo Party/" electron-builder.yml + sed -i "" -e "s/macos/catalina/" electron-builder.yml + chmod +x build/pkg-scripts/postinstall + pnpm build:mac --${{ matrix.arch }} + - name: Generate checksums + run: pnpm checksum .pkg + - name: Upload Artifacts + if: startsWith(github.ref, 'refs/heads/') + uses: actions/upload-artifact@v4 + with: + name: Catalina ${{ matrix.arch }} + path: | + dist/*.sha256 + dist/*.pkg + if-no-files-found: error + - name: Publish Release + if: startsWith(github.ref, 'refs/tags/v') + uses: softprops/action-gh-release@v2 + with: + files: | + dist/*.sha256 + dist/*.pkg + body_path: changelog.md + token: ${{ secrets.GITHUB_TOKEN }} + artifact: if: startsWith(github.ref, 'refs/heads/') - needs: [windows, macos, linux, windows7] + needs: [windows, macos, linux, windows7, macos10] runs-on: ubuntu-latest services: telegram-bot-api: @@ -252,7 +303,7 @@ jobs: updater: if: startsWith(github.ref, 'refs/tags/v') - needs: [windows, macos, windows7] + needs: [windows, macos, windows7, macos10] runs-on: ubuntu-latest steps: - name: Checkout @@ -361,7 +412,7 @@ jobs: homebrew: if: startsWith(github.ref, 'refs/tags/v') name: Update Homebrew cask - needs: macos + needs: [macos, macos10] runs-on: macos-latest steps: - name: Set up Git diff --git a/changelog.md b/changelog.md index 4c20c23..86e2f52 100644 --- a/changelog.md +++ b/changelog.md @@ -1,11 +1,4 @@ ### Breaking Changes -- macOS 改用 pkg 安装方式,不再支持 dmg 安装方式,因此本次更新需要手动下载安装包进行安装 - -### New Features - -- macOS/Linux 均不再存储 root 密码 - -### Bug Fixes - -- 修复 macOS 10.15 无法安装的问题 +- 1.5.0 之后 macOS 改用 pkg 安装方式,不再支持 dmg 安装方式,因此本次更新需要手动下载安装包进行安装 +- electron33 已不再支持 macOS 10.15,故为 10.15 提供单独的安装包,需要的用户请自行下载安装,应用内更新时会自动检测系统版本,安装后后续可正常在应用内直接更新 diff --git a/electron-builder.yml b/electron-builder.yml index 808d360..7429815 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -39,7 +39,6 @@ nsis: mac: target: - pkg - minimumSystemVersion: '10.15' entitlementsInherit: build/entitlements.mac.plist extendInfo: - NSCameraUsageDescription: Application requests access to the device's camera. diff --git a/scripts/artifact.mjs b/scripts/artifact.mjs index 801a111..3dad1b8 100644 --- a/scripts/artifact.mjs +++ b/scripts/artifact.mjs @@ -24,6 +24,11 @@ const macosFiles = [ path.join(GITHUB_WORKSPACE, `mihomo-party-macos-${version}-x64.pkg`) ] +const macos10Files = [ + path.join(GITHUB_WORKSPACE, `mihomo-party-catalina-${version}-arm64.pkg`), + path.join(GITHUB_WORKSPACE, `mihomo-party-catalina-${version}-x64.pkg`) +] + const windowsFiles = [ path.join(GITHUB_WORKSPACE, `mihomo-party-windows-${version}-x64-setup.exe`), path.join(GITHUB_WORKSPACE, `mihomo-party-windows-${version}-x64-portable.7z`), @@ -80,7 +85,7 @@ const macosMedia = macosFiles.map((file, index) => ({ type: 'document', media: `attach://file${index}` })) -macosMedia[macosMedia.length - 1].caption = `#${hash} #macOS\n${message}` +macosMedia[macosMedia.length - 1].caption = `#${hash} #macOS 11+\n${message}` const macosForm = new FormData() macosForm.append('chat_id', CHAT_ID) macosForm.append('media', JSON.stringify(macosMedia)) @@ -88,6 +93,18 @@ macosFiles.forEach((file, index) => { macosForm.append(`file${index}`, fs.createReadStream(file)) }) +const macos10Media = macos10Files.map((file, index) => ({ + type: 'document', + media: `attach://file${index}` +})) +macos10Media[macos10Media.length - 1].caption = `#${hash} #macOS 10.15+\n${message}` +const macos10Form = new FormData() +macos10Form.append('chat_id', CHAT_ID) +macos10Form.append('media', JSON.stringify(macos10Media)) +macos10Files.forEach((file, index) => { + macos10Form.append(`file${index}`, fs.createReadStream(file)) +}) + function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)) } @@ -122,6 +139,16 @@ await axios.post( await sleep(10000) +await axios.post( + `http://127.0.0.1:8081/bot${process.env.TELEGRAM_BOT_TOKEN}/sendMediaGroup`, + macos10Form, + { + headers: macos10Form.getHeaders() + } +) + +await sleep(10000) + await axios.post( `http://127.0.0.1:8081/bot${process.env.TELEGRAM_BOT_TOKEN}/sendMediaGroup`, linuxForm, diff --git a/scripts/telegram.mjs b/scripts/telegram.mjs index f73b364..283c3c0 100644 --- a/scripts/telegram.mjs +++ b/scripts/telegram.mjs @@ -23,9 +23,12 @@ content += `便携版:64位 | 32位\n` content += `便携版:64位 | 32位\n` -content += '\nmacOS:\n' -content += `DMG:Intel | Apple Silicon\n` +content += '\nmacOS 10.15+:\n' +content += `PKG:Intel | Apple Silicon\n` content += '\nLinux:\n' content += `DEB:64位 | ARM64\n` diff --git a/scripts/updater.mjs b/scripts/updater.mjs index 8ced64d..fcfd1b5 100644 --- a/scripts/updater.mjs +++ b/scripts/updater.mjs @@ -16,8 +16,10 @@ changelog += `- 便携版:[64位](${downloadUrl}/mihomo-party-windows-${versio changelog += '\n#### Windows7/8:\n\n' changelog += `- 安装版:[64位](${downloadUrl}/mihomo-party-win7-${version}-x64-setup.exe) | [32位](${downloadUrl}/mihomo-party-win7-${version}-ia32-setup.exe)\n\n` changelog += `- 便携版:[64位](${downloadUrl}/mihomo-party-win7-${version}-x64-portable.7z) | [32位](${downloadUrl}/mihomo-party-win7-${version}-ia32-portable.7z)\n\n` -changelog += '\n#### macOS:\n\n' -changelog += `- DMG:[Intel](${downloadUrl}/mihomo-party-macos-${version}-x64.pkg) | [Apple Silicon](${downloadUrl}/mihomo-party-macos-${version}-arm64.pkg)\n\n` +changelog += '\n#### macOS 11+:\n\n' +changelog += `- PKG:[Intel](${downloadUrl}/mihomo-party-macos-${version}-x64.pkg) | [Apple Silicon](${downloadUrl}/mihomo-party-macos-${version}-arm64.pkg)\n\n` +changelog += '\n#### macOS 10.15+:\n\n' +changelog += `- PKG:[Intel](${downloadUrl}/mihomo-party-catalina-${version}-x64.pkg) | [Apple Silicon](${downloadUrl}/mihomo-party-catalina-${version}-arm64.pkg)\n\n` changelog += '\n#### Linux:\n\n' changelog += `- DEB:[64位](${downloadUrl}/mihomo-party-linux-${version}-amd64.deb) | [ARM64](${downloadUrl}/mihomo-party-linux-${version}-arm64.deb)\n\n` changelog += `- RPM:[64位](${downloadUrl}/mihomo-party-linux-${version}-x86_64.rpm) | [ARM64](${downloadUrl}/mihomo-party-linux-${version}-aarch64.rpm)` diff --git a/src/main/resolve/autoUpdater.ts b/src/main/resolve/autoUpdater.ts index 49afae3..dc8156b 100644 --- a/src/main/resolve/autoUpdater.ts +++ b/src/main/resolve/autoUpdater.ts @@ -7,7 +7,7 @@ import { copyFile, rm, writeFile } from 'fs/promises' import path from 'path' import { existsSync } from 'fs' import os from 'os' -import { exec, spawn } from 'child_process' +import { exec, execSync, spawn } from 'child_process' import { promisify } from 'util' export async function checkUpdate(): Promise { @@ -52,6 +52,14 @@ export async function downloadAndInstallUpdate(version: string): Promise { if (process.platform === 'win32' && parseInt(os.release()) < 10) { file = file.replace('windows', 'win7') } + if (process.platform === 'darwin') { + const productVersion = execSync('sw_vers -productVersion', { encoding: 'utf8' }) + .toString() + .trim() + if (parseInt(productVersion) < 11) { + file = file.replace('macos', 'catalina') + } + } try { if (!existsSync(path.join(dataDir(), file))) { const res = await axios.get(`${baseUrl}${file}`, {