Skip to content

feat(jk3server): add Jedi Academy with OpenJK - #3891

Merged
dgibbs64 merged 17 commits into
GameServerManagers:developfrom
AlexCS1337:feature/jk3server
Oct 15, 2026
Merged

dgibbs64 merged 17 commits into
GameServerManagers:developfrom
AlexCS1337:feature/jk3server

Conversation

@AlexCS1337

@AlexCS1337 AlexCS1337 commented Jun 11, 2022 •

Copy link
Copy Markdown
Contributor

Description

Add Jedi Knight: Jedi Academy using the native Linux x86_64 OpenJK dedicated server. SteamCMD installs the game data for app 6020 using a Steam account that owns the game; OpenJK supplies the Linux executable and game modules.

Fixes #2015. Related: #3467.

  • Register jk3server, its config, icon and dependencies across all distro CSVs, with Ubuntu 26.04 selected for Docker.
  • Use the current OpenJK Linux x86_64 release asset. Track its asset ID because the latest tag is reused, and verify the published SHA-256 digest when supplied by GitHub.
  • Extract the executable and base/ modules into GameData without stripping their paths. Save the build ID only after the required server files are present.
  • Follow the existing updater function layout and remote-build status/logging; use the shared fn_fetch_file hash verification rather than a separate SHA-256 implementation.
  • Keep config and writable game state inside GameData, with the server config under GameData/base/. Default game/query port is 29070.
  • Support install, check-update, update and force-update through the normal LinuxGSM command paths. Updating a stopped server leaves it stopped; a running server is stopped and restarted for an engine update.
  • Declare the current binary's glibc 2.34 requirement and the native C++/zlib runtime dependencies.
  • Keep the existing Jedi Outcast config, start path and details handler unchanged.

Type of change

  • Bug fix (a change which fixes an issue).
  • New feature (a change which adds functionality).
  • New Server (new server added).
  • Refactor (restructures existing code).
  • Comment update (typo, spelling, explanation, examples, etc).

Testing

  • Commands/tests run:
    • bash -n and ShellCheck on changed shell modules; Prettier on the new config and updater; git diff --check.
    • Server-list and game-icon validation scripts. All 143 games have matching dependency rows and icons.
    • 18 updater/config regression checks using the actual updater functions and extraction helper. Covers exact architecture selection, absent/duplicate/malformed assets, API failure, real archive extraction, checksum mismatch, incomplete archives, missing local build, unchanged build, read-only update checks, stopped/running updates, forced updates, failed-update restart prevention, rolling-tag replacement, Steam app/platform selection and quoted paths containing spaces.
    • Isolated Ubuntu 26.04 container: actual OpenJK release lookup, download, SHA-256 check, extraction, saved/local asset-ID comparison and unchanged-build no-op. Runtime library resolution checked with ldd.
    • Anonymous SteamCMD ownership check, followed by account-owner installation of app 6020 into a separate test volume.
    • Real Jedi Academy server in an isolated Ubuntu 26.04 container: startup, direct UDP status response on mp/ffa3, LinuxGSM details, Gamedig monitor with querydelay=0, restart and graceful stop. Monitor must retain the original server PID and process start time.
    • Full authenticated auto-install into a fresh volume using the owning account's cached login, followed by actual check-update, update and force-update with the server stopped and running. No retail files or OpenJK binaries were copied into this installation.
  • Result:
    • Local checks and all 18 regression cases pass.
    • GitHub Details Check passes on commit 577fe99: all 12 game-matrix batches and the legacy job. Codacy, GitGuardian and milestone checks also pass.
    • Live OpenJK engine download/extraction/update checks pass for asset 597802113, archive SHA-256 8116857544cc8ca90713edae43db0b13108cb044af7ea7312c739a677464c297.
    • Anonymous SteamCMD correctly reports No subscription. Game data was subsequently installed by the account owner; no credentials were handled or published during these checks.
    • Real startup, UDP status query, details, Gamedig monitor, restart and graceful stop pass. Monitor successfully queried the server without replacing its process; restart created a new process and stop removed it.
    • End-to-end authenticated installation passes: SteamCMD downloads and validates app 6020, OpenJK is downloaded and verified by the shared SHA-256 helper, and LinuxGSM generates its server config and RCON password.
    • Actual stopped check/update commands preserve process state; stopped force-update downloads and verifies the engine without starting the server. Running unchanged check/update commands and Gamedig monitor retain the original PID and start time. Running force-update gracefully stops the server, downloads/verifies/extracts OpenJK, and starts a new process that answers real UDP queries. Final graceful stop passes. The full installation also resolves the earlier harness-only steamclient link warnings.
    • Client connection/gameplay compatibility was not tested. The account owner performed interactive Steam authentication directly; the disposable test container holding the cached login is removed after testing.
  • Environment used (distro/version): WSL Ubuntu 24.04 for code checks; LinuxGSM Ubuntu 26.04 container for live engine download/runtime dependency checks. Test containers use no health check and no published ports.

Risk and rollback

  • Risk level: medium. This is a new server integration; the authenticated installation and server update/lifecycle flows pass, but client gameplay has not been exercised.
  • Rollback plan: revert the PR. Existing game configurations and update behaviour are unchanged.

Breaking changes

  • No breaking changes.
  • Breaking changes included (describe below).

Documentation impact

  • No documentation update required.
  • User documentation update required.
  • Developer documentation update required.

Checklist

  • This pull request links to an issue.
  • This pull request uses the develop branch as its base.
  • This pull request subject follows the Conventional Commits standard.
  • This code follows the style guidelines of this project.
  • I have performed a self-review of my code.
  • I have provided a detailed enough description of this PR.

Documentation

Document the Steam ownership requirement, native x86_64 OpenJK runtime, GameData/base config location and separate Steam/OpenJK update sources when publishing the new server page. OpenJK installation reference: https://github.com/JACoders/OpenJK#linux-instructions

Alexander Silva and others added 5 commits June 11, 2022 22:00
@dgibbs64

Copy link
Copy Markdown
Member

#3467

@dgibbs64

Copy link
Copy Markdown
Member

Currently this pr is missing the server files of a mechanism to install the server. I have seen using openjk might be a good idea

@dgibbs64
dgibbs64 force-pushed the master branch 2 times, most recently from 46c0b95 to ec36056 Compare February 9, 2023 17:39
@dgibbs64
dgibbs64 force-pushed the master branch 10 times, most recently from a2e0404 to 51031eb Compare February 16, 2023 23:43
Try to add new server to serverlist
also added jk3 to serverlistmenu
@AlexCS1337

Copy link
Copy Markdown
Contributor Author

@dgibbs64 I've updated and tested recently and it works somewhat but still missing the server binary, added an update script for it but not sure how to get it working, the link for openjk is at https://github.com/JACoders/OpenJK/releases

@GameServerManagers GameServerManagers deleted a comment from sonarqubecloud Bot Aug 27, 2025
@dgibbs64
dgibbs64 force-pushed the master branch 14 times, most recently from 0c435db to c188059 Compare May 4, 2026 11:58
@dgibbs64 dgibbs64 added this to the v26.4.0 milestone Oct 15, 2026
@dgibbs64 dgibbs64 changed the title Feature/jk3server feat(jk3server): add Jedi Academy with OpenJK Oct 15, 2026
@dgibbs64
dgibbs64 changed the base branch from master to develop October 15, 2026 20:52
@github-actions github-actions Bot added type: feature New feature or request engine: idtech3 Issues related to idtech3 engine game: Jedi Knight II: Jedi Outcast Issues related to Jedi Knight II: Jedi Outcast labels Oct 15, 2026
@dgibbs64
dgibbs64 merged commit d907924 into GameServerManagers:develop Oct 15, 2026
38 checks passed
@dgibbs64 dgibbs64 mentioned this pull request Oct 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

engine: idtech3 Issues related to idtech3 engine game: Jedi Knight II: Jedi Outcast Issues related to Jedi Knight II: Jedi Outcast type: feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Server Request] Jedi Knight - Jedi Academy

2 participants