Skip to content

docs: add Doxygen reference documentation infrastructure#128

Merged
kirre-bylund merged 6 commits into
devfrom
task/docs-setup
Apr 10, 2026
Merged

docs: add Doxygen reference documentation infrastructure#128
kirre-bylund merged 6 commits into
devfrom
task/docs-setup

Conversation

@kirre-bylund
Copy link
Copy Markdown
Contributor

What

Sets up the complete Doxygen reference documentation infrastructure for the Unreal Server SDK, matching the quality and style of the existing Unreal SDK and Unity SDK doc setups.

Changes

.doxygen/ — new directory

File Purpose
Doxyfile Doxygen config — server SDK project name, input paths, UE macro expansion, HTML output settings
DoxygenLayout.xml Page layout — brief hidden, detailed description at top (no heading), Function Documentation before declaration tables
header.html Custom top navigation bar with logo, "Unreal Server SDK" label, Reference/Game API/Console/Docs/Sign Up links, dark mode toggle
footer.html Minimal footer with Doxygen attribution and LootLocker link
groups.dox 23 feature group definitions powering the Topics sidebar
mainpage.md Main page with quick-start code snippet, navigation table, response conventions
lootlocker-theme.css LootLocker green brand theme (matches game SDK)
custom-layout-fixes.css Layout fixes: sidebar width, "Detailed Description" heading hidden, content positioning
nav-customization.js Sidebar nav customizer: hoists Topics to root, strips C++ prefixes, hides type entries
sync-nav.sh Script to sync mainpage.md navigation table from groups.dox
doxygen-awesome/ doxygen-awesome CSS framework (sidebar-only variant)
images/lootlocker-logo.png LootLocker logo
scripts/ Helper scripts for adding group tags and doc comments

Source headers — @addtogroup annotations

Added /// @addtogroup <Group> / /// @{ / /// @} blocks to all 25 public API headers:

  • LootLockerServerConfig.hInit
  • All ServerAPI/*.h files → their respective feature groups

Workflow — .github/workflows/generate-docs.yml

New CI workflow that:

  • Runs on push to main, PRs targeting main/dev, releases, and workflow_dispatch
  • Installs Doxygen + Graphviz, syncs nav table, generates HTML
  • Uploads artifact named sdk-docs-{version} on release or manual dispatch
  • Attaches a zipped docs package to GitHub releases

Groups defined

Init · Authentication · TokenExchange · Player · PlayerFiles · PlayerStorage · Friends · ConnectedAccounts · Hero · Characters · Currency · Balances · DropTables · Assets · AssetInstance · PlayerProgressions · CharacterProgressions · AssetInstanceProgressions · Progressions · Leaderboard · Triggers · Metadata · Notifications

Testing

Built locally with Doxygen — all 23 group pages generated, no new errors (only pre-existing undocumented compound warnings).

- Add @addtogroup section tags inside LootLockerServerForCpp.h so each
  documented method section maps to its feature group (Authentication,
  Leaderboard, etc.)
- Remove LootLockerServerForCpp.h from Doxyfile EXCLUDE so its JSDoc
  method comments appear in the generated docs
- Fix header.html: change 'Game API' link to 'Server API' pointing to
  https://ref.lootlocker.com/server
- Narrow @addtogroup scope in all 23 ServerAPI handler headers: close
  the group before the UCLASS definition so undocumented handler classes
  no longer appear in the feature group pages
Handler files contained undocumented structs and delegate typedefs that
cluttered the feature group pages with empty, undocumented entries.

Remove the section-wide @addtogroup blocks from all 24 ServerAPI handler
headers. Group pages now show only the documented methods from
LootLockerServerForCpp.h. Types remain accessible via the class listing
and are cross-referenced from method parameter types.
…nked

With EXTRACT_ALL=NO, delegate typedefs expanded from DECLARE_DELEGATE_*
and response structs had no generated pages (their /* */ C-style comments
are not Doxygen doc comments), so they appeared as non-clickable plain
text in method parameter lists.

EXTRACT_ALL=YES generates pages for all types regardless of doc comments,
making FLootLockerServer*Delegate and FLootLockerServer*Response types
clickable cross-references in method signatures.

Group pages are unaffected: no handler files are in any @addtogroup, so
groups still show only the documented LootLockerServerForCpp.h methods.
Doxygen only recognizes /// (single-line) and /** */ (block) as
documentation comments. Plain // and /* */ comments are ignored,
causing all UPROPERTY field descriptions and struct summaries to
appear as undocumented in the generated output.

Converted 23 header files:
- // field comment before UPROPERTY  ->  /// field comment
- /* block comment */ before USTRUCT/UCLASS/UPROPERTY  ->  /** block comment */
@AndreasStokholm
Copy link
Copy Markdown
Member

This is very cool. What would an actual review consist of though?

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Sets up a Doxygen-based reference documentation pipeline for the LootLocker Unreal Server SDK, including CI generation, a custom theme/layout, and feature-group (“Topics”) organization across the public API headers.

Changes:

  • Added a .doxygen/ documentation system (Doxyfile, layout, theme, header/footer, groups, main page, nav customization, helper scripts).
  • Annotated public headers with Doxygen-friendly comments / group markers to drive feature-based Topics pages.
  • Added a GitHub Actions workflow to generate HTML docs and attach them to releases (plus ignores generated docs/ output).

Reviewed changes

Copilot reviewed 45 out of 48 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerTriggerRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerStorageRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerProgressionGenericTypes.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerPlayerRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerPlayerProgressionRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerPlayerInventoryRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerPlayerFileRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerOAuthRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerNotificationsRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerMetadataRequest.h Convert inline comments to Doxygen-style blocks (enums/structs/requests/responses).
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerLeaderboardRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerLeaderboardArchiveRequestHandler.h Switch property comments to /// for Doxygen pickup and minor formatting.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerInstanceProgressionRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerHeroRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerGameProgressionRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerFriendsRequest.h Minor formatting to support doc grouping.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerDropTableRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerCurrencyRequest.h Minor formatting to support doc grouping.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerConnectedAccountsRequest.h Minor formatting to support doc grouping.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerCharacterRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerCharacterProgressionRequest.h Convert inline comments to Doxygen-style blocks.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerBalanceRequest.h Minor formatting to support doc grouping.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerAuthRequest.h Convert inline comments to Doxygen-style blocks; minor formatting.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerAssetRequest.h Convert inline comments to Doxygen-style blocks; switch some // to ///.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerResponse.h Switch comments to Doxygen-friendly /** */ / /// for core response + pagination types.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerPersistedState.h Convert inline comment to Doxygen-style block.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerForCpp.h Add @addtogroup section wrappers so facade methods appear under Topics.
LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerConfig.h Wrap config API in Init group and improve doc comment style.
.gitignore Ignore generated docs/ output from Doxygen.
.github/workflows/generate-docs.yml New CI workflow to generate docs, upload artifacts, and attach zip to releases.
.doxygen/Doxyfile Doxygen configuration for inputs, macro expansion, and HTML output customization.
.doxygen/DoxygenLayout.xml Custom layout: prioritize detailed descriptions and function docs for group pages; hide noisy tabs.
.doxygen/header.html Custom HTML header with LootLocker top nav + theme toggle.
.doxygen/footer.html Custom HTML footer + load nav customization script.
.doxygen/groups.dox Defines feature groups powering “Topics” navigation.
.doxygen/mainpage.md Main page content: quick start, navigation table, response conventions, links.
.doxygen/lootlocker-theme.css LootLocker-branded doxygen-awesome theme overrides.
.doxygen/custom-layout-fixes.css CSS overrides to correct layout/sidebar behavior.
.doxygen/nav-customization.js JS to restructure/hide/rename nav items and hoist Topics for feature-first browsing.
.doxygen/sync-nav.sh Script to sync the mainpage navigation table from groups.dox.
.doxygen/doxygen-awesome/doxygen-awesome-sidebar-only.css Vendor CSS variant for sidebar-only layout.
.doxygen/scripts/Tag-ForCppSections.py Helper to insert group tags into LootLockerServerForCpp.h sections.
.doxygen/scripts/Move-EnumDocComments.ps1 Helper script for enum doc comment relocation (currently points at wrong SDK paths).
.doxygen/scripts/Add-TypeDocComments.ps1 Helper script to add missing type doc comments (currently points at wrong SDK paths).
.doxygen/scripts/Add-EnumGroupTags.ps1 Helper script to group-tag enums (currently points at wrong SDK paths).
.doxygen/scripts/Add-DelegateGroupTags.ps1 Helper script to group-tag delegates (currently points at wrong SDK paths).
.doxygen/doxygen-awesome/doxygen-awesome-sidebar-only.css Sidebar-only doxygen-awesome styling (supports the custom layout).

Comment thread .doxygen/mainpage.md
Comment thread .doxygen/mainpage.md
Comment thread .doxygen/mainpage.md Outdated
Comment thread .doxygen/custom-layout-fixes.css Outdated
Comment thread .doxygen/scripts/Add-DelegateGroupTags.ps1
Comment thread .doxygen/scripts/Add-EnumGroupTags.ps1
Comment thread .doxygen/scripts/Add-TypeDocComments.ps1 Outdated
Comment thread .doxygen/scripts/Move-EnumDocComments.ps1
@kirre-bylund
Copy link
Copy Markdown
Contributor Author

This is very cool. What would an actual review consist of though?

You know what? I have no idea 😅. I was just going through the motions I think

- mainpage.md: fix Response.success -> Response.Success, FLootLockerErrorData -> FLootLockerServerErrorData (3 occurrences)
- custom-layout-fixes.css: fix comment Unity SDK -> Unreal Server SDK
- Add-DelegateGroupTags.ps1: update \c:\Users\erik\Documents\projects\full-development\unreal-server-sdk\LootLockerServerSDK\Source\LootLockerServerSDK\Public and \ to ServerAPI paths and server SDK handler files
- Add-EnumGroupTags.ps1: same fix - ServerAPI base and server SDK file/group mapping (5 UENUM-containing files)
- Add-TypeDocComments.ps1: update \c:\Users\erik\Documents\projects\full-development\unreal-server-sdk\LootLockerServerSDK\Source\LootLockerServerSDK\Public and replace game SDK enum descriptions with server SDK enums
- Move-EnumDocComments.ps1: update \c:\Users\erik\Documents\projects\full-development\unreal-server-sdk\LootLockerServerSDK\Source\LootLockerServerSDK\Public to ServerAPI path
@kirre-bylund kirre-bylund merged commit 8c0fa43 into dev Apr 10, 2026
2 checks passed
@kirre-bylund kirre-bylund deleted the task/docs-setup branch April 10, 2026 08:42
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