From ec649c3b8ebb937e11ab4b165f1de16683332398 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 02:53:04 +0000 Subject: [PATCH] Release workflow creates the release for a pushed tag; add v1.1.0 notes Previously the tag-push run only uploaded assets and failed unless the release had been created by hand first. A new job creates the release (notes from docs/release-notes/.md, else generated) before the Windows and macOS builds upload to it. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017ZHKbLKcpoa8QJGzqkbDTJ --- .github/workflows/release.yml | 29 ++++++++++++++++++++++++++++- docs/release-notes/v1.1.0.md | 21 +++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 docs/release-notes/v1.1.0.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d5199a0..e8f3efd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,15 +6,41 @@ on: workflow_dispatch: inputs: tag: - description: 'Existing release tag to upload assets to (builds from the dispatched branch)' + description: 'Existing tag to release and upload assets to (builds from the dispatched branch)' required: true permissions: contents: write jobs: + # Creates the GitHub release for a pushed tag if it doesn't exist yet, so + # pushing a tag is all a release takes. Notes come from + # docs/release-notes/.md when present, else GitHub's generated notes. + release: + name: Create release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Create release if missing + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ inputs.tag || github.ref_name }} + run: | + if gh release view "$TAG" >/dev/null 2>&1; then + echo "Release $TAG already exists" + exit 0 + fi + notes="docs/release-notes/$TAG.md" + if [ -f "$notes" ]; then + gh release create "$TAG" --verify-tag --title "$TAG" --notes-file "$notes" + else + gh release create "$TAG" --verify-tag --title "$TAG" --generate-notes + fi + windows: name: Windows portable .exe + needs: release runs-on: windows-latest steps: # The Stockfish engine comes from the `stockfish` npm package (npm ci). @@ -42,6 +68,7 @@ jobs: macos: name: macOS universal .dmg + needs: release runs-on: macos-latest steps: - uses: actions/checkout@v4 diff --git a/docs/release-notes/v1.1.0.md b/docs/release-notes/v1.1.0.md new file mode 100644 index 0000000..73ac15c --- /dev/null +++ b/docs/release-notes/v1.1.0.md @@ -0,0 +1,21 @@ +## Faster, stronger, and no more stalled analysis + +### Fixed +- **Analysis no longer fails or times out when you move quickly.** A "stop" command could get lost while the engine was switching positions, which made the app rebuild the whole engine and sometimes give up with no move. Moves now get a best line within milliseconds of each position change. +- **Settings now persist between launches** (theme, number of lines, think time). Previously they reset every time the app started. +- Fonts now load in the desktop app. + +### Faster and stronger engine +- Stockfish now uses **all your CPU cores** (the multi-threaded NNUE build). The previous release was accidentally running the single-threaded engine. That's roughly 4× the search speed on a 4-core machine, which means deeper, stronger analysis in the same time. +- New **Think time** setting (1s / 3s / 5s / 10s) in the ⚙ menu. The best move so far still appears instantly. +- Faster engine startup on repeat launches. + +### Updates +- The app now **checks for new releases at startup** and shows a banner (plus a dot on the ⚙ gear) when one is available. You can turn this off in the ⚙ menu, and "Check for updates" is still there to run on demand. + +### Other +- Opening the app a second time focuses the existing window instead of starting a second engine. + +### Downloads +- **Windows:** `Chess.Solver.1.1.0.exe`, a portable build. SmartScreen may warn because it's unsigned: choose *More info → Run anyway*. +- **macOS:** `Chess.Solver-1.1.0-universal.dmg` (Intel + Apple Silicon). It isn't notarized, so right-click the app → **Open** on first launch.