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 的关键工具链可用性,并在环境不完整时快速失败且输出明确诊断。