* Ensure Bazel is available in self-hosted workflows
* Allow Bazel CI to use Command Line Tools
* Set macOS C++ deployment target for Bazel
* Use Bazel macOS minimum OS flags
* Raise macOS Bazel deployment target for filesystem
* Ensure git-lfs is available for CI fetches
* Authenticate CI LFS fetches with workflow token
* Disable stale LFS hooks during CI checkout
* Disable LFS filters during CI checkout
* Prepare Git LFS before persistent checkout
* Harden generated Bazel rc and LFS auth
* Let Xcode sync skip without full Xcode
* Harden Unity build cache markers
* Require full Xcode for mactools sync
* Fix Bazel Xcode version caching causing CI build failures
When Xcode updates on self-hosted runners, Bazel's cached
local_config_xcode still references the old version, causing
"xcode-locator <old_version> failed" errors.
Add sync_bazel_xcode.sh which detects Xcode version changes
and runs `bazel sync --configure` to refresh the config without
nuking the build cache. Added to all 8 CI workflows that use Bazel.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Use rm of cached repo instead of bazel sync --configure
bazel sync --configure requires WORKSPACE mode and fails with
bzlmod. Instead, delete the stale local_config_xcode from the
output base directly — the next bazel build regenerates it.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Use bazel clean --expunge instead of targeted repo deletion
Deleting just local_config_xcode is insufficient — the stale Xcode
version is also embedded in cached actions and other toolchain repos.
The only reliable fix is a full expunge. Since Xcode updates are
infrequent, the one-time rebuild cost is acceptable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Use action_env to bake Xcode version into cache keys
Instead of expunging the cache (which doesn't help with the remote
cache anyway), write the Xcode build version to .bazelrc.xcode via
--action_env. This makes the version part of every action's cache
key, so stale entries in both local and remote caches are naturally
ignored after an Xcode update — no deletion needed anywhere.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add expunge back alongside action_env for belt-and-suspenders fix
action_env alone isn't enough — local_config_xcode is a cached
repository rule that bakes in the old Xcode version before any
actions run. Need expunge to clear the local toolchain config,
plus action_env to prevent stale remote cache hits afterward.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add Xcode sync to mac_build build-and-sign job
The sync step was only in the deploy job, but build-and-sign calls
bazel via build_protos.sh before that. This runs on the unity-mac
runner which also has the stale Xcode cache.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Replace dotnet proto build with Bazel-hermetic C# proto generation
Use rules_proto_grpc_csharp to generate .cs source files via Bazel
instead of requiring a locally-installed dotnet SDK to build protos.dll.
This eliminates the dotnet dependency for CI runners and makes the
proto build fully hermetic.
- Add bazel_dep for rules_proto_grpc_csharp 5.8.0
- Bump grpc 1.74.0 -> 1.74.1 (required by rules_proto_grpc_csharp)
- Add csharp_proto_compile/csharp_grpc_compile targets across 8 proto
BUILD.bazel files (81 .cs files from 78 protos)
- Rewrite build_protos.sh to use bazel build + copy instead of dotnet
- Output goes to Assets/GeneratedProtos/ with package-based subdirs
to avoid filename collisions (e.g. ActionResultView.cs in both
shardok/api/ and eagle/views/)
- Add Assets/GeneratedProtos/ to .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Remove stale Eagle0Protos DLL references
The old build_protos.sh generated protos.dll via dotnet; the new one
generates .cs source files instead. Remove the tracked .meta and
.deps.json files that reference the no-longer-generated DLL, and
gitignore the directory to prevent re-adding.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Move connection status UI to persistent canvas
Centralize connection status management on a persistent canvas that
remains visible across Eagle and Shardok game modes.
Changes:
- Add PersistentUIManager singleton to wire persistent UI elements
- Add PersistentClientConnection.Current static accessor
- Move ConnectionStatusUI to persistent canvas with inspector reference
- Remove connection status wiring from EagleGameController and
ShardokGameController
- ConnectionStatusUI.statusText is now an inspector field instead of
using GetComponent
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* WIP: Lobby UX cleanup
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix lobby prefab instantiation transforms
Change worldPositionStays from true to false when instantiating lobby
list items. This allows instantiated prefabs to adopt proper local
transforms relative to their parent, fixing rotation and Z-value issues.
Also removes unnecessary localScale resets since the layout system
handles positioning correctly with worldPositionStays=false.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Move Create Game to dedicated lobby section
Replace instantiated CreateGame prefab with a direct scene reference.
The Create Game UI now lives in its own section of the lobby panel.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Simplify Create Game UI and add dropdown zebra striping
- Hard-code total player count to 7, remove totalPlayersDropdown
- Change human player dropdown labels to "1 player", "2 players", etc.
- Change random warlord fallback text from "Random" to "Random Warlord"
- Add AlternatingRowColor component for dropdown zebra striping
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Gitignore map generator output folder
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Update Assembly-CSharp.csproj with new script references
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* Verify installer SHA256 after download
The Windows installer was downloading and launching new installer updates
without verifying the SHA256 hash, which could allow a corrupted or
tampered installer to run. This adds SHA256 verification after download
and before launching the new installer.
- Add expectedSha parameter to DownloadAndLaunchNewInstaller
- Compute SHA256 of downloaded file and compare to manifest value
- Delete the file and fail if SHA doesn't match
- Log verification success on match
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Remove accidentally committed node_modules cache files
* Add node_modules to .gitignore
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* oh it's the importpath
* separate package
* set import path
* call the go version
* start the impl
* build file equivalent
* write the loader file too
* write the loader file too
* ignore bazelbsp
* check the sha against S3 and download
* shardok debug script works
* works with branch name too
* handle other branch names
* factor out most of the functionality
* eagle debugger too
Former-commit-id: 290eddc94ce05ed30d240674e241a8ad108b1401
* include the proto dlls in the build for unity
* put the script relative to project root, not repo root
* include the plugin psds
* add meta files for some reason
* was in the wrong place after all
* include everything except the android and ios static libraries
* remove the script
Former-commit-id: 569e28ea0ffef76a36c0f2db6f5e52d4d6eb9e3a