name: Release

# 打 vX.Y.Z 标签即触发：各平台用 wails3 构建桌面端 → 发布到 GitHub Release。
# 用户旧版 App 启动时查 /releases/latest，发现新版即提示下载（见 frontend/src/lib/version.ts）。
on:
  push:
    tags: ["v*"]

permissions:
  contents: write # 创建 release + 上传产物需要

env:
  # 必须与 sundynix-desktop/go.mod 里的 wails/v3 版本一致：alpha 阶段 CLI 生成的
  # bindings 与运行时是配套的，版本错开会出难查的怪问题。升级时两处一起改。
  WAILS3_VERSION: v3.0.0-alpha2.117

jobs:
  build:
    name: 构建 ${{ matrix.label }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: macos-latest
            label: macOS (universal)
            asset: sundynix_desktop_macos_universal.zip
          - os: windows-latest
            label: Windows (amd64)
            asset: sundynix_desktop_windows_amd64.exe
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-go@v5
        with:
          go-version: "1.25"
      - uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: 安装 wails3 CLI
        run: go install github.com/wailsapp/wails/v3/cmd/wails3@${{ env.WAILS3_VERSION }}

      # 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
        env:
          GOWORK: "off" # 必须加引号：YAML 裸 off 会被解析成布尔 false，使 workflow 校验不合法而不触发
        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 才能作为单文件资产分发。
      - name: 打包 macOS 产物
        if: runner.os == 'macOS'
        working-directory: sundynix-desktop/bin
        run: zip -r -y ${{ matrix.asset }} sundynix_desktop.app

      - name: 重命名 Windows 产物
        if: runner.os == 'Windows'
        working-directory: sundynix-desktop/bin
        run: Rename-Item sundynix_desktop.exe ${{ matrix.asset }}

      # fail_on_unmatched_files 必须为 true：产物路径写错时要当场炸，而不是安静地
      # 发一个没有附件的 Release。v2→v3 迁移正是把产物从 build/bin 挪到了 bin。
      - name: 发布到 GitHub Release（按 tag 创建/追加资产）
        uses: softprops/action-gh-release@v2
        with:
          fail_on_unmatched_files: true
          files: sundynix-desktop/bin/${{ matrix.asset }}
