feat: add try move trial branches #62
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| tags: | |
| - "v*.*.*" | |
| workflow_dispatch: | |
| inputs: | |
| katago_asset_release_tag: | |
| description: "GoAgent release tag to reuse standard bundled KataGo assets from" | |
| required: false | |
| default: "v0.3.6" | |
| type: string | |
| opencl_katago_asset_repo: | |
| description: "Repository that provides the Windows OpenCL KataGo runtime asset" | |
| required: false | |
| default: "wimi321/lizzieyzy-next" | |
| type: string | |
| opencl_katago_asset_release_tag: | |
| description: "Release tag that provides the Windows OpenCL KataGo runtime asset" | |
| required: false | |
| default: "1.0.0-next-2026-05-02.3" | |
| type: string | |
| opencl_katago_asset_pattern: | |
| description: "Asset pattern for the Windows OpenCL runtime bundle" | |
| required: false | |
| default: "*windows64.opencl.portable.zip" | |
| type: string | |
| nvidia_katago_asset_repo: | |
| description: "Repository that provides the Windows NVIDIA KataGo runtime asset" | |
| required: false | |
| default: "wimi321/lizzieyzy-next" | |
| type: string | |
| nvidia_katago_asset_release_tag: | |
| description: "Release tag that provides the Windows NVIDIA KataGo runtime asset" | |
| required: false | |
| default: "1.0.0-next-2026-05-02.3" | |
| type: string | |
| nvidia_katago_asset_pattern: | |
| description: "Asset pattern for the Windows NVIDIA runtime bundle" | |
| required: false | |
| default: "*windows64.nvidia.portable.zip" | |
| type: string | |
| permissions: | |
| contents: write | |
| concurrency: | |
| group: release-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| release-preflight: | |
| name: Release preflight | |
| runs-on: ubuntu-latest | |
| outputs: | |
| can-package: ${{ steps.katago-assets.outputs.can-package }} | |
| can-package-nvidia: ${{ steps.katago-assets.outputs.can-package-nvidia }} | |
| steps: | |
| - name: Check KataGo asset sources | |
| id: katago-assets | |
| shell: bash | |
| env: | |
| GOAGENT_KATAGO_ASSET_DIR: ${{ secrets.GOAGENT_KATAGO_ASSET_DIR }} | |
| GOAGENT_KATAGO_BINARY: ${{ secrets.GOAGENT_KATAGO_BINARY }} | |
| GOAGENT_KATAGO_MODEL: ${{ secrets.GOAGENT_KATAGO_MODEL }} | |
| GOAGENT_KATAGO_ASSET_RELEASE_TAG: ${{ inputs.katago_asset_release_tag || 'v0.3.6' }} | |
| GOAGENT_OPENCL_KATAGO_ASSET_REPO: ${{ inputs.opencl_katago_asset_repo || 'wimi321/lizzieyzy-next' }} | |
| GOAGENT_OPENCL_KATAGO_ASSET_RELEASE_TAG: ${{ inputs.opencl_katago_asset_release_tag || '1.0.0-next-2026-05-02.3' }} | |
| GOAGENT_OPENCL_KATAGO_ASSET_PATTERN: ${{ inputs.opencl_katago_asset_pattern || '*windows64.opencl.portable.zip' }} | |
| GOAGENT_NVIDIA_KATAGO_ASSET_REPO: ${{ inputs.nvidia_katago_asset_repo || 'wimi321/lizzieyzy-next' }} | |
| GOAGENT_NVIDIA_KATAGO_ASSET_RELEASE_TAG: ${{ inputs.nvidia_katago_asset_release_tag || '1.0.0-next-2026-05-02.3' }} | |
| GOAGENT_NVIDIA_KATAGO_ASSET_PATTERN: ${{ inputs.nvidia_katago_asset_pattern || '*windows64.nvidia.portable.zip' }} | |
| run: | | |
| if [[ -n "${GOAGENT_KATAGO_ASSET_DIR}" || ( -n "${GOAGENT_KATAGO_BINARY}" && -n "${GOAGENT_KATAGO_MODEL}" ) ]]; then | |
| echo "can-package=true" >> "${GITHUB_OUTPUT}" | |
| echo "KataGo standard release asset source is configured." | |
| elif [[ -n "${GOAGENT_KATAGO_ASSET_RELEASE_TAG}" ]]; then | |
| echo "can-package=true" >> "${GITHUB_OUTPUT}" | |
| echo "KataGo standard assets will be restored from configured release sources." | |
| if [[ -n "${GOAGENT_OPENCL_KATAGO_ASSET_REPO}" && -n "${GOAGENT_OPENCL_KATAGO_ASSET_RELEASE_TAG}" && -n "${GOAGENT_OPENCL_KATAGO_ASSET_PATTERN}" ]]; then | |
| echo "Windows OpenCL KataGo assets will be restored from ${GOAGENT_OPENCL_KATAGO_ASSET_REPO}@${GOAGENT_OPENCL_KATAGO_ASSET_RELEASE_TAG}." | |
| fi | |
| else | |
| echo "can-package=false" >> "${GITHUB_OUTPUT}" | |
| echo "::notice title=Release packaging skipped::KataGo standard assets are not configured. Set GOAGENT_KATAGO_ASSET_DIR, both GOAGENT_KATAGO_BINARY and GOAGENT_KATAGO_MODEL, or katago_asset_release_tag to enable automated packaging." | |
| fi | |
| if [[ -n "${GOAGENT_NVIDIA_KATAGO_ASSET_REPO}" && -n "${GOAGENT_NVIDIA_KATAGO_ASSET_RELEASE_TAG}" && -n "${GOAGENT_NVIDIA_KATAGO_ASSET_PATTERN}" ]]; then | |
| echo "can-package-nvidia=true" >> "${GITHUB_OUTPUT}" | |
| echo "KataGo NVIDIA assets will be restored from ${GOAGENT_NVIDIA_KATAGO_ASSET_REPO}@${GOAGENT_NVIDIA_KATAGO_ASSET_RELEASE_TAG}." | |
| else | |
| echo "can-package-nvidia=false" >> "${GITHUB_OUTPUT}" | |
| echo "::notice title=NVIDIA package skipped::Set nvidia_katago_asset_repo, nvidia_katago_asset_release_tag, and nvidia_katago_asset_pattern to publish the Windows NVIDIA edition." | |
| fi | |
| package: | |
| name: Package ${{ matrix.name }} | |
| needs: release-preflight | |
| if: needs.release-preflight.outputs.can-package == 'true' | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - name: macOS | |
| os: macos-latest | |
| command: pnpm dist:mac | |
| - name: Windows | |
| os: windows-latest | |
| command: pnpm dist:win | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 10.30.3 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: pnpm | |
| - name: Setup Python for Kokoro zh G2P | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Install Linux package dependencies | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libarchive-tools | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Install Kokoro zh G2P Python dependencies | |
| run: python -m pip install -r scripts/requirements-tts.txt | |
| - name: Typecheck | |
| run: pnpm typecheck | |
| - name: Prepare Kokoro TTS assets | |
| shell: bash | |
| env: | |
| GOAGENT_TTS_ASSETS_STRICT: "1" | |
| GOAGENT_TTS_SMOKE_STRICT: "1" | |
| GOAGENT_TTS_PYTHON: python | |
| run: | | |
| pnpm prepare:tts-assets | |
| pnpm check:tts-assets | |
| pnpm smoke:tts | |
| - name: Prepare KataGo assets | |
| shell: bash | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| GOAGENT_KATAGO_ASSET_DIR: ${{ secrets.GOAGENT_KATAGO_ASSET_DIR }} | |
| GOAGENT_KATAGO_BINARY: ${{ secrets.GOAGENT_KATAGO_BINARY }} | |
| GOAGENT_KATAGO_MODEL: ${{ secrets.GOAGENT_KATAGO_MODEL }} | |
| GOAGENT_KATAGO_ASSET_RELEASE_TAG: ${{ inputs.katago_asset_release_tag || 'v0.3.6' }} | |
| GOAGENT_OPENCL_KATAGO_ASSET_REPO: ${{ inputs.opencl_katago_asset_repo || 'wimi321/lizzieyzy-next' }} | |
| GOAGENT_OPENCL_KATAGO_ASSET_RELEASE_TAG: ${{ inputs.opencl_katago_asset_release_tag || '1.0.0-next-2026-05-02.3' }} | |
| GOAGENT_OPENCL_KATAGO_ASSET_PATTERN: ${{ inputs.opencl_katago_asset_pattern || '*windows64.opencl.portable.zip' }} | |
| run: | | |
| if [[ -n "${GOAGENT_KATAGO_ASSET_DIR}" || ( -n "${GOAGENT_KATAGO_BINARY}" && -n "${GOAGENT_KATAGO_MODEL}" ) ]]; then | |
| if [[ "${RUNNER_OS}" == "macOS" && -n "${GOAGENT_KATAGO_ASSET_DIR}" ]]; then | |
| node scripts/prepare_katago_assets.mjs --asset-dir="${GOAGENT_KATAGO_ASSET_DIR}" --platform=darwin-arm64 --flavor=standard --source-label="manual release asset source" | |
| node scripts/prepare_katago_assets.mjs --asset-dir="${GOAGENT_KATAGO_ASSET_DIR}" --platform=darwin-x64 --flavor=standard --source-label="manual release asset source" | |
| else | |
| node scripts/prepare_katago_assets.mjs --flavor=standard --source-label="manual release asset source" | |
| fi | |
| elif [[ "${RUNNER_OS}" == "macOS" ]]; then | |
| prepare_macos_asset() { | |
| local target="$1" | |
| local repo="$2" | |
| local tag="$3" | |
| local pattern="$4" | |
| local mode="$5" | |
| local source_dir=".katago-asset-source/${target}-${mode}" | |
| local mount_point=".katago-asset-source/mounts/${target}-${mode}" | |
| mkdir -p "${source_dir}" "${mount_point}" | |
| gh release download "${tag}" \ | |
| --repo "${repo}" \ | |
| --pattern "${pattern}" \ | |
| --dir "${source_dir}" || return 1 | |
| asset_dmg="$(find "${source_dir}" -maxdepth 1 -name "${pattern}" | head -n 1)" | |
| if [[ -z "${asset_dmg}" ]]; then | |
| echo "No macOS KataGo asset matched ${pattern}" >&2 | |
| return 1 | |
| fi | |
| hdiutil attach -nobrowse -quiet "${asset_dmg}" -mountpoint "${mount_point}" || return 1 | |
| if [[ "${mode}" == "scan" ]]; then | |
| node scripts/prepare_katago_assets.mjs --asset-dir="${mount_point}" --platform="${target}" --scan --copy-runtime-dir --preserve-model-name --flavor=standard --source-label="${repo}@${tag}:${pattern}" | |
| else | |
| asset_dir="$(find "${mount_point}" -path '*/Contents/Resources/data/katago' -type d | head -n 1)" | |
| if [[ -z "${asset_dir}" ]]; then | |
| hdiutil detach "${mount_point}" -quiet || true | |
| echo "Mounted ${asset_dmg} did not contain Contents/Resources/data/katago" >&2 | |
| return 1 | |
| fi | |
| if [[ ! -f "${asset_dir}/bin/${target}/katago" ]]; then | |
| hdiutil detach "${mount_point}" -quiet || true | |
| echo "Mounted ${asset_dmg} does not contain bin/${target}/katago" >&2 | |
| return 2 | |
| fi | |
| node scripts/prepare_katago_assets.mjs --asset-dir="${asset_dir}" --platform="${target}" --flavor=standard --source-label="${repo}@${tag}:${pattern}" | |
| fi | |
| hdiutil detach "${mount_point}" -quiet | |
| } | |
| echo "Restoring macOS KataGo runtimes from lizzieyzy-next." | |
| prepare_macos_asset darwin-arm64 "wimi321/lizzieyzy-next" "1.0.0-next-2026-05-02.3" "*mac-apple-silicon.with-katago.dmg" scan | |
| prepare_macos_asset darwin-x64 "wimi321/lizzieyzy-next" "1.0.0-next-2026-05-02.3" "*mac-intel.with-katago.dmg" scan | |
| else | |
| if [[ -n "${GOAGENT_OPENCL_KATAGO_ASSET_REPO}" && -n "${GOAGENT_OPENCL_KATAGO_ASSET_RELEASE_TAG}" && -n "${GOAGENT_OPENCL_KATAGO_ASSET_PATTERN}" ]]; then | |
| mkdir -p .katago-opencl-source/extracted | |
| gh release download "${GOAGENT_OPENCL_KATAGO_ASSET_RELEASE_TAG}" \ | |
| --repo "${GOAGENT_OPENCL_KATAGO_ASSET_REPO}" \ | |
| --pattern "${GOAGENT_OPENCL_KATAGO_ASSET_PATTERN}" \ | |
| --dir .katago-opencl-source | |
| asset_archive="$(find .katago-opencl-source -maxdepth 1 -type f | head -n 1)" | |
| if [[ -z "${asset_archive}" ]]; then | |
| echo "No Windows OpenCL KataGo asset matched ${GOAGENT_OPENCL_KATAGO_ASSET_PATTERN}" >&2 | |
| exit 1 | |
| fi | |
| if [[ "${RUNNER_OS}" == "Windows" ]] && command -v 7z >/dev/null 2>&1; then | |
| 7z x "${asset_archive}" -o.katago-opencl-source/extracted | |
| elif command -v unzip >/dev/null 2>&1; then | |
| unzip -q "${asset_archive}" -d .katago-opencl-source/extracted | |
| elif command -v 7z >/dev/null 2>&1; then | |
| 7z x "${asset_archive}" -o.katago-opencl-source/extracted | |
| else | |
| powershell -NoProfile -Command "Expand-Archive -LiteralPath '${asset_archive}' -DestinationPath '.katago-opencl-source/extracted'" | |
| fi | |
| node scripts/prepare_katago_assets.mjs \ | |
| --asset-dir=".katago-opencl-source/extracted" \ | |
| --platform=win32-x64 \ | |
| --scan \ | |
| --copy-runtime-dir \ | |
| --preserve-model-name \ | |
| --flavor=opencl \ | |
| --source-label="${GOAGENT_OPENCL_KATAGO_ASSET_REPO}@${GOAGENT_OPENCL_KATAGO_ASSET_RELEASE_TAG}:${GOAGENT_OPENCL_KATAGO_ASSET_PATTERN}" | |
| else | |
| mkdir -p .katago-asset-source/extracted | |
| gh release download "${GOAGENT_KATAGO_ASSET_RELEASE_TAG}" \ | |
| --repo "${{ github.repository }}" \ | |
| --pattern "GoAgent-*-win-x64-portable.zip" \ | |
| --dir .katago-asset-source | |
| asset_zip="$(find .katago-asset-source -maxdepth 1 -name 'GoAgent-*-win-x64-portable.zip' | head -n 1)" | |
| if command -v unzip >/dev/null 2>&1; then | |
| unzip -q "${asset_zip}" -d .katago-asset-source/extracted | |
| elif command -v 7z >/dev/null 2>&1; then | |
| 7z x "${asset_zip}" -o.katago-asset-source/extracted | |
| else | |
| powershell -NoProfile -Command "Expand-Archive -LiteralPath '${asset_zip}' -DestinationPath '.katago-asset-source/extracted'" | |
| fi | |
| node scripts/prepare_katago_assets.mjs --asset-dir=".katago-asset-source/extracted/resources/data/katago" --flavor=standard --source-label="${{ github.repository }}@${GOAGENT_KATAGO_ASSET_RELEASE_TAG}" | |
| fi | |
| fi | |
| if [[ "${RUNNER_OS}" == "macOS" ]]; then | |
| node scripts/check_katago_assets.mjs --mode=release --platform=darwin-arm64 | |
| node scripts/check_katago_assets.mjs --mode=release --platform=darwin-x64 | |
| else | |
| node scripts/check_katago_assets.mjs --mode=release | |
| fi | |
| - name: Bundle zhizi b28 model | |
| shell: bash | |
| env: | |
| ZHIZI_B28_URL: https://media.katagotraining.org/uploaded/networks/models/kata1/kata1-zhizi-b28c512nbt-muonfd2.bin.gz | |
| ZHIZI_B28_FILENAME: kata1-zhizi-b28c512nbt-muonfd2.bin.gz | |
| run: | | |
| mkdir -p data/katago/models | |
| target="data/katago/models/${ZHIZI_B28_FILENAME}" | |
| if [[ -f "${target}" ]]; then | |
| echo "zhizi b28 already present, skipping download" | |
| else | |
| echo "Downloading zhizi b28 from ${ZHIZI_B28_URL}" | |
| curl -fsSL --retry 3 --retry-delay 5 "${ZHIZI_B28_URL}" -o "${target}" | |
| fi | |
| node scripts/select_default_katago_model.mjs \ | |
| --model="${target}" \ | |
| --id=official-b28-strong \ | |
| --display-name="KataGo zhizi b28 Official Strongest" \ | |
| --prune | |
| - name: Package desktop app | |
| shell: bash | |
| env: | |
| CSC_LINK: ${{ secrets.CSC_LINK }} | |
| CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} | |
| WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }} | |
| WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }} | |
| CSC_IDENTITY_AUTO_DISCOVERY: ${{ secrets.CSC_LINK != '' && 'true' || 'false' }} | |
| APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }} | |
| APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }} | |
| APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }} | |
| APPLE_ID: ${{ secrets.APPLE_ID }} | |
| APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} | |
| APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} | |
| APPLE_KEYCHAIN: ${{ secrets.APPLE_KEYCHAIN }} | |
| APPLE_KEYCHAIN_PROFILE: ${{ secrets.APPLE_KEYCHAIN_PROFILE }} | |
| run: | | |
| for name in \ | |
| CSC_LINK \ | |
| CSC_KEY_PASSWORD \ | |
| WIN_CSC_LINK \ | |
| WIN_CSC_KEY_PASSWORD \ | |
| APPLE_API_KEY \ | |
| APPLE_API_KEY_ID \ | |
| APPLE_API_ISSUER \ | |
| APPLE_ID \ | |
| APPLE_APP_SPECIFIC_PASSWORD \ | |
| APPLE_TEAM_ID \ | |
| APPLE_KEYCHAIN \ | |
| APPLE_KEYCHAIN_PROFILE | |
| do | |
| if [[ -z "${!name:-}" ]]; then | |
| unset "${name}" | |
| fi | |
| done | |
| if [[ "${RUNNER_OS}" == "macOS" && -z "${CSC_LINK:-}" ]]; then | |
| export CSC_IDENTITY_AUTO_DISCOVERY=false | |
| fi | |
| ${{ matrix.command }} | |
| - name: Upload packaged artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: GoAgent-${{ matrix.name }} | |
| path: | | |
| release/**/*.AppImage | |
| release/**/*.deb | |
| release/**/*.dmg | |
| release/**/*.exe | |
| release/**/*.zip | |
| release/**/*.tar.gz | |
| release/**/*.yml | |
| if-no-files-found: error | |
| package-lite: | |
| name: Package Lite ${{ matrix.name }} | |
| needs: release-preflight | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - name: macOS | |
| os: macos-latest | |
| command: pnpm dist:lite:mac | |
| - name: Windows | |
| os: windows-latest | |
| command: pnpm dist:lite:win | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 10.30.3 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: pnpm | |
| - name: Setup Python for Kokoro zh G2P | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Install Kokoro zh G2P Python dependencies | |
| run: python -m pip install -r scripts/requirements-tts.txt | |
| - name: Typecheck | |
| run: pnpm typecheck | |
| - name: Prepare Kokoro TTS assets | |
| shell: bash | |
| env: | |
| GOAGENT_TTS_ASSETS_STRICT: "1" | |
| GOAGENT_TTS_SMOKE_STRICT: "1" | |
| GOAGENT_TTS_PYTHON: python | |
| run: | | |
| pnpm prepare:tts-assets | |
| pnpm check:tts-assets | |
| pnpm smoke:tts | |
| - name: Package Lite desktop app | |
| shell: bash | |
| env: | |
| CSC_LINK: ${{ secrets.CSC_LINK }} | |
| CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} | |
| WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }} | |
| WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }} | |
| CSC_IDENTITY_AUTO_DISCOVERY: ${{ secrets.CSC_LINK != '' && 'true' || 'false' }} | |
| APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }} | |
| APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }} | |
| APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }} | |
| APPLE_ID: ${{ secrets.APPLE_ID }} | |
| APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} | |
| APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} | |
| APPLE_KEYCHAIN: ${{ secrets.APPLE_KEYCHAIN }} | |
| APPLE_KEYCHAIN_PROFILE: ${{ secrets.APPLE_KEYCHAIN_PROFILE }} | |
| run: | | |
| for name in \ | |
| CSC_LINK \ | |
| CSC_KEY_PASSWORD \ | |
| WIN_CSC_LINK \ | |
| WIN_CSC_KEY_PASSWORD \ | |
| APPLE_API_KEY \ | |
| APPLE_API_KEY_ID \ | |
| APPLE_API_ISSUER \ | |
| APPLE_ID \ | |
| APPLE_APP_SPECIFIC_PASSWORD \ | |
| APPLE_TEAM_ID \ | |
| APPLE_KEYCHAIN \ | |
| APPLE_KEYCHAIN_PROFILE | |
| do | |
| if [[ -z "${!name:-}" ]]; then | |
| unset "${name}" | |
| fi | |
| done | |
| if [[ "${RUNNER_OS}" == "macOS" && -z "${CSC_LINK:-}" ]]; then | |
| export CSC_IDENTITY_AUTO_DISCOVERY=false | |
| fi | |
| ${{ matrix.command }} | |
| - name: Upload Lite packaged artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: GoAgent-Lite-${{ matrix.name }} | |
| path: | | |
| release/**/*-lite.AppImage | |
| release/**/*-lite.deb | |
| release/**/*-lite.dmg | |
| release/**/*-lite.exe | |
| release/**/*-lite-portable.zip | |
| release/**/*-lite.tar.gz | |
| release/**/*.yml | |
| if-no-files-found: error | |
| package-nvidia-windows: | |
| name: Package Windows NVIDIA | |
| needs: release-preflight | |
| if: needs.release-preflight.outputs.can-package == 'true' && needs.release-preflight.outputs.can-package-nvidia == 'true' | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 10.30.3 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: pnpm | |
| - name: Setup Python for Kokoro zh G2P | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Install Kokoro zh G2P Python dependencies | |
| run: python -m pip install -r scripts/requirements-tts.txt | |
| - name: Typecheck | |
| run: pnpm typecheck | |
| - name: Prepare Kokoro TTS assets | |
| shell: bash | |
| env: | |
| GOAGENT_TTS_ASSETS_STRICT: "1" | |
| GOAGENT_TTS_SMOKE_STRICT: "1" | |
| GOAGENT_TTS_PYTHON: python | |
| run: | | |
| pnpm prepare:tts-assets | |
| pnpm check:tts-assets | |
| pnpm smoke:tts | |
| - name: Prepare NVIDIA KataGo assets | |
| shell: bash | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| GOAGENT_NVIDIA_KATAGO_ASSET_REPO: ${{ inputs.nvidia_katago_asset_repo || 'wimi321/lizzieyzy-next' }} | |
| GOAGENT_NVIDIA_KATAGO_ASSET_RELEASE_TAG: ${{ inputs.nvidia_katago_asset_release_tag || '1.0.0-next-2026-05-02.3' }} | |
| GOAGENT_NVIDIA_KATAGO_ASSET_PATTERN: ${{ inputs.nvidia_katago_asset_pattern || '*windows64.nvidia.portable.zip' }} | |
| run: | | |
| mkdir -p .katago-nvidia-source/extracted | |
| gh release download "${GOAGENT_NVIDIA_KATAGO_ASSET_RELEASE_TAG}" \ | |
| --repo "${GOAGENT_NVIDIA_KATAGO_ASSET_REPO}" \ | |
| --pattern "${GOAGENT_NVIDIA_KATAGO_ASSET_PATTERN}" \ | |
| --dir .katago-nvidia-source | |
| asset_archive="$(find .katago-nvidia-source -maxdepth 1 -type f | head -n 1)" | |
| if [[ -z "${asset_archive}" ]]; then | |
| echo "No NVIDIA KataGo asset matched ${GOAGENT_NVIDIA_KATAGO_ASSET_PATTERN}" >&2 | |
| exit 1 | |
| fi | |
| case "${asset_archive}" in | |
| *.zip) | |
| if [[ "${RUNNER_OS}" == "Windows" ]] && command -v 7z >/dev/null 2>&1; then | |
| 7z x "${asset_archive}" -o.katago-nvidia-source/extracted | |
| elif command -v unzip >/dev/null 2>&1; then | |
| unzip -q "${asset_archive}" -d .katago-nvidia-source/extracted | |
| elif command -v 7z >/dev/null 2>&1; then | |
| 7z x "${asset_archive}" -o.katago-nvidia-source/extracted | |
| else | |
| powershell -NoProfile -Command "Expand-Archive -LiteralPath '${asset_archive}' -DestinationPath '.katago-nvidia-source/extracted'" | |
| fi | |
| ;; | |
| *.tar.gz|*.tgz) | |
| tar -xzf "${asset_archive}" -C .katago-nvidia-source/extracted | |
| ;; | |
| *) | |
| if command -v 7z >/dev/null 2>&1; then | |
| 7z x "${asset_archive}" -o.katago-nvidia-source/extracted | |
| else | |
| echo "Unsupported NVIDIA asset archive: ${asset_archive}" >&2 | |
| exit 1 | |
| fi | |
| ;; | |
| esac | |
| node scripts/prepare_katago_assets.mjs \ | |
| --asset-dir=".katago-nvidia-source/extracted" \ | |
| --platform=win32-x64 \ | |
| --scan \ | |
| --copy-runtime-dir \ | |
| --preserve-model-name \ | |
| --flavor=nvidia \ | |
| --source-label="${GOAGENT_NVIDIA_KATAGO_ASSET_REPO}@${GOAGENT_NVIDIA_KATAGO_ASSET_RELEASE_TAG}:${GOAGENT_NVIDIA_KATAGO_ASSET_PATTERN}" | |
| node scripts/check_katago_assets.mjs --mode=release --platform=win32-x64 | |
| - name: Bundle zhizi b28 model (NVIDIA) | |
| shell: bash | |
| env: | |
| ZHIZI_B28_URL: https://media.katagotraining.org/uploaded/networks/models/kata1/kata1-zhizi-b28c512nbt-muonfd2.bin.gz | |
| ZHIZI_B28_FILENAME: kata1-zhizi-b28c512nbt-muonfd2.bin.gz | |
| run: | | |
| mkdir -p data/katago/models | |
| target="data/katago/models/${ZHIZI_B28_FILENAME}" | |
| if [[ -f "${target}" ]]; then | |
| echo "zhizi b28 already present, skipping download" | |
| else | |
| echo "Downloading zhizi b28 from ${ZHIZI_B28_URL}" | |
| curl -fsSL --retry 3 --retry-delay 5 "${ZHIZI_B28_URL}" -o "${target}" | |
| fi | |
| node scripts/select_default_katago_model.mjs \ | |
| --model="${target}" \ | |
| --id=official-b28-strong \ | |
| --display-name="KataGo zhizi b28 Official Strongest" \ | |
| --prune | |
| - name: Package NVIDIA desktop app | |
| shell: bash | |
| env: | |
| WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }} | |
| WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }} | |
| CSC_IDENTITY_AUTO_DISCOVERY: "false" | |
| run: | | |
| for name in WIN_CSC_LINK WIN_CSC_KEY_PASSWORD; do | |
| if [[ -z "${!name:-}" ]]; then | |
| unset "${name}" | |
| fi | |
| done | |
| pnpm build | |
| pnpm exec electron-builder --win nsis --publish never | |
| - name: Rename NVIDIA artifacts | |
| shell: pwsh | |
| run: | | |
| $version = node -p "JSON.parse(require('fs').readFileSync('package.json','utf8')).version" | |
| $releaseDir = Join-Path "release" $version | |
| $installer = Get-ChildItem -Path $releaseDir -Filter "GoAgent-$version-win-x64.exe" -File | Select-Object -First 1 | |
| $unpackedDir = Join-Path $releaseDir "win-unpacked" | |
| if (-not $installer) { throw "Missing NVIDIA installer EXE before rename." } | |
| if (-not (Test-Path $unpackedDir)) { throw "Missing win-unpacked directory for NVIDIA portable recompression." } | |
| Push-Location $releaseDir | |
| & 7z a -t7z -m0=LZMA2 -mx=5 -mmt=on -v1900m "GoAgent-$version-win-x64-nvidia-portable.7z" ".\win-unpacked\*" | Out-Host | |
| Pop-Location | |
| Rename-Item -LiteralPath $installer.FullName -NewName "GoAgent-$version-win-x64-nvidia.exe" -Force | |
| $nvidiaPortableParts = Get-ChildItem -Path $releaseDir -Filter "GoAgent-$version-win-x64-nvidia-portable.7z.*" -File | Sort-Object Name | |
| $nvidiaInstaller = Get-Item (Join-Path $releaseDir "GoAgent-$version-win-x64-nvidia.exe") | |
| if (-not $nvidiaPortableParts) { throw "Missing NVIDIA portable split 7z parts after recompression." } | |
| $nvidiaPortableTotal = ($nvidiaPortableParts | Measure-Object -Property Length -Sum).Sum | |
| Write-Host "NVIDIA portable split 7z parts: $($nvidiaPortableParts.Count)" | |
| Write-Host "NVIDIA portable split 7z total bytes: $nvidiaPortableTotal" | |
| Write-Host "NVIDIA installer EXE bytes: $($nvidiaInstaller.Length)" | |
| foreach ($part in $nvidiaPortableParts) { | |
| Write-Host "NVIDIA portable part bytes: $($part.Name) $($part.Length)" | |
| if ($part.Length -ge 2147483648) { | |
| throw "NVIDIA portable split archive part exceeds GitHub's 2 GiB asset limit: $($part.Name) $($part.Length)" | |
| } | |
| } | |
| - name: Upload NVIDIA packaged artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: GoAgent-Windows-NVIDIA | |
| path: | | |
| release/**/*nvidia*.exe | |
| release/**/*nvidia*.7z* | |
| if-no-files-found: error | |
| github-release: | |
| name: Publish GitHub Release | |
| needs: | |
| - release-preflight | |
| - package | |
| - package-lite | |
| - package-nvidia-windows | |
| runs-on: ubuntu-latest | |
| if: always() && needs.release-preflight.outputs.can-package == 'true' && needs.release-preflight.outputs.can-package-nvidia == 'true' && needs.package.result == 'success' && needs.package-lite.result == 'success' && needs.package-nvidia-windows.result == 'success' && startsWith(github.ref, 'refs/tags/') | |
| steps: | |
| - name: Checkout release notes | |
| uses: actions/checkout@v4 | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| merge-multiple: true | |
| - name: Generate checksums | |
| shell: bash | |
| run: | | |
| shopt -s globstar nullglob | |
| files=( | |
| artifacts/**/GoAgent-*-mac-arm64.dmg | |
| artifacts/**/GoAgent-*-mac-x64.dmg | |
| artifacts/**/GoAgent-*-mac-arm64-lite.dmg | |
| artifacts/**/GoAgent-*-mac-x64-lite.dmg | |
| artifacts/**/GoAgent-*-win-x64-lite-portable.zip | |
| artifacts/**/GoAgent-*-win-x64-lite.exe | |
| artifacts/**/GoAgent-*-win-x64-portable.zip | |
| artifacts/**/GoAgent-*-win-x64.exe | |
| artifacts/**/GoAgent-*-win-x64-nvidia-portable.7z* | |
| artifacts/**/GoAgent-*-win-x64-nvidia.exe | |
| ) | |
| if [[ ${#files[@]} -eq 0 ]]; then | |
| echo "No release assets found for checksum generation." >&2 | |
| exit 1 | |
| fi | |
| sha256sum "${files[@]}" | sed 's# .*/# #' > artifacts/SHA256SUMS.txt | |
| - name: Create release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| prerelease: ${{ contains(github.ref_name, '-') }} | |
| make_latest: ${{ contains(github.ref_name, '-') && 'false' || 'true' }} | |
| files: | | |
| artifacts/**/GoAgent-*-mac-arm64.dmg | |
| artifacts/**/GoAgent-*-mac-x64.dmg | |
| artifacts/**/GoAgent-*-mac-arm64-lite.dmg | |
| artifacts/**/GoAgent-*-mac-x64-lite.dmg | |
| artifacts/**/GoAgent-*-win-x64-lite-portable.zip | |
| artifacts/**/GoAgent-*-win-x64-lite.exe | |
| artifacts/**/GoAgent-*-win-x64-portable.zip | |
| artifacts/**/GoAgent-*-win-x64.exe | |
| artifacts/**/GoAgent-*-win-x64-nvidia-portable.7z* | |
| artifacts/**/GoAgent-*-win-x64-nvidia.exe | |
| artifacts/SHA256SUMS.txt | |
| body_path: docs/RELEASE_NOTES_${{ github.ref_name }}.md |