The jbep3server details-check CI job fails because servercfgdefault was
set to "server.sample.cfg", but the Game-Server-Configs repo only ships
jbep3/server.cfg. The download step (curl -f) 404s and the job exits 22.
jbep3 was the only server using "server.sample.cfg"; all other
Source-engine servers (and 69 servers overall) use "server.cfg", which is
the file that actually exists in the configs repo.
* style(alerts): prettier-format alert_matrix.sh
Add the space in '2> /dev/null' that prettier-plugin-sh expects. This
was in the original #4901 code and tripped the Prettier workflow on
develop after merge (the workflow auto-formats and then can't push to
the protected branch, so the run fails).
* ci(prettier): ignore package-lock.json
package-lock.json is machine-generated by npm; Prettier reformatting it
conflicts with npm's own output and causes the Prettier auto-commit
workflow to try (and fail) to push lockfile churn to protected develop.
Ignoring it lets the workflow find nothing to change and pass.
* feat(alerts): add Matrix alert provider
* fix(alerts): use PUT instead of POST for Matrix send-event endpoint
The Matrix Client-Server API requires PUT for
/_matrix/client/v3/rooms/{roomId}/send/{eventType}/{txnId}; sending
POST would be rejected by any spec-compliant homeserver (405), so
alerts would never actually send. Also documents that matrixroom
must be the internal room ID, not the human-readable room alias.
* fix: restore executable bit on alert_matrix.sh
* fix(alerts): register alert_matrix module and harden dispatch
Addresses review feedback on the Matrix alert provider:
- Register alert_matrix.sh in core_modules.sh so the module actually
resolves when alert.sh calls it (without this the call fails as an
unknown command and no alert is ever sent).
- Use curl -sSL to follow redirects, matching the other alert modules
(some homeservers/reverse proxies redirect the client API).
- Require matrixhomeserver to be set in the dispatch condition,
consistent with the TEST-ALERT checks, to avoid building a broken
URL when it is empty.
The create-matrix job runs 'git diff origin/${base_ref}...HEAD' to
detect which servers a PR touches, but actions/checkout defaults to a
shallow single-branch fetch, so origin/develop does not exist in the
runner and the diff fails with 'ambiguous argument' on every PR that
reaches this job. Set fetch-depth: 0 so the base ref is available.
* fix(mods): BepInEx_Valheim prevents startup on systems with newer glibc
Load the libdoorstop_x64.so solely for the dedicated server executable
and not for the whole startup routine, which causes errors in startup or
not loading the mods at all. (see #4149 and #4491)
* chore(prettier): format code
---------
Co-authored-by: Daniel Gibbs <[email protected]>
Co-authored-by: dgibbs64 <[email protected]>
* fix: exclude Wine prefix from serverfiles ownership check
SteamCMD creates a Wine prefix at serverfiles/steamapps/compatdata/
containing a z: symlink pointing to /. Without excluding this path,
`find "${serverfiles}"` traverses the entire filesystem, causing
check_permissions.sh to hang indefinitely.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
* fix(vh): correct BepInEx mod extraction and env vars
- mods_list: set modsubdirs="BepInExPack_Valheim" so only the pack
contents (not loose Thunderstore metadata) are installed to serverfiles
- mods_core: implement modsubdirs subfolder isolation in fn_mod_install_files;
when modsubdirs is not "0", the named subfolder becomes the extract root
- fix_vh: update BepInEx env vars to match current start_server_bepinex.sh
(DOORSTOP_ENABLED/DOORSTOP_TARGET_ASSEMBLY replacing old names,
remove defunct DOORSTOP_CORLIB_OVERRIDE_PATH)
- mods_list: update modsubdirs field comment to reflect its actual semantics
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
---------
Co-authored-by: yourfate <[email protected]>
Co-authored-by: Claude Sonnet 4.6 <[email protected]>
Enhances the `details-check` workflow to run more efficiently on pull requests.
This commit introduces logic to:
- Trigger the workflow on pull requests to the `develop` branch.
- Analyze changed files to determine the scope of the checks required:
- Run a full matrix if core `details`-related scripts are modified.
- Run a targeted matrix only for servers whose `config-lgsm` files are changed.
- Skip the check entirely if no relevant files are touched.
- Provide a concise summary of the `details`, `parse-game-details`, and `query-raw` outcomes directly in the GitHub Actions job summary.
This optimization significantly reduces CI/CD run times and resource consumption for pull requests by avoiding unnecessary checks across all game servers, improving developer efficiency.
The distro CSV file was being fetched with an absolute path
instead of a repository-relative path, causing malformed URLs
like /master//home/user/lgsm/data/debian-12.csv
Changed fn_fetch_file_github first parameter from "${datadir}"
to "lgsm/data" to match the correct repository path structure.
Fixes#4856: ERROR: Downloading debian-12.csv on update-lgsm
- Replace libncursesw5 with libncursesw6 (removed from Debian 13)
- Replace libxml2-utils with libxml2 (removed from Debian 13)
- Add Debian 13 to bug report and feature request distro options
Fixes#4847: libncursesw5 and libxml2-utils do not exist on Debian 13
Add comments explaining that GitHub Models access may not be available in all
environments and that 401 (Unauthorized) errors are expected and handled
gracefully. The workflow will skip AI triage silently but continue processing
the issue through other automation.
The GitHub Models API requires specialized authentication that is not available
through secrets.GITHUB_TOKEN. The workflow consistently fails with 401 Unauthorized.
The rule-based label automation (labeler.yml) continues to function correctly
and provides automated labeling based on structured template fields.
The v3 release does not exist for JasonEtco/is-sponsor-label-action.
Use v2 which is the latest stable release. The Node.js 24 compatibility
is handled by the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 environment variable.
- Add AI triage workflow that flags low-quality issues and requests missing info
- Add sync-game-labels script and workflow to maintain game labels from serverlist
- Add structured label rules for severity, reproducibility, priority, and scope
- Update labeler workflow to support both issues and PRs with dedicated config
- Add PR review guidance instructions for maintainers
* Changed `dotnet-runtime-8.0` to `dotnet-runtime-10.0` in dependency lists for Ubuntu and Debian.
* Enhanced the `check_deps.sh` script to dynamically check for the required .NET runtime version.
* Added a warning for users on older distributions regarding potential missing .NET runtimes.
* feat(bb): add BrainBread server update functionality
* Implemented `update_bb.sh` to handle updates for BrainBread servers.
* Integrated new update checks in `command_check_update.sh` and `command_update.sh`.
* Updated `install_server_files.sh` to include BrainBread server installation logic.
Co-authored-by: Copilot <[email protected]>
* feat(bb): enhance BrainBread update process
* Updated `fn_update_dl` to use `remotebuildhash` for file integrity.
* Added handling for missing `remotebuildhash` to default to "nohash".
* Included `update_steamcmd.sh` call to ensure both Steam app and GitHub package updates are performed.
Co-authored-by: Copilot <[email protected]>
* fix(steamcmd): ensure core HL1 files are present after appid 90 update
* Added checks to verify the presence of core HL1 files after updating appid 90.
* If files are missing, an update is forced and errors are logged.
* Exits the script if files are still missing after the retry.
* fix(steamcmd): update error messages for GoldSrc engine
* Changed appid 90 references to GoldSrc for clarity.
* Updated error messages to reflect the correct engine context.
* Ensures users are informed about missing core HL1 files after GoldSrc updates.
Co-authored-by: Copilot <[email protected]>
* feat(serverlist): add Military Conflict: Vietnam server entry
* Introduced new server entry for `Military Conflict: Vietnam` in `serverlist.csv`.
* Enhances the variety of game servers available for users.
---------
Co-authored-by: Copilot <[email protected]>
Dev builds of papermc will not work on older jre, albeit it's still in alpha/beta, some time in the future it will be the stable build. I have not noticed any issues running the stable build with jre-25.
* fix(workflows): support legacy game servers on older Ubuntu/Debian runners
Multiple game servers have glibc compatibility requirements that prevent
them from running on Ubuntu 24.04:
- bfv, bf1942: Require Ubuntu <= 22.04 or Debian <= 12 (glibc 2.31)
- btl, onset: Require Ubuntu <= 20.04 or Debian <= 11 (glibc 2.31)
Changes:
- Add runner field to details-check matrix generation
- Map legacy servers to appropriate ubuntu-XX.04 LTS runners
- Modern servers continue on ubuntu-latest (24.04)
- Update details-check.yml to use dynamic runner from matrix
This ensures all server tests pass in CI without breaking modern server
testing on current GitHub Actions runners.
* fix(workflows): run details-check on PRs and normalize ref resolution
Details Check was not running for PR #4903 because the workflow only
triggered on push to develop/workflow_dispatch. Also, pull_request refs
(refs/pull/*) are not valid raw-content refs for GitHub downloads.
Changes:
- Trigger Details Check on pull_request to develop
- Add LGSM_REF env resolved to PR head SHA or branch ref name
- Use LGSM_REF for linuxgsm.sh download and LGSM_GITHUBBRANCH usage
- Use LGSM_REF in matrix generation when fetching serverlist.csv
This ensures legacy server jobs (bfv, bf1942, btl, onset) are included
and executed during PR validation.
* fix(workflows): run update-check on PRs and normalize ref resolution
Apply the same PR-safe workflow behavior used in details-check:
- Trigger update-check on pull_request to develop
- Resolve LGSM_REF to PR head SHA or branch ref name
- Use LGSM_REF for linuxgsm.sh download and LGSM_GITHUBBRANCH calls
This ensures update-check validates PR changes instead of only running on
develop pushes.
* fix(check_deps): avoid false Debian version check on Ubuntu
Ubuntu reports ID_LIKE=debian, which caused Debian upper-version checks to
run on Ubuntu and incorrectly fail legacy titles on Ubuntu 22.04.x.
Use distroid==debian for Debian limits in legacy compatibility guards so:
- bf1942/bfv pass on Ubuntu 22.04.x as intended
- btl/onset limits still apply correctly
- Debian limits still apply on Debian only
* fix(workflows): add PR trigger to version-check; replace archived action in docker trigger
version-check.yml:
- Add pull_request trigger targeting develop so version format is
validated on PRs before merge
trigger-docker-build.yml:
- Replace archived convictional/[email protected] with
native gh CLI approach (trigger + watch run ID)
- Uses GH_TOKEN env var with PERSONAL_ACCESS_TOKEN secret
- gh workflow run dispatches the workflow; gh run watch polls for
completion and exits non-zero on failure, preserving job dependencies
* fix(workflows): use timestamp filter to reliably identify triggered run ID
Using --limit 1 to find the run ID is a race condition if another run
of the same workflow starts concurrently. Capture a timestamp before
dispatching and pass --created >=${before} to gh run list so we
always select the run we just triggered.
* remove pr check
Add support for the Military Conflict: Vietnam dedicated game server.
Supersedes #4594 (original WIP PR from @knoxed — completing the implementation).
Changes:
- Added mcvserver default configuration
- Added mcv to serverlist and all distro CSV files
- Added install_config handler for mcvserver
- Added dependency info for all distros
- Added game icons
- Fixed CI workflow issues
Co-authored-by: Knoxed <[email protected]>
* fix(steamcmd): add libtinfo.so.5 symlink fix for readline warning
On distros shipping libtinfo.so.6 but not libtinfo.so.5 (Ubuntu 22.04+,
Debian 12+), SteamCMD prints:
WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5.
Please install (lib32tinfo5 / ncurses-libs.i686 / equivalent) to
enable readline.
lib32tinfo5 does not exist on Ubuntu 24.04. Creating a user-space
symlink inside the steamcmd directory resolves the warning without
requiring root or a missing package.
* fix(steamcmd): address Copilot review feedback on libtinfo symlink fix
- Iterate over all candidate steamcmd dirs (HOME/.steam/steamcmd,
steamcmddir, HOME/.local/share/Steam/steamcmd) matching the pattern
used for steamclient.so fixes elsewhere in the module
- Replace '! -f && ! -L' guard with '! -e' so broken/dangling symlinks
are also repaired rather than silently skipped
- Add mkdir -p before ln in case the directory does not exist yet
- Capture exitcode=$? after ln so fn_fix_msg_end reports failures
---------
Co-authored-by: LinuxGSM <[email protected]>
- Set DEFAULT_BRANCH to current branch to fix 'master not found' error
- Use fetch-depth: 0 so GITHUB_BEFORE_SHA can be resolved
- Set update_etl.sh executable bit (BASH_EXEC)
- Fix .codespellrc tab indentation (EDITORCONFIG)
- Add .gitleaks.toml allowlist for GA4 Measurement Protocol API secret (GITLEAKS)
- Fix .markdown-lint.yml: disable MD030/MD013/MD033/MD041/MD051 to match
existing repo style (MARKDOWN)
The API version lookup was setting remotebuildversion but all subsequent
jq queries used ${remotebuild}, which was never populated. This caused
'Unable to get remote build' on every install/update.
The 'section' block containing 'fields' and 'accessory' was missing its
closing '}' before EOF, producing malformed JSON and breaking all Slack
alerts silently (jq -c . would fail on the payload).
Also add missing ntfy alert settings to tf2cserver _default.cfg for
consistency with other server configs.
- Set DEFAULT_BRANCH to current branch to fix 'master not found' error
- Use fetch-depth: 0 so GITHUB_BEFORE_SHA can be resolved
- Set update_etl.sh executable bit (BASH_EXEC)
- Fix .codespellrc tab indentation (EDITORCONFIG)
- Add .gitleaks.toml allowlist for GA4 Measurement Protocol API secret (GITLEAKS)
- Fix .markdown-lint.yml: disable MD030/MD013/MD033/MD041/MD051 to match
existing repo style (MARKDOWN)
The API version lookup was setting remotebuildversion but all subsequent
jq queries used ${remotebuild}, which was never populated. This caused
'Unable to get remote build' on every install/update.
The 'section' block containing 'fields' and 'accessory' was missing its
closing '}' before EOF, producing malformed JSON and breaking all Slack
alerts silently (jq -c . would fail on the payload).
Also add missing ntfy alert settings to tf2cserver _default.cfg for
consistency with other server configs.