From 859dec8ada071d47f3d7d99443df8c7e37b37403 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Tue, 5 May 2026 13:15:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Windows=20arm64=20?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E6=9E=84=E5=BB=BA=20CI=20=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 Windows arm64 构建从 x86_64 runner 上的交叉编译改为使用 windows-11-arm 原生 ARM64 runner,消除 CLANGARM64 环境在 x86_64 上的 Exec format error。 同时去掉 Linux/Windows 构建步骤中冗余的 TARGET_ARCH 显式传参,统一依赖 Makefile 中 go env GOARCH 自动检测。 --- .github/workflows/release.yml | 8 +++++--- openspec/specs/release-pipeline/spec.md | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3391c7b..daefe74 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -136,7 +136,7 @@ jobs: make release-assets-check - name: Build Linux release assets - run: make release-assets-linux TARGET_ARCH=${{ matrix.arch }} + run: make release-assets-linux - name: Upload Linux release assets uses: actions/upload-artifact@v4 @@ -148,17 +148,19 @@ jobs: build-windows: name: Build Windows ${{ matrix.arch }} Assets needs: prepare - runs-on: windows-latest + runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - arch: amd64 + runner: windows-latest msystem: MINGW64 packages: >- make mingw-w64-x86_64-gcc - arch: arm64 + runner: windows-11-arm msystem: CLANGARM64 packages: >- make @@ -226,7 +228,7 @@ jobs: - name: Build Windows release assets shell: msys2 {0} - run: make release-assets-windows TARGET_ARCH=${{ matrix.arch }} + run: make release-assets-windows - name: Upload Windows release assets uses: actions/upload-artifact@v4 diff --git a/openspec/specs/release-pipeline/spec.md b/openspec/specs/release-pipeline/spec.md index 10c1014..39a1bf3 100644 --- a/openspec/specs/release-pipeline/spec.md +++ b/openspec/specs/release-pipeline/spec.md @@ -57,22 +57,35 @@ - **WHEN** 发布流水线执行 Linux desktop 发布构建 - **THEN** 系统 SHALL 在可访问 Go、Bun、CGO、GTK3、Ayatana AppIndicator 和 Linux 打包工具链的环境中构建 - **AND** 系统 SHALL 为 `amd64` 和 `arm64` 分别生成 tar.gz、AppImage、deb 和 rpm desktop 发布资产 -- **AND** Linux arm64 desktop 发布构建 SHALL 使用原生 arm64 runner 或等价的 arm64 Linux 构建环境 +- **AND** Linux amd64 desktop 发布构建 SHALL 在 `ubuntu-latest` runner 上执行 +- **AND** Linux arm64 desktop 发布构建 SHALL 在 `ubuntu-24.04-arm` runner 上执行 +- **AND** 系统 SHALL NOT 在构建步骤中显式传递 TARGET_ARCH 参数 #### Scenario: Windows desktop 发布构建 - **WHEN** 发布流水线执行 Windows desktop 发布构建 - **THEN** 系统 SHALL 在包含对应架构 MSYS2/MinGW 或等价 CGO 工具链的环境中构建 +- **AND** Windows amd64 desktop 发布构建 SHALL 在 `windows-latest` runner 上的 MSYS2 MINGW64 环境中执行 +- **AND** Windows arm64 desktop 发布构建 SHALL 在 `windows-11-arm` runner 上的 MSYS2 CLANGARM64 环境中执行 - **AND** 系统 SHALL 生成 `nex-desktop__windows_amd64.zip` - **AND** 系统 SHALL 生成 `nex-desktop__windows_arm64.zip` +- **AND** 系统 SHALL NOT 在构建步骤中显式传递 TARGET_ARCH 参数 #### Scenario: macOS desktop 发布构建 - **WHEN** 发布流水线执行 macOS desktop 发布构建 - **THEN** 系统 SHALL 在可访问 Go、Bun、Xcode 命令行工具、`lipo`、`hdiutil` 和 zip 打包工具的 macOS 环境中构建 +- **AND** 系统 SHALL 在 ARM64 macOS runner 上编译 amd64 和 arm64 双架构二进制并使用 `lipo` 合并为 universal binary - **AND** 系统 SHALL 生成 `nex-desktop__macos_universal.zip` - **AND** 系统 SHALL 生成 `nex-desktop__macos_universal.dmg` +#### Scenario: 原生架构构建 + +- **WHEN** 发布流水线执行 Linux 或 Windows 的 server/desktop 构建步骤 +- **THEN** 系统 SHALL NOT 显式传递 TARGET_ARCH 参数 +- **AND** Makefile SHALL 通过 `go env GOARCH` 自动检测目标架构 +- **AND** 原生 runner 的实际架构 SHALL 与 `go env GOARCH` 返回值一致 + ### Requirement: 三平台发布构建预检 系统 SHALL 在正式执行各平台 release 构建前验证对应 job 的关键工具链可用性,并在环境不完整时快速失败且输出明确诊断。