Commit Graph
253 Commits
Author SHA1 Message Date
adminandGitHub 90796d8932 Use App Platform hosting for Eagle0pedia (#8397) 2026-07-10 08:02:48 -07:00
adminandGitHub 7df9a7f074 Use scoped Eagle0pedia Spaces credentials (#8396) 2026-07-10 07:28:23 -07:00
adminandGitHub 6891fe2fce Deploy Eagle0pedia to DigitalOcean Spaces (#8392)
* Add DigitalOcean build wrapper for Eagle0pedia

* Deploy Eagle0pedia from GitHub Actions
2026-07-10 07:03:25 -07:00
adminandGitHub 9d041926d7 Preserve iOS scene manifest for TestFlight builds (#7733) 2026-06-22 14:51:36 -07:00
adminandGitHub 72ea2de25c Version Addressables by Unity editor (#7731) 2026-06-22 08:33:15 -07:00
adminandGitHub a154174fa1 Remove broken Shardok inspector target (#7496) 2026-06-21 09:05:50 -07:00
adminandGitHub 84f182d74f Fail iOS build when Addressables runtime data is missing (#7424) 2026-06-20 14:16:26 -07:00
adminandGitHub 404028bb59 Always package Windows Addressables runtime data (#7360) 2026-06-20 07:47:26 -07:00
adminandGitHub 6a98cd8d6d Upgrade Unity client to 6000.5.0f1 (#7325) 2026-06-19 07:46:13 -07:00
adminandGitHub fb222665bf Limit Addressables rebuild detection to content inputs (#7314) 2026-06-17 09:50:08 -07:00
adminandGitHub 3ac1225808 Guard against oversized Addressables uploads (#7312) 2026-06-17 08:44:37 -07:00
adminandGitHub e1b77eabdd Add Addressables upload guardrails (#7301) 2026-06-16 15:22:06 -07:00
adminandGitHub 6f95e4a36c Reduce Addressables upload blast radius (#7300) 2026-06-16 14:40:25 -07:00
adminandGitHub d0b1e5b09e Remove obsolete Hetzner provisioning code (#7285) 2026-06-16 07:13:30 -07:00
adminandGitHub a91ca6826e Share Addressables change detector (#7261) 2026-06-15 10:40:59 -07:00
adminandGitHub 31d41fbff9 Skip unchanged Addressables in Unity builds (#7255) 2026-06-15 10:06:35 -07:00
adminandGitHub d029ed298e Reduce Beast Effects texture import sizes (#7233)
* Reduce beast effect texture import sizes

* Fall back to GitHub LFS for missing mirror objects

* Disable local LFS filter process for non-LFS checkouts
2026-06-15 06:33:28 -07:00
adminandGitHub 441be82e45 Use Unity .NET profile for standalone builds (#7229)
* Use Unity .NET profile for standalone builds

* Use repo-local Git LFS config in CI

* Upload Windows Addressables directly from Unity CI
2026-06-14 21:20:06 -07:00
adminandGitHub 59d26ffa32 Use IL2CPP for Standalone Unity builds (#7228)
* Use IL2CPP for Standalone Unity builds

* Install .NET SDK for Unity builds

* Expose setup-dotnet SDK to Unity builds

* Set dotnet host path for Unity Addressables

* Build Standalone Addressables with Mono backend

* Disable Addressables player rebuilds in CI

* Require Unity IL2CPP modules in CI

* Use Mono for macOS Windows Unity cross-builds
2026-06-14 19:53:25 -07:00
adminandGitHub b09b114aa4 Avoid reuploading unchanged Addressables bundles (#7175) 2026-06-12 13:57:58 -07:00
adminandGitHub e80abb24d1 Summarize Bazel BEP timing in CI (#7155) 2026-06-12 08:59:21 -07:00
adminandGitHub a600086709 Use Bazel repo contents cache in CI (#7150) 2026-06-12 08:44:12 -07:00
adminandGitHub d0a6527446 Use target-specific LLVM cross toolchains (#7081) 2026-06-11 11:27:32 -07:00
adminandGitHub 0afc0754c1 Load JavaInfo explicitly for Bazel 9 (#7072) 2026-06-11 08:24:25 -07:00
adminandGitHub 0bac3ab38f Scope non-LFS checkout config (#7035) 2026-06-10 12:01:13 -07:00
adminandGitHub 475321a86e Ensure AWS CLI for Addressables upload (#7033) 2026-06-10 10:22:15 -07:00
adminandGitHub 8f24ef1fa7 Fix Unity Mac module verification path (#7016) 2026-06-10 07:17:49 -07:00
adminandGitHub 21b56b8098 Upgrade Unity editor to 6000.4.10f1 (#7013) 2026-06-10 06:49:54 -07:00
adminandGitHub 07bf5fc72f Add dynamic text binding validation tests (#6855) 2026-06-02 11:25:12 -07:00
adminandGitHub 758ae6d44f Ensure Bazel is available in self-hosted workflows (#6785)
* 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
2026-05-29 07:52:17 -07:00
58030a56a7 Split Eagle server fat JAR into deps + app Docker layers (#6717)
The Docker Build and Push workflow spends more time pushing than building
because the entire ~115MB Eagle classpath ships as one pkg_tar layer, so
every Scala commit re-uploads the whole blob to DOCR.

Add a jar_split rule that partitions the scala_binary's transitive runtime
jars by workspace into a stable third-party layer (76MB, 137 jars) and a
first-party layer (38MB, 989 jars). crane skips the unchanged deps blob, so
typical Scala-only commits re-upload ~38MB instead of ~115MB. Entrypoint
switches from -jar fat.jar to a -cp classpath glob over both layer dirs.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 16:19:47 -07:00
adminandGitHub 344f1134f6 Detect missing prefab references in Unity builds (#6574) 2026-03-22 18:20:09 -07:00
94459d6e87 Restore keychain search list before iOS export (#6542)
xcodebuild archive can reset the user keychain search list during long
builds, dropping the temporary CI keychain that holds the Apple
Distribution signing cert. Re-add and unlock the keychain right before
the export step so xcodebuild -exportArchive can find the certificate.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 08:05:36 -07:00
52a7accfa2 Retry LFS pull to handle Gitea mirror sync race (#6540)
Gitea's mirror-sync API is async — the GitHub webhook triggers it but
returns 200 before the sync completes. CI runners can start git lfs pull
before new LFS objects are available on Gitea. Extract LFS fetch into a
shared script with retry logic (5 attempts, 15s backoff) to bridge the
gap.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 06:59:13 -07:00
fc0edc38ef Clean up Unity-iPhone DerivedData after iOS archive (#6535)
Each xcodebuild archive creates a new ~3.6GB Unity-iPhone-<random>
folder in DerivedData that was never cleaned up, accumulating on
the build runner.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 22:11:38 -07:00
fd75833208 Use API key auth for iOS export to prevent Xcode-Token expiry failures (#6397)
The exportArchive step was relying on the Xcode-Token in the keychain
for App Store Connect authentication. This token expires periodically,
breaking headless CI builds. Pass the App Store Connect API key (already
used by the upload step) to the export step as well.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 15:17:14 -08:00
046daa08a9 Remove standalone iOS Addressables build workflow (#6371)
The nightly iOS TestFlight build already builds and uploads iOS
addressables as part of its pipeline. The standalone workflow added
unnecessary complexity and forced platform switches on the unity-mac
runner. Manual TestFlight dispatches cover any need for immediate
addressable updates.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 16:59:21 -08:00
faadd91ceb Remove UIApplicationSceneManifest from iOS plist, don't quit on iOS (#6369)
Two fixes for iOS deep link handling:

1. CI: Remove UIApplicationSceneManifest from the generated Info.plist
   during archive. Unity 6 adds this key, which opts the app into the
   scene-based lifecycle. iOS then routes deep links through
   UISceneDelegate instead of UIApplicationDelegate, but Unity doesn't
   implement that path, so deep link URLs are silently dropped.

2. OAuthManager: Don't call Application.Quit() on iOS — it's documented
   as having no effect. Instead, let the app go to background when the
   browser opens and handle the deep link callback when iOS brings it
   back via OnDeepLinkActivated.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 16:31:56 -08:00
8ff56d7d28 Enable map editor in production admin server deployment (#6190)
Add .e0mj map files as a layer in the admin server Docker image
and pass --maps-dir=/app/maps to enable the web-based map editor
added in #6186.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 17:53:20 -08:00
adminandGitHub 88781d779b Revert "Add persistent Bazel server keepalive for CI runners (#6096)" (#6118)
This reverts commit cccbbb9d37.
2026-02-17 21:23:36 -08:00
a879243fd8 Remove unused persist_library.sh and restore_library.sh (#6112)
These scripts managed an rsync-based Library/ cache to /tmp/eagle0/ but
are never called from any workflow. Library/ caching now relies on
clean: false preserving the working directory between self-hosted runs.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 16:54:16 -08:00
8dc9d12fdf Set ITSAppUsesNonExemptEncryption in archive script for reliable compliance bypass (#6107)
The Unity DeepLinkPostProcessor depends on UNITY_IOS being defined at
script compilation time, which can fail if the editor starts with a
non-iOS build target. Set the key via PlistBuddy in the archive script
as a reliable fallback that doesn't depend on Unity preprocessor state.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 12:28:42 -08:00
cccbbb9d37 Add persistent Bazel server keepalive for CI runners (#6096)
GitHub Actions kills orphan processes after each job, which kills
the Bazel server and forces a cold reload of the skyframe graph on
every CI run (~15-20s for loading+analysis of 1080 packages / 78k
targets). With a warm server this drops to ~2-3s.

Changes:
- .bazelrc: Set startup --max_idle_secs=0 to prevent idle shutdown
- ci/runners/bazel-keepalive.sh: Pings the Bazel server to keep it alive
- ci/runners/install-bazel-keepalive.sh: One-time setup script that
  installs a macOS launchd agent to run the keepalive every 5 minutes

The launchd agent owns the Bazel server process, so GitHub Actions'
orphan cleanup won't kill it. To set up on a new runner:

  ./ci/runners/install-bazel-keepalive.sh /path/to/actions-runner/_work/eagle0/eagle0

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 07:19:46 -08:00
7afbde69f1 Fix TestFlight upload for Xcode 14+ (#5927)
Replace deprecated altool (removed in Xcode 14) with xcodebuild
-exportArchive using App Store Connect API authentication.

Changes:
- upload_testflight.sh: Use xcodebuild with destination=upload
  and API key authentication instead of altool
- ios_testflight.yml: Pass xcarchive path and use new API key secrets

Required new GitHub secrets:
- APP_STORE_CONNECT_API_KEY_ID
- APP_STORE_CONNECT_API_ISSUER_ID
- APP_STORE_CONNECT_API_KEY (contents of .p8 file)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 22:58:43 -08:00
8a2bc8d984 Upgrade to Java 25 (LTS) (#5859)
Upgrade Eagle server and JFR sidecar from Java 21 to Java 25.

Java 25 is the latest LTS release (September 2025). Scala 3.7.2
fully supports JDK 25.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 13:04:32 -08:00
ac11292778 Upgrade to Java 21 (LTS) (#5851)
Upgrade Eagle server and JFR sidecar from Java 17 to Java 21.

Benefits:
- Better garbage collection (Generational ZGC available)
- General JVM performance improvements
- Foundation for future virtual threads adoption
- Supported until 2031

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 12:07:48 -08:00
1033a4b730 Use JRE instead of JDK for Eagle server image (#5849)
The Eagle server only needs to run Java, not compile it. Using the JRE
base image instead of JDK reduces the image size from ~273MB to ~120MB.

The JFR sidecar still uses JDK because it needs jcmd for JFR dumps.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 11:11:27 -08:00
46b16ecbb7 Fix sporadic warmup binary build failure in CI (#5797)
The warmup binary was being copied from a hardcoded bazel-bin path that
doesn't work reliably with cross-compilation and remote caching. When the
binary was cached but not materialized locally, the cp command would fail.

Fix by:
- Create a warmup_tar pkg_tar target that packages the warmup binary
- Use tar extraction instead of cp, which forces Bazel to materialize
  the output file before the command runs
- Rename the binary from warmup_linux_amd64 to warmup in the tar

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 07:06:25 -08:00
46c8c8a44a Fix iOS build by checking for iOS module before skipping install (#5753)
* Fix iOS build by checking for iOS module before skipping install

The script was checking if Unity was installed but not whether the iOS
module was present. This caused iOS builds to fail when Unity was
installed without iOS support.

Now checks for platform-specific module directories before declaring
Unity ready.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Use install-modules when editor exists but modules missing

Unity Hub CLI has separate commands:
- install: installs editor with modules (fails if editor exists)
- install-modules: adds modules to existing installation

Now detects which command to use based on whether the editor
directory exists.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Output Unity log on build failure for easier debugging

When Unity builds fail, the actual error is hidden in a log file that
requires downloading an artifact. Now all Unity build scripts output
the last 200 lines of the log directly to the console on failure.

Updated scripts:
- build_unity_ios.sh
- build_windows.sh
- build_mac.sh
- build_ios_addressables.sh

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Treat 'module already installed' as success

Unity Hub CLI returns non-zero exit code when all requested modules
are already installed, with message "No modules found to install".
Now check output for "already installed" messages and treat as success.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:31:08 -08:00
f069475f99 Add public credits/attributions web page (#5733)
Adds /credits endpoint to the auth service that displays all attribution
information from attributions.json in a readable HTML format.

The page includes:
- Creative Commons music (31 tracks with artist and license)
- Sound effects from Freesound (with source links)
- Fonts (with license info)
- Open source software dependencies (Java, Go, C++, C#)

The attributions.json file is now included in the auth server Docker
image so it can be served at runtime.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 16:46:54 -08:00