ci: 构建链补完 wails v2→v3 迁移,CI 触发收敛到 main
代码早就全量迁到 v3(go.mod 只要 wails/v3、main.go import v3/pkg/application), 但"怎么构建"这一层从没跟上,全还是 v2: - release.yml 装 v2 CLI(wails@v2.12.0)去编 v3 代码,编不过;产物路径也还 指向 v2 的 build/bin/,而 v3 落在 bin/。这条只在打 v* tag 时触发,迁移后 一次都没跑过,所以坏了半个月没人知道 —— 下次发版必炸。 - Makefile 的 wails dev/build 直接 command not found。 - README 叫人装 v2 CLI;RELEASE.md 还在提早已删除的 wails.json。 改动: - ci.yml 触发从 [main, dev] 收到 [main]。dev 分支已删,开发在 feat/wails3, 留着 dev 是死条件;PR 以 main 为目标仍会跑,合入前有关卡。 - release.yml 全量转 v3: * CLI 钉死 v3.0.0-alpha2.117,与 go.mod 的 wails/v3 版本一致 —— alpha 阶段 CLI 生成的 bindings 和运行时配套,版本错开会出难查的怪问题。 * mac 走 wails3 task darwin:package:universal。v3 的 build 只出裸二进制 (macOS 上双击不起窗),必须 package 才有 .app;本地实跑验证过, lipo -archs 确认是真 universal(x86_64 + arm64)。 * Windows 保持 v2 时代行为发裸 .exe。v3 的 package 默认走 NSIS 出 installer, 依赖 runner 上有 makensis,属额外未知数,要升级安装包再单独议。 * 产物路径 build/bin/ → bin/。 * fail_on_unmatched_files 改 true,并按 matrix 只匹配自己那个产物 —— 原来是 false 且两个平台都列全量文件,产物路径写错会安静发一个没附件的 Release。这次的 bug 正是路径漂移,得让它当场炸。 - RELEASE.md 版本号对齐表补上第三处 build/config.yml 的 info.version(此前写着 "必须三处对齐"却只列了两处,第三处是已删的 wails.json),并记下改完必须跑 wails3 task common:update:build-assets 重新生成 Info.plist —— 这坑踩过。 - 清掉 v2 残留:frontend/wailsjs/(v2 绑定,v3 用已跟踪的 bindings/)及其 gitignore 规则、build/bin/ 里 v2 时代的 .app。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
name: CI
|
name: CI
|
||||||
|
|
||||||
|
# 只认 main:push 到 main、以及任何以 main 为目标的 PR。
|
||||||
|
# 开发分支(feat/*)自己 push 不跑 CI,靠合入 main 前的 PR 把关。
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main, dev]
|
branches: [main]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main, dev]
|
branches: [main]
|
||||||
|
|
||||||
# 同一分支新 push 取消上一次未完成的运行,省 CI 时间。
|
# 同一分支新 push 取消上一次未完成的运行,省 CI 时间。
|
||||||
concurrency:
|
concurrency:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
name: Release
|
name: Release
|
||||||
|
|
||||||
# 打 vX.Y.Z 标签即触发:各平台用 wails 构建桌面端安装包 → 发布到 GitHub Release。
|
# 打 vX.Y.Z 标签即触发:各平台用 wails3 构建桌面端 → 发布到 GitHub Release。
|
||||||
# 用户旧版 App 启动时查 /releases/latest,发现新版即提示下载(见 frontend/src/lib/version.ts)。
|
# 用户旧版 App 启动时查 /releases/latest,发现新版即提示下载(见 frontend/src/lib/version.ts)。
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -9,6 +9,11 @@ on:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write # 创建 release + 上传产物需要
|
contents: write # 创建 release + 上传产物需要
|
||||||
|
|
||||||
|
env:
|
||||||
|
# 必须与 sundynix-desktop/go.mod 里的 wails/v3 版本一致:alpha 阶段 CLI 生成的
|
||||||
|
# bindings 与运行时是配套的,版本错开会出难查的怪问题。升级时两处一起改。
|
||||||
|
WAILS3_VERSION: v3.0.0-alpha2.117
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: 构建 ${{ matrix.label }}
|
name: 构建 ${{ matrix.label }}
|
||||||
@@ -19,10 +24,10 @@ jobs:
|
|||||||
include:
|
include:
|
||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
label: macOS (universal)
|
label: macOS (universal)
|
||||||
platform: darwin/universal
|
asset: sundynix_desktop_macos_universal.zip
|
||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
label: Windows (amd64)
|
label: Windows (amd64)
|
||||||
platform: windows/amd64
|
asset: sundynix_desktop_windows_amd64.exe
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-go@v5
|
- uses: actions/setup-go@v5
|
||||||
@@ -31,30 +36,43 @@ jobs:
|
|||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version: "20"
|
||||||
- name: 安装 wails CLI
|
- name: 安装 wails3 CLI
|
||||||
run: go install github.com/wailsapp/wails/v2/cmd/wails@v2.12.0
|
run: go install github.com/wailsapp/wails/v3/cmd/wails3@${{ env.WAILS3_VERSION }}
|
||||||
|
|
||||||
- name: 构建桌面端(wails build;GOWORK=off 因 desktop 不在工作区)
|
# v3 的 build 只出裸二进制(macOS 上双击不起窗),必须 package 才有 .app;
|
||||||
|
# universal 走 darwin:package:universal:分别编 amd64/arm64 再 lipo 合并。
|
||||||
|
# 任务链自带 npm install + generate:bindings,故不需要单独的前端构建步骤。
|
||||||
|
- name: 构建 macOS .app(universal)
|
||||||
|
if: runner.os == 'macOS'
|
||||||
working-directory: sundynix-desktop
|
working-directory: sundynix-desktop
|
||||||
env:
|
env:
|
||||||
GOWORK: "off" # 必须加引号:YAML 裸 off 会被解析成布尔 false,使 workflow 校验不合法而不触发
|
GOWORK: "off" # 必须加引号:YAML 裸 off 会被解析成布尔 false,使 workflow 校验不合法而不触发
|
||||||
run: wails build -clean -platform ${{ matrix.platform }}
|
run: wails3 task darwin:package:universal
|
||||||
|
|
||||||
|
# Windows 沿用 v2 时代的行为:发裸 .exe。v3 的 package 默认走 NSIS 出 installer,
|
||||||
|
# 需 runner 上有 makensis,属于额外未知数,要升级安装包再单独议。
|
||||||
|
- name: 构建 Windows .exe
|
||||||
|
if: runner.os == 'Windows'
|
||||||
|
working-directory: sundynix-desktop
|
||||||
|
env:
|
||||||
|
GOWORK: "off"
|
||||||
|
run: wails3 build
|
||||||
|
|
||||||
# macOS:.app 是目录,打包成 zip 才能作为单文件资产分发。
|
# macOS:.app 是目录,打包成 zip 才能作为单文件资产分发。
|
||||||
- name: 打包 macOS 产物
|
- name: 打包 macOS 产物
|
||||||
if: runner.os == 'macOS'
|
if: runner.os == 'macOS'
|
||||||
working-directory: sundynix-desktop/build/bin
|
working-directory: sundynix-desktop/bin
|
||||||
run: zip -r -y sundynix_desktop_macos_universal.zip sundynix_desktop.app
|
run: zip -r -y ${{ matrix.asset }} sundynix_desktop.app
|
||||||
|
|
||||||
- name: 重命名 Windows 产物
|
- name: 重命名 Windows 产物
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
working-directory: sundynix-desktop/build/bin
|
working-directory: sundynix-desktop/bin
|
||||||
run: ren sundynix_desktop.exe sundynix_desktop_windows_amd64.exe
|
run: Rename-Item sundynix_desktop.exe ${{ matrix.asset }}
|
||||||
|
|
||||||
|
# fail_on_unmatched_files 必须为 true:产物路径写错时要当场炸,而不是安静地
|
||||||
|
# 发一个没有附件的 Release。v2→v3 迁移正是把产物从 build/bin 挪到了 bin。
|
||||||
- name: 发布到 GitHub Release(按 tag 创建/追加资产)
|
- name: 发布到 GitHub Release(按 tag 创建/追加资产)
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
fail_on_unmatched_files: false
|
fail_on_unmatched_files: true
|
||||||
files: |
|
files: sundynix-desktop/bin/${{ matrix.asset }}
|
||||||
sundynix-desktop/build/bin/sundynix_desktop_macos_universal.zip
|
|
||||||
sundynix-desktop/build/bin/sundynix_desktop_windows_amd64.exe
|
|
||||||
|
|||||||
+1
-1
@@ -14,10 +14,10 @@ __pycache__/
|
|||||||
# Wails v3(只忽略产物/缓存;build/ 的 Taskfile+配置是项目构建系统,需提交)
|
# Wails v3(只忽略产物/缓存;build/ 的 Taskfile+配置是项目构建系统,需提交)
|
||||||
build/bin/
|
build/bin/
|
||||||
frontend/dist/
|
frontend/dist/
|
||||||
|
# v3 的构建产物落在 bin/,已被第 3 行的 bin/ 通配覆盖,无需单列。
|
||||||
sundynix-desktop/build/bin/
|
sundynix-desktop/build/bin/
|
||||||
sundynix-desktop/.task/
|
sundynix-desktop/.task/
|
||||||
.task/
|
.task/
|
||||||
sundynix-desktop/frontend/wailsjs/
|
|
||||||
sundynix-desktop/frontend/package.json.md5
|
sundynix-desktop/frontend/package.json.md5
|
||||||
|
|
||||||
# Data
|
# Data
|
||||||
|
|||||||
@@ -55,10 +55,10 @@ admin: ## 运维控制台 dev(Vite :5174,配置 LLM 模型等控制
|
|||||||
cd sundynix-admin && npm install && npm run dev
|
cd sundynix-admin && npm install && npm run dev
|
||||||
|
|
||||||
desktop: ## 真实桌面端开发模式(Wails 原生窗口 + 热重载;需先 make infra + 后端 + 配模型)
|
desktop: ## 真实桌面端开发模式(Wails 原生窗口 + 热重载;需先 make infra + 后端 + 配模型)
|
||||||
cd sundynix-desktop && GOWORK=off wails dev
|
cd sundynix-desktop && GOWORK=off wails3 dev
|
||||||
|
|
||||||
desktop-build: ## 打包桌面端为原生应用(产物在 sundynix-desktop/build/bin/)
|
desktop-build: ## 打包桌面端为原生 .app(产物在 sundynix-desktop/bin/)
|
||||||
cd sundynix-desktop && GOWORK=off wails build
|
cd sundynix-desktop && GOWORK=off wails3 package
|
||||||
|
|
||||||
tidy:
|
tidy:
|
||||||
cd sundynix-gateway && go mod tidy
|
cd sundynix-gateway && go mod tidy
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ SSE 客户端: event:token data:已 event:token data:编 ... event:done ←
|
|||||||
### 完整环境(git clone 后零配置直跑)
|
### 完整环境(git clone 后零配置直跑)
|
||||||
|
|
||||||
**前置**:Docker、Go ≥1.24、Node ≥20、Python ≥3.11。
|
**前置**:Docker、Go ≥1.24、Node ≥20、Python ≥3.11。
|
||||||
跑**真实桌面端**还需:Wails CLI(`go install github.com/wailsapp/wails/v2/cmd/wails@latest`);macOS 再装 Xcode 命令行工具(`xcode-select --install`,webkit 编译用)。
|
跑**真实桌面端**还需:Wails v3 CLI(`go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-alpha2.117`,版本须与 `sundynix-desktop/go.mod` 一致);macOS 再装 Xcode 命令行工具(`xcode-select --install`,webkit 编译用)。
|
||||||
|
|
||||||
> 各服务默认配置已对齐 docker-compose(NATS:4222 / PG sundynix\@5432 / Redis:6379 /
|
> 各服务默认配置已对齐 docker-compose(NATS:4222 / PG sundynix\@5432 / Redis:6379 /
|
||||||
> Milvus:19530 / Neo4j neo4j-sundynix\@7687),**clone 后无需改任何配置**即可连上。
|
> Milvus:19530 / Neo4j neo4j-sundynix\@7687),**clone 后无需改任何配置**即可连上。
|
||||||
|
|||||||
+5
-2
@@ -1,7 +1,7 @@
|
|||||||
# 发版清单(桌面端 Release)
|
# 发版清单(桌面端 Release)
|
||||||
|
|
||||||
打 `vX.Y.Z` 标签即触发 [`.github/workflows/release.yml`](.github/workflows/release.yml):
|
打 `vX.Y.Z` 标签即触发 [`.github/workflows/release.yml`](.github/workflows/release.yml):
|
||||||
GitHub 用 macOS/Windows runner `wails build` 出安装包并发布到 **Releases**;
|
GitHub 用 macOS/Windows runner `wails3` 出包并发布到 **Releases**(mac 出 universal `.app` 的 zip、Windows 出 `.exe`);
|
||||||
旧版用户的 App 启动时查 `releases/latest`,发现新版即弹横幅提示下载
|
旧版用户的 App 启动时查 `releases/latest`,发现新版即弹横幅提示下载
|
||||||
(逻辑见 [`version.ts`](sundynix-desktop/frontend/src/lib/version.ts))。
|
(逻辑见 [`version.ts`](sundynix-desktop/frontend/src/lib/version.ts))。
|
||||||
|
|
||||||
@@ -15,8 +15,11 @@ GitHub 用 macOS/Windows runner `wails build` 出安装包并发布到 **Release
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `sundynix-desktop/frontend/src/lib/version.ts` | `APP_VERSION` | **功能性**:App 拿它和 GitHub 最新版比,决定是否提示更新 |
|
| `sundynix-desktop/frontend/src/lib/version.ts` | `APP_VERSION` | **功能性**:App 拿它和 GitHub 最新版比,决定是否提示更新 |
|
||||||
| `sundynix-desktop/frontend/package.json` | `version` | 前端包版本(保持一致,便于追溯) |
|
| `sundynix-desktop/frontend/package.json` | `version` | 前端包版本(保持一致,便于追溯) |
|
||||||
|
| `sundynix-desktop/build/config.yml` | `info.version` | 原生包元数据版本(macOS `Info.plist` 的 `CFBundleShortVersionString` 由它生成) |
|
||||||
|
|
||||||
> (`wails.json` 当前无版本字段;要在原生包元数据里带版本,可自行加 `info.productVersion`。)
|
> ⚠️ 改完 `build/config.yml` 必须跑 `wails3 task common:update:build-assets` 重新生成
|
||||||
|
> `build/darwin/Info.plist` 等资产,**光改 config.yml 不生效**——生成物是提交进仓库的。
|
||||||
|
> (这坑踩过:config.yml 填好了但没重新生成,`.app` 里还是脚手架模板值,直接起不来。)
|
||||||
|
|
||||||
⚠️ **`APP_VERSION` 必须等于即将打的 tag(去掉 v)**,否则更新提示会错乱:
|
⚠️ **`APP_VERSION` 必须等于即将打的 tag(去掉 v)**,否则更新提示会错乱:
|
||||||
新包内嵌的 APP_VERSION = 新版本;旧用户 App 内是旧版本,比对才会提示。
|
新包内嵌的 APP_VERSION = 新版本;旧用户 App 内是旧版本,比对才会提示。
|
||||||
|
|||||||
Reference in New Issue
Block a user