mirror of
https://github.com/ARMSX2/ARMSX2.git
synced 2026-08-24 16:50:16 -07:00
Nightly and MoonStore builds identify themselves to RetroAchievements as stock PCSX2, so the server allows softcore only. Hardcore has worked on locally built IPAs and nowhere else. Nothing was broken. pcsx2/Host.cpp reads the client version from ra_ua_secret.h behind __has_include and falls back to a stock agent when the macro is absent. That header is gitignored, so it has never existed on a runner. CI now writes it from the IOS_RA_UA_VERSION repository secret, the way the Android job already writes its keystores from NIGHTLY_RELEASE_KS_B64. A missing secret warns and continues, because fork pull requests never receive secrets and a nightly that fails to publish is worse than one without hardcore. A malformed version fails the build instead: RetroAchievements refuses a version it cannot order, and a refused agent is indistinguishable from an unknown one on the client. Only the nightly and pushes to master embed it. Pull request artifacts keep the stock agent, so a test build is not one more public copy of an identity that needs a release to revoke. A second step reads the finished binary and fails unless the exact version is in it, trailing space included, since a stale 1.2.3 is a prefix of a current 1.2.345. Both iOS jobs are continue-on-error, so that failure does not stop the workflow, but it does skip the upload that follows it, and the publish step treats a missing IPA as absent rather than fatal. A softcore build is not shipped. None of this makes the version private. The compiler bakes the finished agent into the binary as a plain literal, so anyone holding a build can read it out. What the gitignored header prevents is a fork inheriting a live identity straight from source.