From 212ddce7e23b7d48cdf72f6ac3bf181f59cc80bf Mon Sep 17 00:00:00 2001 From: shy3130 <415333856@qq.com> Date: Wed, 24 Jun 2026 15:10:10 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20=E4=BF=AE=E5=A4=8D=20macOS=20?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E4=B8=A4=E4=B8=AA=E5=A4=B1=E8=B4=A5=E7=82=B9?= =?UTF-8?q?=20(venv=20=E5=8F=91=E7=8E=B0=20+=20=E7=BC=BA=E5=9B=BE=E6=A0=87?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit macOS 构建在 macos-26 runner 上失败, 两个独立问题, 均已本地验证通过: 1. uv pip install --project backend 报 'No virtual environment found' macos-26 runner 上 --project 的 venv 自动发现不可靠。改为 working-directory: backend, 与 uv sync 步骤一致。 2. spec 打包时找不到 packaging/icon.icns icon.ico 已入库 (Windows 用), 但 icon.icns 未入库 (macOS 专用产物)。 release.yml 此前无生成图标步骤, macOS 构建必然缺图标而崩。 新增 '生成 macOS 图标' 步骤 (仅 macos), 用 backend venv 里的 Pillow (传递依赖) 跑 generate_icon.py 现场生成。 3. 打包步骤改为 backend cwd 执行, 用 --distpath/--workpath 显式指定 产物输出到项目根 dist/, 与后续 DMG 步骤路径保持一致。 本地完整验证 (生成图标 + pyinstaller) 成功产出 dist/TickFlowStockPanel.app。 --- .github/workflows/release.yml | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7770ebf..6db282c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -105,13 +105,28 @@ jobs: - name: 安装 PyInstaller # 必须装进 backend 的 uv 环境 (pywebview/polars 等依赖都在那里), # 否则根目录 uv run 找不到依赖, 打包出来的产物启动即崩。 - # --project backend 让 uv 定位 backend/pyproject.toml 的环境。 - run: uv pip install --project backend pyinstaller + # 注意: 不用 `uv pip install --project backend` —— 在 macos runner 上 + # --project 的 venv 自动发现不可靠 (报 "No virtual environment found")。 + # 用 working-directory 进 backend 目录, 与上面 uv sync 的环境一致。 + working-directory: backend + run: uv pip install pyinstaller + + - name: 生成 macOS 图标 (仅 macOS) + if: matrix.platform == 'macos' + # icon.ico 已入库 (Windows 直接用), 但 icon.icns 未入库 (macOS 专用产物)。 + # 用 backend venv 里的 Pillow (fastexcel/pandas 传递依赖, 无需额外安装) + # 现场生成 icon.icns, 否则 spec 第 37 行 BUNDLE 会因找不到图标而崩。 + working-directory: backend + run: uv run python ../packaging/generate_icon.py - name: 打包 (PyInstaller) - # 在项目根目录跑 (spec 用 SPECPATH 推导项目根), 但用 backend 的环境。 - # 产物 dist/ 生成在工作目录 (项目根) 下。 - run: uv run --project backend pyinstaller packaging/tickflow.spec --noconfirm + # 在 backend 目录跑 (用该目录的 venv: pywebview/polars 等), 但产物输出到 + # 项目根的 dist/ —— 用 --distpath/--workpath 显式指定, 与后续 DMG 步骤的 + # dist/TickFlowStockPanel.app 路径保持一致。 + # SPECPATH 由 spec 文件位置决定 (packaging/tickflow.spec → 项目根), + # 与 cwd 无关, 故 frontend/dist、tiers.yaml 等相对路径仍正确。 + working-directory: backend + run: uv run pyinstaller ../packaging/tickflow.spec --noconfirm --distpath ../dist --workpath ../build - name: 安装 Inno Setup (仅 Windows) if: matrix.platform == 'windows'