Skip to content

Release Candidate v8.0.0#464

Open
kirre-bylund wants to merge 33 commits into
mainfrom
dev
Open

Release Candidate v8.0.0#464
kirre-bylund wants to merge 33 commits into
mainfrom
dev

Conversation

@kirre-bylund
Copy link
Copy Markdown
Contributor

LootLocker_UnitySDKv8.0.0

Features

Open UPM Package Signing - The SDK package is now signed following the official Open UPM signing practice, improving supply chain security for UPM consumers.
• Remote Session Provider Parameter - Remote session lease functions now accept an optional provider parameter, allowing you to specify which authentication provider to use when initiating a lease. The provider is appended to both the redirect_url and display_url in the lease response.
• Reference Documentation - The SDK now ships with Doxygen-generated reference documentation published to GitHub Pages, complete with a version picker for browsing docs across releases.

Bug Fixes

• Fixed SDK asset loading to be path-agnostic, so the SDK now works correctly regardless of where it is installed in your project (custom folders, embedded packages, etc.)
• Sanitized SDK error messages to remove internal LootLocker-specific wording from user-facing errors
• Sensitive headers are now redacted before being included in error reports

Breaking Changes

Removed Missions and Collectables - The Missions and Collectables features have been discontinued and all related API methods, request classes, and endpoints have been removed from the SDK. If your project uses GetAllMissions, GetMission, GetCollectables, or related methods, you will need to remove those calls.

Full Changelog: v7.2.1...v8.0.0

kirre-bylund and others added 30 commits April 8, 2026 22:42
- Add .doxygen/ with Doxyfile, Doxygen Awesome theme, custom CSS, nav JS,
  layout, header/footer, and LootLocker branding
- Add .github/workflows/generate-docs.yml: validates on PR, uploads artifact
  on push to main, attaches docs-{version}.zip to releases
- Add .gitattributes: export-ignore for .doxygen/, .github/, Tests/ etc.
- Update .gitignore: exclude docs/html/ generated output
- Add @InGroup and XML doc annotations to source files for featured coverage

Closes lootlocker/index#1461
Part of lootlocker/index#1203
- Split workflow into two jobs: generate-docs (contents: read) and attach-release (contents: write) to avoid giving write access on PR runs
- Add apt-get update before doxygen install to avoid stale package index failures
- Add --clobber to gh release upload to make re-runs idempotent
- Fix duplicate visible attribute in DoxygenLayout.xml namespace and file sections
- Fix CRLF line-ending handling in sync-nav.sh regex lookahead
- Fix 'id' -> 'ID' in mainpage.md response conventions table
- Remove duplicate scripts/Sync-DocsNavigation.ps1 (not referenced anywhere, duplicated .doxygen/sync-nav.sh)
- Only upload artifact on release and workflow_dispatch, not push to main
- Name artifact sdk-docs-{version} from package.json instead of sdk-docs-{sha}
- Pass version between jobs via job outputs
Fixes all undocumented and empty-summary public types in the Game/Requests
directory so that Doxygen emits no warnings.

Files with new or completed documentation:
- ProgressionsRequest.cs
- LootLockerCommonRequestTypes.cs
- ClassRequests.cs
- AssetRequest.cs (also converts // to /// for EnumFilter properties)
- LeaderboardRequest.cs (also converts // to /// for single-slash summary tags)
- LeaderboardDetailsRequest.cs
- PlayerRequest.cs
- BalanceRequests.cs
- CatalogRequests.cs
- ConnectedAccountRequest.cs
- CurrencyRequests.cs
- EntitlementRequests.cs
- FollowerRequests.cs
- MetadataRequests.cs
- NotificationRequests.cs
- RemoteSessionRequest.cs
- TriggersRequests.cs

Resolves #1462
header.html:
- Make 'Unity SDK' product name a link to docs.lootlocker.com
- Add 'Docs' nav tab linking to docs.lootlocker.com

groups.dox:
- Add docs.lootlocker.com links to 27 groups across all feature areas
  (skipped groups with no clear docs page: RemoteSessions,
  MultiUserManagement, PlayerStorage, AssetInstanceProgressions,
  Collectables, Missions, Maps, Messages, Reports, Misc, EventSystem)
Read each feature's docs.lootlocker.com page and updated every @brief
and expanded description to reflect the actual feature scope, key concepts,
use cases, and cross-references to related groups.

Groups updated: MultiUserManagement, Authentication, WhiteLabel,
RemoteSessions, ConnectedAccounts, Presence, Friends, Followers, Player,
PlayerFiles, PlayerProgressions, Hero, CharacterProgressions, Currency,
Balances, Catalog, Purchasing, Entitlements, DropTables, Assets,
AssetInstance, Progressions, Leaderboard, Triggers, Metadata,
Notifications, Broadcasts, Feedback
Customers sometimes show SDK error messages directly to end users, who
are unaware of LootLocker as a middleware provider. Replaced all
LootLocker-branded strings in user-surfaced error messages with neutral
wording.

Changes:
- LootLockerErrorData.ToString(): Remove 'LootLocker Error:' prefix,
  replace 'LootLocker support' with 'support', improve empty-error text
- LootLockerResponse.SDKNotInitializedError: Replace 'LootLocker SDK'
  with 'game client' in user-facing message
- LootLockerEventSystem: Remove 'LootLocker' from event system reset msg
- LootLockerPresenceManager: Remove 'LootLocker SDK' from presence
  disabled message, keep developer context intact

Closes #1438
Fixes lootlocker/index#1412

Previously, LootLockerConfig.cs used hardcoded paths relative to
Assets/LootLockerSDK, breaking the file-based configuration system when
the SDK is installed anywhere other than that exact path (e.g. from a
.unitypackage placed in a custom folder, or when embedded in a publisher
package).

Changes:
- Add GetSdkRootAssetsPath() helper that locates the SDK root at runtime
  by finding LootLockerConfig.cs in the AssetDatabase via FindAssets and
  walking up four directory levels. Results are cached and cleared on
  play mode entry.
- For Package Manager installs (Packages/ is read-only), the helper
  automatically redirects writable paths (asset creation) to Assets/.
- Convert ConfigAssetsPath, ConfigResourceFolder and ConfigFilePath from
  hardcoded readonly fields to dynamic editor-only properties.
- Replace CheckForFileConfig() with a 3-tier fallback chain:
  1. Resources.Load<TextAsset> -- works in builds and editor, no path
  2. AssetDatabase.FindAssets by name -- editor only, covers the race
     window where the Resources database is not yet warmed up
  3. GetSdkRootAssetsPath()-relative File.Exists + forced AssetDatabase
     reimport -- last resort for files outside a Resources folder
- Replace File.Exists(ConfigFilePath) guard in StoreSDKVersion with
  AssetDatabase.FindAssets so it works regardless of install path.
- Replace hardcoded Assets/LootLockerSDK/package.json path in
  ListInstalledPackagesRequestProgress with GetSdkRootAssetsPath().
- Add AssetDatabase.FindAssets t:VisualTreeAsset fallback in
  LootLockerLogViewerWindow and LootLockerAdminExtension before the
  final error log, covering custom install paths for UXML files.
- CheckForFileConfig fallback A: match exact path including extension
  (/{ConfigFileName}{ConfigFileExtension}) instead of just base name, so
  a .json or .txt with the same base name cannot be loaded as config
- StoreSDKVersion guard: use Array.Exists with the same extension-aware
  path check instead of .Length > 0, to avoid false positives from
  unrelated TextAssets sharing the config file base name
- LootLockerLogViewerWindow fallback: iterate guids and match exact
  /LootLockerLogViewerWindow.uxml path suffix instead of taking guids[0]
  blindly, which is non-deterministic when multiple VisualTreeAssets match
- LootLockerAdminExtension fallback: same fix as LogViewerWindow
LootLockerLogViewerWindow.cs and LootLockerAdminExtension.UI.cs do not
have 'using System;', causing CS0103 on StringComparison.Ordinal in
Unity 2021 and earlier. Use System.StringComparison.Ordinal instead.
… response

Agent-Logs-Url: https://github.com/lootlocker/unity-sdk/sessions/7d3ae7c5-28f9-4f77-8c74-b2a71d66cd29

Co-authored-by: JohannesLoot <97440747+JohannesLoot@users.noreply.github.com>
- Add push-to-main trigger to generate-docs.yml so latest/ auto-deploys on merge
- Add deploy-pages job: deploys docs to gh-pages branch under latest/ (every
  push to main) and under the release tag (e.g. v2.5.0/) on release events
- Maintain versions.json at the site root; sorted semver descending with
  latest always first
- Add root index.html that meta-redirects to latest/
- Add version-picker.js: fetches versions.json and replaces the static
  #ll-topnav-version badge with a <select> dropdown for navigating between
  published versions; gracefully falls back to static badge when
  versions.json is unavailable (local builds)
- Register version-picker.js in Doxyfile HTML_EXTRA_FILES
- Load version-picker.js in header.html via <script defer>
- Add <select> styles to lootlocker-theme.css matching the existing nav badge

Part of lootlocker/index#1465
… dir URLs, hash preservation; fix dispatch-on-main to deploy latest/
@kirre-bylund kirre-bylund requested a review from JohannesLoot May 13, 2026 14:42
Copy link
Copy Markdown
Contributor

@JohannesLoot JohannesLoot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Release the kraken!
🐙

Previously each of the 16 AssetTests ran ~90 sequential API calls in
setup (create game, enable platform, create 5 assets with data entities,
metadata and storage). This commit creates the game and assets once for
the whole test class and reuses them, cutting setup overhead by ~94%.

Implementation
- UnitySetUp gates on gameUnderTest == null for one-time shared setup
- TearDown deletes the game after the last test (TestCounter >= 16) or
  on shared setup failure
- 15/16 tests recategorized to LootLockerCI only; only
  ListAssets_IncludeEverything stays in LootLockerCIFast (it covers the
  shared setup adequately on its own)

Orphaned game safety net
- LootLockerOrphanedTestGameRegistry (new): tracks games created with
  shared setup; fires fire-and-forget DELETE requests via HttpClient on
  Application.quitting so games are cleaned up even when a partial run
  (e.g. CIFast) never reaches the last test that would normally delete
- LootLockerTestGame.CreateGame: auto-Register + store AdminToken on
  the instance so callers never need to capture it manually
- LootLockerTestGame.DeleteGame: auto-Unregister + fall back to
  AdminToken when LootLockerConfig.current.adminToken has been cleared
  by ClearSettings (fixes the ordering bug from PR review)

CI manifests
- Add com.unity.test-framework 1.1.33 to compile-check.yml,
  run-tests.yml, verify-compilation.ps1/.sh and run-tests.ps1 so test
  assemblies resolve correctly in minimal CI projects
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants