From a974fa2f70d01b2deca022c7c32e7122ad9ff0f7 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Apr 2026 20:49:03 +0100 Subject: [PATCH 01/44] feat(tf2c): add Team Fortress 2 Classified server (#4898) --- .../config-lgsm/tf2cserver/_default.cfg | 197 ++++++++++++++++++ lgsm/data/serverlist.csv | 1 + lgsm/modules/core_dl.sh | 26 +++ lgsm/modules/install_config.sh | 5 + 4 files changed, 229 insertions(+) create mode 100644 lgsm/config-default/config-lgsm/tf2cserver/_default.cfg diff --git a/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg b/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg new file mode 100644 index 000000000..baa8c4328 --- /dev/null +++ b/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg @@ -0,0 +1,197 @@ +################################## +######## Default Settings ######## +################################## +# DO NOT EDIT, ANY CHANGES WILL BE OVERWRITTEN! +# Copy settings from here and use them in either: +# common.cfg - applies settings to every instance. +# [instance].cfg - applies settings to a specific instance. + +#### Game Server Settings #### + +## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters +# Note that for TF2, maxplayers > 33 must be specified like so: +# maxplayers="101 -unrestricted_maxplayers" +ip="0.0.0.0" +port="27015" +clientport="27005" +sourcetvport="27020" +defaultmap="4koth_frigid" +maxplayers="16" + +## Game Server Login Token (GSLT): Optional +# GSLT can be used for running a public server. +# More info: https://docs.linuxgsm.com/steamcmd/gslt +gslt="" + +## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters +startparameters="-game tf2classified -tf_path ${supportdir} -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} +map ${defaultmap} +sv_setsteamaccount ${gslt} +servercfgfile ${servercfg} -maxplayers ${maxplayers}" + +#### LinuxGSM Settings #### + +## LinuxGSM Stats +# Send useful stats to LinuxGSM developers. +# https://docs.linuxgsm.com/configuration/linuxgsm-stats +# (on|off) +stats="off" + +## Notification Alerts +# (on|off) + +# Display IP | https://docs.linuxgsm.com/alerts#display-ip +displayip="" + +# More info | https://docs.linuxgsm.com/alerts#more-info +postalert="off" + +# Alert on Start/Stop/Restart +statusalert="off" + +# Discord Alerts | https://docs.linuxgsm.com/alerts/discord +discordalert="off" +discordwebhook="webhook" + +# Email Alerts | https://docs.linuxgsm.com/alerts/email +emailalert="off" +email="email@example.com" +emailfrom="" + +# Gotify Alerts | https://docs.linuxgsm.com/alerts/gotify +gotifyalert="off" +gotifytoken="token" +gotifywebhook="webhook" + +# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt +iftttalert="off" +ifttttoken="accesstoken" +iftttevent="linuxgsm_alert" + +# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet +pushbulletalert="off" +pushbullettoken="accesstoken" +channeltag="" + +# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover +pushoveralert="off" +pushovertoken="accesstoken" +pushoveruserkey="userkey" + +# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat +rocketchatalert="off" +rocketchatwebhook="webhook" + +# Slack Alerts | https://docs.linuxgsm.com/alerts/slack +slackalert="off" +slackwebhook="webhook" + +# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram +# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring". +# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help all". +telegramapi="api.telegram.org" +telegramalert="off" +telegramtoken="accesstoken" +telegramchatid="" +telegramthreadid="" +telegramsilentnotification="false" +curlcustomstring="" + +## Updating | https://docs.linuxgsm.com/commands/update +updateonstart="off" + +## Backup | https://docs.linuxgsm.com/commands/backup +maxbackups="4" +maxbackupdays="30" +stoponbackup="on" + +## Logging | https://docs.linuxgsm.com/features/logging +consolelogging="on" +logdays="7" + +## Monitor | https://docs.linuxgsm.com/commands/monitor +# Query delay time +querydelay="1" + +## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors +ansi="on" + +#### Advanced Settings #### + +## Message Display Time | https://docs.linuxgsm.com/features/message-display-time +sleeptime="0.5" + +## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd +# Server appid +baseappid="232250" +appid="3557020" +steamcmdforcewindows="no" +# SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch +branch="" +betapassword="" +# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server +steammaster="true" + +## Stop Mode | https://docs.linuxgsm.com/features/stop-mode +# 1: tmux kill +# 2: CTRL+c +# 3: quit +# 4: quit 120s +# 5: stop +# 6: q +# 7: exit +# 8: 7 Days to Die +# 9: GoldSrc +# 10: Avorion +# 11: end +stopmode="3" + +## Query mode +# 1: session only +# 2: gamedig (gsquery fallback) +# 3: gamedig +# 4: gsquery +# 5: tcp +querymode="2" +querytype="protocol-valve" + +## Console type +consoleverbose="yes" +consoleinteract="yes" + +## Game Server Details +# Do not edit +gamename="Team Fortress 2 Classified" +engine="source" +glibc="2.15" + +#### Directories #### +# Edit with care + +## Game Server Directories +systemdir="${serverfiles}/tf2classified" +supportdir="${serverfiles}/tf2" +executabledir="${serverfiles}" +executable="./srcds.sh" +servercfgdir="${systemdir}/cfg" +servercfg="${selfname}.cfg" +servercfgdefault="server.cfg" +servercfgfullpath="${servercfgdir}/${servercfg}" + +## Backup Directory +backupdir="${lgsmdir}/backup" + +## Logging Directories +[ -n "${LGSM_LOGDIR}" ] && logdir="${LGSM_LOGDIR}" || logdir="${rootdir}/log" +gamelogdir="${systemdir}/logs" +lgsmlogdir="${logdir}/script" +consolelogdir="${logdir}/console" +lgsmlog="${lgsmlogdir}/${selfname}-script.log" +consolelog="${consolelogdir}/${selfname}-console.log" +alertlog="${lgsmlogdir}/${selfname}-alert.log" +postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log" + +## Logs Naming +lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log" +consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log" + +## Log Parameters +logtimestamp="off" +logtimestampformat="%Y-%m-%d %H:%M:%S" diff --git a/lgsm/data/serverlist.csv b/lgsm/data/serverlist.csv index 49d7b1d10..2f964a30d 100644 --- a/lgsm/data/serverlist.csv +++ b/lgsm/data/serverlist.csv @@ -114,6 +114,7 @@ sven,svenserver,Sven Co-op,ubuntu-24.04 terraria,terrariaserver,Terraria,ubuntu-24.04 tf,tfserver,The Front,ubuntu-24.04 tf2,tf2server,Team Fortress 2,ubuntu-24.04 +tf2c,tf2cserver,Team Fortress 2 Classified,ubuntu-24.04 tfc,tfcserver,Team Fortress Classic,ubuntu-24.04 ti,tiserver,The Isle,ubuntu-24.04 ts,tsserver,The Specialists,ubuntu-24.04 diff --git a/lgsm/modules/core_dl.sh b/lgsm/modules/core_dl.sh index 1c27c58d7..dcbd88e9b 100755 --- a/lgsm/modules/core_dl.sh +++ b/lgsm/modules/core_dl.sh @@ -81,6 +81,19 @@ fn_dl_steamcmd() { fi # Force Windows Platform type. elif [ "${steamcmdforcewindows}" == "yes" ]; then + # If a base app is required, install it first. + if [ -n "${baseappid}" ]; then + if [ -z "${supportdir}" ]; then + fn_print_failure_nl "${commandaction} ${selfname}: baseappid is set but supportdir is not defined" + fn_script_log_fail "${commandaction} ${selfname}: baseappid is set but supportdir is not defined" + core_exit.sh + fi + "${unbuffercommand[@]}" "${steamcmdcommandarray[@]}" +@sSteamCmdForcePlatformType windows +force_install_dir "${supportdir}" +login "${steamuser}" "${steampass}" +app_update "${baseappid}" "${validateparam[@]}" +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" + exitcode="${PIPESTATUS[0]}" + if [ "${exitcode}" -ne 0 ]; then + continue + fi + fi if [ -n "${branch}" ] && [ -n "${betapassword}" ]; then "${unbuffercommand[@]}" "${steamcmdcommandarray[@]}" +@sSteamCmdForcePlatformType windows +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" "${validateparam[@]}" +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" elif [ -n "${branch}" ]; then @@ -90,6 +103,19 @@ fn_dl_steamcmd() { fi # All other servers. else + # If a base app is required, install it first. + if [ -n "${baseappid}" ]; then + if [ -z "${supportdir}" ]; then + fn_print_failure_nl "${commandaction} ${selfname}: baseappid is set but supportdir is not defined" + fn_script_log_fail "${commandaction} ${selfname}: baseappid is set but supportdir is not defined" + core_exit.sh + fi + "${unbuffercommand[@]}" "${steamcmdcommandarray[@]}" +force_install_dir "${supportdir}" +login "${steamuser}" "${steampass}" +app_update "${baseappid}" "${validateparam[@]}" +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" + exitcode="${PIPESTATUS[0]}" + if [ "${exitcode}" -ne 0 ]; then + continue + fi + fi if [ -n "${branch}" ] && [ -n "${betapassword}" ]; then "${unbuffercommand[@]}" "${steamcmdcommandarray[@]}" +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" "${validateparam[@]}" +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" elif [ -n "${branch}" ]; then diff --git a/lgsm/modules/install_config.sh b/lgsm/modules/install_config.sh index ddfc13794..4b8148ce9 100755 --- a/lgsm/modules/install_config.sh +++ b/lgsm/modules/install_config.sh @@ -724,6 +724,11 @@ elif [ "${shortname}" == "tf2" ]; then fn_default_config_remote fn_set_config_vars fn_list_config_locations +elif [ "${shortname}" == "tf2c" ]; then + array_configs+=(server.cfg) + fn_default_config_remote + fn_set_config_vars + fn_list_config_locations elif [ "${shortname}" == "tfc" ]; then array_configs+=(server.cfg) fn_default_config_remote From 96acbd779a7cf2193bfb9261c4a7e7104edbebc5 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Apr 2026 19:54:24 +0000 Subject: [PATCH 02/44] Release v26.1.0 --- lgsm/modules/core_modules.sh | 2 +- linuxgsm.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lgsm/modules/core_modules.sh b/lgsm/modules/core_modules.sh index 7c717d0ad..10d408449 100755 --- a/lgsm/modules/core_modules.sh +++ b/lgsm/modules/core_modules.sh @@ -8,7 +8,7 @@ moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" -modulesversion="v25.2.0" +modulesversion="v26.1.0" # Core diff --git a/linuxgsm.sh b/linuxgsm.sh index 443e1d8bf..f664749e6 100755 --- a/linuxgsm.sh +++ b/linuxgsm.sh @@ -24,7 +24,7 @@ if [ -f ".dev-debug" ]; then set -x fi -version="v25.2.0" +version="v26.1.0" shortname="core" gameservername="core" commandname="CORE" From ec63aae5ef59fd6f134fa95ecf53c5a046f1dba6 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Apr 2026 20:12:16 +0000 Subject: [PATCH 03/44] fix(alert_slack): add missing closing brace on section object 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. --- .../config-default/config-lgsm/tf2cserver/_default.cfg | 10 ++++++++++ lgsm/modules/alert_slack.sh | 1 + 2 files changed, 11 insertions(+) diff --git a/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg b/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg index baa8c4328..fdbcc2cba 100644 --- a/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg @@ -65,6 +65,16 @@ iftttalert="off" ifttttoken="accesstoken" iftttevent="linuxgsm_alert" +# ntfy Alerts | https://docs.linuxgsm.com/alerts/ntfy +ntfyalert="off" +ntfytopic="LinuxGSM" +ntfyserver="https://ntfy.sh" +ntfytoken="" +ntfyusername="" +ntfypassword="" +ntfypriority="" +ntfytags="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/modules/alert_slack.sh b/lgsm/modules/alert_slack.sh index defb1f77f..0cd7106ff 100755 --- a/lgsm/modules/alert_slack.sh +++ b/lgsm/modules/alert_slack.sh @@ -60,6 +60,7 @@ json=$( "image_url": "${alerticon}", "alt_text": "LinuxGSM game icon" } + } EOF ) From 6e4480c6567308e858befa4b0c83cc5a14d0829d Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Apr 2026 20:16:40 +0000 Subject: [PATCH 04/44] fix: address review feedback - core_dl.sh: use array assignment for steamcmdcommand instead of read -r -a to avoid word-splitting on paths - fix_st.sh: correct module header typo (fix_ts.sh -> fix_st.sh) - command_skeleton.sh: fix grammar 'Creates an copy' -> 'Creates a copy' - serverlist-validate-game-icons.sh: anchor grep to start-of-line and require trailing comma to prevent false positives (e.g. 'tf' matching 'tf2' entries) - cs2server/_default.cfg: remove duplicate ntfy alert settings block --- .github/workflows/serverlist-validate-game-icons.sh | 2 +- lgsm/config-default/config-lgsm/cs2server/_default.cfg | 10 ---------- lgsm/modules/command_skeleton.sh | 2 +- lgsm/modules/core_dl.sh | 6 +++--- lgsm/modules/fix_st.sh | 2 +- 5 files changed, 6 insertions(+), 16 deletions(-) diff --git a/.github/workflows/serverlist-validate-game-icons.sh b/.github/workflows/serverlist-validate-game-icons.sh index b3ba7e418..8d35aa906 100755 --- a/.github/workflows/serverlist-validate-game-icons.sh +++ b/.github/workflows/serverlist-validate-game-icons.sh @@ -22,7 +22,7 @@ shopt -s nullglob for gameiconpath in gameicons/*; do gameicon="$(basename "${gameiconpath}")" # check if $gameicon is in serverlist.csv - if ! grep -q -F "${gameicon%-icon.png}" serverlist.csv; then + if ! grep -q -E "^${gameicon%-icon.png}," serverlist.csv; then echo "ERROR: gameicon ${gameicon} is not in serverlist.csv" exitcode=1 else diff --git a/lgsm/config-default/config-lgsm/cs2server/_default.cfg b/lgsm/config-default/config-lgsm/cs2server/_default.cfg index 56948c77f..8d65b5364 100644 --- a/lgsm/config-default/config-lgsm/cs2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/cs2server/_default.cfg @@ -72,16 +72,6 @@ ntfypassword="" ntfypriority="" ntfytags="" -# ntfy Alerts | https://docs.linuxgsm.com/alerts/ntfy -ntfyalert="off" -ntfytopic="LinuxGSM" -ntfyserver="https://ntfy.sh" -ntfytoken="" -ntfyusername="" -ntfypassword="" -ntfypriority="" -ntfytags="" - # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/modules/command_skeleton.sh b/lgsm/modules/command_skeleton.sh index 687790a37..3e07edc3a 100755 --- a/lgsm/modules/command_skeleton.sh +++ b/lgsm/modules/command_skeleton.sh @@ -3,7 +3,7 @@ # Author: Daniel Gibbs # Contributors: https://linuxgsm.com/contrib # Website: https://linuxgsm.com -# Description: Creates an copy of a game servers directories. +# Description: Creates a copy of a game server directories. commandname="SKELETON" commandaction="Skeleton" diff --git a/lgsm/modules/core_dl.sh b/lgsm/modules/core_dl.sh index dcbd88e9b..4730c0cff 100755 --- a/lgsm/modules/core_dl.sh +++ b/lgsm/modules/core_dl.sh @@ -46,9 +46,9 @@ fn_dl_steamcmd() { validate="validate" fi - # steamcmdcommand can contain multiple arguments; treat it as an argv array. - steamcmdcommandarray=() - read -r -a steamcmdcommandarray <<< "${steamcmdcommand}" + # Wrap steamcmdcommand as a single-element array to avoid word-splitting + # on paths/commands that should not be tokenised. + steamcmdcommandarray=("${steamcmdcommand}") unbuffercommand=() if [ -n "${unbuffer}" ]; then unbuffercommand=("${unbuffer}") diff --git a/lgsm/modules/fix_st.sh b/lgsm/modules/fix_st.sh index 598d971b0..887ea987f 100755 --- a/lgsm/modules/fix_st.sh +++ b/lgsm/modules/fix_st.sh @@ -1,5 +1,5 @@ #!/bin/bash -# LinuxGSM fix_ts.sh module +# LinuxGSM fix_st.sh module # Author: Daniel Gibbs # Contributors: https://linuxgsm.com/contrib # Website: https://linuxgsm.com From c864cb596b5e678879ca5f5ae4100d92d9f72e91 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Apr 2026 20:51:10 +0000 Subject: [PATCH 05/44] fix(vints): assign remotebuild instead of unused remotebuildversion 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. --- lgsm/modules/update_vints.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lgsm/modules/update_vints.sh b/lgsm/modules/update_vints.sh index 86a7156ee..5bf3df25d 100755 --- a/lgsm/modules/update_vints.sh +++ b/lgsm/modules/update_vints.sh @@ -39,11 +39,11 @@ fn_update_remotebuild() { apiurl="http://api.vintagestory.at/stable-unstable.json" remotebuildresponse=$(curl -s "${apiurl}") if [ "${branch}" == "stable" ]; then - remotebuildversion=$(echo "${remotebuildresponse}" | jq -r '[ to_entries[] ] | .[].key' | grep -Ev "\-rc|\-pre" | sort -r -V | head -1) + remotebuild=$(echo "${remotebuildresponse}" | jq -r '[ to_entries[] ] | .[].key' | grep -Ev "\-rc|\-pre" | sort -r -V | head -1) elif [ "${branch}" == "unstable" ]; then - remotebuildversion=$(echo "${remotebuildresponse}" | jq -r '[ to_entries[] ] | .[].key' | grep -E "\-rc|\-pre" | sort -r -V | head -1) + remotebuild=$(echo "${remotebuildresponse}" | jq -r '[ to_entries[] ] | .[].key' | grep -E "\-rc|\-pre" | sort -r -V | head -1) else - remotebuildversion="${branch}" + remotebuild="${branch}" fi remotebuildfilename=$(echo "${remotebuildresponse}" | jq --arg remotebuild "${remotebuild}" -r '.[$remotebuild].linuxserver.filename') remotebuildurl=$(echo "${remotebuildresponse}" | jq --arg remotebuild "${remotebuild}" -r '.[$remotebuild].linuxserver.urls.cdn') From 1fdd43a6adeb1839da62660d8c54cdf4fd37f008 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Apr 2026 21:01:35 +0000 Subject: [PATCH 06/44] fix(xnt): unset exitbypass after command_stop.sh in fn_update_localbuild --- lgsm/modules/update_xnt.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lgsm/modules/update_xnt.sh b/lgsm/modules/update_xnt.sh index 501f91c8d..904b7b1a4 100755 --- a/lgsm/modules/update_xnt.sh +++ b/lgsm/modules/update_xnt.sh @@ -29,7 +29,9 @@ fn_update_localbuild() { exitbypass=1 fn_sleep_time_5 tmux -L "${socketname}" send-keys -t "${sessionname}" "version" C-m > /dev/null 2>&1 + exitbypass=1 command_stop.sh + unset exitbypass fn_firstcommand_reset fi From fdb86257e0ee7bc476ebf2f4c29cef058199165e Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Apr 2026 21:06:52 +0000 Subject: [PATCH 07/44] fix(ci): resolve super-linter failures - 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) --- .github/linters/.codespellrc | 10 +++++----- .github/linters/.gitleaks.toml | 9 +++++++++ .github/linters/.markdown-lint.yml | 11 ++++------- .github/workflows/action-super-linter.yml | 6 +++--- lgsm/modules/update_etl.sh | 0 5 files changed, 21 insertions(+), 15 deletions(-) create mode 100644 .github/linters/.gitleaks.toml mode change 100644 => 100755 lgsm/modules/update_etl.sh diff --git a/.github/linters/.codespellrc b/.github/linters/.codespellrc index 229066881..47dd5ccea 100644 --- a/.github/linters/.codespellrc +++ b/.github/linters/.codespellrc @@ -1,11 +1,11 @@ [codespell] # Skip data tables that contain many short server identifiers (e.g. "fof", "nd") skip = - lgsm/data/*.csv, - package-lock.json, - */package-lock.json, - node_modules, - */node_modules/* + lgsm/data/*.csv, + package-lock.json, + */package-lock.json, + node_modules, + */node_modules/* # Ignore common identifiers/acronyms and extensions used throughout LinuxGSM ignore-words-list = distroname,fof,nd,sav,parms,ThirdParty diff --git a/.github/linters/.gitleaks.toml b/.github/linters/.gitleaks.toml new file mode 100644 index 000000000..b61845ba6 --- /dev/null +++ b/.github/linters/.gitleaks.toml @@ -0,0 +1,9 @@ +title = "LinuxGSM Gitleaks Config" + +[allowlist] + description = "Known false positives" + regexes = [ + # Google Analytics 4 Measurement Protocol API secret - not a sensitive credential, + # it is intentionally embedded in client-side code and is safe to be public. + '''apisecret="[A-Za-z0-9_\-]+"''', + ] diff --git a/.github/linters/.markdown-lint.yml b/.github/linters/.markdown-lint.yml index 094bbbcd6..62d421814 100644 --- a/.github/linters/.markdown-lint.yml +++ b/.github/linters/.markdown-lint.yml @@ -12,12 +12,9 @@ MD013: false # MD033: The main README uses inline HTML for badges. MD033: false -# Match existing list formatting in this repo. +# MD007: Repo uses 2-space indentation for nested lists. MD007: - indent: 4 + indent: 2 -MD030: - ul_single: 3 - ol_single: 2 - ul_multi: 3 - ol_multi: 2 +# MD030: Repo mixes 1-space unordered and 2-space ordered list markers. +MD030: false diff --git a/.github/workflows/action-super-linter.yml b/.github/workflows/action-super-linter.yml index de396dcd4..e2755e20a 100644 --- a/.github/workflows/action-super-linter.yml +++ b/.github/workflows/action-super-linter.yml @@ -27,9 +27,8 @@ jobs: - name: Checkout code uses: actions/checkout@v6 with: - # Shallow clone reduces transient fetch failures (HTTP 500) from GitHub. - # We lint the whole codebase instead of relying on git history. - fetch-depth: 1 + # Full clone required so super-linter can resolve GITHUB_BEFORE_SHA. + fetch-depth: 0 fetch-tags: false persist-credentials: false @@ -42,6 +41,7 @@ jobs: env: # To report GitHub Actions status checks GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DEFAULT_BRANCH: ${{ github.ref_name }} VALIDATE_BIOME_FORMAT: false VALIDATE_BIOME_LINT: false VALIDATE_GITHUB_ACTIONS_ZIZMOR: false diff --git a/lgsm/modules/update_etl.sh b/lgsm/modules/update_etl.sh old mode 100644 new mode 100755 From 9a61c0f4c6db6a9d0d8943bd8f8ab32988377cd5 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Apr 2026 21:44:26 +0000 Subject: [PATCH 08/44] chore(ci): upgrade webfactory/ssh-agent from v0.9.0 to v0.10.0 v0.10.0 upgrades from Node.js 20 to Node.js 24, resolving the deprecation warning ahead of the June 2026 forced migration. --- .github/workflows/git-sync.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/git-sync.yml b/.github/workflows/git-sync.yml index 42c660d9b..986346c49 100644 --- a/.github/workflows/git-sync.yml +++ b/.github/workflows/git-sync.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: SSH Agent - uses: webfactory/ssh-agent@v0.9.0 + uses: webfactory/ssh-agent@v0.10.0 with: ssh-private-key: ${{ secrets.BITBUCKET_SECRET }} From 445dddbd212833ad80808f9f0c0a8b78b010645e Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Fri, 24 Apr 2026 18:49:19 +0100 Subject: [PATCH 09/44] fix(steamcmd): add libtinfo.so.5 symlink fix for readline warning (#4899) * 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 --- lgsm/modules/fix_steamcmd.sh | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lgsm/modules/fix_steamcmd.sh b/lgsm/modules/fix_steamcmd.sh index 0ba5c85b2..36bc378ac 100755 --- a/lgsm/modules/fix_steamcmd.sh +++ b/lgsm/modules/fix_steamcmd.sh @@ -113,6 +113,31 @@ if [ ! -f "${steamclientsdk32}" ]; then fn_fix_msg_end fi +# Helps fix: WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5. +# On distros that ship libtinfo.so.6 (e.g. Ubuntu 22.04+, Debian 12+) but not +# libtinfo.so.5, SteamCMD prints this warning and loses readline support. +# Creating a symlink from .so.5 -> .so.6 resolves the warning without root. +for libtinfo32dir in "${HOME}/.steam/steamcmd" "${steamcmddir}" "${HOME}/.local/share/Steam/steamcmd"; do + if [ -d "${libtinfo32dir}" ]; then + libtinfo32so="${libtinfo32dir}/libtinfo.so.5" + # Also repair broken symlinks (! -e catches missing target, -L catches dangling link) + if [ ! -e "${libtinfo32so}" ]; then + # Find the .so.6 in the system 32-bit lib paths + for libtinfo32so6 in /lib/i386-linux-gnu/libtinfo.so.6 /usr/lib/i386-linux-gnu/libtinfo.so.6 /lib32/libtinfo.so.6; do + if [ -f "${libtinfo32so6}" ]; then + fixname="libtinfo.so.5 32-bit symlink" + fn_fix_msg_start + mkdir -p "${libtinfo32dir}" + ln -sf "${libtinfo32so6}" "${libtinfo32so}" + exitcode=$? + fn_fix_msg_end + break + fi + done + fi + fi +done + # steamclient.so fixes if [ "${shortname}" == "bo" ]; then fn_fix_steamclient_so "32" "${serverfiles}/BODS_Data/Plugins/x86" From 5a3c210ab78b9fc2a704511b0639c8db0518f038 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Fri, 24 Apr 2026 20:56:48 +0100 Subject: [PATCH 10/44] feat(newserver): Military Conflict: Vietnam MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 <1338733+knoxed@users.noreply.github.com> --- .github/workflows/details-check.yml | 2 +- .github/workflows/serverlist-validate.yml | 5 +- ...update-copyright-years-in-license-file.yml | 2 +- .github/workflows/version-check.yml | 2 +- .../config-lgsm/mcvserver/_default.cfg | 189 ++++++++++++++++++ lgsm/data/almalinux-8.csv | 4 +- lgsm/data/almalinux-9.csv | 4 +- lgsm/data/centos-7.csv | 4 +- lgsm/data/centos-8.csv | 4 +- lgsm/data/centos-9.csv | 4 +- lgsm/data/debian-10.csv | 2 + lgsm/data/debian-11.csv | 2 + lgsm/data/debian-12.csv | 2 + lgsm/data/debian-13.csv | 2 + lgsm/data/debian-9.csv | 2 + lgsm/data/gameicons/mcv-icon.png | Bin 0 -> 2334 bytes lgsm/data/gameicons/ps-icon.png | Bin 1216 -> 0 bytes lgsm/data/gameicons/squad44-icon.png | Bin 0 -> 1849 bytes lgsm/data/gameicons/tf2c-icon.png | Bin 0 -> 2412 bytes lgsm/data/rhel-7.csv | 4 +- lgsm/data/rhel-8.csv | 4 +- lgsm/data/rhel-9.csv | 4 +- lgsm/data/rocky-8.csv | 4 +- lgsm/data/rocky-9.csv | 4 +- lgsm/data/serverlist.csv | 1 + lgsm/data/ubuntu-16.04.csv | 2 + lgsm/data/ubuntu-18.04.csv | 2 + lgsm/data/ubuntu-20.04.csv | 2 + lgsm/data/ubuntu-22.04.csv | 2 + lgsm/data/ubuntu-23.04.csv | 2 + lgsm/data/ubuntu-23.10.csv | 2 + lgsm/data/ubuntu-24.04.csv | 4 +- lgsm/modules/install_config.sh | 5 + 33 files changed, 257 insertions(+), 15 deletions(-) create mode 100644 lgsm/config-default/config-lgsm/mcvserver/_default.cfg create mode 100644 lgsm/data/gameicons/mcv-icon.png delete mode 100644 lgsm/data/gameicons/ps-icon.png create mode 100644 lgsm/data/gameicons/squad44-icon.png create mode 100644 lgsm/data/gameicons/tf2c-icon.png diff --git a/.github/workflows/details-check.yml b/.github/workflows/details-check.yml index c58aa0ae4..aced7522d 100644 --- a/.github/workflows/details-check.yml +++ b/.github/workflows/details-check.yml @@ -21,7 +21,7 @@ jobs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Generate matrix with generate-matrix.sh run: chmod +x .github/workflows/details-check-generate-matrix.sh; .github/workflows/details-check-generate-matrix.sh diff --git a/.github/workflows/serverlist-validate.yml b/.github/workflows/serverlist-validate.yml index c2605b062..e2016eddf 100644 --- a/.github/workflows/serverlist-validate.yml +++ b/.github/workflows/serverlist-validate.yml @@ -6,13 +6,16 @@ on: permissions: contents: read +env: + datadir: lgsm/data + jobs: serverlist-validate: if: github.repository_owner == 'GameServerManagers' runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Compare Versions run: chmod +x .github/workflows/serverlist-validate.sh; .github/workflows/serverlist-validate.sh diff --git a/.github/workflows/update-copyright-years-in-license-file.yml b/.github/workflows/update-copyright-years-in-license-file.yml index 1123b8cce..d9870a166 100644 --- a/.github/workflows/update-copyright-years-in-license-file.yml +++ b/.github/workflows/update-copyright-years-in-license-file.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 - name: Action Update License Year diff --git a/.github/workflows/version-check.yml b/.github/workflows/version-check.yml index cfa7615bd..2b4448643 100644 --- a/.github/workflows/version-check.yml +++ b/.github/workflows/version-check.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Version Check run: chmod +x .github/workflows/version-check.sh; .github/workflows/version-check.sh diff --git a/lgsm/config-default/config-lgsm/mcvserver/_default.cfg b/lgsm/config-default/config-lgsm/mcvserver/_default.cfg new file mode 100644 index 000000000..3d822892a --- /dev/null +++ b/lgsm/config-default/config-lgsm/mcvserver/_default.cfg @@ -0,0 +1,189 @@ +################################## +######## Default Settings ######## +################################## +# DO NOT EDIT, ANY CHANGES WILL BE OVERWRITTEN! +# Copy settings from here and use them in either: +# common.cfg - applies settings to every instance. +# [instance].cfg - applies settings to a specific instance. + +#### Game Server Settings #### + +game_type="0" +game_mode="0" +ip="0.0.0.0" +port="27015" +clientport="27005" +sourcetvport="27020" +steamport="26901" +defaultmap="mcv_siege" +maxplayers="32" +tickrate="64" + +## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters +startparameters="-game vietnam -usercon -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} -tickrate ${tickrate} +map ${defaultmap} +servercfgfile ${servercfg} -maxplayers_override ${maxplayers} +game_type ${game_type} +game_mode ${game_mode} -nobreakpad" + +#### LinuxGSM Settings #### + +## LinuxGSM Stats +# Send useful stats to LinuxGSM developers. +# https://docs.linuxgsm.com/configuration/linuxgsm-stats +# (on|off) +stats="off" + +## Notification Alerts +# (on|off) + +# Display IP | https://docs.linuxgsm.com/alerts#display-ip +displayip="" + +# More info | https://docs.linuxgsm.com/alerts#more-info +postalert="off" + +# Alert on Start/Stop/Restart +statusalert="off" + +# Discord Alerts | https://docs.linuxgsm.com/alerts/discord +discordalert="off" +discordwebhook="webhook" + +# Email Alerts | https://docs.linuxgsm.com/alerts/email +emailalert="off" +email="email@example.com" +emailfrom="" + +# Gotify Alerts | https://docs.linuxgsm.com/alerts/gotify +gotifyalert="off" +gotifytoken="token" +gotifywebhook="webhook" + +# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt +iftttalert="off" +ifttttoken="accesstoken" +iftttevent="linuxgsm_alert" + +# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet +pushbulletalert="off" +pushbullettoken="accesstoken" +channeltag="" + +# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover +pushoveralert="off" +pushovertoken="accesstoken" +pushoveruserkey="userkey" + +# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat +rocketchatalert="off" +rocketchatwebhook="webhook" + +# Slack Alerts | https://docs.linuxgsm.com/alerts/slack +slackalert="off" +slackwebhook="webhook" + +# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram +# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring". +# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help". +telegramapi="api.telegram.org" +telegramalert="off" +telegramtoken="accesstoken" +telegramchatid="" +curlcustomstring="" + +## Updating | https://docs.linuxgsm.com/commands/update +updateonstart="off" + +## Backup | https://docs.linuxgsm.com/commands/backup +maxbackups="4" +maxbackupdays="30" +stoponbackup="on" + +## Logging | https://docs.linuxgsm.com/features/logging +consolelogging="on" +logdays="7" + +## Monitor | https://docs.linuxgsm.com/commands/monitor +# Query delay time +querydelay="1" + +## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors +ansi="on" + +#### Advanced Settings #### + +## Message Display Time | https://docs.linuxgsm.com/features/message-display-time +sleeptime="0.5" + +## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd +# Server appid +appid="1136190" +steamcmdforcewindows="no" +# SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch +branch="" +betapassword="" +# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server +steammaster="false" + +## Stop Mode | https://docs.linuxgsm.com/features/stop-mode +# 1: tmux kill +# 2: CTRL+c +# 3: quit +# 4: quit 120s +# 5: stop +# 6: q +# 7: exit +# 8: 7 Days to Die +# 9: GoldSrc +# 10: Avorion +# 11: end +stopmode="3" + +## Query mode +# 1: session only +# 2: gamedig (gsquery fallback) +# 3: gamedig +# 4: gsquery +# 5: tcp +querymode="2" +querytype="protocol-valve" + +## Console type +consoleverbose="yes" +consoleinteract="yes" + +## Game Server Details +# Do not edit +gamename="Military Conflict: Vietnam" +engine="source" +glibc="2.15" + +#### Directories #### +# Edit with care + +## Game Server Directories +systemdir="${serverfiles}/vietnam" +executabledir="${serverfiles}" +executable="./srcds_run_x64" +servercfgdir="${systemdir}/cfg" +servercfg="${selfname}.cfg" +servercfgdefault="server.cfg" +servercfgfullpath="${servercfgdir}/${servercfg}" + +## Backup Directory +backupdir="${lgsmdir}/backup" + +## Logging Directories +[ -n "${LGSM_LOGDIR}" ] && logdir="${LGSM_LOGDIR}" || logdir="${rootdir}/log" +gamelogdir="${systemdir}/logs" +lgsmlogdir="${logdir}/script" +consolelogdir="${logdir}/console" +lgsmlog="${lgsmlogdir}/${selfname}-script.log" +consolelog="${consolelogdir}/${selfname}-console.log" +alertlog="${lgsmlogdir}/${selfname}-alert.log" +postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log" + +## Logs Naming +lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log" +consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log" + +## Log Parameters +logtimestamp="off" +logtimestampformat="%Y-%m-%d %H:%M:%S" diff --git a/lgsm/data/almalinux-8.csv b/lgsm/data/almalinux-8.csv index 2405a4b3e..42b0bcfbd 100644 --- a/lgsm/data/almalinux-8.csv +++ b/lgsm/data/almalinux-8.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,java-21-openjdk mcb,libnsl +mcv mh mohaa,compat-libstdc++-33.i686 mta,ncurses-compat-libs,libxml2 @@ -82,7 +83,6 @@ opfor pc pc2 pmc,java-21-openjdk -ps,GConf2 pvkii pvr,libcxx pw @@ -109,12 +109,14 @@ sm,telnet,expect sof2 sol squad +squad44 st,libxml2 stn sven terraria tf tf2,libcurl.i686 +tf2c,libcurl.i686 tfc ti ts diff --git a/lgsm/data/almalinux-9.csv b/lgsm/data/almalinux-9.csv index 069e8e437..7780ebf79 100644 --- a/lgsm/data/almalinux-9.csv +++ b/lgsm/data/almalinux-9.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,java-21-openjdk mcb,libnsl +mcv mh mohaa,compat-libstdc++-33.i686 mta,ncurses-compat-libs,libxml2 @@ -82,7 +83,6 @@ opfor pc pc2 pmc,java-21-openjdk -ps,GConf2 pvkii pvr,libcxx pw @@ -109,12 +109,14 @@ sm,telnet,expect sof2 sol squad +squad44 st,libxml2 stn sven terraria tf tf2,libcurl.i686 +tf2c,libcurl.i686 tfc ti ts diff --git a/lgsm/data/centos-7.csv b/lgsm/data/centos-7.csv index 39af5868d..c61fbf7d9 100644 --- a/lgsm/data/centos-7.csv +++ b/lgsm/data/centos-7.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,java-21-openjdk mcb,libnsl +mcv mh mohaa,compat-libstdc++-33.i686 mta,ncurses-libs,libxml2 @@ -82,7 +83,6 @@ opfor pc pc2 pmc,java-11-openjdk -ps,GConf2 pvkii pvr,libcxx pw @@ -109,12 +109,14 @@ sm,telnet,expect sof2 sol squad +squad44 st,libxml2 stn sven terraria tf tf2,libcurl.i686 +tf2c,libcurl.i686 tfc ti ts diff --git a/lgsm/data/centos-8.csv b/lgsm/data/centos-8.csv index bcaf1e31d..a9b0692b4 100644 --- a/lgsm/data/centos-8.csv +++ b/lgsm/data/centos-8.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,java-21-openjdk mcb,libnsl +mcv mh mohaa,compat-libstdc++-33.i686 mta,ncurses-compat-libs,libxml2 @@ -82,7 +83,6 @@ opfor pc pc2 pmc,java-17-openjdk -ps,GConf2 pvkii pvr,libcxx pw @@ -109,12 +109,14 @@ sm,telnet,expect sof2 sol squad +squad44 st,libxml2 stn sven terraria tf tf2,libcurl.i686 +tf2c,libcurl.i686 tfc ti ts diff --git a/lgsm/data/centos-9.csv b/lgsm/data/centos-9.csv index 446a55ebb..2dcfe82b5 100644 --- a/lgsm/data/centos-9.csv +++ b/lgsm/data/centos-9.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,java-17-openjdk mcb,libnsl +mcv mh mohaa,compat-libstdc++-33.i686 mta,ncurses-compat-libs,libxml2 @@ -82,7 +83,6 @@ opfor pc pc2 pmc,java-17-openjdk -ps,GConf2 pvkii pvr,libcxx pw @@ -109,12 +109,14 @@ sm,telnet,expect sof2 sol squad +squad44 st,libxml2 stn sven terraria tf tf2,libcurl.i686 +tf2c,libcurl.i686 tfc ti ts diff --git a/lgsm/data/debian-10.csv b/lgsm/data/debian-10.csv index e0c6ea7e4..b4d0123ff 100644 --- a/lgsm/data/debian-10.csv +++ b/lgsm/data/debian-10.csv @@ -66,6 +66,7 @@ l4d l4d2 mc,openjdk-11-jre mcb +mcv mh mohaa,libstdc++5:i386 mta,libncursesw5,libxml2-utils @@ -115,6 +116,7 @@ sven,zlib1g:i386 terraria tf tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 tfc ti ts diff --git a/lgsm/data/debian-11.csv b/lgsm/data/debian-11.csv index 0d2652293..3e835e1d4 100644 --- a/lgsm/data/debian-11.csv +++ b/lgsm/data/debian-11.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,openjdk-17-jre mcb +mcv mh mohaa,libstdc++5:i386 mta,libncursesw5,libxml2-utils @@ -115,6 +116,7 @@ sven,zlib1g:i386 terraria tf tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 tfc ti ts diff --git a/lgsm/data/debian-12.csv b/lgsm/data/debian-12.csv index e67a822b7..6c3dc59c7 100644 --- a/lgsm/data/debian-12.csv +++ b/lgsm/data/debian-12.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,openjdk-17-jre mcb +mcv mh mohaa,libstdc++5:i386 mta,libncursesw5,libxml2-utils @@ -115,6 +116,7 @@ sven,libssl3:i386,zlib1g:i386 terraria tf tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 tfc ti ts diff --git a/lgsm/data/debian-13.csv b/lgsm/data/debian-13.csv index e7a622a7e..841be5a34 100644 --- a/lgsm/data/debian-13.csv +++ b/lgsm/data/debian-13.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,openjdk-25-jre mcb +mcv mh mohaa,libstdc++5:i386 mta,libncursesw5,libxml2-utils @@ -115,6 +116,7 @@ sven,libssl3:i386,zlib1g:i386 terraria tf tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 tfc ti ts diff --git a/lgsm/data/debian-9.csv b/lgsm/data/debian-9.csv index a111c6800..a79b9ebaa 100644 --- a/lgsm/data/debian-9.csv +++ b/lgsm/data/debian-9.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,openjdk-8-jre mcb +mcv mh mohaa,libstdc++5:i386 mta,libncursesw5,libxml2-utils @@ -115,6 +116,7 @@ sven,zlib1g:i386 terraria tf tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 tfc ti ts diff --git a/lgsm/data/gameicons/mcv-icon.png b/lgsm/data/gameicons/mcv-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fefcc23460df41173b4c4265a9f3e47018a67498 GIT binary patch literal 2334 zcmV+(3E}pMP){|8q>3VC9^G+t{kF@~ zMK#xj^$u)4oz7Cm<~U}XA(K*)fmi@DD~wVwDT>;VBuF_*kqadWI6)xBx>BVvByvon zO>Ln()v)|{?NXjdGgFtLwfFD$gXMKO-ME33NkkbTvroxNNCcUrWKNzj8wExQEl~@U zQiHcfWi2v7%G_5vR<%}(iY}Lv`AK2r?s|8yVNRvuyt_S~tyZ3-BXAsC77;OIU|>=t zLvRvuRTPs_X^|_UNnvb1WN%|Pkjm>twOXG{XND^ordm+2cI@{1`B%sEb0zY}=z0Fq_r$MO9V0 zD5VmLJ#obL$8G7c>cz3?jFM*`uNhU-Za@};#1Uo7Vw1%dWh<4JimW?MCd*2wG=viA zv|eHi_x%7VW*?FdG^^(Gxi+$GckQ+r?)`SN8m)+fze;AR>ZEi&GKZ98b;q8y6kuM?)JtGq22hpC@(MO_0nL0 z&a*6y=jxajyHssraWq2Iu}+qU!#MP$43u>gVpuK>wzgDJlRrJ3oKp4l`D2^yi&rmR zzWpgi???6?&YsP!_3Fet`P)zTwts)KZ5-t3!~0#@aQrpTz4yEO`-3S}G@*}rb}@feoWnq0uCzqgR&8N@*=Hb)NyqJCcn{PIG)~Z<- zCSpC+9*W+vv&o8-FoDs41jIfKQWuk=Ov{;YF=d}PgzWFT_af)&Os>*o(A{!2eg4^# zi^sFZdPm8u&hvvuV?%9kELH93#~4z!oLx@Nd*??NU8J(A2J3^$gZEWAZQ5I{pc}^| z{9I4PgvA6;iuL+ut5TPO#x}j%xbe_?$o2QT&D}6-$DAb`4hMupkQ8KTAcOWmQAVoj z)&96`4~;V0O+`%b81f_2FiHaZ)XoWfZ{vi$}93=Vw=&^zuXc!^`%VO^CvJj+_#( zkV!+L{nk?^Bl2Nr7iBfLjx|hcGhbhP`A?tLi`d0&T`pRe-ZrCJpNu#d&2dPztmg`8 zJbv`^kI&c5=f8aXYQulN9)ADLD~S?05FmgiV1tk&kG&mA&C_YQIA5GTI=T4xyygD- z=C*Nz-1%xf15>n3dvRH|hrLX5CDs8iJKubGbJ%70_WI@RNW;-QIy+-e`wyGL{SH&0 zoCGO_5WTl~?5e3;S8_R<{_%(F|Gjy?CjqrEs{i??(_cO-b+R;;#FM*2@#{ZtK$o#x z?L%-v?ko*H_YG$UI+BUgg}NXE#Ee9w!H8&cs=a8^np1GaXz`oYWS(8H+woceSE)b zUcI~DVa>S>vX~O4?lzCRFF%^ErMP+h1DE+1pFeb>{Oy1L4{>&xbHEqPy z-d$Z=y?F5SIk{{V14|W14ODKq+{$^_SN&v)z|;<`O|*CKOW#uKi={5+1Iab zcA!TVbcCFlBkB>09?Fp^q?Ce13IY=V015_TK*5jz$7onDG}YnQ6)67Yt1p*x?-#Rg zU%XsQ*Q!1}=5Dv^jseh6-?h{Vk%S&)=|yExWdIS55`nqg z6wA@EJ$thL@b>?BHu=M!zN>3r)$~IdlL1A3gfy%YS|O>ivg(IAY~Q9Q>&4kswm1 zW(j3L#V81wIH=^A8B$`F5rHv7W&ttzkU4-Bje+b^aj#t7*8gN;@wQ-EMdJef@YAG7(?2DxLyxc~qF07*qoM6N<$ Ef~gOJ-v9sr literal 0 HcmV?d00001 diff --git a/lgsm/data/gameicons/ps-icon.png b/lgsm/data/gameicons/ps-icon.png deleted file mode 100644 index afe81e82340b2e04a66a4487da79be395d144dc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1216 zcmV;x1V8(UP);lyv|H@b~B2Jk~o$#Q~>DXj^_S7i)EPB=jBK)UDdc|P~) z2mgfE4=;dFa0&s!U?*Sz2so$?5(^FxfC&QtlMpG{EAgK;a(CD!C2SGUC=pCVVF~C; z#(r2?arfipR>>a6ar=;|q|+jrCAq0t1kn)rbbpF1I1+c$es5`W1z9y%Z!OwG2Ib5d zQi{oflGLHUdvA`1$483;&t?9+>O{^pD@=7$5|H?ya^{8_-F-c3#-9Dr=!QMpr*eV* z?e~Rg4-+tHQ{FXk@84ntA$>k3^OZiu-pR>W>*+2EN>Cz9>TG?9{bbH=Rc|Mqxc=X#C}`ceeyf-teI&QFUegY>)zXP`>A}ejXn_7Xm7`G>u=vT|nUqIHyqy3$g zZdM)x9o=%iub6S$7e%gwno2t?4P>w__q`6&>bf~r!rB)0H7dE9_ck^L=;DEv z_WB)+Cd0ipDlBWVt>np$`_YXNbe(E?LO77LJ~cTJubC=hZGa{qY`9X_e+0!5Q^{Py zZBvK5$=P*3>?VQPiSj$W!UX)&OBTh|qIo*y)3}L@!hdS6jE%V}2742$t8PQvB!Z7x zQY#`aQG4dq;ZKeSkL`-uedja=XsC-$nCc7;6q3F3 z*Z%st;dbzXGiSLceklh5VUl}$bYJbazwI>;>rTy0b1htJZ}4h%Yr1HW00O|)!1*&b z{v4=U!8kY^-jh?^wWZ3)XWR|~qBNA9G%u|cY5c*zbJCNMo_f8lV_Vs=UnQ7ifQ^Rl z_}`rJ*xy*^$~Fok4@aI%6|KwP_Xh-`oPtFR#+nOMx_?<-%gE6Iee&=PnmUtr8`Na5 zz;y`50BrlQJ$!lev{FsRaLqQ|kDGLB00t5vA18}>p&PR)|6951JC3HntbYx+4WjbSWWnpw>05UK#Gc7SNEipD! zF*iCeIXW{nD=;uRFfc@Fw(|f003~!qSaf7zbY(hiZ)9m^c>ppnGBYhPFfB1QR53R? eFgZFiH7hVMIxsLbHx5q#0000vG925{=gAW`89C~`Ddy4uON1M6+H~)XVX8|=`Rp-?C&Ud~lgb)%% z5g~*Sk|YTRf*`;^mSyzISeDHmz^*_bfc|Pc&pWdiW8`wV5JHNgz_g}mnx?^+<2V>F z3A!!RhNgbZ1WpCcR zSzcZ~b?OwuFdWALI8GUU*3zjkRBy+Q9lEZMj*hObuHL$JtEQ%=y1Lr7ZAxi>e}7(H zUMLijWtr#sqN1Y4#>UmvRZ3|j63KQg2m%lRV~pTmc9~J(=>)*g27-c z7BfwAcz9SJ3knKcE|;chv$M05(v_8!UAuPu#%YJyNEAhu zWi?H+EUTubCND3qwzjskw6wgu+~e__IB{Zqecd!oSX@_Ecj?k4pU=nhye!Mr)z!&l za(#WhzrP;UJQ<6{78Vxb@pvp2+t}DxT3X_H{^`@Fo12@Po15Wq z7-Kv)H)mPal`B`=Za37nwY9aXsw$OAg~MS%5FF~uvdpH_X@+4~mNg9H;>C+ko;)Fh z*tVTaCJPG-0pHJ`KQAmS1Ofp<2qA=JS-;=k-QDf?`%|gZ($dnyhYt)prKP2Aw;O=wIF3>p3WZcv)ph;u-Mgk~_Vo1Vx=tyTBqBuQcz#^HmaC@z;P7z`?kQdwDv5c2tay}i8;9y};2D$38# zFD@?b?(U|PLeF2md>L58A%s>|Rxrkki;KCrxzT8p=Xu+<{eC}Gp67W=X)>AQdH&3q zGqG6g@#Du=uU_rw=ulPFvaFVtmcxe+H#Ie>syaM8{OHl6w{PE0O-=cHKEp7!drc68 z7cX9DnpRR$Qdn5%@pyLb+$jh`I2?w4@p`?-jvZTETwGgQgOh?rrBW$E$iTorQ&ZD# zTEuZ2CkR3&lR*esmi6u1w}S@{y4~)wva)zQUQtm|RaK>F+W!6fp{=H-rUHS0$Kyc= zZES3KJRZX^Mn*<@dV1#P=Yjql$ALqT-k)s^MQ?9!A0Ho|pP#3cZf$LCY-|8Hkx1m+ zxpQ~!+%ZiPL?5P1)2y$rXBfu0f*fsjEMQaBz@P+R@R0vLqeKixBGU?7VQ{g3ILsK(a4zIFKlc+x5U0L(9QmSl!&*oKB|) z2M675cQ*M{RYeHhyLZodh`@KpUG`h#=Z*HaCd=~Z=qRPMqN2h{3#QJWKR+-qfU+Jt z|I&^eITDY@Z{EBa3jZb5%#(I1$D?4d)4UcGwt?AbHuHRvpdvj08_aFGqMD2m$;o?rIg nU;fNszoRe^4_@H^q`dzD5Wgm!a9kiv00000NkvXXu0mjf**A<+ literal 0 HcmV?d00001 diff --git a/lgsm/data/gameicons/tf2c-icon.png b/lgsm/data/gameicons/tf2c-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f466347a186fad95ce446187b3c36c1c226c8970 GIT binary patch literal 2412 zcmV-y36u7TP)CY z3vP(S)HrL_|cE%jN3Ix;CarP8`vK?ex}>O){vp z6R8LNsEi@4kf@Y`h|@IH3iCV*gV7E_0YJ`K*9tio5pJ4>nNvzv!VvZ<$;Q^|$v400 zjyvx-{+i=4=12eFk*_@aAC-_Q9Jy-yrkieh?yFzjxqJY%8l#D594BjC)3l}JS}PH0 zhN`s&hLDnoAYm4cDU#v4?tbT6fAsc^tqoF`aM#u3+uQH?_4{A@`qyr3t_`6F zQlJ$8p8MaIg*k-cTDy68J(OW>Yw@mMz2}x&zxVM+{`k8up6j|55kXK|X<;a(5F*a= zY^`<9iAV_H*s)^|Km70wH=pQM+GXhH5|uGhaZY7<(0lKRFf(s%Z)$Ir;lQ`{4Y%C< z;DaALdewF*MHrlG5LHUWxrRa-o30HLOVS8NId$Lre)-sqTUM2llSL01K@vfhl=m(T zTxyKz$dMzpaxT$(8&e=vkKM5S-Ur{EN^G3t9HazeA;f`uEu(r0AOROkTv({7z4{aV^-&kCI_0jd!jnDkm-&*oS z#JL#dVh-A2Rprq?{QXzGdOOPu$bbuLA;;P4m7jj+sbN29tqB>w@2bu@7eesfi-@!K z%4_GuO{-I$KoF|+uG?Sk`Nn9ZVHnmoHo`n!cl_E@zw(RQM>aMOA5waubP=9_&HLZ| zn=k#(r7(>~1HSp{&KLtynb~T`sVHSCgOFyK0JGLMB|tPtnY2hw-nV@}TH{^g=M+jU zTI-dy^{vC*v16OU>dRmJcZG|RgE19vy=EmR0_}30-tt2yN%6}sUEI0Y_rsLa?6h&l z4+lXRqZBYC6pg5)QYoqJnlKJldqs{RR0c!@z?`#ho0OTEb;*%gTWhYp_L_%&<3Xf| zXrP#o!v4OWE&q1u0TI)Q;Gyi$^`Wvq;B?6&wI>q2S zzj<{1-ur*)V;}vawXPk9;Jhvnr*Zh;hu?F@owqyZw5DkoW8tw6I~Vpo{^;Z1dj8uA zP1|%aMsmIrCL*g<`^*=8*hFc8mhHUQ)=5)$^}?}nL|H6`^>+-e16~it`t#K zmsy&o$vHEpm_w;Wq;M_w-goN6_q;mH`^F<8G_7OK{qoYHbz$yLpFYh+n5%bf-}f}< zS*Q>JGheuH`RS)VABLnrmzWyoW0;Yu_3p(Nzgvn3V-;LGv^Gq=Z=6ESx#pP(%)%ey zqW|Qvzqt7F9#pNBo#LddBIBu)#K3LaBG8|H>d&8l{sm@sMhQm%A)=JZ?#{kejj$HP z!&^t1rbD1{n4NBo?tn2)>g!+o=4bx$>DF&Zt|5fB^C<_CQWZHx&ECP-_!VILI}d&2 z{I>_jhOC{_0aD6wzI161NsFqBwUuVEQbBPQ<%;M&)_rjGrT^ah-G@JdVwgEg0YxPX zf+hecr7*KGrWCQ(U$}7j0}p)Y%g;VnvuWJAp>BVtS7i2f_6gL+hBJn93JR$f1hypY z*S_+N4?OUpix>BeaU!6UsZ}iHHbTYegi+SZnoep>$1o)LO?dTiYn5 z=6SYWzyA8`&c5(p%*&Zj2VVODW#Nh&W+>foDq@28Bc7iv^64pzE3#V=2Y^wq&eONHH^)T%BujjsViOiz~Y`Ga|NaJC40`PLr`Q%nY+J zMp?zcxnxNIAXTdIjfnJ9K&;lgIVS|GjgB!kO#@WtoHjQP?e1P4=b#i;sALF$`f1FC zeP{5R#y5>)=31GEuK0;aX^3+H(AL@*M eNE1;A@&5oeRnKIuq;I Date: Fri, 24 Apr 2026 22:43:42 +0100 Subject: [PATCH 11/44] fix: support legacy game servers on older Ubuntu/Debian runners (#4903) * 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/trigger-workflow-and-wait@v1.6.5 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 --- .../details-check-generate-matrix.sh | 19 +++++++- .github/workflows/details-check.yml | 20 +++++---- .github/workflows/trigger-docker-build.yml | 44 ++++++++++++++----- .github/workflows/update-check.yml | 16 ++++--- lgsm/modules/check_deps.sh | 6 +-- 5 files changed, 74 insertions(+), 31 deletions(-) diff --git a/.github/workflows/details-check-generate-matrix.sh b/.github/workflows/details-check-generate-matrix.sh index 2c0803519..1093a46cf 100755 --- a/.github/workflows/details-check-generate-matrix.sh +++ b/.github/workflows/details-check-generate-matrix.sh @@ -1,6 +1,7 @@ #!/bin/bash -curl "https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${GITHUB_REF#refs/heads/}/lgsm/data/serverlist.csv" | grep -v '^[[:blank:]]*$' > serverlist.csv +ref="${LGSM_REF:-${GITHUB_REF#refs/heads/}}" +curl "https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${ref}/lgsm/data/serverlist.csv" | grep -v '^[[:blank:]]*$' > serverlist.csv echo -n "{" > "shortnamearray.json" echo -n "\"include\":[" >> "shortnamearray.json" @@ -14,10 +15,26 @@ while read -r line; do export gamename distro=$(echo "$line" | awk -F, '{ print $4 }') export distro + # Legacy servers that require older Ubuntu/Debian versions due to glibc compatibility + case "${shortname}" in + bfv|bf1942) + # Requires Ubuntu <= 22.04 or Debian <= 12 (glibc 2.31 compatible) + runner="ubuntu-22.04" + ;; + btl|onset) + # Requires Ubuntu <= 20.04 or Debian <= 11 (glibc 2.31 compatible) + runner="ubuntu-20.04" + ;; + *) + runner="ubuntu-latest" + ;; + esac { echo -n "{"; echo -n "\"shortname\":"; echo -n "\"${shortname}\""; + echo -n ",\"runner\":"; + echo -n "\"${runner}\""; echo -n "},"; } >> "shortnamearray.json" done < <(tail -n +2 serverlist.csv) diff --git a/.github/workflows/details-check.yml b/.github/workflows/details-check.yml index aced7522d..856ab2d2a 100644 --- a/.github/workflows/details-check.yml +++ b/.github/workflows/details-check.yml @@ -17,6 +17,8 @@ jobs: create-matrix: if: github.repository_owner == 'GameServerManagers' runs-on: ubuntu-latest + env: + LGSM_REF: ${{ github.event.pull_request.head.sha || github.ref_name }} outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: @@ -37,14 +39,16 @@ jobs: if: github.repository_owner == 'GameServerManagers' needs: create-matrix continue-on-error: true - runs-on: ubuntu-latest + runs-on: ${{ matrix.runner }} + env: + LGSM_REF: ${{ github.event.pull_request.head.sha || github.ref_name }} strategy: matrix: ${{ fromJSON(needs.create-matrix.outputs.matrix) }} steps: - name: Download linuxgsm.sh - run: wget "https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${GITHUB_REF#refs/heads/}/linuxgsm.sh"; chmod +x linuxgsm.sh + run: wget "https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${LGSM_REF}/linuxgsm.sh"; chmod +x linuxgsm.sh - name: Install dependencies run: sudo apt-get install libxml2-utils jq @@ -53,10 +57,10 @@ jobs: run: mkdir -p serverfiles - name: Grab server - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./linuxgsm.sh ${{ matrix.shortname }}server + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./linuxgsm.sh ${{ matrix.shortname }}server - name: Enable developer mode - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server developer + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server developer - name: Generate servercfgname id: sets-servercfgname @@ -73,7 +77,7 @@ jobs: fi - name: Pre-load LinuxGSM - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server details + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server details - name: Display config run: | @@ -87,10 +91,10 @@ jobs: run: grep "startparameters" lgsm/config-default/config-lgsm/${{ matrix.shortname }}server/_default.cfg - name: Details - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server details + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server details - name: Detect details - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server parse-game-details + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server parse-game-details - name: Query Raw - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server query-raw + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server query-raw diff --git a/.github/workflows/trigger-docker-build.yml b/.github/workflows/trigger-docker-build.yml index 390123322..823592457 100644 --- a/.github/workflows/trigger-docker-build.yml +++ b/.github/workflows/trigger-docker-build.yml @@ -15,12 +15,22 @@ jobs: runs-on: ubuntu-latest steps: - name: Trigger Workflow and Wait (linuxgsm) - uses: convictional/trigger-workflow-and-wait@v1.6.5 - with: - owner: GameServerManagers - repo: docker-linuxgsm - github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - workflow_file_name: action-docker-publish.yml + env: + GH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + run: | + before=$(date -u +%Y-%m-%dT%H:%M:%SZ) + gh workflow run action-docker-publish.yml --repo GameServerManagers/docker-linuxgsm + sleep 10 + run_id=$(gh run list \ + --workflow action-docker-publish.yml \ + --repo GameServerManagers/docker-linuxgsm \ + --created ">=${before}" \ + --limit 1 \ + --json databaseId \ + --jq '.[0].databaseId') + gh run watch "${run_id}" \ + --repo GameServerManagers/docker-linuxgsm \ + --exit-status trigger_build_docker-gameserver: if: github.repository_owner == 'GameServerManagers' @@ -29,9 +39,19 @@ jobs: runs-on: ubuntu-latest steps: - name: Trigger Workflow and Wait (gameserver) - uses: convictional/trigger-workflow-and-wait@v1.6.5 - with: - owner: GameServerManagers - repo: docker-gameserver - github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - workflow_file_name: action-docker-publish.yml + env: + GH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + run: | + before=$(date -u +%Y-%m-%dT%H:%M:%SZ) + gh workflow run action-docker-publish.yml --repo GameServerManagers/docker-gameserver + sleep 10 + run_id=$(gh run list \ + --workflow action-docker-publish.yml \ + --repo GameServerManagers/docker-gameserver \ + --created ">=${before}" \ + --limit 1 \ + --json databaseId \ + --jq '.[0].databaseId') + gh run watch "${run_id}" \ + --repo GameServerManagers/docker-gameserver \ + --exit-status diff --git a/.github/workflows/update-check.yml b/.github/workflows/update-check.yml index 8863cedc7..ad1150f7b 100644 --- a/.github/workflows/update-check.yml +++ b/.github/workflows/update-check.yml @@ -16,6 +16,8 @@ jobs: update-check: if: github.repository_owner == 'GameServerManagers' runs-on: ubuntu-latest + env: + LGSM_REF: ${{ github.event.pull_request.head.sha || github.ref_name }} strategy: fail-fast: false @@ -24,30 +26,30 @@ jobs: steps: - name: Download linuxgsm.sh - run: wget "https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${GITHUB_REF#refs/heads/}/linuxgsm.sh"; chmod +x linuxgsm.sh + run: wget "https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${LGSM_REF}/linuxgsm.sh"; chmod +x linuxgsm.sh - name: Install dependencies run: sudo dpkg --add-architecture i386; sudo apt-get update; - name: Grab server - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./linuxgsm.sh ${{ matrix.shortname }}server + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./linuxgsm.sh ${{ matrix.shortname }}server - name: Enable developer mode - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server developer + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server developer - name: Insert steamuser if: matrix.shortname == 'jk2' run: echo -e "steamuser=\"${{ secrets.STEAMCMD_USER }}\"\nsteampass='${{ secrets.STEAMCMD_PASS }}'" > lgsm/config-lgsm/${{ matrix.shortname }}server/common.cfg - name: Install server - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server auto-install + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server auto-install - name: Check Update server - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server check-update + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server check-update - name: Update server - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server update + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server update - name: Force Update server if: matrix.shortname == 'css' - run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server force-update + run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server force-update diff --git a/lgsm/modules/check_deps.sh b/lgsm/modules/check_deps.sh index 6d572fd40..3d4109e2c 100755 --- a/lgsm/modules/check_deps.sh +++ b/lgsm/modules/check_deps.sh @@ -362,7 +362,7 @@ if [ -n "${distrosupport}" ]; then fi # These titles are only supported up to Ubuntu 22.04 (Jammy) and Debian 12 (Bookworm). -if { [ "${distroid}" == "ubuntu" ] && dpkg --compare-versions "${distroversion}" "gt" "22.04"; } || { [ "${distroidlike}" == "debian" ] && dpkg --compare-versions "${distroversion}" "gt" "12"; }; then +if { [ "${distroid}" == "ubuntu" ] && dpkg --compare-versions "${distroversion}" "gt" "22.04"; } || { [ "${distroid}" == "debian" ] && dpkg --compare-versions "${distroversion}" "gt" "12"; }; then if [ "${shortname}" == "bf1942" ] || [ "${shortname}" == "bfv" ]; then fn_print_failure_nl "${gamename} is not supported on ${distroname} (requires Ubuntu <= 22.04 or Debian <= 12)." fn_script_log_fail "${gamename} is not supported on ${distroname}." @@ -370,8 +370,8 @@ if { [ "${distroid}" == "ubuntu" ] && dpkg --compare-versions "${distroversion}" fi fi -# These titles are only supported up to Ubuntu 20.04 and Debian 11 (and Debian-like derivatives). -if { [ "${distroid}" == "ubuntu" ] && dpkg --compare-versions "${distroversion}" "gt" "20.04"; } || { [ "${distroidlike}" == "debian" ] && dpkg --compare-versions "${distroversion}" "gt" "11"; }; then +# These titles are only supported up to Ubuntu 20.04 and Debian 11. +if { [ "${distroid}" == "ubuntu" ] && dpkg --compare-versions "${distroversion}" "gt" "20.04"; } || { [ "${distroid}" == "debian" ] && dpkg --compare-versions "${distroversion}" "gt" "11"; }; then if [ "${shortname}" == "onset" ] || [ "${shortname}" == "btl" ]; then fn_print_failure_nl "${gamename} is not supported on ${distroname} (requires Ubuntu <= 20.04 or Debian <= 11)." fn_script_log_fail "${gamename} is not supported on ${distroname}." From 4fda9ab461406928326975688b47e08d43a21873 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 22:47:31 +0100 Subject: [PATCH 12/44] chore(deps): bump dessant/lock-threads from 5 to 6 (#4864) Bumps [dessant/lock-threads](https://github.com/dessant/lock-threads) from 5 to 6. - [Release notes](https://github.com/dessant/lock-threads/releases) - [Changelog](https://github.com/dessant/lock-threads/blob/main/CHANGELOG.md) - [Commits](https://github.com/dessant/lock-threads/compare/v5...v6) --- updated-dependencies: - dependency-name: dessant/lock-threads dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Daniel Gibbs --- .github/workflows/lock.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index 8a08284a4..a0a810172 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Lock Threads - uses: dessant/lock-threads@v5 + uses: dessant/lock-threads@v6 with: github-token: ${{ secrets.GITHUB_TOKEN }} issue-comment: > From f48da4f3066cf401548cbdd2562420a959ef82c6 Mon Sep 17 00:00:00 2001 From: WildPenguin Date: Sun, 26 Apr 2026 14:19:52 +0300 Subject: [PATCH 13/44] papermc: add OpenJDK-25 (headless) dependency 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. --- lgsm/data/ubuntu-24.04.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lgsm/data/ubuntu-24.04.csv b/lgsm/data/ubuntu-24.04.csv index 6f96fac7f..e9cdc2002 100644 --- a/lgsm/data/ubuntu-24.04.csv +++ b/lgsm/data/ubuntu-24.04.csv @@ -82,7 +82,7 @@ onset,libmariadb-dev opfor pc pc2 -pmc,openjdk-21-jre +pmc,openjdk-25-jre-headless pvkii pvr,libc++1 pw From 0862942d5481e94a89c2b407dc8e437f055c7e6b Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 26 Apr 2026 18:22:41 +0000 Subject: [PATCH 14/44] fix(pmc): use openjdk-25-jre instead of headless variant, update vpmc to java 25 --- lgsm/data/ubuntu-24.04.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lgsm/data/ubuntu-24.04.csv b/lgsm/data/ubuntu-24.04.csv index e9cdc2002..478d2b240 100644 --- a/lgsm/data/ubuntu-24.04.csv +++ b/lgsm/data/ubuntu-24.04.csv @@ -82,7 +82,7 @@ onset,libmariadb-dev opfor pc pc2 -pmc,openjdk-25-jre-headless +pmc,openjdk-25-jre pvkii pvr,libc++1 pw @@ -130,7 +130,7 @@ ut3 ut99 vh,libc6-dev,libatomic1,libpulse-dev vints,dotnet-runtime-8.0 -vpmc,openjdk-21-jre +vpmc,openjdk-25-jre vs wet wf From 0396f245910cf6fd5c4cb28617bfc5e490868726 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 26 Apr 2026 19:42:20 +0100 Subject: [PATCH 15/44] feat(deps): update Java deps to openjdk-25-jre and add Ubuntu 26.04 support (#4908) - ubuntu-24.04: update pz, rw, wmc to openjdk-25-jre - debian-13: update vpmc to openjdk-25-jre, fix wmc typo (openjdk21-jre -> openjdk-25-jre) - add ubuntu-26.04.csv with all Java deps on openjdk-25-jre --- lgsm/data/debian-13.csv | 4 +- lgsm/data/ubuntu-24.04.csv | 6 +- lgsm/data/ubuntu-26.04.csv | 141 +++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+), 5 deletions(-) create mode 100644 lgsm/data/ubuntu-26.04.csv diff --git a/lgsm/data/debian-13.csv b/lgsm/data/debian-13.csv index 841be5a34..a287d7835 100644 --- a/lgsm/data/debian-13.csv +++ b/lgsm/data/debian-13.csv @@ -130,11 +130,11 @@ ut3 ut99 vh,libc6-dev,libatomic1,libpulse-dev vints,dotnet-runtime-8.0 -vpmc,openjdk-21-jre +vpmc,openjdk-25-jre vs wet wf -wmc,openjdk21-jre +wmc,openjdk-25-jre wurm,xvfb xnt zmr diff --git a/lgsm/data/ubuntu-24.04.csv b/lgsm/data/ubuntu-24.04.csv index 478d2b240..f2578b9a8 100644 --- a/lgsm/data/ubuntu-24.04.csv +++ b/lgsm/data/ubuntu-24.04.csv @@ -86,7 +86,7 @@ pmc,openjdk-25-jre pvkii pvr,libc++1 pw -pz,openjdk-21-jre,rng-tools5 +pz,openjdk-25-jre,rng-tools5 q2 q3 q4 @@ -96,7 +96,7 @@ ricochet ro rtcw rust,lib32z1 -rw,openjdk-21-jre +rw,openjdk-25-jre samp sb sbots @@ -134,7 +134,7 @@ vpmc,openjdk-25-jre vs wet wf -wmc,openjdk-21-jre +wmc,openjdk-25-jre wurm,xvfb xnt zmr diff --git a/lgsm/data/ubuntu-26.04.csv b/lgsm/data/ubuntu-26.04.csv new file mode 100644 index 000000000..f2578b9a8 --- /dev/null +++ b/lgsm/data/ubuntu-26.04.csv @@ -0,0 +1,141 @@ +all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,distro-info,file,gzip,hostname,jq,lib32gcc-s1,lib32stdc++6,netcat-openbsd,pigz,python3,tar,tmux,unzip,util-linux,uuid-runtime,wget,xz-utils +steamcmd,lib32gcc-s1,lib32stdc++6,libsdl2-2.0-0:i386,steamcmd +ac +ahl +ahl2 +ark +arma3 +armar,libcurl4t64 +ats +av +bb +bb2,libcurl4-gnutls-dev:i386 +bd +bf1942 +bfv,libstdc++5:i386 +bmdm +bo +bs +bt,libicu-dev,dos2unix,libxml2-utils +btl +cc +ck,xvfb,libxi6 +cmw +cod,libstdc++5:i386 +cod2,libstdc++5:i386 +cod4 +coduo,libstdc++5:i386 +codwaw +col +cs +cs2 +cscz +csgo +css +ct +dab +dayz +dmc +dod +dodr +dods +doi +dst,libcurl4-gnutls-dev:i386 +dys +eco,libgdiplus +em +etl +ets2 +fctr +fof +gmod +hcu +hl2dm +hldm +hldms +hw,lib32z1 +hz +ins +inss +ios +jc2 +jc3 +jk2 +kf +kf2 +l4d +l4d2 +mc,openjdk-25-jre +mcb +mcv +mh +mohaa,libstdc++5:i386 +mta,libxml2-utils +nd +nec +nmrih +ns +ns2,speex +ns2c,speex:i386 +ohd +onset,libmariadb-dev +opfor +pc +pc2 +pmc,openjdk-25-jre +pvkii +pvr,libc++1 +pw +pz,openjdk-25-jre,rng-tools5 +q2 +q3 +q4 +ql +qw +ricochet +ro +rtcw +rust,lib32z1 +rw,openjdk-25-jre +samp +sb +sbots +scpsl,mono-complete +scpslsm,mono-complete +sdtd,telnet,expect,libxml2-utils +sf +sfc +sm,telnet,expect +sof2 +sol +squad +squad44 +st,libxml2-utils +stn +sven,zlib1g:i386 +terraria +tf +tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 +tfc +ti +ts +ts3 +tu +tw +unt +ut +ut2k4 +ut3 +ut99 +vh,libc6-dev,libatomic1,libpulse-dev +vints,dotnet-runtime-8.0 +vpmc,openjdk-25-jre +vs +wet +wf +wmc,openjdk-25-jre +wurm,xvfb +xnt +zmr +zps From 094de9eb5cf4f28e23873900e45dc4c62b3a03be Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 26 Apr 2026 19:45:52 +0100 Subject: [PATCH 16/44] chore: synced file(s) with dgibbs64/repo-sync (#4904) * chore: synced local '.github/' with remote 'general/.github/' * chore: synced local './' with remote 'bash/' --------- Co-authored-by: unknown --- .devcontainer/devcontainer.json | 56 +++++++++++------------ .github/workflows/action-super-linter.yml | 6 +-- .prettierrc.json | 2 +- .vscode/extensions.json | 20 ++++---- 4 files changed, 41 insertions(+), 43 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 32c844ac7..506b50754 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,30 +1,30 @@ { - "name": "BASH Dev Container", - "image": "mcr.microsoft.com/devcontainers/base:ubuntu", - "features": { - "ghcr.io/devcontainers-community/npm-features/prettier:1": { - "plugins": "prettier-plugin-sh" - }, - "ghcr.io/devcontainers-extra/features/actionlint:1": {}, - "ghcr.io/devcontainers-extra/features/checkov:1": {}, - "ghcr.io/devcontainers-extra/features/markdownlint-cli:1": {}, - "ghcr.io/devcontainers-extra/features/shellcheck:1": {}, - "ghcr.io/devcontainers-extra/features/yamllint:2": {}, - "ghcr.io/devcontainers/features/github-cli:1": {} - }, - "customizations": { - "vscode": { - "extensions": [ - "DavidAnson.vscode-markdownlint", - "editorconfig.editorconfig", - "esbenp.prettier-vscode", - "github.vscode-github-actions", - "GitHub.vscode-pull-request-github", - "redhat.vscode-yaml", - "timonwong.shellcheck", - "yzhang.markdown-all-in-one" - ] - } - }, - "postCreateCommand": "npm init -y >/dev/null 2>&1 || true && npm install --no-save prettier prettier-plugin-sh prettier-plugin-jinja-template" + "name": "BASH Dev Container", + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "ghcr.io/devcontainers-community/npm-features/prettier:1": { + "plugins": "prettier-plugin-sh" + }, + "ghcr.io/devcontainers-extra/features/actionlint:1": {}, + "ghcr.io/devcontainers-extra/features/checkov:1": {}, + "ghcr.io/devcontainers-extra/features/markdownlint-cli:1": {}, + "ghcr.io/devcontainers-extra/features/shellcheck:1": {}, + "ghcr.io/devcontainers-extra/features/yamllint:2": {}, + "ghcr.io/devcontainers/features/github-cli:1": {} + }, + "customizations": { + "vscode": { + "extensions": [ + "DavidAnson.vscode-markdownlint", + "editorconfig.editorconfig", + "esbenp.prettier-vscode", + "github.vscode-github-actions", + "GitHub.vscode-pull-request-github", + "redhat.vscode-yaml", + "timonwong.shellcheck", + "yzhang.markdown-all-in-one" + ] + } + }, + "postCreateCommand": "npm init -y >/dev/null 2>&1 || true && npm install --no-save prettier prettier-plugin-sh prettier-plugin-jinja-template" } diff --git a/.github/workflows/action-super-linter.yml b/.github/workflows/action-super-linter.yml index e2755e20a..31b2fa949 100644 --- a/.github/workflows/action-super-linter.yml +++ b/.github/workflows/action-super-linter.yml @@ -27,9 +27,9 @@ jobs: - name: Checkout code uses: actions/checkout@v6 with: - # Full clone required so super-linter can resolve GITHUB_BEFORE_SHA. + # super-linter needs the full git history to get the + # list of files that changed across commits fetch-depth: 0 - fetch-tags: false persist-credentials: false - name: Install Prettier plugins (for summary formatting) @@ -41,7 +41,6 @@ jobs: env: # To report GitHub Actions status checks GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - DEFAULT_BRANCH: ${{ github.ref_name }} VALIDATE_BIOME_FORMAT: false VALIDATE_BIOME_LINT: false VALIDATE_GITHUB_ACTIONS_ZIZMOR: false @@ -49,7 +48,6 @@ jobs: VALIDATE_JSON_PRETTIER: false VALIDATE_MARKDOWN_PRETTIER: false VALIDATE_NATURAL_LANGUAGE: false - VALIDATE_PYTHON_RUFF_FORMAT: false VALIDATE_SHELL_SHFMT: false VALIDATE_TRIVY: false VALIDATE_YAML_PRETTIER: false diff --git a/.prettierrc.json b/.prettierrc.json index 1902f8021..02d542d50 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,3 +1,3 @@ { - "plugins": ["prettier-plugin-sh"] + "plugins": ["prettier-plugin-sh"] } diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 5c06a83bf..d31b65dd2 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,12 +1,12 @@ { - "recommendations": [ - "DavidAnson.vscode-markdownlint", - "editorconfig.editorconfig", - "esbenp.prettier-vscode", - "github.vscode-github-actions", - "GitHub.vscode-pull-request-github", - "redhat.vscode-yaml", - "timonwong.shellcheck", - "yzhang.markdown-all-in-one" - ] + "recommendations": [ + "DavidAnson.vscode-markdownlint", + "editorconfig.editorconfig", + "esbenp.prettier-vscode", + "github.vscode-github-actions", + "GitHub.vscode-pull-request-github", + "redhat.vscode-yaml", + "timonwong.shellcheck", + "yzhang.markdown-all-in-one" + ] } From f7a1258b58a30cde8f55c50e5ee8e43f3297aaf3 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 26 Apr 2026 18:57:39 +0000 Subject: [PATCH 17/44] fix(jbep3): add distro deps entries and game icon --- .../config-lgsm/jbep3server/_default.cfg | 198 ++++++++++++++++++ lgsm/data/almalinux-8.csv | 1 + lgsm/data/almalinux-9.csv | 1 + lgsm/data/centos-7.csv | 1 + lgsm/data/centos-8.csv | 1 + lgsm/data/centos-9.csv | 1 + lgsm/data/debian-10.csv | 1 + lgsm/data/debian-11.csv | 1 + lgsm/data/debian-12.csv | 1 + lgsm/data/debian-13.csv | 1 + lgsm/data/debian-9.csv | 1 + lgsm/data/gameicons/jbep3-icon.png | Bin 0 -> 400 bytes lgsm/data/rhel-7.csv | 1 + lgsm/data/rhel-8.csv | 1 + lgsm/data/rhel-9.csv | 1 + lgsm/data/rocky-8.csv | 1 + lgsm/data/rocky-9.csv | 1 + lgsm/data/serverlist.csv | 2 +- lgsm/data/ubuntu-16.04.csv | 1 + lgsm/data/ubuntu-18.04.csv | 1 + lgsm/data/ubuntu-20.04.csv | 1 + lgsm/data/ubuntu-22.04.csv | 1 + lgsm/data/ubuntu-23.04.csv | 1 + lgsm/data/ubuntu-23.10.csv | 1 + lgsm/data/ubuntu-24.04.csv | 1 + lgsm/data/ubuntu-26.04.csv | 1 + 26 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 lgsm/config-default/config-lgsm/jbep3server/_default.cfg create mode 100644 lgsm/data/gameicons/jbep3-icon.png diff --git a/lgsm/config-default/config-lgsm/jbep3server/_default.cfg b/lgsm/config-default/config-lgsm/jbep3server/_default.cfg new file mode 100644 index 000000000..2036d3522 --- /dev/null +++ b/lgsm/config-default/config-lgsm/jbep3server/_default.cfg @@ -0,0 +1,198 @@ +################################## +######## Default Settings ######## +################################## +# DO NOT EDIT, ANY CHANGES WILL BE OVERWRITTEN! +# Copy settings from here and use them in either: +# common.cfg - applies settings to every instance. +# [instance].cfg - applies settings to a specific instance. + +#### Game Server Settings #### + +## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters +ip="0.0.0.0" +port="27015" +clientport="27005" +sourcetvport="27020" +defaultmap="crossfire" +maxplayers="24" + +## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters +startparameters="-game jbep3 -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} +map ${defaultmap} +servercfgfile ${servercfg} -maxplayers ${maxplayers}" + +#### LinuxGSM Settings #### + +## LinuxGSM Stats +# Send useful stats to LinuxGSM developers. +# https://docs.linuxgsm.com/configuration/linuxgsm-stats +# (on|off) +stats="off" + +## Notification Alerts +# (on|off) + +# Display IP | https://docs.linuxgsm.com/alerts#display-ip +displayip="" + +# More info | https://docs.linuxgsm.com/alerts#more-info +postalert="off" + +# Alert on Start/Stop/Restart +statusalert="off" + +# Discord Alerts | https://docs.linuxgsm.com/alerts/discord +discordalert="off" +discordwebhook="webhook" + +# Email Alerts | https://docs.linuxgsm.com/alerts/email +emailalert="off" +email="email@example.com" +emailfrom="" + +# Gotify Alerts | https://docs.linuxgsm.com/alerts/gotify +gotifyalert="off" +gotifytoken="token" +gotifywebhook="webhook" + +# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt +iftttalert="off" +ifttttoken="accesstoken" +iftttevent="linuxgsm_alert" + +# ntfy Alerts | https://docs.linuxgsm.com/alerts/ntfy +ntfyalert="off" +ntfytopic="LinuxGSM" +ntfyserver="https://ntfy.sh" +ntfytoken="" +ntfyusername="" +ntfypassword="" +ntfypriority="" +ntfytags="" + +# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet +pushbulletalert="off" +pushbullettoken="accesstoken" +channeltag="" + +# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover +pushoveralert="off" +pushovertoken="accesstoken" +pushoveruserkey="userkey" + +# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat +rocketchatalert="off" +rocketchatwebhook="webhook" + +# Slack Alerts | https://docs.linuxgsm.com/alerts/slack +slackalert="off" +slackwebhook="webhook" + +# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram +# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring". +# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help all". +telegramapi="api.telegram.org" +telegramalert="off" +telegramtoken="accesstoken" +telegramchatid="" +telegramthreadid="" +telegramsilentnotification="false" +curlcustomstring="" + +## Updating | https://docs.linuxgsm.com/commands/update +updateonstart="off" + +## Backup | https://docs.linuxgsm.com/commands/backup +maxbackups="4" +maxbackupdays="30" +stoponbackup="on" + +## Logging | https://docs.linuxgsm.com/features/logging +consolelogging="on" +logdays="7" + +## Monitor | https://docs.linuxgsm.com/commands/monitor +# Query delay time +querydelay="1" + +## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors +ansi="on" + +#### Advanced Settings #### + +## Message Display Time | https://docs.linuxgsm.com/features/message-display-time +sleeptime="0.5" + +## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd +# Server appid +appid="869800" +steamcmdforcewindows="no" +# SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch +branch="" +betapassword="" +# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server +steammaster="true" + +## Stop Mode | https://docs.linuxgsm.com/features/stop-mode +# 1: tmux kill +# 2: CTRL+c +# 3: quit +# 4: quit 120s +# 5: stop +# 6: q +# 7: exit +# 8: 7 Days to Die +# 9: GoldSrc +# 10: Avorion +# 11: end +stopmode="3" + +## Query mode +# 1: session only +# 2: gamedig (gsquery fallback) +# 3: gamedig +# 4: gsquery +# 5: tcp +querymode="2" +querytype="protocol-valve" + +## Console type +consoleverbose="yes" +consoleinteract="yes" + +## Game Server Details +# Do not edit +gamename="Jabroni Brawl: Episode 3" +engine="source" +glibc="2.3.6" + +#### Directories #### +# Edit with care + +## Game Server Directories +systemdir="${serverfiles}/jbep3" +executabledir="${serverfiles}" +executable="./srcds_run.sh" +servercfgdir="${systemdir}/cfg" +servercfg="${selfname}.cfg" +servercfgdefault="server.cfg" +servercfgfullpath="${servercfgdir}/${servercfg}" + +## Backup Directory +backupdir="${lgsmdir}/backup" + +## Logging Directories +[ -n "${LGSM_LOGDIR}" ] && logdir="${LGSM_LOGDIR}" || logdir="${rootdir}/log" +gamelogdir="${systemdir}/logs" +lgsmlogdir="${logdir}/script" +consolelogdir="${logdir}/console" +lgsmlog="${lgsmlogdir}/${selfname}-script.log" +consolelog="${consolelogdir}/${selfname}-console.log" +alertlog="${lgsmlogdir}/${selfname}-alert.log" +postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log" + +## Logs Naming +lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log" +consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log" + +## Log Parameters +logtimestamp="off" +logtimestampformat="%Y-%m-%d %H:%M:%S" diff --git a/lgsm/data/almalinux-8.csv b/lgsm/data/almalinux-8.csv index 42b0bcfbd..e02ca7858 100644 --- a/lgsm/data/almalinux-8.csv +++ b/lgsm/data/almalinux-8.csv @@ -58,6 +58,7 @@ hz ins inss ios +jbep3 jc2 jc3 jk2 diff --git a/lgsm/data/almalinux-9.csv b/lgsm/data/almalinux-9.csv index 7780ebf79..5a6d996e7 100644 --- a/lgsm/data/almalinux-9.csv +++ b/lgsm/data/almalinux-9.csv @@ -58,6 +58,7 @@ hz ins inss ios +jbep3 jc2 jc3 jk2 diff --git a/lgsm/data/centos-7.csv b/lgsm/data/centos-7.csv index c61fbf7d9..c5632722e 100644 --- a/lgsm/data/centos-7.csv +++ b/lgsm/data/centos-7.csv @@ -58,6 +58,7 @@ hz ins inss ios +jbep3 jc2 jc3 jk2 diff --git a/lgsm/data/centos-8.csv b/lgsm/data/centos-8.csv index a9b0692b4..0b0b766d0 100644 --- a/lgsm/data/centos-8.csv +++ b/lgsm/data/centos-8.csv @@ -58,6 +58,7 @@ hz ins inss ios +jbep3 jc2 jc3 jk2 diff --git a/lgsm/data/centos-9.csv b/lgsm/data/centos-9.csv index 2dcfe82b5..fd9c0fa39 100644 --- a/lgsm/data/centos-9.csv +++ b/lgsm/data/centos-9.csv @@ -58,6 +58,7 @@ hz ins inss ios +jbep3 jc2 jc3 jk2 diff --git a/lgsm/data/debian-10.csv b/lgsm/data/debian-10.csv index b4d0123ff..5b8d73a06 100644 --- a/lgsm/data/debian-10.csv +++ b/lgsm/data/debian-10.csv @@ -57,6 +57,7 @@ hz ins inss ios +jbep3 jc2 jc3 jk2 diff --git a/lgsm/data/debian-11.csv b/lgsm/data/debian-11.csv index 3e835e1d4..adba97d27 100644 --- a/lgsm/data/debian-11.csv +++ b/lgsm/data/debian-11.csv @@ -58,6 +58,7 @@ hz ins inss ios +jbep3 jc2 jc3 jk2 diff --git a/lgsm/data/debian-12.csv b/lgsm/data/debian-12.csv index 6c3dc59c7..2da22f88c 100644 --- a/lgsm/data/debian-12.csv +++ b/lgsm/data/debian-12.csv @@ -58,6 +58,7 @@ hz ins inss ios +jbep3 jc2 jc3 jk2 diff --git a/lgsm/data/debian-13.csv b/lgsm/data/debian-13.csv index a287d7835..401cf281c 100644 --- a/lgsm/data/debian-13.csv +++ b/lgsm/data/debian-13.csv @@ -58,6 +58,7 @@ hz ins inss ios +jbep3 jc2 jc3 jk2 diff --git a/lgsm/data/debian-9.csv b/lgsm/data/debian-9.csv index a79b9ebaa..c0e990961 100644 --- a/lgsm/data/debian-9.csv +++ b/lgsm/data/debian-9.csv @@ -58,6 +58,7 @@ hz ins inss ios +jbep3 jc2 jc3 jk2 diff --git a/lgsm/data/gameicons/jbep3-icon.png b/lgsm/data/gameicons/jbep3-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..609a0345f36fd0fe211d0d2f656f048c821b2a3d GIT binary patch literal 400 zcmV;B0dM|^P)U>LPv)Phk9hOGtN)lFvlMxQ=^_Dzn2b0Jdy{{8#>^~=qBcjm2Ja{bON z{1z}VGBDsm5P;16^!c+xn2%>%$i-_{%=C?VYnpjDx$v04h{pm3R11)~zkdBXb>S=n z0|Pe~w}OluehUc40V4*Njg`&JzzE`@$Il)!QW(j|3ix<=_pRCjVgLXCf6lT6U%!53 zq;4Fzg!yBq#x^#A|=qoMA|Eb3|QQj%AC u`1sL*Bm38FUQeL~j5ed~qEQP*EdT&Sc5W~td^U0b0000 Date: Sat, 2 May 2026 16:57:56 +0100 Subject: [PATCH 18/44] feat(bb): add BrainBread server update functionality (#4912) * 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 * 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 * 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 * 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 --- lgsm/data/serverlist.csv | 1 + lgsm/modules/command_check_update.sh | 2 + lgsm/modules/command_update.sh | 2 + lgsm/modules/core_dl.sh | 6 + lgsm/modules/core_modules.sh | 5 + lgsm/modules/core_steamcmd.sh | 17 +++ lgsm/modules/install_server_files.sh | 13 +- lgsm/modules/update_bb.sh | 175 +++++++++++++++++++++++++++ 8 files changed, 212 insertions(+), 9 deletions(-) create mode 100644 lgsm/modules/update_bb.sh diff --git a/lgsm/data/serverlist.csv b/lgsm/data/serverlist.csv index 382eabbaf..3ddc013c3 100644 --- a/lgsm/data/serverlist.csv +++ b/lgsm/data/serverlist.csv @@ -67,6 +67,7 @@ l4d,l4dserver,Left 4 Dead,ubuntu-24.04 l4d2,l4d2server,Left 4 Dead 2,ubuntu-24.04 mc,mcserver,Minecraft,ubuntu-24.04 mcb,mcbserver,Minecraft Bedrock,ubuntu-24.04 +mcv,mcvserver,Military Conflict: Vietnam,ubuntu-24.04 mh,mhserver,MORDHAU,ubuntu-24.04 mohaa,mohaaserver,Medal of Honor: Allied Assault,ubuntu-24.04 mta,mtaserver,Multi Theft Auto,ubuntu-24.04 diff --git a/lgsm/modules/command_check_update.sh b/lgsm/modules/command_check_update.sh index 6e429512a..93a770e79 100755 --- a/lgsm/modules/command_check_update.sh +++ b/lgsm/modules/command_check_update.sh @@ -30,6 +30,8 @@ elif [ "${shortname}" == "jk2" ]; then update_jk2.sh elif [ "${shortname}" == "vints" ]; then update_vints.sh +elif [ "${shortname}" == "bb" ]; then + update_bb.sh elif [ "${shortname}" == "ut99" ]; then update_ut99.sh elif [ "${shortname}" == "xnt" ]; then diff --git a/lgsm/modules/command_update.sh b/lgsm/modules/command_update.sh index 996d402a4..a7cfc1b12 100755 --- a/lgsm/modules/command_update.sh +++ b/lgsm/modules/command_update.sh @@ -31,6 +31,8 @@ elif [ "${shortname}" == "jk2" ]; then update_jk2.sh elif [ "${shortname}" == "vints" ]; then update_vints.sh +elif [ "${shortname}" == "bb" ]; then + update_bb.sh elif [ "${shortname}" == "ut99" ]; then update_ut99.sh elif [ "${shortname}" == "xnt" ]; then diff --git a/lgsm/modules/core_dl.sh b/lgsm/modules/core_dl.sh index 4730c0cff..c3194a915 100755 --- a/lgsm/modules/core_dl.sh +++ b/lgsm/modules/core_dl.sh @@ -139,6 +139,12 @@ fn_dl_steamcmd() { fn_print_failure_nl "${commandaction} ${selfname}: ${remotelocation}: Not enough disk space to download server files" fn_script_log_fail "${commandaction} ${selfname}: ${remotelocation}: Not enough disk space to download server files" core_exit.sh + # Invalid platform for app/update request. + elif [ -n "$(grep -i "Invalid platform" "${steamcmdlog}" | tail -1)" ]; then + fn_print_failure_nl "${commandaction} ${selfname}: ${remotelocation}: Invalid platform for AppID ${appid}" + fn_print_nl "Check steamcmdforcewindows setting and system architecture (x86_64 required for most servers)" + fn_script_log_fail "${commandaction} ${selfname}: ${remotelocation}: Invalid platform for AppID ${appid}" + core_exit.sh # Need tp purchase game. elif [ -n "$(grep "No subscription" "${steamcmdlog}" | tail -1)" ]; then fn_print_failure_nl "${commandaction} ${selfname}: ${remotelocation}: Steam account does not have a license for the required game" diff --git a/lgsm/modules/core_modules.sh b/lgsm/modules/core_modules.sh index 10d408449..ce1a6f6d4 100755 --- a/lgsm/modules/core_modules.sh +++ b/lgsm/modules/core_modules.sh @@ -710,6 +710,11 @@ update_ut99.sh() { fn_fetch_module } +update_bb.sh() { + modulefile="${FUNCNAME[0]}" + fn_fetch_module +} + update_vints.sh() { modulefile="${FUNCNAME[0]}" fn_fetch_module diff --git a/lgsm/modules/core_steamcmd.sh b/lgsm/modules/core_steamcmd.sh index d265f577d..463a1f7da 100755 --- a/lgsm/modules/core_steamcmd.sh +++ b/lgsm/modules/core_steamcmd.sh @@ -427,4 +427,21 @@ fn_check_steamcmd_appmanifest() { fn_dl_steamcmd fi fi + + # GoldSrc can occasionally report success while core HL1 files are incomplete. + if [ "${engine}" == "goldsrc" ]; then + if [ ! -f "${serverfiles}/hlds_run" ] || [ ! -f "${serverfiles}/engine_i486.so" ] || [ ! -d "${serverfiles}/valve" ]; then + fn_print_error_nl "Core HL1 files missing after GoldSrc update" + fn_script_log_error "Core HL1 files missing after GoldSrc update" + fn_print_info_nl "Forcing update to correct issue" + fn_script_log_info "Forcing update to correct issue" + fn_dl_steamcmd + + if [ ! -f "${serverfiles}/hlds_run" ] || [ ! -f "${serverfiles}/engine_i486.so" ] || [ ! -d "${serverfiles}/valve" ]; then + fn_print_fail_nl "Core HL1 files are still missing after retry" + fn_script_log_fail "Core HL1 files are still missing after retry" + core_exit.sh + fi + fi + fi } diff --git a/lgsm/modules/install_server_files.sh b/lgsm/modules/install_server_files.sh index 8a993b45c..e5f10739d 100755 --- a/lgsm/modules/install_server_files.sh +++ b/lgsm/modules/install_server_files.sh @@ -32,14 +32,7 @@ fn_install_server_files() { run="norun" force="noforce" md5="e3b4962cdd9d41e23c6fed65101bccde" - elif [ "${shortname}" == "bb" ]; then - remote_fileurl="http://linuxgsm.download/BrainBread/brainbread-v1.2-linuxserver.tar.xz" - local_filedir="${tmpdir}" - local_filename="brainbread-v1.2-linuxserver.tar.xz" - chmodx="nochmodx" - run="norun" - force="noforce" - md5="55f227183b736397806d5b6db6143f15" + elif [ "${shortname}" == "cod" ]; then remote_fileurl="http://linuxgsm.download/CallOfDuty/cod-lnxded-1.5b-full.tar.xz" local_filedir="${tmpdir}" @@ -267,6 +260,8 @@ elif [ "${shortname}" == "jk2" ]; then update_jk2.sh elif [ "${shortname}" == "vints" ]; then update_vints.sh +elif [ "${shortname}" == "bb" ]; then + update_bb.sh elif [ "${shortname}" == "ut99" ]; then fn_install_server_files update_ut99.sh @@ -274,7 +269,7 @@ elif [ "${shortname}" == "xnt" ]; then update_xnt.sh elif [ "${shortname}" == "etl" ]; then update_etl.sh -elif [ -z "${appid}" ] || [ "${shortname}" == "ahl" ] || [ "${shortname}" == "bb" ] || [ "${shortname}" == "q4" ] || [ "${shortname}" == "ns" ] || [ "${shortname}" == "sfc" ] || [ "${shortname}" == "ts" ] || [ "${shortname}" == "vs" ] || [ "${shortname}" == "zmr" ]; then +elif [ -z "${appid}" ] || [ "${shortname}" == "ahl" ] || [ "${shortname}" == "q4" ] || [ "${shortname}" == "ns" ] || [ "${shortname}" == "sfc" ] || [ "${shortname}" == "ts" ] || [ "${shortname}" == "vs" ] || [ "${shortname}" == "zmr" ]; then if [ "${shortname}" == "ut" ]; then install_eula.sh fi diff --git a/lgsm/modules/update_bb.sh b/lgsm/modules/update_bb.sh new file mode 100644 index 000000000..1f2f12ce8 --- /dev/null +++ b/lgsm/modules/update_bb.sh @@ -0,0 +1,175 @@ +#!/bin/bash +# LinuxGSM update_bb.sh module +# Author: Daniel Gibbs +# Contributors: https://linuxgsm.com/contrib +# Website: https://linuxgsm.com +# Description: Handles updating of BrainBread servers. + +moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" + +fn_update_dl() { + # Download and extract files to serverfiles. + fn_fetch_file "${remotebuildurl}" "" "" "" "${tmpdir}" "${remotebuildfilename}" "nochmodx" "norun" "force" "${remotebuildhash}" + fn_dl_extract "${tmpdir}" "${remotebuildfilename}" "${serverfiles}" + echo "${remotebuild}" > "${serverfiles}/build.txt" + fn_clear_tmp +} + +fn_update_localbuild() { + # Gets local build info. + fn_print_dots "Checking local build: ${remotelocation}" + # Uses build file to get local build. + localbuild=$(head -n 1 "${serverfiles}/build.txt" 2> /dev/null) + if [ -z "${localbuild}" ]; then + fn_print_error "Checking local build: ${remotelocation}: missing local build info" + fn_script_log_error "Missing local build info" + fn_script_log_error "Set localbuild to 0" + localbuild="0" + else + fn_print_ok "Checking local build: ${remotelocation}" + fn_script_log_pass "Checking local build" + fi +} + +fn_update_remotebuild() { + # Gets remote build info. + apiurl="https://api.github.com/repos/IronOak-Studios/BrainBread/releases/latest" + remotebuildresponse=$(curl -s "${apiurl}") + remotebuildfilename=$(echo "${remotebuildresponse}" | jq -r '.assets[] | select(.name | test("linuxserver\\.tar\\.gz$")) | .name' | head -n 1) + remotebuildurl=$(echo "${remotebuildresponse}" | jq -r '.assets[] | select(.name | test("linuxserver\\.tar\\.gz$")) | .browser_download_url' | head -n 1) + remotebuildhash=$(echo "${remotebuildresponse}" | jq -r '.assets[] | select(.name | test("linuxserver\\.tar\\.gz$")) | .digest' | sed 's/^sha256://g' | head -n 1) + remotebuild=$(echo "${remotebuildresponse}" | jq -r '.tag_name') + if [ -z "${remotebuildhash}" ] || [ "${remotebuildhash}" == "null" ]; then + remotebuildhash="nohash" + fi + + if [ "${firstcommandname}" != "INSTALL" ]; then + fn_print_dots "Checking remote build: ${remotelocation}" + # Checks if remotebuild variable has been set. + if [ -z "${remotebuild}" ] || [ "${remotebuild}" == "null" ] || [ -z "${remotebuildurl}" ] || [ "${remotebuildurl}" == "null" ] || [ -z "${remotebuildfilename}" ] || [ "${remotebuildfilename}" == "null" ]; then + fn_print_fail "Checking remote build: ${remotelocation}" + fn_script_log_fail "Checking remote build" + core_exit.sh + else + fn_print_ok "Checking remote build: ${remotelocation}" + fn_script_log_pass "Checking remote build" + fi + else + # Checks if remotebuild variable has been set. + if [ -z "${remotebuild}" ] || [ "${remotebuild}" == "null" ] || [ -z "${remotebuildurl}" ] || [ "${remotebuildurl}" == "null" ] || [ -z "${remotebuildfilename}" ] || [ "${remotebuildfilename}" == "null" ]; then + fn_print_failure "Unable to get remote build" + fn_script_log_fail "Unable to get remote build" + core_exit.sh + fi + fi +} + +fn_update_compare() { + fn_print_dots "Checking for update: ${remotelocation}" + # Update has been found or force update. + if [ "${localbuild}" != "${remotebuild}" ] || [ "${forceupdate}" == "1" ]; then + # Create update lockfile. + date '+%s' > "${lockdir:?}/update.lock" + fn_print_ok_nl "Checking for update: ${remotelocation}" + fn_print "\n" + fn_print_nl "${bold}${underline}Update${default} available" + fn_print_nl "* Local build: ${red}${localbuild}${default}" + fn_print_nl "* Remote build: ${green}${remotebuild}${default}" + if [ -n "${branch}" ]; then + fn_print_nl "* Branch: ${branch}" + fi + if [ -f "${rootdir}/.dev-debug" ]; then + fn_print_nl "Remote build info" + fn_print_nl "* apiurl: ${apiurl}" + fn_print_nl "* remotebuildfilename: ${remotebuildfilename}" + fn_print_nl "* remotebuildurl: ${remotebuildurl}" + fn_print_nl "* remotebuildhash: ${remotebuildhash}" + fn_print_nl "* remotebuild: ${remotebuild}" + fi + fn_print "\n" + fn_script_log_info "Update available" + fn_script_log_info "Local build: ${localbuild}" + fn_script_log_info "Remote build: ${remotebuild}" + if [ -n "${branch}" ]; then + fn_script_log_info "Branch: ${branch}" + fi + fn_script_log_info "${localbuild} > ${remotebuild}" + + if [ "${commandname}" == "UPDATE" ]; then + date +%s > "${lockdir:?}/last-updated.lock" + unset updateonstart + check_status.sh + # If server stopped. + if [ "${status}" == "0" ]; then + fn_update_dl + if [ "${localbuild}" == "0" ]; then + exitbypass=1 + command_start.sh + fn_firstcommand_reset + exitbypass=1 + fn_sleep_time_5 + command_stop.sh + fn_firstcommand_reset + fi + # If server started. + else + fn_print_restart_warning + exitbypass=1 + command_stop.sh + fn_firstcommand_reset + exitbypass=1 + fn_update_dl + exitbypass=1 + command_start.sh + fn_firstcommand_reset + fi + unset exitbypass + alert="update" + elif [ "${commandname}" == "CHECK-UPDATE" ]; then + alert="check-update" + fi + alert.sh + else + fn_print_ok_nl "Checking for update: ${remotelocation}" + fn_print "\n" + fn_print_nl "${bold}${underline}No update${default} available" + fn_print_nl "* Local build: ${green}${localbuild}${default}" + fn_print_nl "* Remote build: ${green}${remotebuild}${default}" + if [ -n "${branch}" ]; then + fn_print_nl "* Branch: ${branch}" + fi + fn_print "\n" + fn_script_log_info "No update available" + fn_script_log_info "Local build: ${localbuild}" + fn_script_log_info "Remote build: ${remotebuild}" + if [ -n "${branch}" ]; then + fn_script_log_info "Branch: ${branch}" + fi + if [ -f "${rootdir}/.dev-debug" ]; then + fn_print_nl "Remote build info" + fn_print_nl "* apiurl: ${apiurl}" + fn_print_nl "* remotebuildfilename: ${remotebuildfilename}" + fn_print_nl "* remotebuildurl: ${remotebuildurl}" + fn_print_nl "* remotebuildhash: ${remotebuildhash}" + fn_print_nl "* remotebuild: ${remotebuild}" + fi + fi +} + +# The location where the builds are checked and downloaded. +remotelocation="github.com" + +if [ "${firstcommandname}" == "INSTALL" ]; then + fn_update_remotebuild + fn_update_dl +else + # BrainBread requires both Steam app updates and GitHub package updates. + update_steamcmd.sh + + fn_print_dots "Checking for update" + fn_print_dots "Checking for update: ${remotelocation}" + fn_script_log_info "Checking for update: ${remotelocation}" + fn_update_localbuild + fn_update_remotebuild + fn_update_compare +fi From 946cd6fa44c6ac00dd621ee1a846a681189c779b Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sat, 2 May 2026 17:30:15 +0100 Subject: [PATCH 19/44] fix(deps): update .NET runtime version for Vintage Story (#4913) * 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. --- lgsm/data/debian-12.csv | 2 +- lgsm/data/debian-13.csv | 2 +- lgsm/data/ubuntu-24.04.csv | 2 +- lgsm/data/ubuntu-26.04.csv | 2 +- lgsm/modules/check_deps.sh | 38 ++++++++++++++++++++++++++++++-------- 5 files changed, 34 insertions(+), 12 deletions(-) diff --git a/lgsm/data/debian-12.csv b/lgsm/data/debian-12.csv index 2da22f88c..40e325b6c 100644 --- a/lgsm/data/debian-12.csv +++ b/lgsm/data/debian-12.csv @@ -130,7 +130,7 @@ ut2k4 ut3 ut99 vh,libc6-dev,libatomic1,libpulse-dev -vints,dotnet-runtime-8.0 +vints,dotnet-runtime-10.0 vpmc,openjdk-17-jre vs wet diff --git a/lgsm/data/debian-13.csv b/lgsm/data/debian-13.csv index 401cf281c..d53dfb44f 100644 --- a/lgsm/data/debian-13.csv +++ b/lgsm/data/debian-13.csv @@ -130,7 +130,7 @@ ut2k4 ut3 ut99 vh,libc6-dev,libatomic1,libpulse-dev -vints,dotnet-runtime-8.0 +vints,dotnet-runtime-10.0 vpmc,openjdk-25-jre vs wet diff --git a/lgsm/data/ubuntu-24.04.csv b/lgsm/data/ubuntu-24.04.csv index ac683d5d3..0e010abd6 100644 --- a/lgsm/data/ubuntu-24.04.csv +++ b/lgsm/data/ubuntu-24.04.csv @@ -130,7 +130,7 @@ ut2k4 ut3 ut99 vh,libc6-dev,libatomic1,libpulse-dev -vints,dotnet-runtime-8.0 +vints,dotnet-runtime-10.0 vpmc,openjdk-25-jre vs wet diff --git a/lgsm/data/ubuntu-26.04.csv b/lgsm/data/ubuntu-26.04.csv index ac683d5d3..0e010abd6 100644 --- a/lgsm/data/ubuntu-26.04.csv +++ b/lgsm/data/ubuntu-26.04.csv @@ -130,7 +130,7 @@ ut2k4 ut3 ut99 vh,libc6-dev,libatomic1,libpulse-dev -vints,dotnet-runtime-8.0 +vints,dotnet-runtime-10.0 vpmc,openjdk-25-jre vs wet diff --git a/lgsm/modules/check_deps.sh b/lgsm/modules/check_deps.sh index 3d4109e2c..e4bcad4be 100755 --- a/lgsm/modules/check_deps.sh +++ b/lgsm/modules/check_deps.sh @@ -8,15 +8,28 @@ moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" fn_install_dotnet_repo() { + local dotnetpackage + dotnetpackage="dotnet-runtime-7.0" + + for dep in "${array_deps_missing[@]}"; do + if [[ "${dep}" == dotnet-runtime-* ]]; then + dotnetpackage="${dep}" + break + fi + done + if [ "${distroid}" == "ubuntu" ]; then - # if package dotnet-runtime-7.0 is unavailable in ubuntu repos, add the microsoft repo. - if ! apt-cache show dotnet-runtime-7.0 > /dev/null 2>&1; then + # If the required .NET package is unavailable in Ubuntu repos, add the Microsoft repo. + if ! apt-cache show "${dotnetpackage}" > /dev/null 2>&1; then fn_fetch_file "https://packages.microsoft.com/config/ubuntu/${distroversion}/packages-microsoft-prod.deb" "" "" "" "/tmp" "packages-microsoft-prod.deb" "" "" "" "" sudo dpkg -i /tmp/packages-microsoft-prod.deb fi elif [ "${distroid}" == "debian" ]; then - fn_fetch_file "https://packages.microsoft.com/config/debian/${distroversion}/packages-microsoft-prod.deb" "" "" "" "/tmp" "packages-microsoft-prod.deb" "" "" "" "" - sudo dpkg -i /tmp/packages-microsoft-prod.deb + # If the required .NET package is unavailable in Debian repos, add the Microsoft repo. + if ! apt-cache show "${dotnetpackage}" > /dev/null 2>&1; then + fn_fetch_file "https://packages.microsoft.com/config/debian/${distroversion}/packages-microsoft-prod.deb" "" "" "" "/tmp" "packages-microsoft-prod.deb" "" "" "" "" + sudo dpkg -i /tmp/packages-microsoft-prod.deb + fi fi } @@ -281,10 +294,10 @@ fn_deps_detector() { depstatus=1 monoinstalled=false fi - # .NET Core: A .NET Core repo needs to be installed. - elif [ "${deptocheck}" == "dotnet-runtime-7.0" ]; then - # .NET is not installed. - if dotnet --list-runtimes | grep -q "Microsoft.NETCore.App 7.0"; then + # .NET runtime: check installed runtime version for any dotnet-runtime-X.Y package. + elif [[ "${deptocheck}" =~ ^dotnet-runtime-([0-9]+\.[0-9]+)$ ]]; then + dotnetrequired="${BASH_REMATCH[1]}" + if [ "$(command -v dotnet 2> /dev/null)" ] && dotnet --list-runtimes | grep -q "Microsoft.NETCore.App ${dotnetrequired}"; then depstatus=0 dotnetinstalled=true else @@ -379,6 +392,15 @@ if { [ "${distroid}" == "ubuntu" ] && dpkg --compare-versions "${distroversion}" fi fi +# Vintage Story tracks newer .NET runtimes; older distro releases may not ship required packages. +if [ "${shortname}" == "vints" ]; then + if { [ "${distroid}" == "ubuntu" ] && dpkg --compare-versions "${distroversion}" "lt" "24.04"; } || { [ "${distroid}" == "debian" ] && dpkg --compare-versions "${distroversion}" "lt" "12"; } || [ "${distroid}" == "centos" ] || [ "${distroid}" == "rhel" ] || [ "${distroid}" == "rocky" ] || [ "${distroid}" == "almalinux" ]; then + fn_print_warning_nl "${gamename} may require newer .NET runtimes than ${distroname} provides." + echo -e "If startup fails due to missing .NET runtime, upgrading to Ubuntu 24.04+ or Debian 12+ is recommended." + fn_script_log_warn "${gamename} may require newer .NET runtimes than ${distroname} provides." + fi +fi + if [ ! -f "${tmpdir}/dependency-no-check.tmp" ] && [ ! -f "${datadir}/${distroid}-${distroversioncsv}.csv" ]; then # Check that the distro dependency csv file exists. fn_check_file_github "lgsm/data" "${distroid}-${distroversioncsv}.csv" From 9f278c692fec3de2d7f58258e416dbc9078c9ae0 Mon Sep 17 00:00:00 2001 From: Jacob Gerega <22921310+jgerega107@users.noreply.github.com> Date: Sat, 2 May 2026 13:53:38 -0400 Subject: [PATCH 20/44] feat(newserver): Jabroni Brawl: Episode 3 (#4702) * Added jbep3server * fix(jbep3): add distro deps entries and game icon * fix(jbep3): bootstrap config from server.sample.cfg * chore(prettier): format code --------- Co-authored-by: Daniel Gibbs Co-authored-by: dgibbs64 --- .devcontainer/devcontainer.json | 56 +++++++++---------- .prettierrc.json | 2 +- .vscode/extensions.json | 20 +++---- .../config-lgsm/jbep3server/_default.cfg | 2 +- lgsm/modules/install_config.sh | 3 + 5 files changed, 43 insertions(+), 40 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 506b50754..32c844ac7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,30 +1,30 @@ { - "name": "BASH Dev Container", - "image": "mcr.microsoft.com/devcontainers/base:ubuntu", - "features": { - "ghcr.io/devcontainers-community/npm-features/prettier:1": { - "plugins": "prettier-plugin-sh" - }, - "ghcr.io/devcontainers-extra/features/actionlint:1": {}, - "ghcr.io/devcontainers-extra/features/checkov:1": {}, - "ghcr.io/devcontainers-extra/features/markdownlint-cli:1": {}, - "ghcr.io/devcontainers-extra/features/shellcheck:1": {}, - "ghcr.io/devcontainers-extra/features/yamllint:2": {}, - "ghcr.io/devcontainers/features/github-cli:1": {} - }, - "customizations": { - "vscode": { - "extensions": [ - "DavidAnson.vscode-markdownlint", - "editorconfig.editorconfig", - "esbenp.prettier-vscode", - "github.vscode-github-actions", - "GitHub.vscode-pull-request-github", - "redhat.vscode-yaml", - "timonwong.shellcheck", - "yzhang.markdown-all-in-one" - ] - } - }, - "postCreateCommand": "npm init -y >/dev/null 2>&1 || true && npm install --no-save prettier prettier-plugin-sh prettier-plugin-jinja-template" + "name": "BASH Dev Container", + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "ghcr.io/devcontainers-community/npm-features/prettier:1": { + "plugins": "prettier-plugin-sh" + }, + "ghcr.io/devcontainers-extra/features/actionlint:1": {}, + "ghcr.io/devcontainers-extra/features/checkov:1": {}, + "ghcr.io/devcontainers-extra/features/markdownlint-cli:1": {}, + "ghcr.io/devcontainers-extra/features/shellcheck:1": {}, + "ghcr.io/devcontainers-extra/features/yamllint:2": {}, + "ghcr.io/devcontainers/features/github-cli:1": {} + }, + "customizations": { + "vscode": { + "extensions": [ + "DavidAnson.vscode-markdownlint", + "editorconfig.editorconfig", + "esbenp.prettier-vscode", + "github.vscode-github-actions", + "GitHub.vscode-pull-request-github", + "redhat.vscode-yaml", + "timonwong.shellcheck", + "yzhang.markdown-all-in-one" + ] + } + }, + "postCreateCommand": "npm init -y >/dev/null 2>&1 || true && npm install --no-save prettier prettier-plugin-sh prettier-plugin-jinja-template" } diff --git a/.prettierrc.json b/.prettierrc.json index 02d542d50..1902f8021 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,3 +1,3 @@ { - "plugins": ["prettier-plugin-sh"] + "plugins": ["prettier-plugin-sh"] } diff --git a/.vscode/extensions.json b/.vscode/extensions.json index d31b65dd2..5c06a83bf 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,12 +1,12 @@ { - "recommendations": [ - "DavidAnson.vscode-markdownlint", - "editorconfig.editorconfig", - "esbenp.prettier-vscode", - "github.vscode-github-actions", - "GitHub.vscode-pull-request-github", - "redhat.vscode-yaml", - "timonwong.shellcheck", - "yzhang.markdown-all-in-one" - ] + "recommendations": [ + "DavidAnson.vscode-markdownlint", + "editorconfig.editorconfig", + "esbenp.prettier-vscode", + "github.vscode-github-actions", + "GitHub.vscode-pull-request-github", + "redhat.vscode-yaml", + "timonwong.shellcheck", + "yzhang.markdown-all-in-one" + ] } diff --git a/lgsm/config-default/config-lgsm/jbep3server/_default.cfg b/lgsm/config-default/config-lgsm/jbep3server/_default.cfg index 2036d3522..069c423db 100644 --- a/lgsm/config-default/config-lgsm/jbep3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/jbep3server/_default.cfg @@ -173,7 +173,7 @@ executabledir="${serverfiles}" executable="./srcds_run.sh" servercfgdir="${systemdir}/cfg" servercfg="${selfname}.cfg" -servercfgdefault="server.cfg" +servercfgdefault="server.sample.cfg" servercfgfullpath="${servercfgdir}/${servercfg}" ## Backup Directory diff --git a/lgsm/modules/install_config.sh b/lgsm/modules/install_config.sh index 08f21c913..e25b8de5c 100755 --- a/lgsm/modules/install_config.sh +++ b/lgsm/modules/install_config.sh @@ -530,6 +530,9 @@ elif [ "${shortname}" == "ios" ]; then fn_default_config_remote fn_set_config_vars fn_list_config_locations +elif [ "${shortname}" == "jbep3" ]; then + fn_default_config_local + fn_list_config_locations elif [ "${shortname}" == "jc2" ]; then array_configs+=(config.lua) fn_default_config_remote From f9905881a945310b8d5425f341b55bfcf7c8030a Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 01:52:46 +0100 Subject: [PATCH 21/44] chore: add AI issue triage workflow and structured-field label rules (#4915) - 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 --- .../instructions/pr-review.instructions.md | 29 +++ .github/labeler.yml | 86 ++++++- .github/scripts/sync-game-labels.sh | 87 +++++++ .github/workflows/ai-triage.yml | 229 ++++++++++++++++++ .github/workflows/labeler.yml | 32 ++- .github/workflows/sync-game-labels.yml | 28 +++ 6 files changed, 475 insertions(+), 16 deletions(-) create mode 100644 .github/instructions/pr-review.instructions.md create mode 100644 .github/scripts/sync-game-labels.sh create mode 100644 .github/workflows/ai-triage.yml create mode 100644 .github/workflows/sync-game-labels.yml diff --git a/.github/instructions/pr-review.instructions.md b/.github/instructions/pr-review.instructions.md new file mode 100644 index 000000000..9d0d8fef2 --- /dev/null +++ b/.github/instructions/pr-review.instructions.md @@ -0,0 +1,29 @@ +--- +title: "LinuxGSM PR Review Guidance" +applyTo: "**" +description: "Use when reviewing pull requests in LinuxGSM; prioritize regressions, behavior changes, shell safety, and missing tests over style-only feedback." +--- + +Focus review effort on correctness and operational safety first. + +Primary priorities: + +- Identify behavior regressions and compatibility risks. +- Flag unsafe shell patterns (`rm -rf`, unquoted vars, unchecked command failures). +- Verify workflow changes do not weaken permissions or secret handling. +- Check for missing tests/validation when logic changes. +- Confirm labels, templates, and automation rules stay internally consistent. + +Feedback expectations: + +- Give concrete, actionable findings with file and reason. +- Prefer high-signal issues over style nits. +- If no defects are found, state that clearly and mention residual risk areas. +- Suggest minimal, low-risk fixes before proposing broad refactors. + +LinuxGSM-specific checks: + +- Shell scripts should preserve robust defaults (`set -euo pipefail` where appropriate). +- Label/workflow updates should avoid duplicate or stale taxonomy. +- Automation should fail safe (log and continue for advisory AI; block on true CI errors). +- Keep issue/PR automation rules aligned with templates and existing labels. diff --git a/.github/labeler.yml b/.github/labeler.yml index 34ffd66f1..efca99286 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -69,7 +69,7 @@ "game: Ballistic Overkill": - "/(Ballistic Overkill)/i" "game: BATTALION: Legacy": - - "/(BATTALION: Legacy)/i" + - "/(BATTALION: Legacy|Battalion 1944)/i" "game: Barotrauma": - "/(Barotrauma)/i" "game: Counter-Strike: Global Offensive": @@ -77,21 +77,27 @@ "game: Counter-Strike 2": - "/(Counter-Strike 2|CS2)/i" "game: Counter-Strike: Source": - - "/(Counter-Strike: Source|CS:S)/i" + - "/(Counter-Strike: Source|Counter Strike: Source|CS:S)/i" "game: Counter-Strike 1.6": - "/(Counter-Strike 1.6|Counter Strike 1.6|CS 1.6|cs1.6)/i" -"game: Dayz": - - "/(Dayz)/i" +"game: DayZ": + - "/(DayZ|Dayz)/i" +"game: Deathmatch Classic": + - "/(Deathmatch Classic|Death Match Classic|DMC)/i" "game: Don't Starve Together": - "/(Don't Starve Together|Dont Starve Together|DST)/i" "game: Eco": - "/(^Eco$)/i" "game: Factorio": - "/(Factorio)/i" -"game: Garry's Mod": +"game: Garrys Mod": - "/(Garry's Mod|Garrys Mod|GMod)/i" +"game: Hurtworld": + - "/(Hurtworld|Hurtword)/i" +"game: Insurgency": + - "/(^Insurgency$|Insurgecy)/i" "game: Insurgency: Sandstorm": - - "/(Insurgency: Sandstorm|Insurgency)/i" + - "/(Insurgency: Sandstorm)/i" "game: Killing Floor 2": - "/(Killing Floor 2|KF2)/i" "game: Left 4 Dead 2": @@ -100,18 +106,20 @@ - "/(Minecraft)((?!bedrock).)*$/i" "game: Minecraft Bedrock": - "/(Bedrock)/i" -"game: Mumble": - - "/(Mumble)/i" "game: Project Zomboid": - "/(Project Zomboid|PZ)/i" -"game: Quake 3": - - "/(Quake 3|Q3A|q3)/i" +"game: Quake 3: Arena": + - "/(Quake 3: Arena|Quake 3|Q3A|q3)/i" +"game: Quake World": + - "/(Quake World|QuakeWorld)/i" "game: Rising World": - "/(Rising World)/i" "game: Satisfactory": - "/(Satisfactory)/i" "game: Squad": - "/(Squad)/i" +"game: Squad 44": + - "/(Squad 44|Post Scriptum)/i" "game: Starbound": - "/(Starbound)/i" "game: Stationeers": @@ -120,6 +128,8 @@ - "/(Teamspeak 3|ts3)/i" "game: Rust": - "/(Rust)/i" +"game: Soldier Of Fortune 2: Gold Edition": + - "/(Soldier Of Fortune 2: Gold Edition|Soldier of Fortune 2)/i" "game: Unturned": - "/(Unturned)/i" "game: Unreal Tournament 99": @@ -130,6 +140,8 @@ - "/(Unreal Tournament 3|ut3)/i" "game: Valheim": - "/(Valheim)/i" +"game: Zombie Master: Reborn": + - "/(Zombie Master: Reborn|Zombie Master Reborn)/i" # Info "info: alerts": @@ -157,6 +169,54 @@ "type: game server request": - "/(Server Request)/i" "type: bug": - - "/(bug)/i" -"type: feature request": - - "/(feature)/i" + - "/(\\[bug\\]|bug report|type: bug)/i" +"type: bugfix": + - "/(^fix(\\(.+\\))?:|\\[x\\] Bug fix)/im" +"type: feature": + - "/(feature request|new feature|^feat(\\(.+\\))?:|\\[x\\] New feature)/im" +"type: docs": + - "/(^docs(\\(.+\\))?:|documentation|\\[x\\] Comment update)/im" +"type: refactor": + - "/(^refactor(\\(.+\\))?:|\\[x\\] Refactor)/im" +"type: chore": + - "/(^chore(\\(.+\\))?:|^ci(\\(.+\\))?:)/im" + +# Severity (bug reports) +"severity: low": + - "/(severity: low)/i" +"severity: medium": + - "/(severity: medium)/i" +"severity: high": + - "/(severity: high)/i" +"severity: critical": + - "/(severity: critical)/i" + +# Reproducibility (bug reports) +"reproducible: always": + - "/(reproducible: always)/i" +"reproducible: sometimes": + - "/(reproducible: sometimes)/i" +"reproducible: unable": + - "/(reproducible: unable)/i" + +# Regression (bug reports) +"regression: yes": + - "/(regression: yes)/i" + +# Priority (feature requests) +"priority: low": + - "/(priority: low)/i" +"priority: medium": + - "/(priority: medium)/i" +"priority: high": + - "/(priority: high)/i" + +# Scope (feature requests) +"scope: single game": + - "/(scope: single game)/i" +"scope: multiple games": + - "/(scope: multiple games)/i" +"scope: all servers": + - "/(scope: all servers)/i" +"scope: documentation": + - "/(scope: documentation)/i" diff --git a/.github/scripts/sync-game-labels.sh b/.github/scripts/sync-game-labels.sh new file mode 100644 index 000000000..737ec5b74 --- /dev/null +++ b/.github/scripts/sync-game-labels.sh @@ -0,0 +1,87 @@ +#!/usr/bin/env bash +# sync-game-labels.sh +# Reads lgsm/data/serverlist.csv and ensures a "game: " label exists in +# the GitHub repo for every unique game name. Safe to run multiple times. +# +# Requires: gh CLI authenticated with issues:write scope. +# Usage: .github/scripts/sync-game-labels.sh [OWNER/REPO] +# +# The OWNER/REPO argument is optional; if omitted gh uses the current repo. + +set -euo pipefail + +REPO="${1:-}" +SERVERLIST="lgsm/data/serverlist.csv" +LABEL_COLOR="5b21b6" +LABEL_PREFIX="game: " + +normalize_label() { + printf '%s' "$1" | tr '[:upper:]' '[:lower:]' +} + +if [[ ! -f "${SERVERLIST}" ]]; then + echo "ERROR: ${SERVERLIST} not found. Run from the repository root." + exit 1 +fi + +declare -A EXISTING_COLORS=() +declare -A EXISTING_DESCRIPTIONS=() +declare -A EXISTING_NAMES=() + +# Fetch all existing game label metadata once (up to 1000) and cache locally. +echo "Fetching existing labels..." +while IFS=$'\t' read -r NAME COLOR DESCRIPTION; do + [[ -n "${NAME}" ]] || continue + EXISTING_COLORS["${NAME}"]="${COLOR}" + EXISTING_DESCRIPTIONS["${NAME}"]="${DESCRIPTION}" + EXISTING_NAMES["$(normalize_label "${NAME}")"]="${NAME}" +done < <( + gh label list --limit 1000 --json name,color,description ${REPO:+--repo "$REPO"} \ + | jq -r '.[] | select(.name | startswith("game: ")) | [.name, .color, (.description // "")] | @tsv' +) + +# Parse unique game names from the CSV (column 3, skip header). +mapfile -t GAMES < <( + tail -n +2 "${SERVERLIST}" \ + | cut -d',' -f3 \ + | sort -u +) + +CREATED=0 +UPDATED=0 +UNCHANGED=0 + +for GAME in "${GAMES[@]}"; do + LABEL="${LABEL_PREFIX}${GAME}" + DESCRIPTION="Issues related to ${GAME}" + NORMALIZED_LABEL="$(normalize_label "${LABEL}")" + + if [[ -v EXISTING_NAMES["${NORMALIZED_LABEL}"] ]]; then + CURRENT_LABEL="${EXISTING_NAMES["${NORMALIZED_LABEL}"]}" + CURRENT_COLOR="${EXISTING_COLORS["${CURRENT_LABEL}"]}" + CURRENT_DESCRIPTION="${EXISTING_DESCRIPTIONS["${CURRENT_LABEL}"]}" + + if [[ "${CURRENT_LABEL}" != "${LABEL}" || "${CURRENT_COLOR}" != "${LABEL_COLOR}" || "${CURRENT_DESCRIPTION}" != "${DESCRIPTION}" ]]; then + echo " update ${LABEL}" + gh label edit "${CURRENT_LABEL}" \ + --name "${LABEL}" \ + --color "${LABEL_COLOR}" \ + --description "${DESCRIPTION}" \ + ${REPO:+--repo "$REPO"} + (( UPDATED++ )) || true + else + echo " ok ${LABEL}" + (( UNCHANGED++ )) || true + fi + else + echo " create ${LABEL}" + gh label create "${LABEL}" \ + --color "${LABEL_COLOR}" \ + --description "${DESCRIPTION}" \ + ${REPO:+--repo "$REPO"} + (( CREATED++ )) || true + fi +done + +echo "" +echo "Done. Created: ${CREATED} Updated: ${UPDATED} Unchanged: ${UNCHANGED}" diff --git a/.github/workflows/ai-triage.yml b/.github/workflows/ai-triage.yml new file mode 100644 index 000000000..b48762749 --- /dev/null +++ b/.github/workflows/ai-triage.yml @@ -0,0 +1,229 @@ +name: AI Issue Triage +on: + issues: + types: + - opened + - edited + +permissions: + issues: write + contents: read + +jobs: + ai-triage: + if: github.repository_owner == 'GameServerManagers' + runs-on: ubuntu-latest + steps: + - name: Triage issue with GitHub Models + uses: actions/github-script@v7 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + script: | + const title = context.payload.issue.title || ''; + const body = context.payload.issue.body || ''; + const number = context.payload.issue.number; + const owner = context.repo.owner; + const repo = context.repo.repo; + const AI_MARKER = ''; + + function parseTriageResponse(raw) { + const input = (raw || '').trim(); + if (!input) return {}; + + const candidates = [input]; + const fenced = input.match(/```(?:json)?\s*([\s\S]*?)```/i); + if (fenced?.[1]) candidates.push(fenced[1].trim()); + + const firstBrace = input.indexOf('{'); + const lastBrace = input.lastIndexOf('}'); + if (firstBrace !== -1 && lastBrace > firstBrace) { + candidates.push(input.slice(firstBrace, lastBrace + 1)); + } + + for (const candidate of candidates) { + try { + return JSON.parse(candidate); + } catch (_err) { + // Continue trying fallbacks. + } + } + + return {}; + } + + // For short bodies, apply "needs: more info" label directly. + // Skip the AI call but still label the issue. + const isShortBody = body.trim().length < 80; + if (isShortBody) { + try { + await github.rest.issues.addLabels({ + owner, repo, issue_number: number, + labels: ['needs: more info'], + }); + } catch (err) { + console.log('Could not apply label for short body:', err.message); + } + return; + } + + // ── Call GitHub Models ──────────────────────────────────────── + let triage; + try { + const res = await fetch( + 'https://models.inference.ai.azure.com/chat/completions', + { + method: 'POST', + headers: { + 'Authorization': `Bearer ${process.env.GITHUB_TOKEN}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + model: 'gpt-4o-mini', + temperature: 0.1, + max_tokens: 400, + messages: [ + { + role: 'system', + content: + 'You are a triage assistant for LinuxGSM, an open-source ' + + 'Linux game server manager. Your role is to:\n' + + '1. Analyze issue quality (completeness, clarity)\n' + + '2. Extract game names mentioned in the issue, even if misspelled or abbreviated\n' + + '3. Suggest corrections for likely typos using fuzzy matching\n' + + '4. Respond ONLY with a valid JSON object — no markdown fences.\n\n' + + 'Common game name variations and typos you should recognize:\n' + + '- "Valhiem" → "Valheim"\n' + + '- "Rrust" → "Rust"\n' + + '- "Conterstrike" / "CS" / "CSGO" → "Counter-Strike: Global Offensive"\n' + + '- "Garrys" / "GMod" → "Garrys Mod"\n' + + '- "ARK" / "Ark" → "ARK: Survival Evolved"\n' + + '- "DayZ" / "Dayz" → "DayZ"\n' + + '- "Insurgency Sandstorm" / "Insurgency 2" → "Insurgency: Sandstorm"', + }, + { + role: 'user', + content: + `Title: ${title}\n\nBody:\n${body.slice(0, 3000)}\n\n` + + 'Respond with this JSON schema:\n' + + '{\n' + + ' "quality": "good" | "ok" | "poor",\n' + + ' "missing_info": ["list of specific missing fields"],\n' + + ' "detected_game": "canonical game name if one is mentioned, or null",\n' + + ' "game_confidence": "high" | "medium" | "low" | null,\n' + + ' "game_note": "correction suggestion if the user misspelled a game name, or empty string",\n' + + ' "comment": "one or two sentence note to the reporter, or empty string"\n' + + '}', + }, + ], + }), + } + ); + + if (!res.ok) { + console.log(`GitHub Models returned ${res.status} — skipping AI triage.`); + return; + } + + const data = await res.json(); + const raw = data.choices?.[0]?.message?.content || '{}'; + triage = parseTriageResponse(raw); + } catch (err) { + // Never fail the workflow if the AI call errors — it's advisory only. + console.log('AI triage skipped:', err.message); + return; + } + + if (!triage || typeof triage !== 'object') { + triage = {}; + } + + // ── Act on the result ──────────────────────────────────────── + const isPoor = triage.quality === 'poor'; + const missing = Array.isArray(triage.missing_info) ? triage.missing_info : []; + const hasIssues = isPoor || missing.length > 0; + + // Prepare labels to apply + const labelsToApply = []; + + // Check if a game was detected with high confidence + const detectedGame = triage.detected_game; + const gameConfidence = triage.game_confidence; + + if (detectedGame && gameConfidence === 'high') { + labelsToApply.push(`game: ${detectedGame}`); + } + + // Apply "needs: more info" label if quality issues detected + if (hasIssues) { + labelsToApply.push('needs: more info'); + } + + // Apply labels one-by-one so a single failure does not block all labels. + const uniqueLabels = [...new Set(labelsToApply)]; + for (const label of uniqueLabels) { + try { + await github.rest.issues.addLabels({ + owner, + repo, + issue_number: number, + labels: [label], + }); + } catch (err) { + console.log(`Could not apply label "${label}":`, err.message); + } + } + + // Post a comment only when there is something specific to say + const gameNote = triage.game_note || ''; + const reporterComment = triage.comment || ''; + + if (!hasIssues && !gameNote) return; + + const missingBlock = missing.length > 0 + ? `\n\n**Missing information:**\n${missing.map(m => `- ${m}`).join('\n')}` + : ''; + + const gameBlock = gameNote + ? `\n\n**Game name note:** ${gameNote}` + : ''; + + const triageCommentBody = + `${AI_MARKER}\n` + + `Thanks for opening this issue! 👋\n\n` + + `${reporterComment}` + + `${missingBlock}` + + `${gameBlock}\n\n` + + `_This note was generated automatically by AI triage and may not be perfect. ` + + `A maintainer will review shortly._`; + + try { + const comments = await github.rest.issues.listComments({ + owner, + repo, + issue_number: number, + per_page: 100, + }); + + const existingAiComment = comments.data.find( + (comment) => comment.user?.type === 'Bot' && comment.body?.includes(AI_MARKER) + ); + + if (existingAiComment) { + await github.rest.issues.updateComment({ + owner, + repo, + comment_id: existingAiComment.id, + body: triageCommentBody, + }); + } else { + await github.rest.issues.createComment({ + owner, + repo, + issue_number: number, + body: triageCommentBody, + }); + } + } catch (err) { + console.log('Could not post comment:', err.message); + } diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 4a946a861..91b7372a6 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -4,14 +4,24 @@ on: types: - opened - edited + pull_request: + types: + - opened + - edited + - synchronize + - reopened permissions: issues: write + pull-requests: write contents: read +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" + jobs: issue-labeler: - if: github.repository_owner == 'GameServerManagers' + if: github.repository_owner == 'GameServerManagers' && github.event_name == 'issues' runs-on: ubuntu-latest steps: - name: Issue Labeler @@ -21,12 +31,28 @@ jobs: configuration-path: .github/labeler.yml enable-versioned-regex: 0 include-title: 1 + sync-labels: 1 + + pr-labeler: + if: github.repository_owner == 'GameServerManagers' && github.event_name == 'pull_request' + runs-on: ubuntu-latest + steps: + - name: PR Labeler + uses: github/issue-labeler@v3.4 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + configuration-path: .github/labeler.yml + enable-versioned-regex: 0 + include-title: 1 + include-body: 0 + sync-labels: 1 is-sponsor-label: - if: github.repository_owner == 'GameServerManagers' + if: github.repository_owner == 'GameServerManagers' && github.event_name == 'issues' runs-on: ubuntu-latest steps: - name: Is Sponsor Label - uses: JasonEtco/is-sponsor-label-action@v2 + if: github.event.action == 'opened' + uses: JasonEtco/is-sponsor-label-action@v3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/sync-game-labels.yml b/.github/workflows/sync-game-labels.yml new file mode 100644 index 000000000..eccb0ed46 --- /dev/null +++ b/.github/workflows/sync-game-labels.yml @@ -0,0 +1,28 @@ +name: Sync Game Labels +on: + push: + branches: + - master + - develop + paths: + - "lgsm/data/serverlist.csv" + workflow_dispatch: {} + +permissions: + issues: write + contents: read + +jobs: + sync-game-labels: + if: github.repository_owner == 'GameServerManagers' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Sync game labels from serverlist + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + chmod +x .github/scripts/sync-game-labels.sh + .github/scripts/sync-game-labels.sh From f0ce2737aeb3ad38e647ce5c059a986a3797a2ab Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 01:53:14 +0100 Subject: [PATCH 22/44] chore: update issue templates, PR template, and CoC (#4914) - bug_report: add expected/actual behavior fields, script name, pre-check checkbox, required steps to reproduce, and AI triage metadata (severity, reproducibility, regression, affects-latest) - feature_request: add priority field, problem statement, scope/impact, alternatives considered; make command optional; remove irrelevant bug-specific triage fields - server_request: add dedicated server checkbox, official docs and Linux binary proof fields; fix CoC placeholder URL; remove irrelevant bug/feature triage fields - config.yml: add private security reporting contact link - pull_request_template: add testing, risk/rollback, breaking changes, and documentation impact sections - CODE_OF_CONDUCT: upgrade from Contributor Covenant v2.1 to v3.0; fill reporting placeholders with GitHub advisory and Discord links --- .github/ISSUE_TEMPLATE/bug_report.yml | 81 ++++++- .github/ISSUE_TEMPLATE/config.yml | 3 + .github/ISSUE_TEMPLATE/feature_request.yml | 42 +++- .github/ISSUE_TEMPLATE/server_request.yml | 38 ++- .github/pull_request_template.md | 28 ++- CODE_OF_CONDUCT.md | 263 ++++++++++++--------- 6 files changed, 327 insertions(+), 128 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e9f2d000b..cbf5f2662 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -8,6 +8,51 @@ body: attributes: value: | Thanks for taking the time to fill out this bug report! + - type: dropdown + id: severity + attributes: + label: Severity + description: Triage metadata used for prioritization. + options: + - "severity: low" + - "severity: medium" + - "severity: high" + - "severity: critical" + validations: + required: true + - type: dropdown + id: reproducibility + attributes: + label: Reproducibility + description: Triage metadata used for prioritization. + options: + - "reproducible: always" + - "reproducible: sometimes" + - "reproducible: unable" + validations: + required: true + - type: dropdown + id: regression + attributes: + label: Regression + description: Triage metadata used for prioritization. + options: + - "regression: yes" + - "regression: no" + - "regression: unknown" + validations: + required: true + - type: dropdown + id: affects-latest + attributes: + label: Affects latest release + description: Triage metadata used for prioritization. + options: + - "latest-release: yes" + - "latest-release: no" + - "latest-release: unknown" + validations: + required: true - type: input id: user-story attributes: @@ -16,6 +61,14 @@ body: placeholder: As a [user description], I want [desired action] so that [desired outcome]. validations: required: true + - type: input + id: script-name + attributes: + label: Script name + description: LinuxGSM script name in use. + placeholder: vhserver + validations: + required: true - type: input id: game attributes: @@ -66,6 +119,22 @@ body: - "command: send" validations: required: true + - type: textarea + id: expected-behavior + attributes: + label: Expected behavior + description: What should happen? + placeholder: Describe the expected result. + validations: + required: true + - type: textarea + id: actual-behavior + attributes: + label: Actual behavior + description: What actually happens? + placeholder: Describe the observed result. + validations: + required: true - type: textarea id: further-info attributes: @@ -74,11 +143,19 @@ body: placeholder: Tell us what you see! validations: required: true + - type: checkboxes + id: prechecks + attributes: + label: Pre-checks + description: Confirm standard troubleshooting has been completed. + options: + - label: I ran update and validate before reporting this issue. + required: true - type: textarea id: logs attributes: label: Relevant log output - description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + description: Include the exact command used and the full related output (debug/details if available). This will be automatically formatted into code. render: shell - type: textarea id: steps @@ -90,3 +167,5 @@ body: 2. Click on '....' 3. Scroll down to '....' 4. See error + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index d2113c6ca..f9eb19b0c 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -6,3 +6,6 @@ contact_links: - name: Discord Server about: Join the LinuxGSM Discord community server. Discuss your LinuxGSM setup, get help and advice url: https://linuxgsm.com/discord + - name: Report a security vulnerability + about: Please report security vulnerabilities privately, not in public issues. + url: https://github.com/GameServerManagers/LinuxGSM/security/advisories/new diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index f1a8ccaf6..67d7508e1 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -8,6 +8,17 @@ body: attributes: value: | Thanks for taking the time to fill out this feature request! + - type: dropdown + id: priority + attributes: + label: Priority + description: How important is this feature to you? + options: + - "priority: low" + - "priority: medium" + - "priority: high" + validations: + required: true - type: input id: user-story attributes: @@ -64,12 +75,41 @@ body: - "command: update-lgsm" - "command: wipe" - "command: send" + validations: + required: false + - type: textarea + id: problem-statement + attributes: + label: Problem statement + description: What is painful today, and why is this needed? + placeholder: Describe the current limitation or pain point. + validations: + required: true + - type: dropdown + id: scope-impact + attributes: + label: Scope and impact + description: Which area would this change impact? + options: + - "scope: single game" + - "scope: multiple games" + - "scope: all servers" + - "scope: documentation only" + - "scope: ci/cd or automation" + - "scope: other" validations: required: true - type: textarea id: further-info attributes: label: Further information - description: A clear description of what the feature is and any ideas on how to achieve this. + description: A clear description of the proposed solution and any implementation ideas. validations: required: true + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: Describe alternatives or workarounds you considered. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/server_request.yml b/.github/ISSUE_TEMPLATE/server_request.yml index 31dbc6b81..849bcaa21 100644 --- a/.github/ISSUE_TEMPLATE/server_request.yml +++ b/.github/ISSUE_TEMPLATE/server_request.yml @@ -7,7 +7,7 @@ body: - type: markdown attributes: value: | - Thanks for taking the time to fill out this game server! + Thanks for taking the time to fill out this game server request! - type: input id: game-server attributes: @@ -15,11 +15,19 @@ body: description: What game server would you like to add? validations: required: true + - type: checkboxes + id: dedicated-server + attributes: + label: Dedicated server + description: Confirm this is a dedicated server request and not client hosting. + options: + - label: "Yes, this is a dedicated server (not client hosting)." + required: true - type: checkboxes id: on-linux attributes: label: Linux support - description: Does this game server have Linux support? (not wine) + description: Does this game server have native Linux server support? (not wine) options: - label: "Yes" validations: @@ -38,20 +46,40 @@ body: id: steam-id attributes: label: Steam appid - description: What is the Steam appid of the game server? Use SteamDB to get the appid. (https://steamdb.info). + description: What is the Steam appid of the dedicated server? Required when Steam is Yes. Use SteamDB to get the appid (https://steamdb.info). placeholder: "892970" validations: required: false + - type: textarea + id: official-docs + attributes: + label: Official dedicated server documentation + description: Provide official documentation links for installing/running the dedicated server. + placeholder: | + https://example.com/docs/server-setup + https://example.com/docs/dedicated-server + validations: + required: true + - type: textarea + id: linux-binary-proof + attributes: + label: Linux binary proof + description: Provide evidence that Linux server binaries are available (official docs/download links/version notes). + placeholder: | + https://example.com/downloads/linux-dedicated-server + https://example.com/release-notes/linux-server + validations: + required: true - type: textarea id: guides attributes: label: Guides - description: Links to guides on how to install the game server + description: Links to community or third-party guides on how to install the game server. - type: checkboxes id: terms attributes: label: Code of Conduct - description: By submitting this issue, you agree to follow our [Code of Conduct](https://example.com) + description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/GameServerManagers/LinuxGSM/blob/master/CODE_OF_CONDUCT.md) options: - label: I agree to follow this project's Code of Conduct required: true diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 9f6864e57..d95b4278e 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -12,18 +12,40 @@ Fixes #[issue] - [ ] Refactor (restructures existing code). - [ ] Comment update (typo, spelling, explanation, examples, etc). +## Testing + +Please list the exact validation you performed and the outcome. + +- Commands/tests run: +- Result: +- Environment used (distro/version): + +## Risk and rollback + +- Risk level: low / medium / high +- Rollback plan: + +## 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 PR will not be merged until all steps are complete. - [ ] This pull request links to an issue. -- [ ] This pull request uses the `develop` branch as its base. +- [ ] 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 checked that this code is commented where required. - [ ] I have provided a detailed enough description of this PR. -- [ ] I have checked if documentation needs updating. ## Documentation diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index fb935a066..4b118cd09 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -2,131 +2,158 @@ ## Our Pledge -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, caste, color, religion, or sexual identity -and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -- Demonstrating empathy and kindness toward other people -- Being respectful of differing opinions, viewpoints, and experiences -- Giving and gracefully accepting constructive feedback -- Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -- Focusing on what is best not just for us as individuals, but for the - overall community - -Examples of unacceptable behavior include: - -- The use of sexualized language or imagery, and sexual attention or - advances of any kind -- Trolling, insulting or derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or email - address, without their explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. +We pledge to make our community welcoming, safe, and equitable for all. + +We are committed to fostering an environment that respects and promotes the +dignity, rights, and contributions of all individuals, regardless of characteristics +including race, ethnicity, caste, color, age, physical characteristics, +neurodiversity, disability, sex or gender, gender identity or expression, sexual +orientation, language, philosophy or religion, national or social origin, +socio-economic position, level of education, or other status. The same privileges of +participation are extended to everyone who participates in good faith and in +accordance with this Covenant. + +## Encouraged Behaviors + +While acknowledging differences in social norms, we all strive to meet our +community's expectations for positive behavior. We also understand that our words +and actions may be interpreted differently than we intend based on culture, +background, or native language. + +With these considerations in mind, we agree to behave mindfully toward each other +and act in ways that center our shared values, including: + +1. Respecting the **purpose of our community**, our activities, and our ways of gathering. +2. Engaging **kindly and honestly** with others. +3. Respecting **different viewpoints** and experiences. +4. **Taking responsibility** for our actions and contributions. +5. Gracefully giving and accepting **constructive feedback**. +6. Committing to **repairing harm** when it occurs. +7. Behaving in other ways that promote and sustain the **well-being of our community**. + +## Restricted Behaviors + +We agree to restrict the following behaviors in our community. Instances, +threats, and promotion of these behaviors are violations of this Code of Conduct. + +1. **Harassment.** Violating explicitly expressed boundaries or engaging in + unnecessary personal attention after any clear request to stop. +2. **Character attacks.** Making insulting, demeaning, or pejorative comments + directed at a community member or group of people. +3. **Stereotyping or discrimination.** Characterizing anyone's personality or + behavior on the basis of immutable identities or traits. +4. **Sexualization.** Behaving in a way that would generally be considered + inappropriately intimate in the context or purpose of the community. +5. **Violating confidentiality.** Sharing or acting on someone's personal or + private information without their permission. +6. **Endangerment.** Causing, encouraging, or threatening violence or other harm + toward any person or group. +7. Behaving in other ways that **threaten the well-being** of our community. + +### Other Restrictions + +1. **Misleading identity.** Impersonating someone else for any reason, or + pretending to be someone else to evade enforcement actions. +2. **Failing to credit sources.** Not properly crediting the sources of content + you contribute. +3. **Promotional materials.** Sharing marketing or other commercial content in a + way that is outside the norms of the community. +4. **Irresponsible communication.** Failing to responsibly present content which + includes, links or describes any other restricted behaviors. + +## Reporting an Issue + +Tensions can occur between community members even when they are trying their best +to collaborate. Not every conflict represents a code of conduct violation, and this +Code of Conduct reinforces encouraged behaviors and norms that can help avoid +conflicts and minimize harm. + +When an incident does occur, it is important to report it promptly. To report a +possible violation, please use one of the following methods: + +- **GitHub (private):** [Submit a private security advisory](https://github.com/GameServerManagers/LinuxGSM/security/advisories/new) +- **Discord:** Contact a moderator via the [LinuxGSM Discord server](https://linuxgsm.com/discord) + +Community Moderators take reports of violations seriously and will make every +effort to respond in a timely manner. They will investigate all reports of code of +conduct violations, reviewing messages, logs, and recordings, or interviewing +witnesses and other participants. Community Moderators will keep investigation and +enforcement actions as transparent as possible while prioritizing safety and +confidentiality. In order to honor these values, enforcement actions are carried out +in private with the involved parties, but communicating to the whole community may +be part of a mutually agreed upon resolution. + +## Addressing and Repairing Harm + +If an investigation by the Community Moderators finds that this Code of Conduct +has been violated, the following enforcement ladder may be used to determine how +best to repair harm, based on the incident's impact on the individuals involved +and the community as a whole. Depending on the severity of a violation, lower +rungs on the ladder may be skipped. + +1. **Warning** + 1. Event: A violation involving a single incident or series of incidents. + 2. Consequence: A private, written warning from the Community Moderators. + 3. Repair: Examples of repair include a private written apology, acknowledgement + of responsibility, and seeking clarification on expectations. + +2. **Temporarily Limited Activities** + 1. Event: A repeated incidence of a violation that previously resulted in a + warning, or the first incidence of a more serious violation. + 2. Consequence: A private, written warning with a time-limited cooldown period + designed to underscore the seriousness of the situation and give the community + members involved time to process the incident. The cooldown period may be + limited to particular communication channels or interactions with particular + community members. + 3. Repair: Examples of repair may include making an apology, using the cooldown + period to reflect on actions and impact, and being thoughtful about + re-entering community spaces after the period is over. + +3. **Temporary Suspension** + 1. Event: A pattern of repeated violation which the Community Moderators have + tried to address with warnings, or a single serious violation. + 2. Consequence: A private written warning with conditions for return from + suspension. In general, temporary suspensions give the person being suspended + time to reflect upon their behavior and possible corrective actions. + 3. Repair: Examples of repair include respecting the spirit of the suspension, + meeting the specified conditions for return, and being thoughtful about how to + reintegrate with the community when the suspension is lifted. + +4. **Permanent Ban** + 1. Event: A pattern of repeated code of conduct violations that other steps on + the ladder have failed to resolve, or a violation so serious that the Community + Moderators determine there is no way to keep the community safe with this + person as a member. + 2. Consequence: Access to all community spaces, tools, and communication channels + is removed. In general, permanent bans should be rarely used, should have + strong reasoning behind them, and should only be resorted to if working through + other remedies has failed to change the behavior. + 3. Repair: There is no possible repair in cases of this severity. + +This enforcement ladder is intended as a guideline. It does not limit the ability +of Community Moderators to use their discretion and judgment, in keeping with the +best interests of our community. ## Scope -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, +This Code of Conduct applies within all community spaces, and also applies when an +individual is officially representing the community in public or other spaces. +Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at -[INSERT CONTACT METHOD]. -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series -of actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or -permanent ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within -the community. - ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.1, available at -[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. - -Community Impact Guidelines were inspired by -[Mozilla's code of conduct enforcement ladder][mozilla coc]. +This Code of Conduct is adapted from the Contributor Covenant, version 3.0, +permanently available at . -For answers to common questions about this code of conduct, see the FAQ at -[https://www.contributor-covenant.org/faq][faq]. Translations are available -at [https://www.contributor-covenant.org/translations][translations]. +Contributor Covenant is stewarded by the Organization for Ethical Source and +licensed under CC BY-SA 4.0. To view a copy of this license, visit +. -[homepage]: https://www.contributor-covenant.org -[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html -[mozilla coc]: https://github.com/mozilla/diversity -[faq]: https://www.contributor-covenant.org/faq -[translations]: https://www.contributor-covenant.org/translations +For answers to common questions about Contributor Covenant, see the FAQ at +. Translations are provided at +. Additional enforcement and +community guideline resources can be found at +. The enforcement ladder was +inspired by the work of [Mozilla's code of conduct team](https://github.com/mozilla/inclusion). From 46fa6954441c2ecc3e791969b4c0c8b226eb534c Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 01:00:24 +0000 Subject: [PATCH 23/44] fix: use is-sponsor-label-action v2 (v3 does not exist) 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. --- .github/workflows/labeler.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 91b7372a6..f1e47bc50 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -53,6 +53,6 @@ jobs: steps: - name: Is Sponsor Label if: github.event.action == 'opened' - uses: JasonEtco/is-sponsor-label-action@v3 + uses: JasonEtco/is-sponsor-label-action@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From a183369e5568e7febc13fa10b609f8a3933e5b10 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 01:05:00 +0000 Subject: [PATCH 24/44] fix: remove AI triage workflow 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. --- .github/workflows/ai-triage.yml | 229 -------------------------------- 1 file changed, 229 deletions(-) delete mode 100644 .github/workflows/ai-triage.yml diff --git a/.github/workflows/ai-triage.yml b/.github/workflows/ai-triage.yml deleted file mode 100644 index b48762749..000000000 --- a/.github/workflows/ai-triage.yml +++ /dev/null @@ -1,229 +0,0 @@ -name: AI Issue Triage -on: - issues: - types: - - opened - - edited - -permissions: - issues: write - contents: read - -jobs: - ai-triage: - if: github.repository_owner == 'GameServerManagers' - runs-on: ubuntu-latest - steps: - - name: Triage issue with GitHub Models - uses: actions/github-script@v7 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - script: | - const title = context.payload.issue.title || ''; - const body = context.payload.issue.body || ''; - const number = context.payload.issue.number; - const owner = context.repo.owner; - const repo = context.repo.repo; - const AI_MARKER = ''; - - function parseTriageResponse(raw) { - const input = (raw || '').trim(); - if (!input) return {}; - - const candidates = [input]; - const fenced = input.match(/```(?:json)?\s*([\s\S]*?)```/i); - if (fenced?.[1]) candidates.push(fenced[1].trim()); - - const firstBrace = input.indexOf('{'); - const lastBrace = input.lastIndexOf('}'); - if (firstBrace !== -1 && lastBrace > firstBrace) { - candidates.push(input.slice(firstBrace, lastBrace + 1)); - } - - for (const candidate of candidates) { - try { - return JSON.parse(candidate); - } catch (_err) { - // Continue trying fallbacks. - } - } - - return {}; - } - - // For short bodies, apply "needs: more info" label directly. - // Skip the AI call but still label the issue. - const isShortBody = body.trim().length < 80; - if (isShortBody) { - try { - await github.rest.issues.addLabels({ - owner, repo, issue_number: number, - labels: ['needs: more info'], - }); - } catch (err) { - console.log('Could not apply label for short body:', err.message); - } - return; - } - - // ── Call GitHub Models ──────────────────────────────────────── - let triage; - try { - const res = await fetch( - 'https://models.inference.ai.azure.com/chat/completions', - { - method: 'POST', - headers: { - 'Authorization': `Bearer ${process.env.GITHUB_TOKEN}`, - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - model: 'gpt-4o-mini', - temperature: 0.1, - max_tokens: 400, - messages: [ - { - role: 'system', - content: - 'You are a triage assistant for LinuxGSM, an open-source ' + - 'Linux game server manager. Your role is to:\n' + - '1. Analyze issue quality (completeness, clarity)\n' + - '2. Extract game names mentioned in the issue, even if misspelled or abbreviated\n' + - '3. Suggest corrections for likely typos using fuzzy matching\n' + - '4. Respond ONLY with a valid JSON object — no markdown fences.\n\n' + - 'Common game name variations and typos you should recognize:\n' + - '- "Valhiem" → "Valheim"\n' + - '- "Rrust" → "Rust"\n' + - '- "Conterstrike" / "CS" / "CSGO" → "Counter-Strike: Global Offensive"\n' + - '- "Garrys" / "GMod" → "Garrys Mod"\n' + - '- "ARK" / "Ark" → "ARK: Survival Evolved"\n' + - '- "DayZ" / "Dayz" → "DayZ"\n' + - '- "Insurgency Sandstorm" / "Insurgency 2" → "Insurgency: Sandstorm"', - }, - { - role: 'user', - content: - `Title: ${title}\n\nBody:\n${body.slice(0, 3000)}\n\n` + - 'Respond with this JSON schema:\n' + - '{\n' + - ' "quality": "good" | "ok" | "poor",\n' + - ' "missing_info": ["list of specific missing fields"],\n' + - ' "detected_game": "canonical game name if one is mentioned, or null",\n' + - ' "game_confidence": "high" | "medium" | "low" | null,\n' + - ' "game_note": "correction suggestion if the user misspelled a game name, or empty string",\n' + - ' "comment": "one or two sentence note to the reporter, or empty string"\n' + - '}', - }, - ], - }), - } - ); - - if (!res.ok) { - console.log(`GitHub Models returned ${res.status} — skipping AI triage.`); - return; - } - - const data = await res.json(); - const raw = data.choices?.[0]?.message?.content || '{}'; - triage = parseTriageResponse(raw); - } catch (err) { - // Never fail the workflow if the AI call errors — it's advisory only. - console.log('AI triage skipped:', err.message); - return; - } - - if (!triage || typeof triage !== 'object') { - triage = {}; - } - - // ── Act on the result ──────────────────────────────────────── - const isPoor = triage.quality === 'poor'; - const missing = Array.isArray(triage.missing_info) ? triage.missing_info : []; - const hasIssues = isPoor || missing.length > 0; - - // Prepare labels to apply - const labelsToApply = []; - - // Check if a game was detected with high confidence - const detectedGame = triage.detected_game; - const gameConfidence = triage.game_confidence; - - if (detectedGame && gameConfidence === 'high') { - labelsToApply.push(`game: ${detectedGame}`); - } - - // Apply "needs: more info" label if quality issues detected - if (hasIssues) { - labelsToApply.push('needs: more info'); - } - - // Apply labels one-by-one so a single failure does not block all labels. - const uniqueLabels = [...new Set(labelsToApply)]; - for (const label of uniqueLabels) { - try { - await github.rest.issues.addLabels({ - owner, - repo, - issue_number: number, - labels: [label], - }); - } catch (err) { - console.log(`Could not apply label "${label}":`, err.message); - } - } - - // Post a comment only when there is something specific to say - const gameNote = triage.game_note || ''; - const reporterComment = triage.comment || ''; - - if (!hasIssues && !gameNote) return; - - const missingBlock = missing.length > 0 - ? `\n\n**Missing information:**\n${missing.map(m => `- ${m}`).join('\n')}` - : ''; - - const gameBlock = gameNote - ? `\n\n**Game name note:** ${gameNote}` - : ''; - - const triageCommentBody = - `${AI_MARKER}\n` + - `Thanks for opening this issue! 👋\n\n` + - `${reporterComment}` + - `${missingBlock}` + - `${gameBlock}\n\n` + - `_This note was generated automatically by AI triage and may not be perfect. ` + - `A maintainer will review shortly._`; - - try { - const comments = await github.rest.issues.listComments({ - owner, - repo, - issue_number: number, - per_page: 100, - }); - - const existingAiComment = comments.data.find( - (comment) => comment.user?.type === 'Bot' && comment.body?.includes(AI_MARKER) - ); - - if (existingAiComment) { - await github.rest.issues.updateComment({ - owner, - repo, - comment_id: existingAiComment.id, - body: triageCommentBody, - }); - } else { - await github.rest.issues.createComment({ - owner, - repo, - issue_number: number, - body: triageCommentBody, - }); - } - } catch (err) { - console.log('Could not post comment:', err.message); - } From 418f46f8779e0d37e2073778955df64814718ecf Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 01:05:05 +0000 Subject: [PATCH 25/44] Revert "fix: remove AI triage workflow" This reverts commit a183369e5568e7febc13fa10b609f8a3933e5b10. --- .github/workflows/ai-triage.yml | 229 ++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 .github/workflows/ai-triage.yml diff --git a/.github/workflows/ai-triage.yml b/.github/workflows/ai-triage.yml new file mode 100644 index 000000000..b48762749 --- /dev/null +++ b/.github/workflows/ai-triage.yml @@ -0,0 +1,229 @@ +name: AI Issue Triage +on: + issues: + types: + - opened + - edited + +permissions: + issues: write + contents: read + +jobs: + ai-triage: + if: github.repository_owner == 'GameServerManagers' + runs-on: ubuntu-latest + steps: + - name: Triage issue with GitHub Models + uses: actions/github-script@v7 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + script: | + const title = context.payload.issue.title || ''; + const body = context.payload.issue.body || ''; + const number = context.payload.issue.number; + const owner = context.repo.owner; + const repo = context.repo.repo; + const AI_MARKER = ''; + + function parseTriageResponse(raw) { + const input = (raw || '').trim(); + if (!input) return {}; + + const candidates = [input]; + const fenced = input.match(/```(?:json)?\s*([\s\S]*?)```/i); + if (fenced?.[1]) candidates.push(fenced[1].trim()); + + const firstBrace = input.indexOf('{'); + const lastBrace = input.lastIndexOf('}'); + if (firstBrace !== -1 && lastBrace > firstBrace) { + candidates.push(input.slice(firstBrace, lastBrace + 1)); + } + + for (const candidate of candidates) { + try { + return JSON.parse(candidate); + } catch (_err) { + // Continue trying fallbacks. + } + } + + return {}; + } + + // For short bodies, apply "needs: more info" label directly. + // Skip the AI call but still label the issue. + const isShortBody = body.trim().length < 80; + if (isShortBody) { + try { + await github.rest.issues.addLabels({ + owner, repo, issue_number: number, + labels: ['needs: more info'], + }); + } catch (err) { + console.log('Could not apply label for short body:', err.message); + } + return; + } + + // ── Call GitHub Models ──────────────────────────────────────── + let triage; + try { + const res = await fetch( + 'https://models.inference.ai.azure.com/chat/completions', + { + method: 'POST', + headers: { + 'Authorization': `Bearer ${process.env.GITHUB_TOKEN}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + model: 'gpt-4o-mini', + temperature: 0.1, + max_tokens: 400, + messages: [ + { + role: 'system', + content: + 'You are a triage assistant for LinuxGSM, an open-source ' + + 'Linux game server manager. Your role is to:\n' + + '1. Analyze issue quality (completeness, clarity)\n' + + '2. Extract game names mentioned in the issue, even if misspelled or abbreviated\n' + + '3. Suggest corrections for likely typos using fuzzy matching\n' + + '4. Respond ONLY with a valid JSON object — no markdown fences.\n\n' + + 'Common game name variations and typos you should recognize:\n' + + '- "Valhiem" → "Valheim"\n' + + '- "Rrust" → "Rust"\n' + + '- "Conterstrike" / "CS" / "CSGO" → "Counter-Strike: Global Offensive"\n' + + '- "Garrys" / "GMod" → "Garrys Mod"\n' + + '- "ARK" / "Ark" → "ARK: Survival Evolved"\n' + + '- "DayZ" / "Dayz" → "DayZ"\n' + + '- "Insurgency Sandstorm" / "Insurgency 2" → "Insurgency: Sandstorm"', + }, + { + role: 'user', + content: + `Title: ${title}\n\nBody:\n${body.slice(0, 3000)}\n\n` + + 'Respond with this JSON schema:\n' + + '{\n' + + ' "quality": "good" | "ok" | "poor",\n' + + ' "missing_info": ["list of specific missing fields"],\n' + + ' "detected_game": "canonical game name if one is mentioned, or null",\n' + + ' "game_confidence": "high" | "medium" | "low" | null,\n' + + ' "game_note": "correction suggestion if the user misspelled a game name, or empty string",\n' + + ' "comment": "one or two sentence note to the reporter, or empty string"\n' + + '}', + }, + ], + }), + } + ); + + if (!res.ok) { + console.log(`GitHub Models returned ${res.status} — skipping AI triage.`); + return; + } + + const data = await res.json(); + const raw = data.choices?.[0]?.message?.content || '{}'; + triage = parseTriageResponse(raw); + } catch (err) { + // Never fail the workflow if the AI call errors — it's advisory only. + console.log('AI triage skipped:', err.message); + return; + } + + if (!triage || typeof triage !== 'object') { + triage = {}; + } + + // ── Act on the result ──────────────────────────────────────── + const isPoor = triage.quality === 'poor'; + const missing = Array.isArray(triage.missing_info) ? triage.missing_info : []; + const hasIssues = isPoor || missing.length > 0; + + // Prepare labels to apply + const labelsToApply = []; + + // Check if a game was detected with high confidence + const detectedGame = triage.detected_game; + const gameConfidence = triage.game_confidence; + + if (detectedGame && gameConfidence === 'high') { + labelsToApply.push(`game: ${detectedGame}`); + } + + // Apply "needs: more info" label if quality issues detected + if (hasIssues) { + labelsToApply.push('needs: more info'); + } + + // Apply labels one-by-one so a single failure does not block all labels. + const uniqueLabels = [...new Set(labelsToApply)]; + for (const label of uniqueLabels) { + try { + await github.rest.issues.addLabels({ + owner, + repo, + issue_number: number, + labels: [label], + }); + } catch (err) { + console.log(`Could not apply label "${label}":`, err.message); + } + } + + // Post a comment only when there is something specific to say + const gameNote = triage.game_note || ''; + const reporterComment = triage.comment || ''; + + if (!hasIssues && !gameNote) return; + + const missingBlock = missing.length > 0 + ? `\n\n**Missing information:**\n${missing.map(m => `- ${m}`).join('\n')}` + : ''; + + const gameBlock = gameNote + ? `\n\n**Game name note:** ${gameNote}` + : ''; + + const triageCommentBody = + `${AI_MARKER}\n` + + `Thanks for opening this issue! 👋\n\n` + + `${reporterComment}` + + `${missingBlock}` + + `${gameBlock}\n\n` + + `_This note was generated automatically by AI triage and may not be perfect. ` + + `A maintainer will review shortly._`; + + try { + const comments = await github.rest.issues.listComments({ + owner, + repo, + issue_number: number, + per_page: 100, + }); + + const existingAiComment = comments.data.find( + (comment) => comment.user?.type === 'Bot' && comment.body?.includes(AI_MARKER) + ); + + if (existingAiComment) { + await github.rest.issues.updateComment({ + owner, + repo, + comment_id: existingAiComment.id, + body: triageCommentBody, + }); + } else { + await github.rest.issues.createComment({ + owner, + repo, + issue_number: number, + body: triageCommentBody, + }); + } + } catch (err) { + console.log('Could not post comment:', err.message); + } From f9b722b45564b9721a728e5fb5d6d022186cff9a Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 01:05:35 +0000 Subject: [PATCH 26/44] docs: clarify GitHub Models availability in AI triage workflow 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. --- .github/workflows/ai-triage.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/ai-triage.yml b/.github/workflows/ai-triage.yml index b48762749..59e109601 100644 --- a/.github/workflows/ai-triage.yml +++ b/.github/workflows/ai-triage.yml @@ -5,6 +5,11 @@ on: - opened - edited +# Note: This workflow uses GitHub Models which may not be available +# in all environments. If GitHub Models API returns 401 or is unavailable, +# the workflow will skip gracefully and the issue will still be processed +# by other automation (labeler, etc.) + permissions: issues: write contents: read @@ -68,6 +73,10 @@ jobs: } // ── Call GitHub Models ──────────────────────────────────────── + // Note: GitHub Models access may not be available in all environments. + // If the API returns 401 (Unauthorized), it means GitHub Models is not + // enabled for this repository or the current token lacks access. + // The workflow will gracefully skip AI triage and continue. let triage; try { const res = await fetch( @@ -120,6 +129,8 @@ jobs: } ); + // GitHub Models may return 401 if not available for this repository. + // This is expected and not an error — the workflow simply skips AI triage. if (!res.ok) { console.log(`GitHub Models returned ${res.status} — skipping AI triage.`); return; From 095b8ddf36e0107ee41cc4d73d1f165f07dab961 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 01:10:08 +0000 Subject: [PATCH 27/44] fix(ai-triage): grant models permission to GITHUB_TOKEN --- .github/workflows/ai-triage.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ai-triage.yml b/.github/workflows/ai-triage.yml index 59e109601..145571cf4 100644 --- a/.github/workflows/ai-triage.yml +++ b/.github/workflows/ai-triage.yml @@ -13,6 +13,7 @@ on: permissions: issues: write contents: read + models: read jobs: ai-triage: From 479211f22fe2b8c04ff87b2bcd5c7a2641525e47 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 01:17:18 +0000 Subject: [PATCH 28/44] fix(ai-triage): use GitHub Models REST inference endpoint --- .github/workflows/ai-triage.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ai-triage.yml b/.github/workflows/ai-triage.yml index 145571cf4..fba1e4cf1 100644 --- a/.github/workflows/ai-triage.yml +++ b/.github/workflows/ai-triage.yml @@ -81,15 +81,17 @@ jobs: let triage; try { const res = await fetch( - 'https://models.inference.ai.azure.com/chat/completions', + `https://models.github.ai/orgs/${owner}/inference/chat/completions`, { method: 'POST', headers: { + 'Accept': 'application/vnd.github+json', 'Authorization': `Bearer ${process.env.GITHUB_TOKEN}`, + 'X-GitHub-Api-Version': '2026-03-10', 'Content-Type': 'application/json', }, body: JSON.stringify({ - model: 'gpt-4o-mini', + model: 'openai/gpt-4.1-mini', temperature: 0.1, max_tokens: 400, messages: [ From a6af3c9773e10dd3d17ce84d463f210f171d09c8 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 01:21:11 +0000 Subject: [PATCH 29/44] chore(actions): tidy workflows and script layout --- .../details-check-generate-matrix.sh | 0 .../serverlist-validate-game-icons.sh | 0 .../serverlist-validate.sh | 16 ---------- .../{workflows => scripts}/version-check.sh | 0 ...update-copyright-years-in-license-file.yml | 29 ------------------- .github/workflows/details-check.yml | 2 +- .github/workflows/serverlist-validate.yml | 4 +-- .github/workflows/version-check.yml | 2 +- 8 files changed, 4 insertions(+), 49 deletions(-) rename .github/{workflows => scripts}/details-check-generate-matrix.sh (100%) rename .github/{workflows => scripts}/serverlist-validate-game-icons.sh (100%) rename .github/{workflows => scripts}/serverlist-validate.sh (60%) rename .github/{workflows => scripts}/version-check.sh (100%) delete mode 100644 .github/workflows/action-update-copyright-years-in-license-file.yml diff --git a/.github/workflows/details-check-generate-matrix.sh b/.github/scripts/details-check-generate-matrix.sh similarity index 100% rename from .github/workflows/details-check-generate-matrix.sh rename to .github/scripts/details-check-generate-matrix.sh diff --git a/.github/workflows/serverlist-validate-game-icons.sh b/.github/scripts/serverlist-validate-game-icons.sh similarity index 100% rename from .github/workflows/serverlist-validate-game-icons.sh rename to .github/scripts/serverlist-validate-game-icons.sh diff --git a/.github/workflows/serverlist-validate.sh b/.github/scripts/serverlist-validate.sh similarity index 60% rename from .github/workflows/serverlist-validate.sh rename to .github/scripts/serverlist-validate.sh index 3d83d89da..9f3826cfa 100755 --- a/.github/workflows/serverlist-validate.sh +++ b/.github/scripts/serverlist-validate.sh @@ -22,20 +22,4 @@ for csv in "${csvlist[@]}"; do fi done -# Compare all game servers listed in serverlist.csv to $shortname-icon.png files in ${datadir}/gameicons -# if the game server is listed in serverlist.csv then it will have a $shortname-icon.png file - -# loop though shortname in serverlist.csv -echo "" -echo "Checking that all the game servers listed in serverlist.csv have a shortname-icon.png file" -for shortname in $(tail -n +2 serverlist.csv | cut -d ',' -f1); do - # check if $shortname-icon.png exists - if [ ! -f "gameicons/${shortname}-icon.png" ]; then - echo "ERROR: gameicons/${shortname}-icon.png does not exist" - exitcode=1 - else - echo "OK: gameicons/${shortname}-icon.png exists" - fi -done - exit "${exitcode}" diff --git a/.github/workflows/version-check.sh b/.github/scripts/version-check.sh similarity index 100% rename from .github/workflows/version-check.sh rename to .github/scripts/version-check.sh diff --git a/.github/workflows/action-update-copyright-years-in-license-file.yml b/.github/workflows/action-update-copyright-years-in-license-file.yml deleted file mode 100644 index ab1549f0e..000000000 --- a/.github/workflows/action-update-copyright-years-in-license-file.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Update copyright year(s) in license file - -on: - workflow_dispatch: - schedule: - - cron: "0 3 1 1 *" # 03:00 AM on January 1 - -permissions: - contents: write - -jobs: - update-license-year: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v6 - with: - fetch-depth: 0 - persist-credentials: false - - name: Action Update License Year - uses: FantasticFiasco/action-update-license-year@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - path: LICENSE.md - - name: Merge pull request - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - gh pr merge --merge --delete-branch diff --git a/.github/workflows/details-check.yml b/.github/workflows/details-check.yml index 856ab2d2a..2c3d858d6 100644 --- a/.github/workflows/details-check.yml +++ b/.github/workflows/details-check.yml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v6 - name: Generate matrix with generate-matrix.sh - run: chmod +x .github/workflows/details-check-generate-matrix.sh; .github/workflows/details-check-generate-matrix.sh + run: .github/scripts/details-check-generate-matrix.sh - name: Set Matrix id: set-matrix diff --git a/.github/workflows/serverlist-validate.yml b/.github/workflows/serverlist-validate.yml index e2016eddf..3e8807407 100644 --- a/.github/workflows/serverlist-validate.yml +++ b/.github/workflows/serverlist-validate.yml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v6 - name: Compare Versions - run: chmod +x .github/workflows/serverlist-validate.sh; .github/workflows/serverlist-validate.sh + run: .github/scripts/serverlist-validate.sh - name: Validate Game Icons - run: chmod +x .github/workflows/serverlist-validate-game-icons.sh; .github/workflows/serverlist-validate-game-icons.sh + run: .github/scripts/serverlist-validate-game-icons.sh diff --git a/.github/workflows/version-check.yml b/.github/workflows/version-check.yml index 2b4448643..0726295a4 100644 --- a/.github/workflows/version-check.yml +++ b/.github/workflows/version-check.yml @@ -14,4 +14,4 @@ jobs: uses: actions/checkout@v6 - name: Version Check - run: chmod +x .github/workflows/version-check.sh; .github/workflows/version-check.sh + run: .github/scripts/version-check.sh From 05f46e18d5d451ec1d59bfe4becc5d02bb168bee Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 01:21:11 +0000 Subject: [PATCH 30/44] chore(actions): tidy workflows and script layout --- .../details-check-generate-matrix.sh | 0 .../serverlist-validate-game-icons.sh | 0 .../serverlist-validate.sh | 16 ---------- .../{workflows => scripts}/version-check.sh | 0 ...update-copyright-years-in-license-file.yml | 29 ------------------- .github/workflows/details-check.yml | 2 +- .github/workflows/serverlist-validate.yml | 4 +-- .github/workflows/version-check.yml | 2 +- 8 files changed, 4 insertions(+), 49 deletions(-) rename .github/{workflows => scripts}/details-check-generate-matrix.sh (100%) rename .github/{workflows => scripts}/serverlist-validate-game-icons.sh (100%) rename .github/{workflows => scripts}/serverlist-validate.sh (60%) rename .github/{workflows => scripts}/version-check.sh (100%) delete mode 100644 .github/workflows/action-update-copyright-years-in-license-file.yml diff --git a/.github/workflows/details-check-generate-matrix.sh b/.github/scripts/details-check-generate-matrix.sh similarity index 100% rename from .github/workflows/details-check-generate-matrix.sh rename to .github/scripts/details-check-generate-matrix.sh diff --git a/.github/workflows/serverlist-validate-game-icons.sh b/.github/scripts/serverlist-validate-game-icons.sh similarity index 100% rename from .github/workflows/serverlist-validate-game-icons.sh rename to .github/scripts/serverlist-validate-game-icons.sh diff --git a/.github/workflows/serverlist-validate.sh b/.github/scripts/serverlist-validate.sh similarity index 60% rename from .github/workflows/serverlist-validate.sh rename to .github/scripts/serverlist-validate.sh index 3d83d89da..9f3826cfa 100755 --- a/.github/workflows/serverlist-validate.sh +++ b/.github/scripts/serverlist-validate.sh @@ -22,20 +22,4 @@ for csv in "${csvlist[@]}"; do fi done -# Compare all game servers listed in serverlist.csv to $shortname-icon.png files in ${datadir}/gameicons -# if the game server is listed in serverlist.csv then it will have a $shortname-icon.png file - -# loop though shortname in serverlist.csv -echo "" -echo "Checking that all the game servers listed in serverlist.csv have a shortname-icon.png file" -for shortname in $(tail -n +2 serverlist.csv | cut -d ',' -f1); do - # check if $shortname-icon.png exists - if [ ! -f "gameicons/${shortname}-icon.png" ]; then - echo "ERROR: gameicons/${shortname}-icon.png does not exist" - exitcode=1 - else - echo "OK: gameicons/${shortname}-icon.png exists" - fi -done - exit "${exitcode}" diff --git a/.github/workflows/version-check.sh b/.github/scripts/version-check.sh similarity index 100% rename from .github/workflows/version-check.sh rename to .github/scripts/version-check.sh diff --git a/.github/workflows/action-update-copyright-years-in-license-file.yml b/.github/workflows/action-update-copyright-years-in-license-file.yml deleted file mode 100644 index ab1549f0e..000000000 --- a/.github/workflows/action-update-copyright-years-in-license-file.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Update copyright year(s) in license file - -on: - workflow_dispatch: - schedule: - - cron: "0 3 1 1 *" # 03:00 AM on January 1 - -permissions: - contents: write - -jobs: - update-license-year: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v6 - with: - fetch-depth: 0 - persist-credentials: false - - name: Action Update License Year - uses: FantasticFiasco/action-update-license-year@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - path: LICENSE.md - - name: Merge pull request - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - gh pr merge --merge --delete-branch diff --git a/.github/workflows/details-check.yml b/.github/workflows/details-check.yml index c58aa0ae4..ccccbbdaa 100644 --- a/.github/workflows/details-check.yml +++ b/.github/workflows/details-check.yml @@ -24,7 +24,7 @@ jobs: uses: actions/checkout@v4 - name: Generate matrix with generate-matrix.sh - run: chmod +x .github/workflows/details-check-generate-matrix.sh; .github/workflows/details-check-generate-matrix.sh + run: .github/scripts/details-check-generate-matrix.sh - name: Set Matrix id: set-matrix diff --git a/.github/workflows/serverlist-validate.yml b/.github/workflows/serverlist-validate.yml index c2605b062..4fb830702 100644 --- a/.github/workflows/serverlist-validate.yml +++ b/.github/workflows/serverlist-validate.yml @@ -15,7 +15,7 @@ jobs: uses: actions/checkout@v4 - name: Compare Versions - run: chmod +x .github/workflows/serverlist-validate.sh; .github/workflows/serverlist-validate.sh + run: .github/scripts/serverlist-validate.sh - name: Validate Game Icons - run: chmod +x .github/workflows/serverlist-validate-game-icons.sh; .github/workflows/serverlist-validate-game-icons.sh + run: .github/scripts/serverlist-validate-game-icons.sh diff --git a/.github/workflows/version-check.yml b/.github/workflows/version-check.yml index cfa7615bd..d3c4a5276 100644 --- a/.github/workflows/version-check.yml +++ b/.github/workflows/version-check.yml @@ -14,4 +14,4 @@ jobs: uses: actions/checkout@v4 - name: Version Check - run: chmod +x .github/workflows/version-check.sh; .github/workflows/version-check.sh + run: .github/scripts/version-check.sh From 907a463f0679f9a48bcc6545c02c282cb5c116a9 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 02:37:43 +0100 Subject: [PATCH 31/44] fix: Update Debian 13 dependencies and add to issue templates (#4916) - 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 --- .github/ISSUE_TEMPLATE/bug_report.yml | 7 +++++++ .github/ISSUE_TEMPLATE/feature_request.yml | 7 +++++++ lgsm/data/debian-13.csv | 8 ++++---- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e9f2d000b..41797fdff 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -30,11 +30,18 @@ body: label: Linux distro multiple: true options: + - Ubuntu 26.04 - Ubuntu 24.04 - Ubuntu 22.04 - Ubuntu 20.04 + - Debian 13 - Debian 12 - Debian 11 + - AlmaLinux 9 + - AlmaLinux 8 + - Rocky 10 + - Rocky 9 + - Rocky 8 - RedHat 9 - RedHat 8 - Other diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index f1a8ccaf6..e71032485 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -30,11 +30,18 @@ body: label: Linux distro multiple: true options: + - Ubuntu 26.04 - Ubuntu 24.04 - Ubuntu 22.04 - Ubuntu 20.04 + - Debian 13 - Debian 12 - Debian 11 + - AlmaLinux 9 + - AlmaLinux 8 + - Rocky 10 + - Rocky 9 + - Rocky 8 - RedHat 9 - RedHat 8 - Other diff --git a/lgsm/data/debian-13.csv b/lgsm/data/debian-13.csv index d53dfb44f..94c6cf1ae 100644 --- a/lgsm/data/debian-13.csv +++ b/lgsm/data/debian-13.csv @@ -16,7 +16,7 @@ bfv,libncurses5:i386,libstdc++5:i386 bmdm,libncurses5:i386 bo bs -bt,libicu-dev,dos2unix,libxml2-utils +bt,libicu-dev,dos2unix,libxml2 btl cc ck,xvfb,libxi6 @@ -71,7 +71,7 @@ mcb mcv mh mohaa,libstdc++5:i386 -mta,libncursesw5,libxml2-utils +mta,libncursesw6,libxml2 nd nec nmrih @@ -104,14 +104,14 @@ sb sbots scpsl,mono-complete,libicu76 scpslsm,mono-complete -sdtd,telnet,expect,libxml2-utils +sdtd,telnet,expect,libxml2 sf sfc sm,telnet,expect sof2 sol squad -st,libxml2-utils +st,libxml2 stn sven,libssl3:i386,zlib1g:i386 terraria From 2c4da53248fcf4cd089d1dae3ebe11a965ee2bb8 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 3 May 2026 02:48:13 +0100 Subject: [PATCH 32/44] fix: Correct CSV file path in update-lgsm command (#4917) 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 --- lgsm/modules/command_update_linuxgsm.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lgsm/modules/command_update_linuxgsm.sh b/lgsm/modules/command_update_linuxgsm.sh index 3fd4cc681..80ff74cfb 100755 --- a/lgsm/modules/command_update_linuxgsm.sh +++ b/lgsm/modules/command_update_linuxgsm.sh @@ -188,7 +188,7 @@ if [ -f "${datadir}/${distroid}-${distroversioncsv}.csv" ]; then fn_print_update_eol_nl fn_script_log "Checking ${remotereponame} ${distroid}-${distroversioncsv}.csv" rm -f "${datadir:?}/${distroid}-${distroversioncsv}.csv" - fn_fetch_file_github "${datadir}" "${distroid}-${distroversioncsv}.csv" "${datadir}" "nochmodx" "norun" "noforce" "nohash" + fn_fetch_file_github "lgsm/data" "${distroid}-${distroversioncsv}.csv" "${datadir}" "nochmodx" "norun" "noforce" "nohash" else fn_print_skip_eol_nl fn_script_log_pass "Checking ${remotereponame} ${distroid}-${distroversioncsv}.csv" From 3a56a6cef35e15e8883a9d14d62308d82b295657 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Mon, 4 May 2026 11:03:30 +0100 Subject: [PATCH 33/44] chore(actions): Optimize details-check workflow for PRs 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. --- .../scripts/details-check-generate-matrix.sh | 6 ++ .github/workflows/details-check.yml | 86 +++++++++++++++++-- 2 files changed, 87 insertions(+), 5 deletions(-) diff --git a/.github/scripts/details-check-generate-matrix.sh b/.github/scripts/details-check-generate-matrix.sh index 1093a46cf..eff7d5416 100755 --- a/.github/scripts/details-check-generate-matrix.sh +++ b/.github/scripts/details-check-generate-matrix.sh @@ -8,6 +8,12 @@ echo -n "\"include\":[" >> "shortnamearray.json" while read -r line; do shortname=$(echo "$line" | awk -F, '{ print $1 }') + # If TARGETED_SHORTNAMES is set, skip servers not in the list + if [ -n "${TARGETED_SHORTNAMES:-}" ]; then + if ! echo "${TARGETED_SHORTNAMES}" | grep -qw "${shortname}"; then + continue + fi + fi export shortname servername=$(echo "$line" | awk -F, '{ print $2 }') export servername diff --git a/.github/workflows/details-check.yml b/.github/workflows/details-check.yml index 2c3d858d6..d4f7f644f 100644 --- a/.github/workflows/details-check.yml +++ b/.github/workflows/details-check.yml @@ -5,6 +5,9 @@ on: push: branches: - develop + pull_request: + branches: + - develop permissions: contents: read @@ -25,15 +28,56 @@ jobs: - name: Checkout uses: actions/checkout@v6 + - name: Detect targeted servers (PR only) + id: targeted + if: github.event_name == 'pull_request' + run: | + changed=$(git diff --name-only origin/${{ github.base_ref }}...HEAD) + echo "Changed files:" + echo "$changed" + + # Only these modules directly affect what 'details', 'parse-game-details' + # and 'query-raw' output. Everything else (install, fix, update, check_*, + # data CSVs, game icons, etc.) is irrelevant to this check. + details_core='^(linuxgsm\.sh|lgsm/modules/(info_game|info_messages|command_details|command_dev_parse_game_details|command_dev_query_raw|core_modules)\.sh)$' + if echo "$changed" | grep -qE "${details_core}"; then + echo "Details-relevant core file changed — using full matrix." + echo "mode=full" >> "$GITHUB_OUTPUT" + else + # Extract shortnames from changed config-lgsm paths + shortnames=$(echo "$changed" \ + | grep -oE 'lgsm/config-default/config-lgsm/[a-z0-9]+server' \ + | sed 's|lgsm/config-default/config-lgsm/||;s|server$||' \ + | sort -u) + if [ -z "$shortnames" ]; then + echo "No server configs or core files changed — skipping matrix." + echo "mode=skip" >> "$GITHUB_OUTPUT" + else + echo "Targeted servers: $shortnames" + echo "mode=targeted" >> "$GITHUB_OUTPUT" + printf '%s\n' $shortnames > targeted_shortnames.txt + fi + fi + - name: Generate matrix with generate-matrix.sh - run: .github/scripts/details-check-generate-matrix.sh + if: github.event_name != 'pull_request' || steps.targeted.outputs.mode != 'skip' + run: | + if [ -f targeted_shortnames.txt ]; then + TARGETED_SHORTNAMES=$(cat targeted_shortnames.txt) .github/scripts/details-check-generate-matrix.sh + else + .github/scripts/details-check-generate-matrix.sh + fi - name: Set Matrix id: set-matrix run: | - shortnamearray=$(cat shortnamearray.json) - echo "${shortnamearray}" - echo -n "matrix=${shortnamearray}" >> "$GITHUB_OUTPUT" + if [ ! -f shortnamearray.json ]; then + echo 'matrix={"include":[]}' >> "$GITHUB_OUTPUT" + else + shortnamearray=$(cat shortnamearray.json) + echo "${shortnamearray}" + echo -n "matrix=${shortnamearray}" >> "$GITHUB_OUTPUT" + fi details-check: if: github.repository_owner == 'GameServerManagers' @@ -50,8 +94,14 @@ jobs: - name: Download linuxgsm.sh run: wget "https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${LGSM_REF}/linuxgsm.sh"; chmod +x linuxgsm.sh + - name: Cache apt packages + uses: actions/cache@v4 + with: + path: /var/cache/apt/archives + key: apt-${{ runner.os }}-libxml2-utils-jq + - name: Install dependencies - run: sudo apt-get install libxml2-utils jq + run: sudo apt-get install -y --no-install-recommends libxml2-utils jq - name: Create serverfiles directory run: mkdir -p serverfiles @@ -91,10 +141,36 @@ jobs: run: grep "startparameters" lgsm/config-default/config-lgsm/${{ matrix.shortname }}server/_default.cfg - name: Details + id: details run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server details - name: Detect details + id: detect-details run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server parse-game-details - name: Query Raw + id: query-raw run: LGSM_GITHUBBRANCH="${LGSM_REF}" ./${{ matrix.shortname }}server query-raw + + - name: Write job summary + if: always() + run: | + status_icon() { + case "$1" in + success) echo "✅" ;; + failure) echo "❌" ;; + skipped) echo "⏭️" ;; + *) echo "⚠️" ;; + esac + } + details_icon=$(status_icon "${{ steps.details.outcome }}") + parse_icon=$(status_icon "${{ steps.detect-details.outcome }}") + query_icon=$(status_icon "${{ steps.query-raw.outcome }}") + { + echo "## ${{ matrix.shortname }}server" + echo "| Step | Result |" + echo "|------|--------|" + echo "| Details | ${details_icon} ${{ steps.details.outcome }} |" + echo "| Parse game details | ${parse_icon} ${{ steps.detect-details.outcome }} |" + echo "| Query raw | ${query_icon} ${{ steps.query-raw.outcome }} |" + } >> "$GITHUB_STEP_SUMMARY" From df0cc0469a8b5eaa928d6092fe7a49f740692a17 Mon Sep 17 00:00:00 2001 From: Nikolay Asenov <10465782+nasenov@users.noreply.github.com> Date: Sun, 19 Jul 2026 16:10:45 +0300 Subject: [PATCH 34/44] fix(mods_list): update AMX Mod X version to latest release (#4932) --- lgsm/modules/mods_list.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lgsm/modules/mods_list.sh b/lgsm/modules/mods_list.sh index b3f9877f1..0870e1db1 100755 --- a/lgsm/modules/mods_list.sh +++ b/lgsm/modules/mods_list.sh @@ -19,40 +19,40 @@ metamodlatestfile="metamod-${metamodversion}.zip" metamoddownloadurl="https://www.amxmodx.org/release/${metamodlatestfile}" metamodurl="${metamoddownloadurl}" # AMX Mod X: Base -amxxbaseversion="1.8.2" +amxxbaseversion="1.9.0-git5303" amxxbasemod="base" amxxbaselatestfile="amxmodx-${amxxbaseversion}-${amxxbasemod}-linux.tar.gz" -amxxbasedownloadurl="https://www.amxmodx.org/release/${amxxbaselatestfile}" +amxxbasedownloadurl="https://github.com/alliedmodders/amxmodx/releases/download/1.9.0.5303/${amxxbaselatestfile}" amxxbaseurl="${amxxbasedownloadurl}" # AMX Mod X: Counter-Strike -amxxcsversion="1.8.2" +amxxcsversion="1.9.0-git5303" amxxcsmod="cstrike" amxxcslatestfile="amxmodx-${amxxbaseversion}-${amxxcsmod}-linux.tar.gz" -amxxcsdownloadurl="https://www.amxmodx.org/release/${amxxcslatestfile}" +amxxcsdownloadurl="https://github.com/alliedmodders/amxmodx/releases/download/1.9.0.5303/${amxxcslatestfile}" amxxcsurl="${amxxcsdownloadurl}" # AMX Mod X: Day of Defeat -amxxdodversion="1.8.2" +amxxdodversion="1.9.0-git5303" amxxdodmod="dod" amxxdodlatestfile="amxmodx-${amxxdodversion}-${amxxdodmod}-linux.tar.gz" -amxxdoddownloadurl="https://www.amxmodx.org/release/${amxxdodlatestfile}" +amxxdoddownloadurl="https://github.com/alliedmodders/amxmodx/releases/download/1.9.0.5303/${amxxdodlatestfile}" amxxdodurl="${amxxdoddownloadurl}" # AMX Mod X: Team Fortress Classic -amxxtfcversion="1.8.2" +amxxtfcversion="1.9.0-git5303" amxxtfcmod="tfc" amxxtfclatestfile="amxmodx-${amxxtfcversion}-${amxxtfcmod}-linux.tar.gz" -amxxtfcdownloadurl="https://www.amxmodx.org/release/${amxxtfclatestfile}" +amxxtfcdownloadurl="https://github.com/alliedmodders/amxmodx/releases/download/1.9.0.5303/${amxxtfclatestfile}" amxxtfcurl="${amxxtfcdownloadurl}" # AMX Mod X: Natural Selection -amxxnsversion="1.8.2" +amxxnsversion="1.9.0-git5303" amxxnsmod="ns" amxxnslatestfile="amxmodx-${amxxnsversion}-${amxxnsmod}-linux.tar.gz" -amxxnsdownloadurl="https://www.amxmodx.org/release/${amxxnslatestfile}" +amxxnsdownloadurl="https://github.com/alliedmodders/amxmodx/releases/download/1.9.0.5303/${amxxnslatestfile}" amxxnsurl="${amxxnsdownloadurl}" # AMX Mod X: The Specialists -amxxtsversion="1.8.2" +amxxtsversion="1.9.0-git5303" amxxtsmod="ts" amxxtslatestfile="amxmodx-${amxxtsversion}-${amxxtsmod}-linux.tar.gz" -amxxtsdownloadurl="https://www.amxmodx.org/release/${amxxtslatestfile}" +amxxtsdownloadurl="https://github.com/alliedmodders/amxmodx/releases/download/1.9.0.5303/${amxxtslatestfile}" amxxtsurl="${amxxtsdownloadurl}" # Metamod:Source metamodsourceversion="1.12" From 71fe22c5d28b143866266838d4050a79e51e99ef Mon Sep 17 00:00:00 2001 From: Fabian Raab Date: Sun, 19 Jul 2026 15:30:07 +0200 Subject: [PATCH 35/44] =?UTF-8?q?feat(check=5Fdeps.sh):=20Add=20=E2=80=9Cn?= =?UTF-8?q?ullmailer=E2=80=9D=20als=20allowed=20MTA=20for=20email=20notifi?= =?UTF-8?q?cations=20(#4871)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Daniel Gibbs --- lgsm/modules/check_deps.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lgsm/modules/check_deps.sh b/lgsm/modules/check_deps.sh index e4bcad4be..b03189897 100755 --- a/lgsm/modules/check_deps.sh +++ b/lgsm/modules/check_deps.sh @@ -126,6 +126,9 @@ fn_deps_email() { array_deps_required+=(exim4) elif [ -d /etc/sendmail ]; then array_deps_required+=(sendmail) + elif [ "$(command -v apt 2> /dev/null)" ] && [ -d /etc/nullmailer ]; then + # 'mailutils' provides the 'mail' binary, 'nullmailer' is the MTA + array_deps_required+=(mailutils nullmailer) elif [ "$(command -v yum 2> /dev/null)" ] || [ "$(command -v dnf 2> /dev/null)" ]; then array_deps_required+=(s-nail postfix) elif [ "$(command -v apt 2> /dev/null)" ]; then From bbcca49d312f69f696defc5bc8ac020897501c91 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Jul 2026 15:05:29 +0100 Subject: [PATCH 36/44] fix(mods): BepInEx Valheim install fix (rebased from #4938) (#4939) * 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 * 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 --------- Co-authored-by: yourfate <2371889-youRFate@users.noreply.gitlab.com> Co-authored-by: Claude Sonnet 4.6 --- lgsm/modules/check_permissions.sh | 4 ++-- lgsm/modules/fix_vh.sh | 5 ++--- lgsm/modules/mods_core.sh | 9 +++++++++ lgsm/modules/mods_list.sh | 4 ++-- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/lgsm/modules/check_permissions.sh b/lgsm/modules/check_permissions.sh index 73fba983d..3dc521da7 100755 --- a/lgsm/modules/check_permissions.sh +++ b/lgsm/modules/check_permissions.sh @@ -24,7 +24,7 @@ fn_check_ownership() { fi fi if [ -d "${serverfiles}" ]; then - if [ "$(find "${serverfiles}" -not -name '*.swp' -not -user "$(whoami)" | wc -l)" -ne "0" ]; then + if [ "$(find "${serverfiles}" -not -path "*/steamapps/compatdata/*" -not -name '*.swp' -not -user "$(whoami)" | wc -l)" -ne "0" ]; then filesownissue=1 fi fi @@ -42,7 +42,7 @@ fn_check_ownership() { find "${lgsmdir}" -not -user "$(whoami)" -printf "%u\t%g\t%p\n" fi if [ "${filesownissue}" == "1" ]; then - find "${serverfiles}" -not -user "$(whoami)" -printf "%u\t%g\t%p\n" + find "${serverfiles}" -not -path "*/steamapps/compatdata/*" -not -user "$(whoami)" -printf "%u\t%g\t%p\n" fi } | column -s $'\t' -t | tee -a "${lgsmlog}" diff --git a/lgsm/modules/fix_vh.sh b/lgsm/modules/fix_vh.sh index c6564eb19..7d09af677 100755 --- a/lgsm/modules/fix_vh.sh +++ b/lgsm/modules/fix_vh.sh @@ -29,9 +29,8 @@ if [ -f "${modsinstalledlistfullpath}" ]; then fn_print_info_nl "BepInEx install detected, applying start exports" fn_script_log_info "BepInEx install detected, applying start exports" # exports for BepInEx framework from script start_server_bepinex.sh - export DOORSTOP_ENABLE=TRUE - export DOORSTOP_INVOKE_DLL_PATH=./BepInEx/core/BepInEx.Preloader.dll - export DOORSTOP_CORLIB_OVERRIDE_PATH=./unstripped_corlib + export DOORSTOP_ENABLED=1 + export DOORSTOP_TARGET_ASSEMBLY=./BepInEx/core/BepInEx.Preloader.dll export LD_LIBRARY_PATH="./doorstop_libs:${LD_LIBRARY_PATH}" export LD_PRELOAD="libdoorstop_x64.so:${LD_PRELOAD}" diff --git a/lgsm/modules/mods_core.sh b/lgsm/modules/mods_core.sh index bed0f9f49..3a14fcb84 100755 --- a/lgsm/modules/mods_core.sh +++ b/lgsm/modules/mods_core.sh @@ -29,6 +29,15 @@ fn_mod_install_files() { mkdir -p "${extractdest}" fi fn_dl_extract "${modstmpdir}" "${modfilename}" "${extractdest}" + # If modsubdirs names a specific subfolder, use its contents as the install root. + if [ "${modsubdirs}" != "0" ] && [ -d "${extractdest}/${modsubdirs}" ]; then + local tmpsubdir + tmpsubdir=$(mktemp -d) + mv "${extractdest}/${modsubdirs}" "${tmpsubdir}/" + rm -rf "${extractdest}" + mv "${tmpsubdir}/${modsubdirs}" "${extractdest}" + rm -rf "${tmpsubdir}" + fi } # Convert mod files to lowercase if needed. diff --git a/lgsm/modules/mods_list.sh b/lgsm/modules/mods_list.sh index 0870e1db1..39eca5e42 100755 --- a/lgsm/modules/mods_list.sh +++ b/lgsm/modules/mods_list.sh @@ -122,7 +122,7 @@ modseparator="MOD" # [2] | "Pretty Name": the common name people use to call the mod that will be displayed to the user # [3] | "URL": link to the mod archive file; can be a variable previously defined while scraping a URL # [4] | "filename": the output filename -# [5] | "modsubdirs": in how many subdirectories is the mod (none is 0) (not used at release, but could be in the future) +# [5] | "modsubdirs": name of a subfolder within the archive to extract as the install root (use "0" to extract all contents) # [6] | "LowercaseOn/Off": LowercaseOff or LowercaseOn: enable/disable converting extracted files and directories to lowercase (some games require it) # [7] | "modinstalldir": the directory in which to install the mode (use LGSM dir variables such as ${systemdir}) # [8] | "/files/to/keep;", files & directories that should not be overwritten upon update, separated and ended with a semicolon; you can also use "OVERWRITE" value to ignore the value or "NOUPDATE" to disallow updating; for files to keep upon uninstall, see fn_mod_tidy_files_list from mods_core.sh @@ -208,7 +208,7 @@ mod_info_sdtdoxide=(MOD "sdtdoxide" "Oxide for 7 Days To Die" "${oxidesdtdlatest mod_info_valheimplus=(MOD "valheimplus" "Valheim PLUS" "${valheimpluslatestlink}" "ValheimPlus.tar.gz" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Valheim;" "NOTGAMES" "https://github.com/Grantapher/ValheimPlus.git" "Mod to improve Valheim gameplay") # BepInEx Valheim -mod_info_bepinexvh=(MOD "bepinexvh" "BepInEx Valheim" "${bepinexvhlatestlink}" "denikson-BepInExPack_Valheim.zip" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Valheim;" "NOTGAMES" "https://valheim.thunderstore.io/package/denikson/BepInExPack_Valheim/" "Unity / XNA game patcher and plugin framework") +mod_info_bepinexvh=(MOD "bepinexvh" "BepInEx Valheim" "${bepinexvhlatestlink}" "denikson-BepInExPack_Valheim.zip" "BepInExPack_Valheim" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Valheim;" "NOTGAMES" "https://valheim.thunderstore.io/package/denikson/BepInExPack_Valheim/" "Unity / XNA game patcher and plugin framework") # REQUIRED: Set all mods info into the global array mods_global_array=("${mod_info_metamod[@]}" "${mod_info_base_amxx[@]}" "${mod_info_cs_amxx[@]}" "${mod_info_dod_amxx[@]}" "${mod_info_tfc_amxx[@]}" "${mod_info_ns_amxx[@]}" "${mod_info_ts_amxx[@]}" "${mod_info_metamodsource[@]}" "${mod_info_sourcemod[@]}" "${mod_info_steamworks[@]}" "${mod_info_gokz[@]}" "${mod_info_ttt[@]}" "${mod_info_get5[@]}" "${mod_info_prac[@]}" "${mod_info_pug[@]}" "${mod_info_dhook[@]}" "${mod_info_movement[@]}" "${mod_info_cleaner[@]}" "${mod_info_ulib[@]}" "${mod_info_ulx[@]}" "${mod_info_utime[@]}" "${mod_info_uclip[@]}" "${mod_info_acf[@]}" "${mod_info_acf_missiles[@]}" "${mod_info_acf_sweps[@]}" "${mod_info_advdupe2[@]}" "${mod_info_pac3[@]}" "${mod_info_wiremod[@]}" "${mod_info_wiremodextras[@]}" "${mod_info_darkrp[@]}" "${mod_info_darkrpmodification[@]}" "${mod_info_rustcarbon[@]}" "${mod_info_rustoxide[@]}" "${mod_info_hwoxide[@]}" "${mod_info_sdtdoxide[@]}" "${mod_info_advduplicator[@]}" "${mod_info_trackassemblytool[@]}" "${mod_info_physpropertiesadv[@]}" "${mod_info_controlsystemse2[@]}" "${mod_info_e2pistontiming[@]}" "${mod_info_propcannontool[@]}" "${mod_info_gearassemblytool[@]}" "${mod_info_spinnertool[@]}" "${mod_info_surfacefrictiontool[@]}" "${mod_info_magneticdipole[@]}" "${mod_info_environmentorganizer[@]}" "${mod_info_precision_alignment[@]}" "${mod_info_improved_stacker[@]}" "${mod_info_improved_weight[@]}" "${mod_info_improved_antinoclip[@]}" "${mod_info_laserstool[@]}" "${mod_info_valheimplus[@]}" "${mod_info_bepinexvh[@]}") From 9fd21e5b9a6b218a69b22a32be36079aa323beb5 Mon Sep 17 00:00:00 2001 From: fwillo <37631375+fwillo@users.noreply.github.com> Date: Sun, 19 Jul 2026 16:10:10 +0200 Subject: [PATCH 37/44] fix(mods): BepInEx_Valheim prevents startup on systems with newer glibc (#4788) * 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 Co-authored-by: dgibbs64 --- .../scripts/details-check-generate-matrix.sh | 16 ++-- .github/scripts/sync-game-labels.sh | 76 +++++++++---------- lgsm/modules/fix_vh.sh | 2 +- 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/.github/scripts/details-check-generate-matrix.sh b/.github/scripts/details-check-generate-matrix.sh index eff7d5416..cf37b528c 100755 --- a/.github/scripts/details-check-generate-matrix.sh +++ b/.github/scripts/details-check-generate-matrix.sh @@ -23,11 +23,11 @@ while read -r line; do export distro # Legacy servers that require older Ubuntu/Debian versions due to glibc compatibility case "${shortname}" in - bfv|bf1942) + bfv | bf1942) # Requires Ubuntu <= 22.04 or Debian <= 12 (glibc 2.31 compatible) runner="ubuntu-22.04" ;; - btl|onset) + btl | onset) # Requires Ubuntu <= 20.04 or Debian <= 11 (glibc 2.31 compatible) runner="ubuntu-20.04" ;; @@ -36,12 +36,12 @@ while read -r line; do ;; esac { - echo -n "{"; - echo -n "\"shortname\":"; - echo -n "\"${shortname}\""; - echo -n ",\"runner\":"; - echo -n "\"${runner}\""; - echo -n "},"; + echo -n "{" + echo -n "\"shortname\":" + echo -n "\"${shortname}\"" + echo -n ",\"runner\":" + echo -n "\"${runner}\"" + echo -n "}," } >> "shortnamearray.json" done < <(tail -n +2 serverlist.csv) sed -i '$ s/.$//' "shortnamearray.json" diff --git a/.github/scripts/sync-game-labels.sh b/.github/scripts/sync-game-labels.sh index 737ec5b74..2914f3d80 100644 --- a/.github/scripts/sync-game-labels.sh +++ b/.github/scripts/sync-game-labels.sh @@ -20,8 +20,8 @@ normalize_label() { } if [[ ! -f "${SERVERLIST}" ]]; then - echo "ERROR: ${SERVERLIST} not found. Run from the repository root." - exit 1 + echo "ERROR: ${SERVERLIST} not found. Run from the repository root." + exit 1 fi declare -A EXISTING_COLORS=() @@ -31,20 +31,20 @@ declare -A EXISTING_NAMES=() # Fetch all existing game label metadata once (up to 1000) and cache locally. echo "Fetching existing labels..." while IFS=$'\t' read -r NAME COLOR DESCRIPTION; do - [[ -n "${NAME}" ]] || continue - EXISTING_COLORS["${NAME}"]="${COLOR}" - EXISTING_DESCRIPTIONS["${NAME}"]="${DESCRIPTION}" - EXISTING_NAMES["$(normalize_label "${NAME}")"]="${NAME}" + [[ -n "${NAME}" ]] || continue + EXISTING_COLORS["${NAME}"]="${COLOR}" + EXISTING_DESCRIPTIONS["${NAME}"]="${DESCRIPTION}" + EXISTING_NAMES["$(normalize_label "${NAME}")"]="${NAME}" done < <( - gh label list --limit 1000 --json name,color,description ${REPO:+--repo "$REPO"} \ - | jq -r '.[] | select(.name | startswith("game: ")) | [.name, .color, (.description // "")] | @tsv' + gh label list --limit 1000 --json name,color,description ${REPO:+--repo "$REPO"} \ + | jq -r '.[] | select(.name | startswith("game: ")) | [.name, .color, (.description // "")] | @tsv' ) # Parse unique game names from the CSV (column 3, skip header). mapfile -t GAMES < <( - tail -n +2 "${SERVERLIST}" \ - | cut -d',' -f3 \ - | sort -u + tail -n +2 "${SERVERLIST}" \ + | cut -d',' -f3 \ + | sort -u ) CREATED=0 @@ -52,35 +52,35 @@ UPDATED=0 UNCHANGED=0 for GAME in "${GAMES[@]}"; do - LABEL="${LABEL_PREFIX}${GAME}" - DESCRIPTION="Issues related to ${GAME}" - NORMALIZED_LABEL="$(normalize_label "${LABEL}")" + LABEL="${LABEL_PREFIX}${GAME}" + DESCRIPTION="Issues related to ${GAME}" + NORMALIZED_LABEL="$(normalize_label "${LABEL}")" - if [[ -v EXISTING_NAMES["${NORMALIZED_LABEL}"] ]]; then - CURRENT_LABEL="${EXISTING_NAMES["${NORMALIZED_LABEL}"]}" - CURRENT_COLOR="${EXISTING_COLORS["${CURRENT_LABEL}"]}" - CURRENT_DESCRIPTION="${EXISTING_DESCRIPTIONS["${CURRENT_LABEL}"]}" + if [[ -v EXISTING_NAMES["${NORMALIZED_LABEL}"] ]]; then + CURRENT_LABEL="${EXISTING_NAMES["${NORMALIZED_LABEL}"]}" + CURRENT_COLOR="${EXISTING_COLORS["${CURRENT_LABEL}"]}" + CURRENT_DESCRIPTION="${EXISTING_DESCRIPTIONS["${CURRENT_LABEL}"]}" - if [[ "${CURRENT_LABEL}" != "${LABEL}" || "${CURRENT_COLOR}" != "${LABEL_COLOR}" || "${CURRENT_DESCRIPTION}" != "${DESCRIPTION}" ]]; then - echo " update ${LABEL}" - gh label edit "${CURRENT_LABEL}" \ - --name "${LABEL}" \ - --color "${LABEL_COLOR}" \ - --description "${DESCRIPTION}" \ - ${REPO:+--repo "$REPO"} - (( UPDATED++ )) || true - else - echo " ok ${LABEL}" - (( UNCHANGED++ )) || true - fi - else - echo " create ${LABEL}" - gh label create "${LABEL}" \ - --color "${LABEL_COLOR}" \ - --description "${DESCRIPTION}" \ - ${REPO:+--repo "$REPO"} - (( CREATED++ )) || true - fi + if [[ "${CURRENT_LABEL}" != "${LABEL}" || "${CURRENT_COLOR}" != "${LABEL_COLOR}" || "${CURRENT_DESCRIPTION}" != "${DESCRIPTION}" ]]; then + echo " update ${LABEL}" + gh label edit "${CURRENT_LABEL}" \ + --name "${LABEL}" \ + --color "${LABEL_COLOR}" \ + --description "${DESCRIPTION}" \ + ${REPO:+--repo "$REPO"} + ((UPDATED++)) || true + else + echo " ok ${LABEL}" + ((UNCHANGED++)) || true + fi + else + echo " create ${LABEL}" + gh label create "${LABEL}" \ + --color "${LABEL_COLOR}" \ + --description "${DESCRIPTION}" \ + ${REPO:+--repo "$REPO"} + ((CREATED++)) || true + fi done echo "" diff --git a/lgsm/modules/fix_vh.sh b/lgsm/modules/fix_vh.sh index 7d09af677..600988be6 100755 --- a/lgsm/modules/fix_vh.sh +++ b/lgsm/modules/fix_vh.sh @@ -33,7 +33,7 @@ if [ -f "${modsinstalledlistfullpath}" ]; then export DOORSTOP_TARGET_ASSEMBLY=./BepInEx/core/BepInEx.Preloader.dll export LD_LIBRARY_PATH="./doorstop_libs:${LD_LIBRARY_PATH}" - export LD_PRELOAD="libdoorstop_x64.so:${LD_PRELOAD}" + preexecutable="LD_PRELOAD=\"libdoorstop_x64.so:${LD_PRELOAD}\" ${preexecutable}" export SteamAppId=892970 fi From d40233073787bf1b4d908a0ac9c3703f904b0121 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Jul 2026 15:55:23 +0100 Subject: [PATCH 38/44] fix(ci): fetch full history in details-check so base ref diff works (#4940) 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. --- .github/workflows/details-check.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/details-check.yml b/.github/workflows/details-check.yml index d4f7f644f..bed3a41ad 100644 --- a/.github/workflows/details-check.yml +++ b/.github/workflows/details-check.yml @@ -27,6 +27,11 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 + with: + # Full history so the base branch ref is available for the + # `git diff origin/...HEAD` comparison below (a shallow + # checkout has no origin/ and the diff fails). + fetch-depth: 0 - name: Detect targeted servers (PR only) id: targeted From 641048dedbadfb0d3ee680e2288ca15ad67c7122 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Jul 2026 16:06:12 +0100 Subject: [PATCH 39/44] feat(alerts): add Matrix alert provider (#4901) * 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. --- .../config-lgsm/acserver/_default.cfg | 6 ++ .../config-lgsm/ahl2server/_default.cfg | 6 ++ .../config-lgsm/ahlserver/_default.cfg | 6 ++ .../config-lgsm/arkserver/_default.cfg | 6 ++ .../config-lgsm/arma3server/_default.cfg | 6 ++ .../config-lgsm/armarserver/_default.cfg | 6 ++ .../config-lgsm/atsserver/_default.cfg | 6 ++ .../config-lgsm/avserver/_default.cfg | 6 ++ .../config-lgsm/bb2server/_default.cfg | 6 ++ .../config-lgsm/bbserver/_default.cfg | 6 ++ .../config-lgsm/bdserver/_default.cfg | 6 ++ .../config-lgsm/bf1942server/_default.cfg | 6 ++ .../config-lgsm/bfvserver/_default.cfg | 6 ++ .../config-lgsm/bmdmserver/_default.cfg | 6 ++ .../config-lgsm/boserver/_default.cfg | 6 ++ .../config-lgsm/bsserver/_default.cfg | 6 ++ .../config-lgsm/btlserver/_default.cfg | 6 ++ .../config-lgsm/btserver/_default.cfg | 6 ++ .../config-lgsm/ccserver/_default.cfg | 6 ++ .../config-lgsm/ckserver/_default.cfg | 6 ++ .../config-lgsm/cmwserver/_default.cfg | 6 ++ .../config-lgsm/cod2server/_default.cfg | 6 ++ .../config-lgsm/cod4server/_default.cfg | 6 ++ .../config-lgsm/codserver/_default.cfg | 6 ++ .../config-lgsm/coduoserver/_default.cfg | 6 ++ .../config-lgsm/codwawserver/_default.cfg | 6 ++ .../config-lgsm/colserver/_default.cfg | 6 ++ .../config-lgsm/cs2server/_default.cfg | 6 ++ .../config-lgsm/csczserver/_default.cfg | 6 ++ .../config-lgsm/csgoserver/_default.cfg | 6 ++ .../config-lgsm/csserver/_default.cfg | 6 ++ .../config-lgsm/cssserver/_default.cfg | 6 ++ .../config-lgsm/ctserver/_default.cfg | 6 ++ .../config-lgsm/dabserver/_default.cfg | 6 ++ .../config-lgsm/dayzserver/_default.cfg | 6 ++ .../config-lgsm/dmcserver/_default.cfg | 6 ++ .../config-lgsm/dodrserver/_default.cfg | 6 ++ .../config-lgsm/dodserver/_default.cfg | 6 ++ .../config-lgsm/dodsserver/_default.cfg | 6 ++ .../config-lgsm/doiserver/_default.cfg | 6 ++ .../config-lgsm/dstserver/_default.cfg | 6 ++ .../config-lgsm/dysserver/_default.cfg | 6 ++ .../config-lgsm/ecoserver/_default.cfg | 6 ++ .../config-lgsm/emserver/_default.cfg | 6 ++ .../config-lgsm/etlserver/_default.cfg | 6 ++ .../config-lgsm/ets2server/_default.cfg | 6 ++ .../config-lgsm/fctrserver/_default.cfg | 6 ++ .../config-lgsm/fofserver/_default.cfg | 6 ++ .../config-lgsm/gmodserver/_default.cfg | 6 ++ .../config-lgsm/hcuserver/_default.cfg | 6 ++ .../config-lgsm/hl2dmserver/_default.cfg | 6 ++ .../config-lgsm/hldmserver/_default.cfg | 6 ++ .../config-lgsm/hldmsserver/_default.cfg | 6 ++ .../config-lgsm/hwserver/_default.cfg | 6 ++ .../config-lgsm/hzserver/_default.cfg | 6 ++ .../config-lgsm/insserver/_default.cfg | 6 ++ .../config-lgsm/inssserver/_default.cfg | 6 ++ .../config-lgsm/iosserver/_default.cfg | 6 ++ .../config-lgsm/jc2server/_default.cfg | 6 ++ .../config-lgsm/jc3server/_default.cfg | 6 ++ .../config-lgsm/jk2server/_default.cfg | 6 ++ .../config-lgsm/kf2server/_default.cfg | 6 ++ .../config-lgsm/kfserver/_default.cfg | 6 ++ .../config-lgsm/l4d2server/_default.cfg | 6 ++ .../config-lgsm/l4dserver/_default.cfg | 6 ++ .../config-lgsm/mcbserver/_default.cfg | 6 ++ .../config-lgsm/mcserver/_default.cfg | 6 ++ .../config-lgsm/mhserver/_default.cfg | 6 ++ .../config-lgsm/mohaaserver/_default.cfg | 6 ++ .../config-lgsm/momserver/_default.cfg | 6 ++ .../config-lgsm/mtaserver/_default.cfg | 6 ++ .../config-lgsm/ndserver/_default.cfg | 6 ++ .../config-lgsm/necserver/_default.cfg | 6 ++ .../config-lgsm/nmrihserver/_default.cfg | 6 ++ .../config-lgsm/ns2cserver/_default.cfg | 6 ++ .../config-lgsm/ns2server/_default.cfg | 6 ++ .../config-lgsm/nsserver/_default.cfg | 6 ++ .../config-lgsm/ohdserver/_default.cfg | 6 ++ .../config-lgsm/onsetserver/_default.cfg | 6 ++ .../config-lgsm/opforserver/_default.cfg | 6 ++ .../config-lgsm/pc2server/_default.cfg | 6 ++ .../config-lgsm/pcserver/_default.cfg | 6 ++ .../config-lgsm/pmcserver/_default.cfg | 6 ++ .../config-lgsm/pvkiiserver/_default.cfg | 6 ++ .../config-lgsm/pvrserver/_default.cfg | 6 ++ .../config-lgsm/pwserver/_default.cfg | 6 ++ .../config-lgsm/pzserver/_default.cfg | 6 ++ .../config-lgsm/q2server/_default.cfg | 6 ++ .../config-lgsm/q3server/_default.cfg | 6 ++ .../config-lgsm/q4server/_default.cfg | 6 ++ .../config-lgsm/qlserver/_default.cfg | 6 ++ .../config-lgsm/qwserver/_default.cfg | 6 ++ .../config-lgsm/ricochetserver/_default.cfg | 6 ++ .../config-lgsm/roserver/_default.cfg | 6 ++ .../config-lgsm/rtcwserver/_default.cfg | 6 ++ .../config-lgsm/rustserver/_default.cfg | 6 ++ .../config-lgsm/rwserver/_default.cfg | 6 ++ .../config-lgsm/sampserver/_default.cfg | 6 ++ .../config-lgsm/sbotsserver/_default.cfg | 6 ++ .../config-lgsm/sbserver/_default.cfg | 6 ++ .../config-lgsm/scpslserver/_default.cfg | 6 ++ .../config-lgsm/scpslsmserver/_default.cfg | 6 ++ .../config-lgsm/sdtdserver/_default.cfg | 6 ++ .../config-lgsm/sfcserver/_default.cfg | 6 ++ .../config-lgsm/sfserver/_default.cfg | 6 ++ .../config-lgsm/smserver/_default.cfg | 6 ++ .../config-lgsm/sof2server/_default.cfg | 6 ++ .../config-lgsm/solserver/_default.cfg | 6 ++ .../config-lgsm/squad44server/_default.cfg | 6 ++ .../config-lgsm/squadserver/_default.cfg | 6 ++ .../config-lgsm/stnserver/_default.cfg | 6 ++ .../config-lgsm/stserver/_default.cfg | 6 ++ .../config-lgsm/svenserver/_default.cfg | 6 ++ .../config-lgsm/terrariaserver/_default.cfg | 6 ++ .../config-lgsm/tf2cserver/_default.cfg | 6 ++ .../config-lgsm/tf2server/_default.cfg | 6 ++ .../config-lgsm/tfcserver/_default.cfg | 6 ++ .../config-lgsm/tfserver/_default.cfg | 6 ++ .../config-lgsm/tiserver/_default.cfg | 6 ++ .../config-lgsm/ts3server/_default.cfg | 6 ++ .../config-lgsm/tsserver/_default.cfg | 6 ++ .../config-lgsm/tuserver/_default.cfg | 6 ++ .../config-lgsm/twserver/_default.cfg | 6 ++ .../config-lgsm/untserver/_default.cfg | 6 ++ .../config-lgsm/ut2k4server/_default.cfg | 6 ++ .../config-lgsm/ut3server/_default.cfg | 6 ++ .../config-lgsm/ut99server/_default.cfg | 6 ++ .../config-lgsm/utserver/_default.cfg | 6 ++ .../config-lgsm/vhserver/_default.cfg | 6 ++ .../config-lgsm/vintsserver/_default.cfg | 6 ++ .../config-lgsm/vpmcserver/_default.cfg | 6 ++ .../config-lgsm/vsserver/_default.cfg | 6 ++ .../config-lgsm/wetserver/_default.cfg | 6 ++ .../config-lgsm/wfserver/_default.cfg | 6 ++ .../config-lgsm/wmcserver/_default.cfg | 6 ++ .../config-lgsm/wurmserver/_default.cfg | 6 ++ .../config-lgsm/xntserver/_default.cfg | 6 ++ .../config-lgsm/zmrserver/_default.cfg | 6 ++ .../config-lgsm/zpsserver/_default.cfg | 6 ++ lgsm/modules/alert.sh | 19 +++++ lgsm/modules/alert_matrix.sh | 70 +++++++++++++++++++ lgsm/modules/core_modules.sh | 5 ++ 142 files changed, 928 insertions(+) create mode 100755 lgsm/modules/alert_matrix.sh diff --git a/lgsm/config-default/config-lgsm/acserver/_default.cfg b/lgsm/config-default/config-lgsm/acserver/_default.cfg index 2c4f8c84a..7ccebf181 100644 --- a/lgsm/config-default/config-lgsm/acserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/acserver/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ahl2server/_default.cfg b/lgsm/config-default/config-lgsm/ahl2server/_default.cfg index 8e2f9b272..5bc539490 100644 --- a/lgsm/config-default/config-lgsm/ahl2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ahl2server/_default.cfg @@ -72,6 +72,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ahlserver/_default.cfg b/lgsm/config-default/config-lgsm/ahlserver/_default.cfg index 84501a48e..f0034ff36 100644 --- a/lgsm/config-default/config-lgsm/ahlserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ahlserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/arkserver/_default.cfg b/lgsm/config-default/config-lgsm/arkserver/_default.cfg index 0866ac0a0..d12a1893c 100644 --- a/lgsm/config-default/config-lgsm/arkserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/arkserver/_default.cfg @@ -69,6 +69,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/arma3server/_default.cfg b/lgsm/config-default/config-lgsm/arma3server/_default.cfg index 2db6dc955..3a63df700 100644 --- a/lgsm/config-default/config-lgsm/arma3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/arma3server/_default.cfg @@ -83,6 +83,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/armarserver/_default.cfg b/lgsm/config-default/config-lgsm/armarserver/_default.cfg index e7e8c24f4..4ae059d46 100644 --- a/lgsm/config-default/config-lgsm/armarserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/armarserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/atsserver/_default.cfg b/lgsm/config-default/config-lgsm/atsserver/_default.cfg index a37b64547..cbf2f355d 100644 --- a/lgsm/config-default/config-lgsm/atsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/atsserver/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/avserver/_default.cfg b/lgsm/config-default/config-lgsm/avserver/_default.cfg index 5220fa4e7..783ea29c9 100644 --- a/lgsm/config-default/config-lgsm/avserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/avserver/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/bb2server/_default.cfg b/lgsm/config-default/config-lgsm/bb2server/_default.cfg index c00bd7e7d..4e489a71e 100644 --- a/lgsm/config-default/config-lgsm/bb2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/bb2server/_default.cfg @@ -73,6 +73,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/bbserver/_default.cfg b/lgsm/config-default/config-lgsm/bbserver/_default.cfg index 5453a35f1..6b1a9aa13 100644 --- a/lgsm/config-default/config-lgsm/bbserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/bbserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/bdserver/_default.cfg b/lgsm/config-default/config-lgsm/bdserver/_default.cfg index ac5df16ae..1afd4b541 100644 --- a/lgsm/config-default/config-lgsm/bdserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/bdserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/bf1942server/_default.cfg b/lgsm/config-default/config-lgsm/bf1942server/_default.cfg index 69c4ba727..4ae64266b 100644 --- a/lgsm/config-default/config-lgsm/bf1942server/_default.cfg +++ b/lgsm/config-default/config-lgsm/bf1942server/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/bfvserver/_default.cfg b/lgsm/config-default/config-lgsm/bfvserver/_default.cfg index 7a28076b0..7e765f493 100644 --- a/lgsm/config-default/config-lgsm/bfvserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/bfvserver/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/bmdmserver/_default.cfg b/lgsm/config-default/config-lgsm/bmdmserver/_default.cfg index f4946bf34..ae63c7418 100644 --- a/lgsm/config-default/config-lgsm/bmdmserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/bmdmserver/_default.cfg @@ -73,6 +73,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/boserver/_default.cfg b/lgsm/config-default/config-lgsm/boserver/_default.cfg index 7eba6c82a..f5812e36a 100644 --- a/lgsm/config-default/config-lgsm/boserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/boserver/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/bsserver/_default.cfg b/lgsm/config-default/config-lgsm/bsserver/_default.cfg index 865e8cf20..837e85c07 100644 --- a/lgsm/config-default/config-lgsm/bsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/bsserver/_default.cfg @@ -77,6 +77,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/btlserver/_default.cfg b/lgsm/config-default/config-lgsm/btlserver/_default.cfg index a95a7e77c..a618d99d1 100644 --- a/lgsm/config-default/config-lgsm/btlserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/btlserver/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/btserver/_default.cfg b/lgsm/config-default/config-lgsm/btserver/_default.cfg index e12b1dfa3..c9534b1e4 100644 --- a/lgsm/config-default/config-lgsm/btserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/btserver/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ccserver/_default.cfg b/lgsm/config-default/config-lgsm/ccserver/_default.cfg index dcd65011d..595b2518c 100644 --- a/lgsm/config-default/config-lgsm/ccserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ccserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ckserver/_default.cfg b/lgsm/config-default/config-lgsm/ckserver/_default.cfg index 35f36dbf5..214075789 100644 --- a/lgsm/config-default/config-lgsm/ckserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ckserver/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/cmwserver/_default.cfg b/lgsm/config-default/config-lgsm/cmwserver/_default.cfg index bd81c0cdc..d9b5d50af 100644 --- a/lgsm/config-default/config-lgsm/cmwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/cmwserver/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/cod2server/_default.cfg b/lgsm/config-default/config-lgsm/cod2server/_default.cfg index f33d207cf..37a9e49d0 100644 --- a/lgsm/config-default/config-lgsm/cod2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/cod2server/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/cod4server/_default.cfg b/lgsm/config-default/config-lgsm/cod4server/_default.cfg index e2fee45b1..d8a82e306 100644 --- a/lgsm/config-default/config-lgsm/cod4server/_default.cfg +++ b/lgsm/config-default/config-lgsm/cod4server/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/codserver/_default.cfg b/lgsm/config-default/config-lgsm/codserver/_default.cfg index 364096768..70f9ef27f 100644 --- a/lgsm/config-default/config-lgsm/codserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/codserver/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/coduoserver/_default.cfg b/lgsm/config-default/config-lgsm/coduoserver/_default.cfg index 0a8da94a9..c01dbf48e 100644 --- a/lgsm/config-default/config-lgsm/coduoserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/coduoserver/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/codwawserver/_default.cfg b/lgsm/config-default/config-lgsm/codwawserver/_default.cfg index ce6bba88e..77d832fb3 100644 --- a/lgsm/config-default/config-lgsm/codwawserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/codwawserver/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/colserver/_default.cfg b/lgsm/config-default/config-lgsm/colserver/_default.cfg index 4a560cebb..e8dab4132 100644 --- a/lgsm/config-default/config-lgsm/colserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/colserver/_default.cfg @@ -61,6 +61,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/cs2server/_default.cfg b/lgsm/config-default/config-lgsm/cs2server/_default.cfg index 8d65b5364..54f14a967 100644 --- a/lgsm/config-default/config-lgsm/cs2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/cs2server/_default.cfg @@ -72,6 +72,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/csczserver/_default.cfg b/lgsm/config-default/config-lgsm/csczserver/_default.cfg index f5d90a35b..de75b633a 100644 --- a/lgsm/config-default/config-lgsm/csczserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/csczserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/csgoserver/_default.cfg b/lgsm/config-default/config-lgsm/csgoserver/_default.cfg index 6ae89331f..1d840be22 100644 --- a/lgsm/config-default/config-lgsm/csgoserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/csgoserver/_default.cfg @@ -104,6 +104,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/csserver/_default.cfg b/lgsm/config-default/config-lgsm/csserver/_default.cfg index 2ca833c87..c795068f7 100644 --- a/lgsm/config-default/config-lgsm/csserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/csserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/cssserver/_default.cfg b/lgsm/config-default/config-lgsm/cssserver/_default.cfg index a396678ff..3690d534e 100644 --- a/lgsm/config-default/config-lgsm/cssserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/cssserver/_default.cfg @@ -73,6 +73,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ctserver/_default.cfg b/lgsm/config-default/config-lgsm/ctserver/_default.cfg index c90d6125c..bc7086144 100644 --- a/lgsm/config-default/config-lgsm/ctserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ctserver/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/dabserver/_default.cfg b/lgsm/config-default/config-lgsm/dabserver/_default.cfg index 28c4478fd..b60293140 100644 --- a/lgsm/config-default/config-lgsm/dabserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dabserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/dayzserver/_default.cfg b/lgsm/config-default/config-lgsm/dayzserver/_default.cfg index 7e84df534..0a275ab50 100644 --- a/lgsm/config-default/config-lgsm/dayzserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dayzserver/_default.cfg @@ -83,6 +83,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/dmcserver/_default.cfg b/lgsm/config-default/config-lgsm/dmcserver/_default.cfg index 9d40dd637..5a1cefa5d 100644 --- a/lgsm/config-default/config-lgsm/dmcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dmcserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/dodrserver/_default.cfg b/lgsm/config-default/config-lgsm/dodrserver/_default.cfg index 3c16fcdd5..12aaba52b 100644 --- a/lgsm/config-default/config-lgsm/dodrserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dodrserver/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/dodserver/_default.cfg b/lgsm/config-default/config-lgsm/dodserver/_default.cfg index 8f3845911..3a026115a 100644 --- a/lgsm/config-default/config-lgsm/dodserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dodserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/dodsserver/_default.cfg b/lgsm/config-default/config-lgsm/dodsserver/_default.cfg index 4f113a64f..07fb71584 100644 --- a/lgsm/config-default/config-lgsm/dodsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dodsserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/doiserver/_default.cfg b/lgsm/config-default/config-lgsm/doiserver/_default.cfg index 65ee56f1e..bac000eba 100644 --- a/lgsm/config-default/config-lgsm/doiserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/doiserver/_default.cfg @@ -69,6 +69,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/dstserver/_default.cfg b/lgsm/config-default/config-lgsm/dstserver/_default.cfg index 7c8f3fa30..2e9061eae 100644 --- a/lgsm/config-default/config-lgsm/dstserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dstserver/_default.cfg @@ -70,6 +70,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/dysserver/_default.cfg b/lgsm/config-default/config-lgsm/dysserver/_default.cfg index b65d0ba47..d8d58569e 100644 --- a/lgsm/config-default/config-lgsm/dysserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dysserver/_default.cfg @@ -73,6 +73,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ecoserver/_default.cfg b/lgsm/config-default/config-lgsm/ecoserver/_default.cfg index c68902ffc..8f86126ac 100644 --- a/lgsm/config-default/config-lgsm/ecoserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ecoserver/_default.cfg @@ -63,6 +63,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/emserver/_default.cfg b/lgsm/config-default/config-lgsm/emserver/_default.cfg index e8f537aab..d7a12ea7c 100644 --- a/lgsm/config-default/config-lgsm/emserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/emserver/_default.cfg @@ -73,6 +73,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/etlserver/_default.cfg b/lgsm/config-default/config-lgsm/etlserver/_default.cfg index 9679a8f44..634cc8b68 100644 --- a/lgsm/config-default/config-lgsm/etlserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/etlserver/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ets2server/_default.cfg b/lgsm/config-default/config-lgsm/ets2server/_default.cfg index 116de6b6d..84d71e71e 100644 --- a/lgsm/config-default/config-lgsm/ets2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ets2server/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/fctrserver/_default.cfg b/lgsm/config-default/config-lgsm/fctrserver/_default.cfg index 6eeeda637..5d85b572e 100644 --- a/lgsm/config-default/config-lgsm/fctrserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/fctrserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/fofserver/_default.cfg b/lgsm/config-default/config-lgsm/fofserver/_default.cfg index 857c596a2..85e3aecf0 100644 --- a/lgsm/config-default/config-lgsm/fofserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/fofserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/gmodserver/_default.cfg b/lgsm/config-default/config-lgsm/gmodserver/_default.cfg index 852094b7c..119b6779f 100644 --- a/lgsm/config-default/config-lgsm/gmodserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/gmodserver/_default.cfg @@ -78,6 +78,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/hcuserver/_default.cfg b/lgsm/config-default/config-lgsm/hcuserver/_default.cfg index 2340506a9..cab483a2b 100644 --- a/lgsm/config-default/config-lgsm/hcuserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hcuserver/_default.cfg @@ -75,6 +75,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/hl2dmserver/_default.cfg b/lgsm/config-default/config-lgsm/hl2dmserver/_default.cfg index 55f1c3918..7268a7aff 100644 --- a/lgsm/config-default/config-lgsm/hl2dmserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hl2dmserver/_default.cfg @@ -70,6 +70,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/hldmserver/_default.cfg b/lgsm/config-default/config-lgsm/hldmserver/_default.cfg index 84d7ca030..3006fa6bf 100644 --- a/lgsm/config-default/config-lgsm/hldmserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hldmserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/hldmsserver/_default.cfg b/lgsm/config-default/config-lgsm/hldmsserver/_default.cfg index c1de9618d..027362cf3 100644 --- a/lgsm/config-default/config-lgsm/hldmsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hldmsserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/hwserver/_default.cfg b/lgsm/config-default/config-lgsm/hwserver/_default.cfg index 70c08c204..bb0daee39 100644 --- a/lgsm/config-default/config-lgsm/hwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hwserver/_default.cfg @@ -78,6 +78,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/hzserver/_default.cfg b/lgsm/config-default/config-lgsm/hzserver/_default.cfg index d2e63e692..58a2d1a9c 100644 --- a/lgsm/config-default/config-lgsm/hzserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hzserver/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/insserver/_default.cfg b/lgsm/config-default/config-lgsm/insserver/_default.cfg index 74760c2e0..df4af52bd 100644 --- a/lgsm/config-default/config-lgsm/insserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/insserver/_default.cfg @@ -74,6 +74,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/inssserver/_default.cfg b/lgsm/config-default/config-lgsm/inssserver/_default.cfg index 60f138093..1fda4d6b6 100644 --- a/lgsm/config-default/config-lgsm/inssserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/inssserver/_default.cfg @@ -77,6 +77,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/iosserver/_default.cfg b/lgsm/config-default/config-lgsm/iosserver/_default.cfg index 30c41d1fa..452e91912 100644 --- a/lgsm/config-default/config-lgsm/iosserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/iosserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/jc2server/_default.cfg b/lgsm/config-default/config-lgsm/jc2server/_default.cfg index fe3f28dff..4feb5c892 100644 --- a/lgsm/config-default/config-lgsm/jc2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/jc2server/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/jc3server/_default.cfg b/lgsm/config-default/config-lgsm/jc3server/_default.cfg index faa4f0a09..331a35401 100644 --- a/lgsm/config-default/config-lgsm/jc3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/jc3server/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/jk2server/_default.cfg b/lgsm/config-default/config-lgsm/jk2server/_default.cfg index ef0a54ad8..4f44289a4 100644 --- a/lgsm/config-default/config-lgsm/jk2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/jk2server/_default.cfg @@ -69,6 +69,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/kf2server/_default.cfg b/lgsm/config-default/config-lgsm/kf2server/_default.cfg index b6e39b1ed..f296fc228 100644 --- a/lgsm/config-default/config-lgsm/kf2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/kf2server/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/kfserver/_default.cfg b/lgsm/config-default/config-lgsm/kfserver/_default.cfg index 77507e436..1852116e1 100644 --- a/lgsm/config-default/config-lgsm/kfserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/kfserver/_default.cfg @@ -72,6 +72,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/l4d2server/_default.cfg b/lgsm/config-default/config-lgsm/l4d2server/_default.cfg index 5e6dcfc4e..00c6bd7bc 100644 --- a/lgsm/config-default/config-lgsm/l4d2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/l4d2server/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/l4dserver/_default.cfg b/lgsm/config-default/config-lgsm/l4dserver/_default.cfg index 4039df849..41419dd4c 100644 --- a/lgsm/config-default/config-lgsm/l4dserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/l4dserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/mcbserver/_default.cfg b/lgsm/config-default/config-lgsm/mcbserver/_default.cfg index 49ac842a6..901ea3e04 100644 --- a/lgsm/config-default/config-lgsm/mcbserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/mcbserver/_default.cfg @@ -63,6 +63,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/mcserver/_default.cfg b/lgsm/config-default/config-lgsm/mcserver/_default.cfg index 20ede8c01..f55bffeda 100644 --- a/lgsm/config-default/config-lgsm/mcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/mcserver/_default.cfg @@ -69,6 +69,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/mhserver/_default.cfg b/lgsm/config-default/config-lgsm/mhserver/_default.cfg index 4414621fa..9b98d5221 100644 --- a/lgsm/config-default/config-lgsm/mhserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/mhserver/_default.cfg @@ -69,6 +69,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/mohaaserver/_default.cfg b/lgsm/config-default/config-lgsm/mohaaserver/_default.cfg index 5784ceede..cf2d3edad 100644 --- a/lgsm/config-default/config-lgsm/mohaaserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/mohaaserver/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/momserver/_default.cfg b/lgsm/config-default/config-lgsm/momserver/_default.cfg index 44eef19e7..74123084f 100644 --- a/lgsm/config-default/config-lgsm/momserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/momserver/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/mtaserver/_default.cfg b/lgsm/config-default/config-lgsm/mtaserver/_default.cfg index 7bba9fc10..d086a5c8e 100644 --- a/lgsm/config-default/config-lgsm/mtaserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/mtaserver/_default.cfg @@ -63,6 +63,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ndserver/_default.cfg b/lgsm/config-default/config-lgsm/ndserver/_default.cfg index 3ef7000cd..8156201b8 100644 --- a/lgsm/config-default/config-lgsm/ndserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ndserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/necserver/_default.cfg b/lgsm/config-default/config-lgsm/necserver/_default.cfg index 648e0a40c..46d09d239 100644 --- a/lgsm/config-default/config-lgsm/necserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/necserver/_default.cfg @@ -63,6 +63,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/nmrihserver/_default.cfg b/lgsm/config-default/config-lgsm/nmrihserver/_default.cfg index 330160428..bb9fadf52 100644 --- a/lgsm/config-default/config-lgsm/nmrihserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/nmrihserver/_default.cfg @@ -73,6 +73,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg b/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg index 565187394..33bbb1e63 100644 --- a/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg @@ -75,6 +75,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ns2server/_default.cfg b/lgsm/config-default/config-lgsm/ns2server/_default.cfg index 8964f1dfd..7e5fc6015 100644 --- a/lgsm/config-default/config-lgsm/ns2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ns2server/_default.cfg @@ -76,6 +76,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/nsserver/_default.cfg b/lgsm/config-default/config-lgsm/nsserver/_default.cfg index 98fce8ae9..b859b8426 100644 --- a/lgsm/config-default/config-lgsm/nsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/nsserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ohdserver/_default.cfg b/lgsm/config-default/config-lgsm/ohdserver/_default.cfg index 6213a365f..b330e3603 100644 --- a/lgsm/config-default/config-lgsm/ohdserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ohdserver/_default.cfg @@ -70,6 +70,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/onsetserver/_default.cfg b/lgsm/config-default/config-lgsm/onsetserver/_default.cfg index 17a6c0767..0731d62ff 100644 --- a/lgsm/config-default/config-lgsm/onsetserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/onsetserver/_default.cfg @@ -61,6 +61,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/opforserver/_default.cfg b/lgsm/config-default/config-lgsm/opforserver/_default.cfg index 7f025a854..a60eed67e 100644 --- a/lgsm/config-default/config-lgsm/opforserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/opforserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/pc2server/_default.cfg b/lgsm/config-default/config-lgsm/pc2server/_default.cfg index ad71870c9..ec0e0b0dd 100644 --- a/lgsm/config-default/config-lgsm/pc2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/pc2server/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/pcserver/_default.cfg b/lgsm/config-default/config-lgsm/pcserver/_default.cfg index 54dfa4019..cf833db8a 100644 --- a/lgsm/config-default/config-lgsm/pcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pcserver/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/pmcserver/_default.cfg b/lgsm/config-default/config-lgsm/pmcserver/_default.cfg index b915a9712..a861acd40 100644 --- a/lgsm/config-default/config-lgsm/pmcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pmcserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/pvkiiserver/_default.cfg b/lgsm/config-default/config-lgsm/pvkiiserver/_default.cfg index 64ee41bb0..eddbec490 100644 --- a/lgsm/config-default/config-lgsm/pvkiiserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pvkiiserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/pvrserver/_default.cfg b/lgsm/config-default/config-lgsm/pvrserver/_default.cfg index e3f0bc989..85deb664f 100644 --- a/lgsm/config-default/config-lgsm/pvrserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pvrserver/_default.cfg @@ -69,6 +69,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/pwserver/_default.cfg b/lgsm/config-default/config-lgsm/pwserver/_default.cfg index c9052958a..e00a4c1ac 100644 --- a/lgsm/config-default/config-lgsm/pwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pwserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/pzserver/_default.cfg b/lgsm/config-default/config-lgsm/pzserver/_default.cfg index aa0ca6525..dd99cc0c2 100644 --- a/lgsm/config-default/config-lgsm/pzserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pzserver/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/q2server/_default.cfg b/lgsm/config-default/config-lgsm/q2server/_default.cfg index 5b40936e1..05b235a96 100644 --- a/lgsm/config-default/config-lgsm/q2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/q2server/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/q3server/_default.cfg b/lgsm/config-default/config-lgsm/q3server/_default.cfg index 35e612651..be8f204ef 100644 --- a/lgsm/config-default/config-lgsm/q3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/q3server/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/q4server/_default.cfg b/lgsm/config-default/config-lgsm/q4server/_default.cfg index 32293c955..202261199 100644 --- a/lgsm/config-default/config-lgsm/q4server/_default.cfg +++ b/lgsm/config-default/config-lgsm/q4server/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/qlserver/_default.cfg b/lgsm/config-default/config-lgsm/qlserver/_default.cfg index e1c8d2fac..09f785f92 100644 --- a/lgsm/config-default/config-lgsm/qlserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/qlserver/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/qwserver/_default.cfg b/lgsm/config-default/config-lgsm/qwserver/_default.cfg index 39cce3204..86aebb27b 100644 --- a/lgsm/config-default/config-lgsm/qwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/qwserver/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ricochetserver/_default.cfg b/lgsm/config-default/config-lgsm/ricochetserver/_default.cfg index b97ff5b7f..16f0480bc 100644 --- a/lgsm/config-default/config-lgsm/ricochetserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ricochetserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/roserver/_default.cfg b/lgsm/config-default/config-lgsm/roserver/_default.cfg index 10eb081bd..51da7be2c 100644 --- a/lgsm/config-default/config-lgsm/roserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/roserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/rtcwserver/_default.cfg b/lgsm/config-default/config-lgsm/rtcwserver/_default.cfg index b8d3e1eb7..73a77dfbe 100644 --- a/lgsm/config-default/config-lgsm/rtcwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/rtcwserver/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/rustserver/_default.cfg b/lgsm/config-default/config-lgsm/rustserver/_default.cfg index c5823b5f1..164c8479c 100644 --- a/lgsm/config-default/config-lgsm/rustserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/rustserver/_default.cfg @@ -80,6 +80,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/rwserver/_default.cfg b/lgsm/config-default/config-lgsm/rwserver/_default.cfg index 2d95710e1..9fef08ae2 100644 --- a/lgsm/config-default/config-lgsm/rwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/rwserver/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/sampserver/_default.cfg b/lgsm/config-default/config-lgsm/sampserver/_default.cfg index 3caf0a4f2..6a0f00895 100644 --- a/lgsm/config-default/config-lgsm/sampserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sampserver/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/sbotsserver/_default.cfg b/lgsm/config-default/config-lgsm/sbotsserver/_default.cfg index 2bd551530..1288ba57d 100644 --- a/lgsm/config-default/config-lgsm/sbotsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sbotsserver/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/sbserver/_default.cfg b/lgsm/config-default/config-lgsm/sbserver/_default.cfg index 671e09b31..496ee3f04 100644 --- a/lgsm/config-default/config-lgsm/sbserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sbserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/scpslserver/_default.cfg b/lgsm/config-default/config-lgsm/scpslserver/_default.cfg index 02140723b..64b573a39 100644 --- a/lgsm/config-default/config-lgsm/scpslserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/scpslserver/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/scpslsmserver/_default.cfg b/lgsm/config-default/config-lgsm/scpslsmserver/_default.cfg index 1ca04be52..885bd244f 100644 --- a/lgsm/config-default/config-lgsm/scpslsmserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/scpslsmserver/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/sdtdserver/_default.cfg b/lgsm/config-default/config-lgsm/sdtdserver/_default.cfg index 985b29643..6e2164dfa 100644 --- a/lgsm/config-default/config-lgsm/sdtdserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sdtdserver/_default.cfg @@ -63,6 +63,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/sfcserver/_default.cfg b/lgsm/config-default/config-lgsm/sfcserver/_default.cfg index 4b5c3bc91..8431e6441 100644 --- a/lgsm/config-default/config-lgsm/sfcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sfcserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/sfserver/_default.cfg b/lgsm/config-default/config-lgsm/sfserver/_default.cfg index 4e7272b47..75be1f00a 100644 --- a/lgsm/config-default/config-lgsm/sfserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sfserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/smserver/_default.cfg b/lgsm/config-default/config-lgsm/smserver/_default.cfg index 4fd669e9b..029b33306 100644 --- a/lgsm/config-default/config-lgsm/smserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/smserver/_default.cfg @@ -71,6 +71,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/sof2server/_default.cfg b/lgsm/config-default/config-lgsm/sof2server/_default.cfg index 70783da4a..5c0500e53 100644 --- a/lgsm/config-default/config-lgsm/sof2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/sof2server/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/solserver/_default.cfg b/lgsm/config-default/config-lgsm/solserver/_default.cfg index 06147b620..1a30eb894 100644 --- a/lgsm/config-default/config-lgsm/solserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/solserver/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/squad44server/_default.cfg b/lgsm/config-default/config-lgsm/squad44server/_default.cfg index 36037a113..a747319ad 100644 --- a/lgsm/config-default/config-lgsm/squad44server/_default.cfg +++ b/lgsm/config-default/config-lgsm/squad44server/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/squadserver/_default.cfg b/lgsm/config-default/config-lgsm/squadserver/_default.cfg index db783c810..42ea1c219 100644 --- a/lgsm/config-default/config-lgsm/squadserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/squadserver/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/stnserver/_default.cfg b/lgsm/config-default/config-lgsm/stnserver/_default.cfg index 4fef17c4b..9a5958e4c 100644 --- a/lgsm/config-default/config-lgsm/stnserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/stnserver/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/stserver/_default.cfg b/lgsm/config-default/config-lgsm/stserver/_default.cfg index 4aeaa9c8d..a4e4a3757 100644 --- a/lgsm/config-default/config-lgsm/stserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/stserver/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/svenserver/_default.cfg b/lgsm/config-default/config-lgsm/svenserver/_default.cfg index 24ea8bf66..2e1fac2b1 100644 --- a/lgsm/config-default/config-lgsm/svenserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/svenserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/terrariaserver/_default.cfg b/lgsm/config-default/config-lgsm/terrariaserver/_default.cfg index 557ad48af..47ac74169 100644 --- a/lgsm/config-default/config-lgsm/terrariaserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/terrariaserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg b/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg index fdbcc2cba..e17cb3cd7 100644 --- a/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tf2cserver/_default.cfg @@ -75,6 +75,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/tf2server/_default.cfg b/lgsm/config-default/config-lgsm/tf2server/_default.cfg index 16a4285f0..8411a07b3 100644 --- a/lgsm/config-default/config-lgsm/tf2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/tf2server/_default.cfg @@ -75,6 +75,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/tfcserver/_default.cfg b/lgsm/config-default/config-lgsm/tfcserver/_default.cfg index ec2e2cade..404f31c5f 100644 --- a/lgsm/config-default/config-lgsm/tfcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tfcserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/tfserver/_default.cfg b/lgsm/config-default/config-lgsm/tfserver/_default.cfg index 880e12acb..c46ab2237 100644 --- a/lgsm/config-default/config-lgsm/tfserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tfserver/_default.cfg @@ -84,6 +84,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/tiserver/_default.cfg b/lgsm/config-default/config-lgsm/tiserver/_default.cfg index 75aa946f0..2aca052b7 100644 --- a/lgsm/config-default/config-lgsm/tiserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tiserver/_default.cfg @@ -66,6 +66,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ts3server/_default.cfg b/lgsm/config-default/config-lgsm/ts3server/_default.cfg index 87cd0dc31..2c91390ec 100644 --- a/lgsm/config-default/config-lgsm/ts3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ts3server/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/tsserver/_default.cfg b/lgsm/config-default/config-lgsm/tsserver/_default.cfg index b3e9799d6..a0f5a46d0 100644 --- a/lgsm/config-default/config-lgsm/tsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tsserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/tuserver/_default.cfg b/lgsm/config-default/config-lgsm/tuserver/_default.cfg index a4e7acaf8..3cae2e85b 100644 --- a/lgsm/config-default/config-lgsm/tuserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tuserver/_default.cfg @@ -70,6 +70,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/twserver/_default.cfg b/lgsm/config-default/config-lgsm/twserver/_default.cfg index ea512f271..6512081b1 100644 --- a/lgsm/config-default/config-lgsm/twserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/twserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/untserver/_default.cfg b/lgsm/config-default/config-lgsm/untserver/_default.cfg index 7dd97e269..0f9d4d57e 100644 --- a/lgsm/config-default/config-lgsm/untserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/untserver/_default.cfg @@ -74,6 +74,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ut2k4server/_default.cfg b/lgsm/config-default/config-lgsm/ut2k4server/_default.cfg index 37b219ece..907fa04c9 100644 --- a/lgsm/config-default/config-lgsm/ut2k4server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ut2k4server/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ut3server/_default.cfg b/lgsm/config-default/config-lgsm/ut3server/_default.cfg index 1d7ecf269..1a239ac10 100644 --- a/lgsm/config-default/config-lgsm/ut3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ut3server/_default.cfg @@ -80,6 +80,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/ut99server/_default.cfg b/lgsm/config-default/config-lgsm/ut99server/_default.cfg index 62b4abc57..07dce1777 100644 --- a/lgsm/config-default/config-lgsm/ut99server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ut99server/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/utserver/_default.cfg b/lgsm/config-default/config-lgsm/utserver/_default.cfg index 401cded1a..2dd8b2b17 100644 --- a/lgsm/config-default/config-lgsm/utserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/utserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/vhserver/_default.cfg b/lgsm/config-default/config-lgsm/vhserver/_default.cfg index 8380e7c16..1eab475ee 100644 --- a/lgsm/config-default/config-lgsm/vhserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/vhserver/_default.cfg @@ -101,6 +101,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/vintsserver/_default.cfg b/lgsm/config-default/config-lgsm/vintsserver/_default.cfg index ed57b6d84..d1d8ef36f 100644 --- a/lgsm/config-default/config-lgsm/vintsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/vintsserver/_default.cfg @@ -64,6 +64,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/vpmcserver/_default.cfg b/lgsm/config-default/config-lgsm/vpmcserver/_default.cfg index 6bccc92fd..52fc7adfc 100644 --- a/lgsm/config-default/config-lgsm/vpmcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/vpmcserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/vsserver/_default.cfg b/lgsm/config-default/config-lgsm/vsserver/_default.cfg index 9414c6978..84d593d51 100644 --- a/lgsm/config-default/config-lgsm/vsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/vsserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/wetserver/_default.cfg b/lgsm/config-default/config-lgsm/wetserver/_default.cfg index fdd42aaf9..b24d7e422 100644 --- a/lgsm/config-default/config-lgsm/wetserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/wetserver/_default.cfg @@ -60,6 +60,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/wfserver/_default.cfg b/lgsm/config-default/config-lgsm/wfserver/_default.cfg index adde08321..69a3d90e8 100644 --- a/lgsm/config-default/config-lgsm/wfserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/wfserver/_default.cfg @@ -65,6 +65,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/wmcserver/_default.cfg b/lgsm/config-default/config-lgsm/wmcserver/_default.cfg index d5ff2893f..a47978b8c 100644 --- a/lgsm/config-default/config-lgsm/wmcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/wmcserver/_default.cfg @@ -67,6 +67,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/wurmserver/_default.cfg b/lgsm/config-default/config-lgsm/wurmserver/_default.cfg index d65df817f..3e5ebe017 100644 --- a/lgsm/config-default/config-lgsm/wurmserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/wurmserver/_default.cfg @@ -104,6 +104,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/xntserver/_default.cfg b/lgsm/config-default/config-lgsm/xntserver/_default.cfg index d7b85f58a..da371512e 100644 --- a/lgsm/config-default/config-lgsm/xntserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/xntserver/_default.cfg @@ -62,6 +62,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/zmrserver/_default.cfg b/lgsm/config-default/config-lgsm/zmrserver/_default.cfg index b2c61b9fd..121f8fa53 100644 --- a/lgsm/config-default/config-lgsm/zmrserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/zmrserver/_default.cfg @@ -68,6 +68,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/config-default/config-lgsm/zpsserver/_default.cfg b/lgsm/config-default/config-lgsm/zpsserver/_default.cfg index c43b008b5..5489848a5 100644 --- a/lgsm/config-default/config-lgsm/zpsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/zpsserver/_default.cfg @@ -73,6 +73,12 @@ ntfypassword="" ntfypriority="" ntfytags="" +# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix +matrixalert="off" +matrixhomeserver="matrix.org" +matrixtoken="accesstoken" +matrixroom="" + # Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet pushbulletalert="off" pushbullettoken="accesstoken" diff --git a/lgsm/modules/alert.sh b/lgsm/modules/alert.sh index ac7d92d83..b256390df 100755 --- a/lgsm/modules/alert.sh +++ b/lgsm/modules/alert.sh @@ -379,6 +379,25 @@ elif [ -z "${slacktoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then fn_script_error "Slack token not set" fi +if [ "${matrixalert}" == "on" ] && [ -n "${matrixhomeserver}" ] && [ -n "${matrixtoken}" ] && [ -n "${matrixroom}" ]; then + alert_matrix.sh +elif [ "${matrixalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then + fn_print_warn_nl "Matrix alerts not enabled" + fn_script_log_warn "Matrix alerts not enabled" +elif [ -z "${matrixhomeserver}" ] && [ "${commandname}" == "TEST-ALERT" ]; then + fn_print_error_nl "Matrix homeserver not set" + echo -e "* https://docs.linuxgsm.com/alerts/matrix" + fn_script_error "Matrix homeserver not set" +elif [ -z "${matrixtoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then + fn_print_error_nl "Matrix token not set" + echo -e "* https://docs.linuxgsm.com/alerts/matrix" + fn_script_error "Matrix token not set" +elif [ -z "${matrixroom}" ] && [ "${commandname}" == "TEST-ALERT" ]; then + fn_print_error_nl "Matrix room not set" + echo -e "* https://docs.linuxgsm.com/alerts/matrix" + fn_script_error "Matrix room not set" +fi + if [ "${ntfyalert}" == "on" ] && [ -n "${ntfytopic}" ]; then alert_ntfy.sh elif [ "${ntfyalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then diff --git a/lgsm/modules/alert_matrix.sh b/lgsm/modules/alert_matrix.sh new file mode 100755 index 000000000..ab3f6e230 --- /dev/null +++ b/lgsm/modules/alert_matrix.sh @@ -0,0 +1,70 @@ +#!/bin/bash +# LinuxGSM alert_matrix.sh module +# Author: Daniel Gibbs (Original Structure) +# Contributors: https://linuxgsm.com/contrib +# Website: https://linuxgsm.com +# Description: Sends Matrix alert. + +moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" + +matrixbase="${matrixhomeserver}" +if [[ "${matrixbase}" != http://* ]] && [[ "${matrixbase}" != https://* ]]; then + matrixbase="https://${matrixbase}" +fi +matrixbase="${matrixbase%/}" + +# matrixroom must be the internal room ID (e.g. !abc123:matrix.org), not the room alias (#room:matrix.org). +matrixroomencoded="$(jq -rn --arg room "${matrixroom}" '$room|@uri')" +matrixtxnid="$(date +%s%N)" +matrixurl="${matrixbase}/_matrix/client/v3/rooms/${matrixroomencoded}/send/m.room.message/${matrixtxnid}" + +message="${alerttitle} + +Server Name +${servername} + +Information +${alertmessage} + +Game +${gamename} + +Server IP +${alertip}:${port} + +Server Time +$(date)" + +if [ -n "${querytype}" ]; then + message+=" + +Is my Game Server Online? +https://ismygameserver.online/${imgsoquerytype}/${alertip}:${queryport}" +fi + +if [ -n "${alerturl}" ]; then + message+=" + +More info +${alerturl}" +fi + +json="$(jq -cn --arg body "${message}" '{msgtype: "m.notice", body: $body}')" + +fn_print_dots "Sending Matrix alert" + +matrixsend=$(curl --connect-timeout 10 -sSL -X PUT \ + -H "Authorization: Bearer ${matrixtoken}" \ + -H "Content-Type: application/json" \ + -d "${json}" \ + "${matrixurl}") +exitcode=$? + +matrixeventid="$(echo "${matrixsend}" | jq -r '.event_id // empty' 2>/dev/null)" +if [ "${exitcode}" -eq 0 ] && [ -n "${matrixeventid}" ]; then + fn_print_ok_nl "Sending Matrix alert" + fn_script_log_pass "Sending Matrix alert" +else + fn_print_fail_nl "Sending Matrix alert: ${matrixsend}" + fn_script_log_fail "Sending Matrix alert: ${matrixsend}" +fi diff --git a/lgsm/modules/core_modules.sh b/lgsm/modules/core_modules.sh index ce1a6f6d4..8752cf76b 100755 --- a/lgsm/modules/core_modules.sh +++ b/lgsm/modules/core_modules.sh @@ -590,6 +590,11 @@ alert_ifttt.sh() { fn_fetch_module } +alert_matrix.sh() { + modulefile="${FUNCNAME[0]}" + fn_fetch_module +} + alert_ntfy.sh() { modulefile="${FUNCNAME[0]}" fn_fetch_module From 4067615be8d5209a855a36106e332aa93527c910 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Jul 2026 19:14:18 +0100 Subject: [PATCH 40/44] fix(ci): make Prettier workflow pass on develop (#4941) * 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. --- .prettierignore | 4 ++++ lgsm/modules/alert_matrix.sh | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.prettierignore b/.prettierignore index 7b065e422..ed5b8552f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,7 @@ # Prettier auto-commit runs with GITHUB_TOKEN (GitHub App). # GitHub blocks that token from creating/updating anything under .github/workflows. .github/workflows/** + +# Machine-generated by npm; its format is owned by npm, not Prettier. +# Prettier reformatting it fights npm and makes the auto-commit run fail. +package-lock.json diff --git a/lgsm/modules/alert_matrix.sh b/lgsm/modules/alert_matrix.sh index ab3f6e230..34d226f1f 100755 --- a/lgsm/modules/alert_matrix.sh +++ b/lgsm/modules/alert_matrix.sh @@ -60,7 +60,7 @@ matrixsend=$(curl --connect-timeout 10 -sSL -X PUT \ "${matrixurl}") exitcode=$? -matrixeventid="$(echo "${matrixsend}" | jq -r '.event_id // empty' 2>/dev/null)" +matrixeventid="$(echo "${matrixsend}" | jq -r '.event_id // empty' 2> /dev/null)" if [ "${exitcode}" -eq 0 ] && [ -n "${matrixeventid}" ]; then fn_print_ok_nl "Sending Matrix alert" fn_script_log_pass "Sending Matrix alert" From 6bcb8565b1c074d78e8be2d29fb21dae5f70bf42 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Jul 2026 19:33:04 +0100 Subject: [PATCH 41/44] fix(jbep3): correct servercfgdefault to server.cfg (#4942) 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. --- lgsm/config-default/config-lgsm/jbep3server/_default.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lgsm/config-default/config-lgsm/jbep3server/_default.cfg b/lgsm/config-default/config-lgsm/jbep3server/_default.cfg index 069c423db..2036d3522 100644 --- a/lgsm/config-default/config-lgsm/jbep3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/jbep3server/_default.cfg @@ -173,7 +173,7 @@ executabledir="${serverfiles}" executable="./srcds_run.sh" servercfgdir="${systemdir}/cfg" servercfg="${selfname}.cfg" -servercfgdefault="server.sample.cfg" +servercfgdefault="server.cfg" servercfgfullpath="${servercfgdir}/${servercfg}" ## Backup Directory From 51ad60e1805f0432274a850a8ac602b844f308a9 Mon Sep 17 00:00:00 2001 From: "Silas J. Matson" Date: Sun, 19 Jul 2026 11:45:40 -0700 Subject: [PATCH 42/44] fix: Set TERM=screen for all non-interactive tmux calls (#4860) When connected to a server via ssh, and the server doesn't have the proper terminfo, tmux will fail with 'unsupported terminal' errors. These errors are not surfaced by the scripts, e.g. details, start, stop, so they result in either silent failures or don't work at all. e.g. `./mcserver details` on my server showed 0% CPU, 0% Memory, and STOPPED for the server status when the server was actually running. This was because the tmux calls to get this info failed. The root cause of this was that I was connected to my server via kitty, a terminal emulator that my server did not have terminfo for. This can be resolved via running `infocmp -x xterm-kitty | ssh YOUR-SERVER -- tic -x -` and replacing `xterm-kitty` with whatever is appropriate, or by setting TERM=xterm-256color in the ssh config, but that is not obvious to do when presented with silent failures. This commit sets TERM=screen for all non-interactive tmux calls, which resolves the issue. Note that the `console` command does not set this, as that is an interactive shell, and the user's terminfo should be passed. Co-authored-by: Daniel Gibbs --- lgsm/modules/check_status.sh | 2 +- lgsm/modules/command_send.sh | 2 +- lgsm/modules/command_start.sh | 8 ++++---- lgsm/modules/command_stop.sh | 12 ++++++------ lgsm/modules/info_distro.sh | 2 +- lgsm/modules/update_xnt.sh | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/lgsm/modules/check_status.sh b/lgsm/modules/check_status.sh index e017b89ec..98d2a3772 100755 --- a/lgsm/modules/check_status.sh +++ b/lgsm/modules/check_status.sh @@ -7,4 +7,4 @@ moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" -status=$(tmux -L "${socketname}" list-sessions -F "#{session_name}" 2> /dev/null | grep -Ecx "^${sessionname}") +status=$(TERM=screen tmux -L "${socketname}" list-sessions -F "#{session_name}" 2> /dev/null | grep -Ecx "^${sessionname}") diff --git a/lgsm/modules/command_send.sh b/lgsm/modules/command_send.sh index 20ef188e3..8b8a1a252 100755 --- a/lgsm/modules/command_send.sh +++ b/lgsm/modules/command_send.sh @@ -27,7 +27,7 @@ if [ "${status}" != "0" ]; then echo "" fn_print_dots "Sending command to console: \"${commandtosend}\"" fn_print_ok_nl "Sending command to console: \"${commandtosend}\"" - tmux -L "${socketname}" send-keys -t "${sessionname}" "${commandtosend}" ENTER + TERM=screen tmux -L "${socketname}" send-keys -t "${sessionname}" "${commandtosend}" ENTER fn_script_log_pass "Command \"${commandtosend}\" sent to console" else fn_print_error_nl "Unable to send command to console. Server not running" diff --git a/lgsm/modules/command_start.sh b/lgsm/modules/command_start.sh index a4e07b44b..43b7a3858 100755 --- a/lgsm/modules/command_start.sh +++ b/lgsm/modules/command_start.sh @@ -15,7 +15,7 @@ fn_firstcommand_set # Used to allow update to detect JK2MV server version. fn_start_jk2() { fn_start_tmux - tmux -L "${socketname}" end -t "${sessionname}" version ENTER > /dev/null 2>&1 + TERM=screen tmux -L "${socketname}" end -t "${sessionname}" version ENTER > /dev/null 2>&1 } fn_start_tmux() { @@ -67,7 +67,7 @@ fn_start_tmux() { cd "${executabledir}" || exit fi - tmux -L "${socketname}" new-session -d -x "${sessionwidth}" -y "${sessionheight}" -s "${sessionname}" "${preexecutable} ${executable} ${startparameters}" 2> "${lgsmlogdir}/.${selfname}-tmux-error.tmp" + TERM=screen tmux -L "${socketname}" new-session -d -x "${sessionwidth}" -y "${sessionheight}" -s "${sessionname}" "${preexecutable} ${executable} ${startparameters}" 2> "${lgsmlogdir}/.${selfname}-tmux-error.tmp" # Create logfile. touch "${consolelog}" @@ -82,9 +82,9 @@ fn_start_tmux() { if [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then # timestamp will break mcb update check. if [ "${logtimestamp}" == "on" ] && [ "${shortname}" != "mcb" ]; then - tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'" + TERM=screen tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'" else - tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'" + TERM=screen tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'" fi else echo -e "Console logging disabled in settings" >> "${consolelog}" diff --git a/lgsm/modules/command_stop.sh b/lgsm/modules/command_stop.sh index ab827314d..056214456 100755 --- a/lgsm/modules/command_stop.sh +++ b/lgsm/modules/command_stop.sh @@ -15,7 +15,7 @@ fn_stop_graceful_ctrlc() { fn_print_dots "Graceful: CTRL+c" fn_script_log_info "Graceful: CTRL+c" # Sends CTRL+c. - tmux -L "${socketname}" send-keys -t "${sessionname}" C-c > /dev/null 2>&1 + TERM=screen tmux -L "${socketname}" send-keys -t "${sessionname}" C-c > /dev/null 2>&1 # Waits up to 30 seconds giving the server time to shutdown gracefully. for seconds in {1..30}; do check_status.sh @@ -47,7 +47,7 @@ fn_stop_graceful_cmd() { fn_print_dots "Graceful: sending \"${1}\"" fn_script_log_info "Graceful: sending \"${1}\"" # Sends specific stop command. - tmux -L "${socketname}" send -t "${sessionname}" ENTER "${1}" ENTER > /dev/null 2>&1 + TERM=screen tmux -L "${socketname}" send -t "${sessionname}" ENTER "${1}" ENTER > /dev/null 2>&1 # Waits up to ${seconds} seconds giving the server time to shutdown gracefully. for ((seconds = 1; seconds <= ${2}; seconds++)); do check_status.sh @@ -79,7 +79,7 @@ fn_stop_graceful_goldsrc() { fn_print_dots "Graceful: sending \"quit\"" fn_script_log_info "Graceful: sending \"quit\"" # sends quit - tmux -L "${socketname}" send -t "${sessionname}" quit ENTER > /dev/null 2>&1 + TERM=screen tmux -L "${socketname}" send -t "${sessionname}" quit ENTER > /dev/null 2>&1 # Waits 3 seconds as goldsrc servers restart with the quit command. for seconds in {1..3}; do fn_sleep_time_1 @@ -289,10 +289,10 @@ fn_stop_graceful_avorion() { fn_print_dots "Graceful: /save /stop" fn_script_log_info "Graceful: /save /stop" # Sends /save. - tmux -L "${socketname}" send-keys -t "${sessionname}" /save ENTER > /dev/null 2>&1 + TERM=screen tmux -L "${socketname}" send-keys -t "${sessionname}" /save ENTER > /dev/null 2>&1 fn_sleep_time_5 # Sends /quit. - tmux -L "${socketname}" send-keys -t "${sessionname}" /stop ENTER > /dev/null 2>&1 + TERM=screen tmux -L "${socketname}" send-keys -t "${sessionname}" /stop ENTER > /dev/null 2>&1 # Waits up to 30 seconds giving the server time to shutdown gracefully. for seconds in {1..30}; do check_status.sh @@ -351,7 +351,7 @@ fn_stop_tmux() { fn_print_dots "${servername}" fn_script_log_info "tmux kill-session: ${sessionname}: ${servername}" # Kill tmux session. - tmux -L "${socketname}" kill-session -t "${sessionname}" > /dev/null 2>&1 + TERM=screen tmux -L "${socketname}" kill-session -t "${sessionname}" > /dev/null 2>&1 fn_sleep_time_1 check_status.sh if [ "${status}" == "0" ]; then diff --git a/lgsm/modules/info_distro.sh b/lgsm/modules/info_distro.sh index 1d74ac635..4ece95e4d 100755 --- a/lgsm/modules/info_distro.sh +++ b/lgsm/modules/info_distro.sh @@ -11,7 +11,7 @@ moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" ### Game Server pid if [ "${status}" == "1" ]; then - gameserverpid="$(tmux -L "${socketname}" list-sessions -F "#{session_name} #{pane_pid}" | grep "^${sessionname} " | awk '{print $NF}')" + gameserverpid="$(TERM=screen tmux -L "${socketname}" list-sessions -F "#{session_name} #{pane_pid}" | grep "^${sessionname} " | awk '{print $NF}')" if [ "${engine}" == "source" ]; then srcdslinuxpid="$(pgrep -P "${gameserverpid}" -x srcds_linux 2> /dev/null | head -n 1)" elif [ "${engine}" == "goldsrc" ]; then diff --git a/lgsm/modules/update_xnt.sh b/lgsm/modules/update_xnt.sh index 904b7b1a4..e6f88cc27 100755 --- a/lgsm/modules/update_xnt.sh +++ b/lgsm/modules/update_xnt.sh @@ -20,7 +20,7 @@ fn_update_localbuild() { check_status.sh # Send version command to Xonotic server. if [ "${status}" != "0" ]; then - tmux -L "${socketname}" send-keys -t "${sessionname}" "version" C-m > /dev/null 2>&1 + TERM=screen tmux -L "${socketname}" send-keys -t "${sessionname}" "version" C-m > /dev/null 2>&1 fn_sleep_time_1 else exitbypass=1 @@ -28,7 +28,7 @@ fn_update_localbuild() { fn_firstcommand_reset exitbypass=1 fn_sleep_time_5 - tmux -L "${socketname}" send-keys -t "${sessionname}" "version" C-m > /dev/null 2>&1 + TERM=screen tmux -L "${socketname}" send-keys -t "${sessionname}" "version" C-m > /dev/null 2>&1 exitbypass=1 command_stop.sh unset exitbypass From 103eeafabfc057d30df16942dcc4c9cf25bfc259 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Jul 2026 21:37:21 +0100 Subject: [PATCH 43/44] feat(stop): add option to only stop server if no players (#4595) * add no stop if players online * remove dev message * monitor will now restart the server if requested earlier * changed var name * add npm check to install gamedig * new line * add var * remove from non supported servers * typo * word * move restart request * change lock file name * restart and monitor * refactor(stop): share player-online check + add stoponlyifnoplayersallcommands - Extract the duplicated gamedig player-count query (previously copy-pasted in command_stop, command_restart and command_monitor) into a new shared check_players_online.sh module that sets ${playersonline}; registered in core_modules.sh. - Add stoponlyifnoplayersallcommands (default on) so the stoponlyifnoplayers protection applies to every command that stops the server (e.g. update). Set to off to limit it to explicit stop/restart, allowing update to stop the server even while players are online. - Add the new setting to all game server _default.cfg files. - Resolve merge with develop (check_gamedig now keeps develop's npm-update branch plus the 'install Node.js' hint). * fix(stop): clear stale restart-request lock + warn on failed player query Addresses Copilot review feedback on #4595: - command_restart.sh: clear the *-restart-request.lock once a restart actually proceeds. Previously the lock was only written when postponing and never removed, so every subsequent monitor run would see the stale lock and trigger a repeat restart indefinitely. Fixed and verified against a live server: postponed restart -> monitor executes it and clears the lock -> a second monitor run no longer restarts. - check_players_online.sh: if the gamedig query fails for every configured IP (e.g. gamedig/jq missing), playersonline now still fails open (so a broken query can't permanently block stop/restart) but prints a clear warning that the safety check could not run, instead of silently behaving as if the server were empty. --- .../config-lgsm/ahl2server/_default.cfg | 4 +++ .../config-lgsm/ahlserver/_default.cfg | 4 +++ .../config-lgsm/arkserver/_default.cfg | 4 +++ .../config-lgsm/arma3server/_default.cfg | 4 +++ .../config-lgsm/armarserver/_default.cfg | 4 +++ .../config-lgsm/atsserver/_default.cfg | 4 +++ .../config-lgsm/avserver/_default.cfg | 4 +++ .../config-lgsm/bb2server/_default.cfg | 4 +++ .../config-lgsm/bbserver/_default.cfg | 4 +++ .../config-lgsm/bdserver/_default.cfg | 4 +++ .../config-lgsm/bf1942server/_default.cfg | 4 +++ .../config-lgsm/bfvserver/_default.cfg | 4 +++ .../config-lgsm/bmdmserver/_default.cfg | 4 +++ .../config-lgsm/boserver/_default.cfg | 4 +++ .../config-lgsm/bsserver/_default.cfg | 4 +++ .../config-lgsm/btlserver/_default.cfg | 4 +++ .../config-lgsm/btserver/_default.cfg | 4 +++ .../config-lgsm/ccserver/_default.cfg | 4 +++ .../config-lgsm/ckserver/_default.cfg | 4 +++ .../config-lgsm/cmwserver/_default.cfg | 4 +++ .../config-lgsm/cod2server/_default.cfg | 4 +++ .../config-lgsm/cod4server/_default.cfg | 4 +++ .../config-lgsm/codserver/_default.cfg | 4 +++ .../config-lgsm/coduoserver/_default.cfg | 4 +++ .../config-lgsm/codwawserver/_default.cfg | 4 +++ .../config-lgsm/colserver/_default.cfg | 4 +++ .../config-lgsm/cs2server/_default.cfg | 4 +++ .../config-lgsm/csczserver/_default.cfg | 4 +++ .../config-lgsm/csgoserver/_default.cfg | 4 +++ .../config-lgsm/csserver/_default.cfg | 4 +++ .../config-lgsm/cssserver/_default.cfg | 4 +++ .../config-lgsm/ctserver/_default.cfg | 4 +++ .../config-lgsm/dabserver/_default.cfg | 4 +++ .../config-lgsm/dayzserver/_default.cfg | 4 +++ .../config-lgsm/dmcserver/_default.cfg | 4 +++ .../config-lgsm/dodrserver/_default.cfg | 4 +++ .../config-lgsm/dodserver/_default.cfg | 4 +++ .../config-lgsm/dodsserver/_default.cfg | 4 +++ .../config-lgsm/doiserver/_default.cfg | 4 +++ .../config-lgsm/dstserver/_default.cfg | 4 +++ .../config-lgsm/dysserver/_default.cfg | 4 +++ .../config-lgsm/ecoserver/_default.cfg | 4 +++ .../config-lgsm/emserver/_default.cfg | 4 +++ .../config-lgsm/etlserver/_default.cfg | 4 +++ .../config-lgsm/ets2server/_default.cfg | 4 +++ .../config-lgsm/fctrserver/_default.cfg | 4 +++ .../config-lgsm/fofserver/_default.cfg | 4 +++ .../config-lgsm/gmodserver/_default.cfg | 4 +++ .../config-lgsm/hcuserver/_default.cfg | 4 +++ .../config-lgsm/hl2dmserver/_default.cfg | 4 +++ .../config-lgsm/hldmserver/_default.cfg | 4 +++ .../config-lgsm/hldmsserver/_default.cfg | 4 +++ .../config-lgsm/hwserver/_default.cfg | 4 +++ .../config-lgsm/hzserver/_default.cfg | 4 +++ .../config-lgsm/insserver/_default.cfg | 4 +++ .../config-lgsm/inssserver/_default.cfg | 4 +++ .../config-lgsm/iosserver/_default.cfg | 4 +++ .../config-lgsm/jc2server/_default.cfg | 4 +++ .../config-lgsm/jc3server/_default.cfg | 4 +++ .../config-lgsm/jk2server/_default.cfg | 4 +++ .../config-lgsm/kf2server/_default.cfg | 4 +++ .../config-lgsm/kfserver/_default.cfg | 4 +++ .../config-lgsm/l4d2server/_default.cfg | 4 +++ .../config-lgsm/l4dserver/_default.cfg | 4 +++ .../config-lgsm/mcbserver/_default.cfg | 4 +++ .../config-lgsm/mcserver/_default.cfg | 4 +++ .../config-lgsm/mhserver/_default.cfg | 4 +++ .../config-lgsm/mohaaserver/_default.cfg | 4 +++ .../config-lgsm/momserver/_default.cfg | 4 +++ .../config-lgsm/mtaserver/_default.cfg | 4 +++ .../config-lgsm/ndserver/_default.cfg | 4 +++ .../config-lgsm/necserver/_default.cfg | 4 +++ .../config-lgsm/nmrihserver/_default.cfg | 4 +++ .../config-lgsm/ns2cserver/_default.cfg | 4 +++ .../config-lgsm/ns2server/_default.cfg | 4 +++ .../config-lgsm/nsserver/_default.cfg | 4 +++ .../config-lgsm/ohdserver/_default.cfg | 4 +++ .../config-lgsm/onsetserver/_default.cfg | 4 +++ .../config-lgsm/opforserver/_default.cfg | 4 +++ .../config-lgsm/pc2server/_default.cfg | 4 +++ .../config-lgsm/pcserver/_default.cfg | 4 +++ .../config-lgsm/pmcserver/_default.cfg | 4 +++ .../config-lgsm/pvkiiserver/_default.cfg | 4 +++ .../config-lgsm/pwserver/_default.cfg | 4 +++ .../config-lgsm/pzserver/_default.cfg | 4 +++ .../config-lgsm/q2server/_default.cfg | 4 +++ .../config-lgsm/q3server/_default.cfg | 4 +++ .../config-lgsm/q4server/_default.cfg | 4 +++ .../config-lgsm/qlserver/_default.cfg | 4 +++ .../config-lgsm/qwserver/_default.cfg | 4 +++ .../config-lgsm/ricochetserver/_default.cfg | 4 +++ .../config-lgsm/roserver/_default.cfg | 4 +++ .../config-lgsm/rtcwserver/_default.cfg | 4 +++ .../config-lgsm/rustserver/_default.cfg | 4 +++ .../config-lgsm/rwserver/_default.cfg | 4 +++ .../config-lgsm/sampserver/_default.cfg | 4 +++ .../config-lgsm/sbotsserver/_default.cfg | 4 +++ .../config-lgsm/sbserver/_default.cfg | 4 +++ .../config-lgsm/scpslserver/_default.cfg | 4 +++ .../config-lgsm/scpslsmserver/_default.cfg | 4 +++ .../config-lgsm/sdtdserver/_default.cfg | 4 +++ .../config-lgsm/sfcserver/_default.cfg | 4 +++ .../config-lgsm/sfserver/_default.cfg | 4 +++ .../config-lgsm/sof2server/_default.cfg | 4 +++ .../config-lgsm/solserver/_default.cfg | 4 +++ .../config-lgsm/squad44server/_default.cfg | 4 +++ .../config-lgsm/squadserver/_default.cfg | 4 +++ .../config-lgsm/stnserver/_default.cfg | 4 +++ .../config-lgsm/stserver/_default.cfg | 4 +++ .../config-lgsm/svenserver/_default.cfg | 4 +++ .../config-lgsm/terrariaserver/_default.cfg | 4 +++ .../config-lgsm/tf2server/_default.cfg | 4 +++ .../config-lgsm/tfcserver/_default.cfg | 4 +++ .../config-lgsm/tfserver/_default.cfg | 4 +++ .../config-lgsm/tiserver/_default.cfg | 4 +++ .../config-lgsm/ts3server/_default.cfg | 4 +++ .../config-lgsm/tsserver/_default.cfg | 4 +++ .../config-lgsm/tuserver/_default.cfg | 4 +++ .../config-lgsm/twserver/_default.cfg | 4 +++ .../config-lgsm/untserver/_default.cfg | 4 +++ .../config-lgsm/ut2k4server/_default.cfg | 4 +++ .../config-lgsm/ut3server/_default.cfg | 4 +++ .../config-lgsm/ut99server/_default.cfg | 4 +++ .../config-lgsm/utserver/_default.cfg | 4 +++ .../config-lgsm/vhserver/_default.cfg | 4 +++ .../config-lgsm/vintsserver/_default.cfg | 4 +++ .../config-lgsm/vpmcserver/_default.cfg | 4 +++ .../config-lgsm/vsserver/_default.cfg | 4 +++ .../config-lgsm/wetserver/_default.cfg | 4 +++ .../config-lgsm/wfserver/_default.cfg | 4 +++ .../config-lgsm/wmcserver/_default.cfg | 4 +++ .../config-lgsm/wurmserver/_default.cfg | 4 +++ .../config-lgsm/zmrserver/_default.cfg | 4 +++ .../config-lgsm/zpsserver/_default.cfg | 4 +++ lgsm/modules/check_gamedig.sh | 4 ++- lgsm/modules/check_players_online.sh | 34 +++++++++++++++++++ lgsm/modules/command_monitor.sh | 22 ++++++++++++ lgsm/modules/command_restart.sh | 11 ++++++ lgsm/modules/command_stop.sh | 17 ++++++++++ lgsm/modules/core_modules.sh | 5 +++ 140 files changed, 628 insertions(+), 1 deletion(-) create mode 100755 lgsm/modules/check_players_online.sh diff --git a/lgsm/config-default/config-lgsm/ahl2server/_default.cfg b/lgsm/config-default/config-lgsm/ahl2server/_default.cfg index 5bc539490..b955c4180 100644 --- a/lgsm/config-default/config-lgsm/ahl2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ahl2server/_default.cfg @@ -107,6 +107,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/ahlserver/_default.cfg b/lgsm/config-default/config-lgsm/ahlserver/_default.cfg index f0034ff36..6854d55cf 100644 --- a/lgsm/config-default/config-lgsm/ahlserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ahlserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/arkserver/_default.cfg b/lgsm/config-default/config-lgsm/arkserver/_default.cfg index d12a1893c..cc492f7b5 100644 --- a/lgsm/config-default/config-lgsm/arkserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/arkserver/_default.cfg @@ -104,6 +104,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/arma3server/_default.cfg b/lgsm/config-default/config-lgsm/arma3server/_default.cfg index 3a63df700..46a98ed46 100644 --- a/lgsm/config-default/config-lgsm/arma3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/arma3server/_default.cfg @@ -118,6 +118,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/armarserver/_default.cfg b/lgsm/config-default/config-lgsm/armarserver/_default.cfg index 4ae059d46..a6532146f 100644 --- a/lgsm/config-default/config-lgsm/armarserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/armarserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/atsserver/_default.cfg b/lgsm/config-default/config-lgsm/atsserver/_default.cfg index cbf2f355d..6b4b0807b 100644 --- a/lgsm/config-default/config-lgsm/atsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/atsserver/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/avserver/_default.cfg b/lgsm/config-default/config-lgsm/avserver/_default.cfg index 783ea29c9..5668c8be3 100644 --- a/lgsm/config-default/config-lgsm/avserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/avserver/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/bb2server/_default.cfg b/lgsm/config-default/config-lgsm/bb2server/_default.cfg index 4e489a71e..ec113ed99 100644 --- a/lgsm/config-default/config-lgsm/bb2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/bb2server/_default.cfg @@ -108,6 +108,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/bbserver/_default.cfg b/lgsm/config-default/config-lgsm/bbserver/_default.cfg index 6b1a9aa13..b3d7b7513 100644 --- a/lgsm/config-default/config-lgsm/bbserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/bbserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/bdserver/_default.cfg b/lgsm/config-default/config-lgsm/bdserver/_default.cfg index 1afd4b541..5144fd258 100644 --- a/lgsm/config-default/config-lgsm/bdserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/bdserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/bf1942server/_default.cfg b/lgsm/config-default/config-lgsm/bf1942server/_default.cfg index 4ae64266b..86363ccc5 100644 --- a/lgsm/config-default/config-lgsm/bf1942server/_default.cfg +++ b/lgsm/config-default/config-lgsm/bf1942server/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/bfvserver/_default.cfg b/lgsm/config-default/config-lgsm/bfvserver/_default.cfg index 7e765f493..7fcfdd5ac 100644 --- a/lgsm/config-default/config-lgsm/bfvserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/bfvserver/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/bmdmserver/_default.cfg b/lgsm/config-default/config-lgsm/bmdmserver/_default.cfg index ae63c7418..3bcdd5cb9 100644 --- a/lgsm/config-default/config-lgsm/bmdmserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/bmdmserver/_default.cfg @@ -108,6 +108,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/boserver/_default.cfg b/lgsm/config-default/config-lgsm/boserver/_default.cfg index f5812e36a..9d3110cca 100644 --- a/lgsm/config-default/config-lgsm/boserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/boserver/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/bsserver/_default.cfg b/lgsm/config-default/config-lgsm/bsserver/_default.cfg index 837e85c07..3ef7574a0 100644 --- a/lgsm/config-default/config-lgsm/bsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/bsserver/_default.cfg @@ -112,6 +112,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/btlserver/_default.cfg b/lgsm/config-default/config-lgsm/btlserver/_default.cfg index a618d99d1..7e936b1f7 100644 --- a/lgsm/config-default/config-lgsm/btlserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/btlserver/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/btserver/_default.cfg b/lgsm/config-default/config-lgsm/btserver/_default.cfg index c9534b1e4..0134772b3 100644 --- a/lgsm/config-default/config-lgsm/btserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/btserver/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/ccserver/_default.cfg b/lgsm/config-default/config-lgsm/ccserver/_default.cfg index 595b2518c..86eaa9d15 100644 --- a/lgsm/config-default/config-lgsm/ccserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ccserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/ckserver/_default.cfg b/lgsm/config-default/config-lgsm/ckserver/_default.cfg index 214075789..b238c2148 100644 --- a/lgsm/config-default/config-lgsm/ckserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ckserver/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/cmwserver/_default.cfg b/lgsm/config-default/config-lgsm/cmwserver/_default.cfg index d9b5d50af..110013f89 100644 --- a/lgsm/config-default/config-lgsm/cmwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/cmwserver/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/cod2server/_default.cfg b/lgsm/config-default/config-lgsm/cod2server/_default.cfg index 37a9e49d0..45abeb251 100644 --- a/lgsm/config-default/config-lgsm/cod2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/cod2server/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/cod4server/_default.cfg b/lgsm/config-default/config-lgsm/cod4server/_default.cfg index d8a82e306..0d007db4e 100644 --- a/lgsm/config-default/config-lgsm/cod4server/_default.cfg +++ b/lgsm/config-default/config-lgsm/cod4server/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/codserver/_default.cfg b/lgsm/config-default/config-lgsm/codserver/_default.cfg index 70f9ef27f..de3fc8c23 100644 --- a/lgsm/config-default/config-lgsm/codserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/codserver/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/coduoserver/_default.cfg b/lgsm/config-default/config-lgsm/coduoserver/_default.cfg index c01dbf48e..2e52c6b24 100644 --- a/lgsm/config-default/config-lgsm/coduoserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/coduoserver/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/codwawserver/_default.cfg b/lgsm/config-default/config-lgsm/codwawserver/_default.cfg index 77d832fb3..438c1b785 100644 --- a/lgsm/config-default/config-lgsm/codwawserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/codwawserver/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/colserver/_default.cfg b/lgsm/config-default/config-lgsm/colserver/_default.cfg index e8dab4132..82cf3de7b 100644 --- a/lgsm/config-default/config-lgsm/colserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/colserver/_default.cfg @@ -96,6 +96,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/cs2server/_default.cfg b/lgsm/config-default/config-lgsm/cs2server/_default.cfg index 54f14a967..81d1cb7ed 100644 --- a/lgsm/config-default/config-lgsm/cs2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/cs2server/_default.cfg @@ -107,6 +107,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/csczserver/_default.cfg b/lgsm/config-default/config-lgsm/csczserver/_default.cfg index de75b633a..531e897ad 100644 --- a/lgsm/config-default/config-lgsm/csczserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/csczserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/csgoserver/_default.cfg b/lgsm/config-default/config-lgsm/csgoserver/_default.cfg index 1d840be22..a5887c0b0 100644 --- a/lgsm/config-default/config-lgsm/csgoserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/csgoserver/_default.cfg @@ -139,6 +139,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/csserver/_default.cfg b/lgsm/config-default/config-lgsm/csserver/_default.cfg index c795068f7..4e598cd16 100644 --- a/lgsm/config-default/config-lgsm/csserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/csserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/cssserver/_default.cfg b/lgsm/config-default/config-lgsm/cssserver/_default.cfg index 3690d534e..ce79d3147 100644 --- a/lgsm/config-default/config-lgsm/cssserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/cssserver/_default.cfg @@ -108,6 +108,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/ctserver/_default.cfg b/lgsm/config-default/config-lgsm/ctserver/_default.cfg index bc7086144..e32f65fa4 100644 --- a/lgsm/config-default/config-lgsm/ctserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ctserver/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/dabserver/_default.cfg b/lgsm/config-default/config-lgsm/dabserver/_default.cfg index b60293140..575c163cf 100644 --- a/lgsm/config-default/config-lgsm/dabserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dabserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/dayzserver/_default.cfg b/lgsm/config-default/config-lgsm/dayzserver/_default.cfg index 0a275ab50..e55b0f3fd 100644 --- a/lgsm/config-default/config-lgsm/dayzserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dayzserver/_default.cfg @@ -118,6 +118,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/dmcserver/_default.cfg b/lgsm/config-default/config-lgsm/dmcserver/_default.cfg index 5a1cefa5d..b7f80ade0 100644 --- a/lgsm/config-default/config-lgsm/dmcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dmcserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/dodrserver/_default.cfg b/lgsm/config-default/config-lgsm/dodrserver/_default.cfg index 12aaba52b..947ee2dab 100644 --- a/lgsm/config-default/config-lgsm/dodrserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dodrserver/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/dodserver/_default.cfg b/lgsm/config-default/config-lgsm/dodserver/_default.cfg index 3a026115a..6d1f1e28e 100644 --- a/lgsm/config-default/config-lgsm/dodserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dodserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/dodsserver/_default.cfg b/lgsm/config-default/config-lgsm/dodsserver/_default.cfg index 07fb71584..dc1e162e1 100644 --- a/lgsm/config-default/config-lgsm/dodsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dodsserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/doiserver/_default.cfg b/lgsm/config-default/config-lgsm/doiserver/_default.cfg index bac000eba..58b31c206 100644 --- a/lgsm/config-default/config-lgsm/doiserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/doiserver/_default.cfg @@ -104,6 +104,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/dstserver/_default.cfg b/lgsm/config-default/config-lgsm/dstserver/_default.cfg index 2e9061eae..489f748c7 100644 --- a/lgsm/config-default/config-lgsm/dstserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dstserver/_default.cfg @@ -105,6 +105,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/dysserver/_default.cfg b/lgsm/config-default/config-lgsm/dysserver/_default.cfg index d8d58569e..0c7fe66e3 100644 --- a/lgsm/config-default/config-lgsm/dysserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/dysserver/_default.cfg @@ -108,6 +108,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/ecoserver/_default.cfg b/lgsm/config-default/config-lgsm/ecoserver/_default.cfg index 8f86126ac..af9bde459 100644 --- a/lgsm/config-default/config-lgsm/ecoserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ecoserver/_default.cfg @@ -98,6 +98,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/emserver/_default.cfg b/lgsm/config-default/config-lgsm/emserver/_default.cfg index d7a12ea7c..fe02f4434 100644 --- a/lgsm/config-default/config-lgsm/emserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/emserver/_default.cfg @@ -108,6 +108,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/etlserver/_default.cfg b/lgsm/config-default/config-lgsm/etlserver/_default.cfg index 634cc8b68..6dd1ccb1e 100644 --- a/lgsm/config-default/config-lgsm/etlserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/etlserver/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/ets2server/_default.cfg b/lgsm/config-default/config-lgsm/ets2server/_default.cfg index 84d71e71e..4b8095c87 100644 --- a/lgsm/config-default/config-lgsm/ets2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ets2server/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/fctrserver/_default.cfg b/lgsm/config-default/config-lgsm/fctrserver/_default.cfg index 5d85b572e..ab885b5ea 100644 --- a/lgsm/config-default/config-lgsm/fctrserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/fctrserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/fofserver/_default.cfg b/lgsm/config-default/config-lgsm/fofserver/_default.cfg index 85e3aecf0..926b95b05 100644 --- a/lgsm/config-default/config-lgsm/fofserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/fofserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/gmodserver/_default.cfg b/lgsm/config-default/config-lgsm/gmodserver/_default.cfg index 119b6779f..ca2ad6be7 100644 --- a/lgsm/config-default/config-lgsm/gmodserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/gmodserver/_default.cfg @@ -113,6 +113,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/hcuserver/_default.cfg b/lgsm/config-default/config-lgsm/hcuserver/_default.cfg index cab483a2b..c0fdcc630 100644 --- a/lgsm/config-default/config-lgsm/hcuserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hcuserver/_default.cfg @@ -110,6 +110,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/hl2dmserver/_default.cfg b/lgsm/config-default/config-lgsm/hl2dmserver/_default.cfg index 7268a7aff..2e9afaec1 100644 --- a/lgsm/config-default/config-lgsm/hl2dmserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hl2dmserver/_default.cfg @@ -105,6 +105,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/hldmserver/_default.cfg b/lgsm/config-default/config-lgsm/hldmserver/_default.cfg index 3006fa6bf..697341250 100644 --- a/lgsm/config-default/config-lgsm/hldmserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hldmserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/hldmsserver/_default.cfg b/lgsm/config-default/config-lgsm/hldmsserver/_default.cfg index 027362cf3..6f2d90fb4 100644 --- a/lgsm/config-default/config-lgsm/hldmsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hldmsserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/hwserver/_default.cfg b/lgsm/config-default/config-lgsm/hwserver/_default.cfg index bb0daee39..c0c4f0eaa 100644 --- a/lgsm/config-default/config-lgsm/hwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hwserver/_default.cfg @@ -113,6 +113,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/hzserver/_default.cfg b/lgsm/config-default/config-lgsm/hzserver/_default.cfg index 58a2d1a9c..32fb9d6cd 100644 --- a/lgsm/config-default/config-lgsm/hzserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hzserver/_default.cfg @@ -98,6 +98,10 @@ telegramtoken="accesstoken" telegramchatid="" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/insserver/_default.cfg b/lgsm/config-default/config-lgsm/insserver/_default.cfg index df4af52bd..afa7f7f27 100644 --- a/lgsm/config-default/config-lgsm/insserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/insserver/_default.cfg @@ -109,6 +109,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/inssserver/_default.cfg b/lgsm/config-default/config-lgsm/inssserver/_default.cfg index 1fda4d6b6..27974e8a0 100644 --- a/lgsm/config-default/config-lgsm/inssserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/inssserver/_default.cfg @@ -112,6 +112,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/iosserver/_default.cfg b/lgsm/config-default/config-lgsm/iosserver/_default.cfg index 452e91912..928666984 100644 --- a/lgsm/config-default/config-lgsm/iosserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/iosserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/jc2server/_default.cfg b/lgsm/config-default/config-lgsm/jc2server/_default.cfg index 4feb5c892..afe6d4e83 100644 --- a/lgsm/config-default/config-lgsm/jc2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/jc2server/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/jc3server/_default.cfg b/lgsm/config-default/config-lgsm/jc3server/_default.cfg index 331a35401..7d45d966e 100644 --- a/lgsm/config-default/config-lgsm/jc3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/jc3server/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/jk2server/_default.cfg b/lgsm/config-default/config-lgsm/jk2server/_default.cfg index 4f44289a4..1749c3dd5 100644 --- a/lgsm/config-default/config-lgsm/jk2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/jk2server/_default.cfg @@ -104,6 +104,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/kf2server/_default.cfg b/lgsm/config-default/config-lgsm/kf2server/_default.cfg index f296fc228..832cc8cfd 100644 --- a/lgsm/config-default/config-lgsm/kf2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/kf2server/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/kfserver/_default.cfg b/lgsm/config-default/config-lgsm/kfserver/_default.cfg index 1852116e1..323142d69 100644 --- a/lgsm/config-default/config-lgsm/kfserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/kfserver/_default.cfg @@ -107,6 +107,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/l4d2server/_default.cfg b/lgsm/config-default/config-lgsm/l4d2server/_default.cfg index 00c6bd7bc..3e1584706 100644 --- a/lgsm/config-default/config-lgsm/l4d2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/l4d2server/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/l4dserver/_default.cfg b/lgsm/config-default/config-lgsm/l4dserver/_default.cfg index 41419dd4c..354bb9b19 100644 --- a/lgsm/config-default/config-lgsm/l4dserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/l4dserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/mcbserver/_default.cfg b/lgsm/config-default/config-lgsm/mcbserver/_default.cfg index 901ea3e04..5714bd328 100644 --- a/lgsm/config-default/config-lgsm/mcbserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/mcbserver/_default.cfg @@ -98,6 +98,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/mcserver/_default.cfg b/lgsm/config-default/config-lgsm/mcserver/_default.cfg index f55bffeda..1ae68b8e3 100644 --- a/lgsm/config-default/config-lgsm/mcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/mcserver/_default.cfg @@ -104,6 +104,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/mhserver/_default.cfg b/lgsm/config-default/config-lgsm/mhserver/_default.cfg index 9b98d5221..a8a86b446 100644 --- a/lgsm/config-default/config-lgsm/mhserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/mhserver/_default.cfg @@ -104,6 +104,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/mohaaserver/_default.cfg b/lgsm/config-default/config-lgsm/mohaaserver/_default.cfg index cf2d3edad..df8e01fe0 100644 --- a/lgsm/config-default/config-lgsm/mohaaserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/mohaaserver/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/momserver/_default.cfg b/lgsm/config-default/config-lgsm/momserver/_default.cfg index 74123084f..ec376c361 100644 --- a/lgsm/config-default/config-lgsm/momserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/momserver/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/mtaserver/_default.cfg b/lgsm/config-default/config-lgsm/mtaserver/_default.cfg index d086a5c8e..835b4c4e0 100644 --- a/lgsm/config-default/config-lgsm/mtaserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/mtaserver/_default.cfg @@ -98,6 +98,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/ndserver/_default.cfg b/lgsm/config-default/config-lgsm/ndserver/_default.cfg index 8156201b8..f41567bff 100644 --- a/lgsm/config-default/config-lgsm/ndserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ndserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/necserver/_default.cfg b/lgsm/config-default/config-lgsm/necserver/_default.cfg index 46d09d239..1b3ae48f3 100644 --- a/lgsm/config-default/config-lgsm/necserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/necserver/_default.cfg @@ -98,6 +98,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/nmrihserver/_default.cfg b/lgsm/config-default/config-lgsm/nmrihserver/_default.cfg index bb9fadf52..106658818 100644 --- a/lgsm/config-default/config-lgsm/nmrihserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/nmrihserver/_default.cfg @@ -108,6 +108,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg b/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg index 33bbb1e63..fdd809dff 100644 --- a/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg @@ -110,6 +110,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/ns2server/_default.cfg b/lgsm/config-default/config-lgsm/ns2server/_default.cfg index 7e5fc6015..d8da66429 100644 --- a/lgsm/config-default/config-lgsm/ns2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ns2server/_default.cfg @@ -111,6 +111,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/nsserver/_default.cfg b/lgsm/config-default/config-lgsm/nsserver/_default.cfg index b859b8426..7c981081f 100644 --- a/lgsm/config-default/config-lgsm/nsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/nsserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/ohdserver/_default.cfg b/lgsm/config-default/config-lgsm/ohdserver/_default.cfg index b330e3603..17d4c8a18 100644 --- a/lgsm/config-default/config-lgsm/ohdserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ohdserver/_default.cfg @@ -105,6 +105,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/onsetserver/_default.cfg b/lgsm/config-default/config-lgsm/onsetserver/_default.cfg index 0731d62ff..12cabe90d 100644 --- a/lgsm/config-default/config-lgsm/onsetserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/onsetserver/_default.cfg @@ -96,6 +96,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/opforserver/_default.cfg b/lgsm/config-default/config-lgsm/opforserver/_default.cfg index a60eed67e..5501fc651 100644 --- a/lgsm/config-default/config-lgsm/opforserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/opforserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/pc2server/_default.cfg b/lgsm/config-default/config-lgsm/pc2server/_default.cfg index ec0e0b0dd..3ac6eeb77 100644 --- a/lgsm/config-default/config-lgsm/pc2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/pc2server/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/pcserver/_default.cfg b/lgsm/config-default/config-lgsm/pcserver/_default.cfg index cf833db8a..601ffed3b 100644 --- a/lgsm/config-default/config-lgsm/pcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pcserver/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/pmcserver/_default.cfg b/lgsm/config-default/config-lgsm/pmcserver/_default.cfg index a861acd40..db456dbf7 100644 --- a/lgsm/config-default/config-lgsm/pmcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pmcserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/pvkiiserver/_default.cfg b/lgsm/config-default/config-lgsm/pvkiiserver/_default.cfg index eddbec490..7f27e32a0 100644 --- a/lgsm/config-default/config-lgsm/pvkiiserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pvkiiserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/pwserver/_default.cfg b/lgsm/config-default/config-lgsm/pwserver/_default.cfg index e00a4c1ac..c58ce087f 100644 --- a/lgsm/config-default/config-lgsm/pwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pwserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/pzserver/_default.cfg b/lgsm/config-default/config-lgsm/pzserver/_default.cfg index dd99cc0c2..a0456d6e3 100644 --- a/lgsm/config-default/config-lgsm/pzserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/pzserver/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/q2server/_default.cfg b/lgsm/config-default/config-lgsm/q2server/_default.cfg index 05b235a96..2fe85ea3c 100644 --- a/lgsm/config-default/config-lgsm/q2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/q2server/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/q3server/_default.cfg b/lgsm/config-default/config-lgsm/q3server/_default.cfg index be8f204ef..24a3604fc 100644 --- a/lgsm/config-default/config-lgsm/q3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/q3server/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/q4server/_default.cfg b/lgsm/config-default/config-lgsm/q4server/_default.cfg index 202261199..f4f8f4655 100644 --- a/lgsm/config-default/config-lgsm/q4server/_default.cfg +++ b/lgsm/config-default/config-lgsm/q4server/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/qlserver/_default.cfg b/lgsm/config-default/config-lgsm/qlserver/_default.cfg index 09f785f92..057b0f09d 100644 --- a/lgsm/config-default/config-lgsm/qlserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/qlserver/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/qwserver/_default.cfg b/lgsm/config-default/config-lgsm/qwserver/_default.cfg index 86aebb27b..b637f7d07 100644 --- a/lgsm/config-default/config-lgsm/qwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/qwserver/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/ricochetserver/_default.cfg b/lgsm/config-default/config-lgsm/ricochetserver/_default.cfg index 16f0480bc..a1d05ac95 100644 --- a/lgsm/config-default/config-lgsm/ricochetserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ricochetserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/roserver/_default.cfg b/lgsm/config-default/config-lgsm/roserver/_default.cfg index 51da7be2c..9d2863735 100644 --- a/lgsm/config-default/config-lgsm/roserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/roserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/rtcwserver/_default.cfg b/lgsm/config-default/config-lgsm/rtcwserver/_default.cfg index 73a77dfbe..f2ba06a62 100644 --- a/lgsm/config-default/config-lgsm/rtcwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/rtcwserver/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/rustserver/_default.cfg b/lgsm/config-default/config-lgsm/rustserver/_default.cfg index 164c8479c..418aad946 100644 --- a/lgsm/config-default/config-lgsm/rustserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/rustserver/_default.cfg @@ -115,6 +115,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/rwserver/_default.cfg b/lgsm/config-default/config-lgsm/rwserver/_default.cfg index 9fef08ae2..fe8c9f842 100644 --- a/lgsm/config-default/config-lgsm/rwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/rwserver/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/sampserver/_default.cfg b/lgsm/config-default/config-lgsm/sampserver/_default.cfg index 6a0f00895..af548a639 100644 --- a/lgsm/config-default/config-lgsm/sampserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sampserver/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/sbotsserver/_default.cfg b/lgsm/config-default/config-lgsm/sbotsserver/_default.cfg index 1288ba57d..93644efe5 100644 --- a/lgsm/config-default/config-lgsm/sbotsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sbotsserver/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/sbserver/_default.cfg b/lgsm/config-default/config-lgsm/sbserver/_default.cfg index 496ee3f04..fbca63afc 100644 --- a/lgsm/config-default/config-lgsm/sbserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sbserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/scpslserver/_default.cfg b/lgsm/config-default/config-lgsm/scpslserver/_default.cfg index 64b573a39..2ad4b566c 100644 --- a/lgsm/config-default/config-lgsm/scpslserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/scpslserver/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/scpslsmserver/_default.cfg b/lgsm/config-default/config-lgsm/scpslsmserver/_default.cfg index 885bd244f..eca5c43e6 100644 --- a/lgsm/config-default/config-lgsm/scpslsmserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/scpslsmserver/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/sdtdserver/_default.cfg b/lgsm/config-default/config-lgsm/sdtdserver/_default.cfg index 6e2164dfa..383b51d23 100644 --- a/lgsm/config-default/config-lgsm/sdtdserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sdtdserver/_default.cfg @@ -98,6 +98,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/sfcserver/_default.cfg b/lgsm/config-default/config-lgsm/sfcserver/_default.cfg index 8431e6441..856b172df 100644 --- a/lgsm/config-default/config-lgsm/sfcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sfcserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/sfserver/_default.cfg b/lgsm/config-default/config-lgsm/sfserver/_default.cfg index 75be1f00a..1fbcbf52e 100644 --- a/lgsm/config-default/config-lgsm/sfserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/sfserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/sof2server/_default.cfg b/lgsm/config-default/config-lgsm/sof2server/_default.cfg index 5c0500e53..88fdfd239 100644 --- a/lgsm/config-default/config-lgsm/sof2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/sof2server/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/solserver/_default.cfg b/lgsm/config-default/config-lgsm/solserver/_default.cfg index 1a30eb894..41d83dc5e 100644 --- a/lgsm/config-default/config-lgsm/solserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/solserver/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/squad44server/_default.cfg b/lgsm/config-default/config-lgsm/squad44server/_default.cfg index a747319ad..0235f155e 100644 --- a/lgsm/config-default/config-lgsm/squad44server/_default.cfg +++ b/lgsm/config-default/config-lgsm/squad44server/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/squadserver/_default.cfg b/lgsm/config-default/config-lgsm/squadserver/_default.cfg index 42ea1c219..b19d59ce6 100644 --- a/lgsm/config-default/config-lgsm/squadserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/squadserver/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/stnserver/_default.cfg b/lgsm/config-default/config-lgsm/stnserver/_default.cfg index 9a5958e4c..d245e780d 100644 --- a/lgsm/config-default/config-lgsm/stnserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/stnserver/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/stserver/_default.cfg b/lgsm/config-default/config-lgsm/stserver/_default.cfg index a4e4a3757..c724f2c19 100644 --- a/lgsm/config-default/config-lgsm/stserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/stserver/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/svenserver/_default.cfg b/lgsm/config-default/config-lgsm/svenserver/_default.cfg index 2e1fac2b1..60a1e8c7a 100644 --- a/lgsm/config-default/config-lgsm/svenserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/svenserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/terrariaserver/_default.cfg b/lgsm/config-default/config-lgsm/terrariaserver/_default.cfg index 47ac74169..3694c63ba 100644 --- a/lgsm/config-default/config-lgsm/terrariaserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/terrariaserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/tf2server/_default.cfg b/lgsm/config-default/config-lgsm/tf2server/_default.cfg index 8411a07b3..3bd74259a 100644 --- a/lgsm/config-default/config-lgsm/tf2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/tf2server/_default.cfg @@ -110,6 +110,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/tfcserver/_default.cfg b/lgsm/config-default/config-lgsm/tfcserver/_default.cfg index 404f31c5f..123fe1b0b 100644 --- a/lgsm/config-default/config-lgsm/tfcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tfcserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/tfserver/_default.cfg b/lgsm/config-default/config-lgsm/tfserver/_default.cfg index c46ab2237..43026b5d1 100644 --- a/lgsm/config-default/config-lgsm/tfserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tfserver/_default.cfg @@ -119,6 +119,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/tiserver/_default.cfg b/lgsm/config-default/config-lgsm/tiserver/_default.cfg index 2aca052b7..59384527b 100644 --- a/lgsm/config-default/config-lgsm/tiserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tiserver/_default.cfg @@ -101,6 +101,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/ts3server/_default.cfg b/lgsm/config-default/config-lgsm/ts3server/_default.cfg index 2c91390ec..8b6f0bc33 100644 --- a/lgsm/config-default/config-lgsm/ts3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ts3server/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/tsserver/_default.cfg b/lgsm/config-default/config-lgsm/tsserver/_default.cfg index a0f5a46d0..8ade847bd 100644 --- a/lgsm/config-default/config-lgsm/tsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tsserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/tuserver/_default.cfg b/lgsm/config-default/config-lgsm/tuserver/_default.cfg index 3cae2e85b..3597cac15 100644 --- a/lgsm/config-default/config-lgsm/tuserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/tuserver/_default.cfg @@ -105,6 +105,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/twserver/_default.cfg b/lgsm/config-default/config-lgsm/twserver/_default.cfg index 6512081b1..d423126ab 100644 --- a/lgsm/config-default/config-lgsm/twserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/twserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/untserver/_default.cfg b/lgsm/config-default/config-lgsm/untserver/_default.cfg index 0f9d4d57e..5ae3612fe 100644 --- a/lgsm/config-default/config-lgsm/untserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/untserver/_default.cfg @@ -109,6 +109,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/ut2k4server/_default.cfg b/lgsm/config-default/config-lgsm/ut2k4server/_default.cfg index 907fa04c9..40803ef4d 100644 --- a/lgsm/config-default/config-lgsm/ut2k4server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ut2k4server/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/ut3server/_default.cfg b/lgsm/config-default/config-lgsm/ut3server/_default.cfg index 1a239ac10..031a2b047 100644 --- a/lgsm/config-default/config-lgsm/ut3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ut3server/_default.cfg @@ -115,6 +115,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/ut99server/_default.cfg b/lgsm/config-default/config-lgsm/ut99server/_default.cfg index 07dce1777..c1506ad38 100644 --- a/lgsm/config-default/config-lgsm/ut99server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ut99server/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/utserver/_default.cfg b/lgsm/config-default/config-lgsm/utserver/_default.cfg index 2dd8b2b17..e26b79e6e 100644 --- a/lgsm/config-default/config-lgsm/utserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/utserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/vhserver/_default.cfg b/lgsm/config-default/config-lgsm/vhserver/_default.cfg index 1eab475ee..a1691b839 100644 --- a/lgsm/config-default/config-lgsm/vhserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/vhserver/_default.cfg @@ -136,6 +136,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/vintsserver/_default.cfg b/lgsm/config-default/config-lgsm/vintsserver/_default.cfg index d1d8ef36f..47dcfb3d0 100644 --- a/lgsm/config-default/config-lgsm/vintsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/vintsserver/_default.cfg @@ -99,6 +99,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/vpmcserver/_default.cfg b/lgsm/config-default/config-lgsm/vpmcserver/_default.cfg index 52fc7adfc..67715860f 100644 --- a/lgsm/config-default/config-lgsm/vpmcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/vpmcserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/vsserver/_default.cfg b/lgsm/config-default/config-lgsm/vsserver/_default.cfg index 84d593d51..d640347ac 100644 --- a/lgsm/config-default/config-lgsm/vsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/vsserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/wetserver/_default.cfg b/lgsm/config-default/config-lgsm/wetserver/_default.cfg index b24d7e422..819390dc0 100644 --- a/lgsm/config-default/config-lgsm/wetserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/wetserver/_default.cfg @@ -95,6 +95,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Backup | https://docs.linuxgsm.com/commands/backup maxbackups="4" maxbackupdays="30" diff --git a/lgsm/config-default/config-lgsm/wfserver/_default.cfg b/lgsm/config-default/config-lgsm/wfserver/_default.cfg index 69a3d90e8..ab0c88e30 100644 --- a/lgsm/config-default/config-lgsm/wfserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/wfserver/_default.cfg @@ -100,6 +100,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/wmcserver/_default.cfg b/lgsm/config-default/config-lgsm/wmcserver/_default.cfg index a47978b8c..4b2a25806 100644 --- a/lgsm/config-default/config-lgsm/wmcserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/wmcserver/_default.cfg @@ -102,6 +102,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/wurmserver/_default.cfg b/lgsm/config-default/config-lgsm/wurmserver/_default.cfg index 3e5ebe017..a57da3c36 100644 --- a/lgsm/config-default/config-lgsm/wurmserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/wurmserver/_default.cfg @@ -139,6 +139,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/zmrserver/_default.cfg b/lgsm/config-default/config-lgsm/zmrserver/_default.cfg index 121f8fa53..262487bdb 100644 --- a/lgsm/config-default/config-lgsm/zmrserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/zmrserver/_default.cfg @@ -103,6 +103,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/config-default/config-lgsm/zpsserver/_default.cfg b/lgsm/config-default/config-lgsm/zpsserver/_default.cfg index 5489848a5..456a61765 100644 --- a/lgsm/config-default/config-lgsm/zpsserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/zpsserver/_default.cfg @@ -108,6 +108,10 @@ telegramthreadid="" telegramsilentnotification="false" curlcustomstring="" +## Stop | https://docs.linuxgsm.com/commands/start-stop-restart +stoponlyifnoplayers="off" +stoponlyifnoplayersallcommands="on" + ## Updating | https://docs.linuxgsm.com/commands/update updateonstart="off" diff --git a/lgsm/modules/check_gamedig.sh b/lgsm/modules/check_gamedig.sh index 0942ac42a..72d3700fe 100755 --- a/lgsm/modules/check_gamedig.sh +++ b/lgsm/modules/check_gamedig.sh @@ -3,7 +3,7 @@ # Author: Daniel Gibbs # Contributors: https://linuxgsm.com/contrib # Website: https://linuxgsm.com -# Description: Installs nodejs and gamedig +# Description: Installs Node.js and gamedig moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" @@ -18,4 +18,6 @@ elif [ "$(command -v node)" ] && [ "$(command -v npm)" ] && [ "$(node -v | cut - cd "${lgsmdir}" || exit curl -s -L -o package.json "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/package.json" npm update > /dev/null 2>&1 +else + fn_script_log_info "Install Node.js and NPM to enable Gamedig" fi diff --git a/lgsm/modules/check_players_online.sh b/lgsm/modules/check_players_online.sh new file mode 100755 index 000000000..b38de1f70 --- /dev/null +++ b/lgsm/modules/check_players_online.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# LinuxGSM check_players_online.sh module +# Author: Daniel Gibbs +# Contributors: https://linuxgsm.com/contrib +# Website: https://linuxgsm.com +# Description: Queries the server with gamedig and sets ${playersonline} to the +# current player count when players are connected (empty otherwise). +# Used by the stoponlyifnoplayers feature to postpone stop/restart. + +moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" + +playersonline="" +if [ "${stoponlyifnoplayers}" == "on" ]; then + if [ "${querymode}" == "2" ] || [ "${querymode}" == "3" ]; then + querysucceeded="0" + for queryip in "${queryips[@]}"; do + query_gamedig.sh + if [ "${querystatus}" == "0" ]; then + querysucceeded="1" + if [ -n "${gdplayers}" ] && [ "${gdplayers}" -ne 0 ]; then + playersonline="${gdplayers}" + break + fi + fi + done + # The query failed for every configured IP, so the player count could not be + # determined. Fail open (proceed as if empty) rather than block the server + # indefinitely, but warn clearly since the safety check did not actually run. + if [ "${querysucceeded}" == "0" ]; then + fn_print_warn_nl "Unable to determine player count: stoponlyifnoplayers check skipped" + fn_script_log_warn "Unable to determine player count via gamedig: stoponlyifnoplayers check skipped" + fi + fi +fi diff --git a/lgsm/modules/command_monitor.sh b/lgsm/modules/command_monitor.sh index 7c813aed7..0a80fcbf7 100755 --- a/lgsm/modules/command_monitor.sh +++ b/lgsm/modules/command_monitor.sh @@ -109,6 +109,26 @@ fn_monitor_check_stopping() { fi } +fn_monitor_check_restart_request() { + if [ -f "${lockdir}/${selfname}-restart-request.lock" ]; then + fn_print_dots "Checking restart: " + fn_print_checking_eol + fn_print_info "Checking restart: Restart requested: " + fn_print_info_eol_nl + fn_script_log_info "Checking restart: Restart requested" + check_players_online.sh + if [ -n "${playersonline}" ]; then + fn_print_info_nl "${playersonline} players are on the server: restart postponed" + fn_script_log_info "${playersonline} players are on the server: restart postponed" + echo "${playersonline}" > "${lockdir:?}/${selfname}-player-numbers.lock" + date '+%s' > "${lockdir:?}/${selfname}-restart-request.lock" + core_exit.sh + fi + command_restart.sh + core_exit.sh + fi +} + fn_monitor_check_backup() { # Remove stale lockfile. if [ -f "${lockdir}/backup.lock" ]; then @@ -405,6 +425,7 @@ fn_monitor_check_monitoring fn_monitor_check_starting fn_monitor_check_stopping fn_monitor_check_session +fn_monitor_check_restart_request # Monitor will not continue if session only check. if [ "${querymode}" != "1" ]; then @@ -417,4 +438,5 @@ if [ "${querymode}" != "1" ]; then fn_monitor_loop fi + core_exit.sh diff --git a/lgsm/modules/command_restart.sh b/lgsm/modules/command_restart.sh index 0a7f9b5f0..245c0d52d 100755 --- a/lgsm/modules/command_restart.sh +++ b/lgsm/modules/command_restart.sh @@ -12,6 +12,17 @@ fn_firstcommand_set check.sh info_game.sh +check_players_online.sh +if [ -n "${playersonline}" ]; then + fn_print_info_nl "${playersonline} players are on the server: restart postponed" + fn_script_log_info "${playersonline} players are on the server: restart postponed" + echo "${playersonline}" > "${lockdir:?}/${selfname}-player-numbers.lock" + date '+%s' > "${lockdir:?}/${selfname}-restart-request.lock" + core_exit.sh +fi +# Clear any pending restart request now that the restart is actually proceeding, +# so a stale lock doesn't trigger a repeat restart on the next monitor run. +rm -f "${lockdir:?}/${selfname}-restart-request.lock" exitbypass=1 command_stop.sh command_start.sh diff --git a/lgsm/modules/command_stop.sh b/lgsm/modules/command_stop.sh index 056214456..7bc408065 100755 --- a/lgsm/modules/command_stop.sh +++ b/lgsm/modules/command_stop.sh @@ -10,6 +10,22 @@ commandaction="Stopping" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" fn_firstcommand_set +# Only stop the server if there are no players online. +# An explicit stop or restart always respects players when the feature is on. +# Other commands that stop the server as a side effect (e.g. update) only respect +# players when stoponlyifnoplayersallcommands is on. +fn_stop_players_online() { + if [ "${firstcommandname}" == "STOP" ] || [ "${firstcommandname}" == "RESTART" ] || [ "${stoponlyifnoplayersallcommands}" == "on" ]; then + check_players_online.sh + if [ -n "${playersonline}" ]; then + fn_print_info_nl "${playersonline} players are on the server: stop prevented" + fn_script_log_info "${playersonline} players are on the server: stop prevented" + echo "${playersonline}" > "${lockdir:?}/${selfname}-player-numbers.lock" + core_exit.sh + fi + fi +} + # Attempts graceful shutdown by sending 'CTRL+c'. fn_stop_graceful_ctrlc() { fn_print_dots "Graceful: CTRL+c" @@ -373,6 +389,7 @@ fn_stop_pre_check() { fn_print_skip_nl "${servername} is already stopped" fn_script_log_info "${servername} is already stopped" else + fn_stop_players_online # Select graceful shutdown. fn_stop_graceful_select # Check status again, a kill tmux session if graceful shutdown failed. diff --git a/lgsm/modules/core_modules.sh b/lgsm/modules/core_modules.sh index 8752cf76b..0b092ea02 100755 --- a/lgsm/modules/core_modules.sh +++ b/lgsm/modules/core_modules.sh @@ -233,6 +233,11 @@ check_permissions.sh() { fn_fetch_module } +check_players_online.sh() { + modulefile="${FUNCNAME[0]}" + fn_fetch_module +} + check_root.sh() { modulefile="${FUNCNAME[0]}" fn_fetch_module From a9eebeb24002f35047297802b9b6a02ee5689b41 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Jul 2026 21:57:38 +0100 Subject: [PATCH 44/44] Release v26.2.0 --- lgsm/modules/core_modules.sh | 2 +- linuxgsm.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lgsm/modules/core_modules.sh b/lgsm/modules/core_modules.sh index 0b092ea02..9d72f5ce7 100755 --- a/lgsm/modules/core_modules.sh +++ b/lgsm/modules/core_modules.sh @@ -8,7 +8,7 @@ moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" -modulesversion="v26.1.0" +modulesversion="v26.2.0" # Core diff --git a/linuxgsm.sh b/linuxgsm.sh index f664749e6..9274a071b 100755 --- a/linuxgsm.sh +++ b/linuxgsm.sh @@ -24,7 +24,7 @@ if [ -f ".dev-debug" ]; then set -x fi -version="v26.1.0" +version="v26.2.0" shortname="core" gameservername="core" commandname="CORE"