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
* 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.
* fix(install_config): replace cp -nv with explicit file existence check
Newer coreutils (Ubuntu 24.04+, Debian 13+) emit a portability warning
when using cp -n: 'behavior of -n is non-portable and may change in future'.
Replace all cp -nv usages with an explicit [ ! -f dest ] guard, which is
portable across all distros and preserves the same OK/SKIP/FAIL behaviour.
* fix(install_config): use -e and -L checks to handle broken symlinks
Using only -f missed broken symlinks (-e returns false for them but
-L returns true). Use both checks to match the skip behaviour of cp -n.
* feat(etl): add downloader and update support for ET: Legacy
Refactors ET: Legacy to use a dedicated update module instead of hardcoded installation files. The new update_etl.sh module leverages the GitHub API to check for, download, and apply the latest builds from GameServerManagers/etlserver-build.
* feat(etl): add update_etl module to core modules
Registers the update_etl.sh module within the core modules to enable the fetching and execution of ET: Legacy updates.
* feat(etl): add update commands to core_getopt
Ensures that the update and check-update commands are available for ET: Legacy by including the etl shortname in the getopt command registration logic.
* feat(etl): improve local build detection
Updates the game log directory to the "legacy" folder and enhances local build detection by parsing etconsole.log for version information, falling back to build.txt if necessary.
* feat(etl): update glibc requirement and log path detection
Updates the minimum glibc requirement to 2.17 and switches the local build detection to use the gamelogdir variable instead of a hardcoded path.
* feat(etl): improve MD5 hash extraction
Updates the MD5 hash parsing to use a specific regex for 32-character hexadecimal strings, providing a more robust extraction from the release body than relying on the last field of the line.
* feat(xnt): add SHA512 hash extraction for remote builds
Updates the Xonotic update module to fetch the SHA512 hash from the remote download server, allowing for build verification and identification.
* fix(xnt): derive sha512 URL from remotebuildfilename not remotebuildtag
Tag format is xonotic-v0.8.6 but the sha512 file is named xonotic-0.8.6.sha512
(without the v). Using remotebuildtag directly produced a 404. Deriving from
remotebuildfilename (which already has the v stripped by tr -d v) gives the
correct URL.
* fix(core_dl): fix zip extraction with extractsrc across devices and non-empty dirs
Using mv to move extracted directories fails in two cases:
- Cross-device moves (e.g. tmp and serverfiles on different Docker volumes)
- Target directory already exists and is non-empty (update scenario)
Replace find+mv with cp -a which handles both cases by copying recursively
and merging into the destination. Also replace the hardcoded 'Xonotic'
temp_extractdir with ${extractsrc} to be generic.
* fix(core_dl): remove duplicate ellipsis in hash verification message
* feat: refactor update comparison output for consistency and clarity
- Replaced direct echo statements with fn_print functions for uniformity in output formatting across multiple update scripts.
- Ensured lockfile creation uses the correct syntax for variable expansion.
- Moved lock file to the same location to ensure monitor doesnt reboot at the wrong time
- Updated remote build information display to enhance readability and maintain consistency in logging.
- Removed unnecessary echo commands to streamline the output process.
* Refactor remote build version handling across multiple modules
- Updated variable names from 'remotebuildversion' to 'remotebuild' for consistency.
- Adjusted logic to check for remote build availability using the new variable name.
- Modified output messages to reflect the change in variable naming.
- Ensured all modules (update_mc.sh, update_mcb.sh, update_mta.sh, update_pmc.sh, update_ts3.sh, update_ut99.sh, update_vints.sh, update_xnt.sh) are aligned with the new naming convention for better readability and maintainability.
* fix(alert): resolve issue with servername not always being listed in title
* Moved `info_distro.sh`, `info_game.sh`, and `info_messages.sh` calls to the top of the `fn_alert_log` function for better clarity.
* Updated `alerticon` assignment to maintain consistency in alert information handling.
* fix(alert_discord): remove "More info" field from Discord alert JSON
* Eliminated the "More info" field to streamline the alert message.
* This change enhances the clarity of the alert by focusing on essential information.
* fix(alert): improve update alert messaging for clarity
* Updated alert messages in `fn_alert_update` and `fn_alert_update_failed` for better readability.
* Changed alert action from `update-request` to `update-restart-request` in `fn_monitor_check_update_source`.
* remove inline
* fix(alert): Correct grammar in update alert message
* Changed "an LinuxGSM update" to "a LinuxGSM update" for grammatical accuracy.
* typo
* fix(alert_discord): Add inline property to "Is my Game Server Online?" field
* Ensures proper formatting of the Discord alert message.
* Improves the display of the server status information.
* fix(pd): increase timeout for termbin.com connection
* fix(alert_discord): reorder fields in Discord alert JSON
* Changed the order of fields in the Discord alert JSON structure.
* Updated the "More info" and "Is my Game Server Online?" fields for better clarity.
* revert back to factorio.com
Co-authored-by: Copilot <[email protected]>
* Standardizes alert messages across platforms
Ensures consistency in alert messages across Discord, NTFY,
Pushover, Rocketchat, Slack, and Telegram.
Updates Discord alerts to include server hostname and time,
removes redundant formatting.
Standardizes plain-text alert formatting for NTFY.
Refactors Pushover messages to use consistent HTML formatting.
Streamlines Rocketchat and Slack messages by removing duplicate
server info and adding optional link support.
* Removes Hostname from alert messages
Removes the Hostname field from various alert messages (Discord, Gotify, IFTTT, ntfy, Pushbullet, Pushover, Rocketchat, Slack, Telegram).
The hostname was deemed redundant or unnecessary in the context of these alerts.
Relates to #4696
* Configures shellcheckrc filename
Configures the Super-Linter action to use `.shellcheckrc` as the
BASH_FILE_NAME. This ensures that shellcheck uses the correct
configuration file for bash script linting.
Fixes#4696
* Disables shellcheck errors and removes variable
Disables specific shellcheck errors to allow certain coding
patterns and removes an unused variable from the super-linter
workflow. This improves the linter's signal-to-noise ratio
and reduces unnecessary checks.
Relates to #4696
* Fixes and improves server list validation scripts
Addresses issues in the server list validation scripts:
- Fixes potential issues with parsing curl custom arguments in telegram alerts.
- Corrects the shortname array generation.
- Implements more robust checks for validating game icons.
- Ensures the consistency of server counts across different CSV files.
* Fixes glibc check and mod selection logic
Corrects glibc version comparison to properly handle version strings.
Improves mod installation and removal by validating user input
against available options, providing a more robust selection process.
This prevents errors caused by invalid mod names and enhances the
user experience.
Updates arithmetic expression syntax for better compatibility.
* Fixes cache control for dev-debug mode
Updates the handling of cache control headers in dev-debug mode.
The `nocache` variable is changed to an array to correctly pass multiple headers to `curl`.
This resolves issues with cached versions of files being used when dev-debug is enabled, ensuring that the latest versions are always fetched.
Fixes#4696
* Allows spaces in steamcmdcommand variable
Parses steamcmdcommand as an array to allow spaces in the
variable.
This prevents issues when the user wants to pass arguments
with spaces to the steamcmd executable.
* Addresses various script improvements
Addresses multiple improvements across various scripts:
- Fixes Valheim unstripped_corlib override by commenting out the lines in the config files.
- Improves process identification for source and goldsrc engines using `pgrep`.
- Enhances backup file identification using `find` with `-maxdepth 1` and `-type f`.
- Fixes glibc version comparison logic in multiple files.
- Improves UT2K4 key installation script by using printf for writing the key to the file.
- Corrects the mod info extraction logic to correctly identify mod entries.
- Improves amxmodx file installation/removal logic to prevent duplicate entries.
- Fixes server info retrieval to handle spaces in the server list.
Relates to #4696
* Fixes mono repo install exit code check
Corrects the mono repo install exit code check to use the dedicated monorepoexitcode variable, ensuring accurate error detection.
Updates the exit trap to preserve the original exit status, preventing potential loss of information when handling script termination.
* Refactors and reorders core modules
Improves module loading by reordering and refactoring the core modules.
This change addresses inconsistencies and improves the overall structure
of how core modules are handled within the system.
Some fix scripts were renamed to match the module name.
* Makes scripts executable
Changes file permissions to make shell scripts executable.
This ensures that the scripts can be run directly.
Addresses a pre-existing issue.
Related to #4696
* Adds explicit permissions to workflows
Specifies explicit permissions for GitHub Actions workflows to enhance security and control access to resources.
This ensures that each workflow only has the necessary permissions, following the principle of least privilege.
* Fixes output redirection and URL parsing
Corrects output redirection in GitHub Actions workflows by enclosing the $GITHUB_OUTPUT variable in quotes, preventing potential issues with variable expansion.
Ensures proper URL parsing in workflows by enclosing the URL within quotes, addressing potential parsing errors.
Fixes#4696
* Applies code formatting for consistency
Applies Prettier formatting to the codebase for improved
readability and consistency.
Addresses minor code style inconsistencies across several files.
* Fixes minor formatting and logic issues
Addresses various minor issues including:
- Standardizes indentation in `.editorconfig` for different file types.
- Simplifies Prettier configuration.
- Updates image links in `README.md`.
- Ensures newline character at end of `.csv` files.
- Corrects a conditional statement in `command_fastdl.sh`.
- Corrects a conditional statement in `info_messages.sh`.
- Updates server query protocols in `query_gsquery.py`.
* Configures and disables linters
Adds YAML linting configuration and disables unnecessary
linters to streamline the CI/CD process and reduce
noise from irrelevant checks.
* Improves documentation and linting
Updates documentation links to be enclosed in angle brackets, preventing markdown rendering issues.
Configures markdownlint to align with repository standards and avoid common false positives.
The updated links in the documentation ensure they are correctly interpreted by markdown parsers, improving user experience.
The markdownlint configuration fine-tunes linting rules to better match the project's existing style and conventions, reducing noise from irrelevant warnings.
* Fixes typos and improves code consistency
Addresses various typos and inconsistencies across multiple files,
enhancing code readability and maintainability.
Adds codespell and flake8 configurations for linting.
Relates to #4696
* Excludes workflow files from Prettier formatting
Prevents Prettier from formatting workflow files due to GitHub token restrictions, as the token used by the Prettier auto-commit action lacks permissions to update files within the `.github/workflows/` directory.
* chore(prettier): format code
* Updates Super-Linter configuration
Improves Super-Linter's reliability by switching to linting the entire codebase instead of relying on git history. This change also addresses potential transient fetch failures from GitHub.
Additionally, this commit expands the ignored paths in codespell and disables some linters to improve performance and reduce false positives.
---------
Co-authored-by: Copilot <[email protected]>
Co-authored-by: dgibbs64 <[email protected]>
* add compatabilty message
* failure
* fix(serverlist): Update Vintage Story OS version to ubuntu-24.04
* Corrected the operating system version for `Vintage Story` from `ubuntu-22.04` to `ubuntu-24.04`.
* Ensures compatibility with the latest server requirements.
* fix(sven): Update dependencies
* fix(check_deps): Update support for Ubuntu and Debian versions
* Adjusted version checks for supported distributions.
* Added specific error messages for unsupported game titles based on OS version.
* Updated the IFTTT alert output to only display when the alert is set to "on".
* This change ensures that unnecessary output is avoided when the alert is not active.
Update CS2 server launch to use the cs2.sh script as recommended by Valve.
The script properly sets LD_LIBRARY_PATH environment variable, which is required after recent CS2 updates.
Closes#4842
Co-authored-by: Daniel Gibbs <[email protected]>
* fix(compress_unreal2_maps): streamline file removal and compression process
* lint
* feat(unreal): consolidate map compression scripts
* Removed `compress_ut99_maps.sh` and integrated its functionality into `compress_unreal_maps.sh`.
* Updated `core_getopt.sh` to reference the new unified compression script.
* Cleaned up `core_modules.sh` by removing the obsolete function for `compress_ut99_maps.sh`.
* Added `core_exit.sh` call to `install_ut2k4_key.sh` for consistent exit handling.
* Apply suggestion from @Copilot
Co-authored-by: Copilot <[email protected]>
* fix(compress_unreal_maps): correct array usage in file compression loop
* Updated the loop to iterate over the `exts` array correctly using `"${exts[@]}"` instead of `${exts}`.
* This change ensures proper handling of file extensions during the compression process.
---------
Co-authored-by: Copilot <[email protected]>
* feat(backup): add support for multiple compression methods in backup process
* fix(backup): update backup file extensions to support multiple compression formats