diff --git a/UIMod/onboard_bundled/twoboxform/twoboxform.js b/UIMod/onboard_bundled/twoboxform/twoboxform.js index 3423361b..bef99749 100644 --- a/UIMod/onboard_bundled/twoboxform/twoboxform.js +++ b/UIMod/onboard_bundled/twoboxform/twoboxform.js @@ -138,6 +138,12 @@ document.addEventListener('DOMContentLoaded', () => { } else if (configField === "SaveInfo") { const primaryValue = document.getElementById('primary-field').value.trim(); + // If the world type contains a space, it's invalid + if (primaryValue.includes(' ')) { + showNotification('The world type cannot contain spaces!', 'error'); + hidePreloader(); + return; // Prevent submission + } const secondaryValue = document.getElementById('secondary-field').value.trim(); if (secondaryValue === '' || secondaryValue === document.getElementById('secondary-field').placeholder) { showNotification('Please select a world type!', 'error'); diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..618ae955 --- /dev/null +++ b/renovate.json @@ -0,0 +1,122 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended", + ":semanticCommits", + ":semanticCommitsAll", + ":rebaseStalePrs", + ":prConcurrentLimit10", + ":prHourlyLimit4", + ":labels(renovate)", + ":disableRateLimiting" + ], + + "timezone": "Etc/UTC", + "automerge": false, + "platformAutomerge": false, + "assignees": [], + "baseBranches": ["nightly"], + "reviewers": ["JacksonTheMaster", "mitoskalandiel"], + "dependencyDashboard": true, + "dependencyDashboardTitle": "Renovate Dashboard", + + "enabledManagers": [ + "gomod", + "npm", + "dockerfile", + "docker-compose", + "github-actions" + ], + + "npm": { + "managerFilePatterns": [ + "frontend/package.json" + ] + }, + + "ignorePaths": [ + "**/node_modules/**", + "**/dist/**", + "**/build/**", + "**/public/**", + "**/.svelte-kit/**", + "**/sscm/**", + "**/steamcmd/**", + "**/Steam/**", + "**/steamapps/**", + "**/UIMod/**", + "**/saves/**" + ], + + "packageRules": [ + { + "matchManagers": ["github-actions"], + "groupName": "github-actions", + "labels": ["ci", "renovate"], + "automerge": false, + "automergeType": "branch", + "platformAutomerge": false + }, + { + "matchManagers": ["dockerfile", "docker-compose"], + "groupName": "docker base images", + "labels": ["docker", "renovate"], + "pinDigests": true, + "matchUpdateTypes": ["digest"], + "automerge": false, + "automergeType": "branch", + "platformAutomerge": false + }, + { + "matchManagers": ["gomod"], + "groupName": "go modules (minor/patch)", + "labels": ["go", "renovate"], + "matchUpdateTypes": ["minor", "patch"], + "automerge": false, + "automergeType": "branch", + "platformAutomerge": false + }, + { + "matchManagers": ["gomod"], + "groupName": "go modules (major)", + "labels": ["go", "major"], + "matchUpdateTypes": ["major"], + "automerge": false + }, + { + "matchManagers": ["npm"], + "matchFileNames": [ + "^frontend/" + ], + "labels": ["frontend", "npm", "renovate"], + "matchUpdateTypes": ["patch", "minor"], + "groupName": "frontend deps (minor/patch)", + "automerge": false, + "automergeType": "branch", + "platformAutomerge": false + }, + { + "matchManagers": ["npm"], + "matchFileNames": [ + "^frontend/" + ], + "labels": ["frontend", "npm", "major"], + "matchUpdateTypes": ["major"], + "groupName": "frontend deps (major)", + "automerge": false + }, + { + "matchPackageNames": [ + "golang.org/x/*", + "github.com/golang/*", + "github.com/bwmarrin/discordgo" + ], + "labels": ["go", "important"], + "separateMinorPatch": false + } + ], + + "prCreation": "not-pending", + "minimumReleaseAge": "2 days", + "commitBodyTable": true +} diff --git a/src/config/config.go b/src/config/config.go index ab63a20f..f5c35304 100644 --- a/src/config/config.go +++ b/src/config/config.go @@ -11,7 +11,7 @@ import ( var ( // All configuration variables can be found in vars.go - Version = "5.6.5" + Version = "5.6.6" Branch = "release" ) diff --git a/src/config/getters.go b/src/config/getters.go index f07be86a..936a4bbd 100644 --- a/src/config/getters.go +++ b/src/config/getters.go @@ -487,3 +487,9 @@ func GetAllowAutoGameServerUpdates() bool { defer ConfigMu.RUnlock() return AllowAutoGameServerUpdates } + +func GetExtractedGameVersion() string { + ConfigMu.RLock() + defer ConfigMu.RUnlock() + return ExtractedGameVersion +} diff --git a/src/config/setters.go b/src/config/setters.go index 10bf86fd..401b53c5 100644 --- a/src/config/setters.go +++ b/src/config/setters.go @@ -38,6 +38,14 @@ func SetCurrentBranchBuildID(value string) error { return nil } +func SetExtractedGameVersion(value string) error { + ConfigMu.Lock() + defer ConfigMu.Unlock() + + ExtractedGameVersion = value + return nil +} + // ALL SETTERS BELOW THIS LINE ARE UNUSED AT THE MOMENT // ALL SETTERS BELOW THIS LINE ARE UNUSED AT THE MOMENT // ALL SETTERS BELOW THIS LINE ARE UNUSED AT THE MOMENT diff --git a/src/config/vars.go b/src/config/vars.go index 3c37b51d..0ba6fb1a 100644 --- a/src/config/vars.go +++ b/src/config/vars.go @@ -62,6 +62,7 @@ var ( AutoStartServerOnStartup bool SSUIIdentifier string CurrentBranchBuildID string // ONLY RUNTIME + ExtractedGameVersion string // ONLY RUNTIME ) // Discord integration diff --git a/src/core/loader/terminalmsg.go b/src/core/loader/terminalmsg.go index 22125f41..4f6803dc 100644 --- a/src/core/loader/terminalmsg.go +++ b/src/core/loader/terminalmsg.go @@ -48,6 +48,6 @@ func printFirstTimeSetupMessage() { logger.Core.Cleanf(" │ • Configure your server by visiting the WebUI! │") logger.Core.Cleanf(" │ • Support is provided at https://discord.gg/8n3vN92MyJ │") logger.Core.Cleanf(" │ • For more details, check the GitHub Wiki: │") - logger.Core.Cleanf(" │ • https://github.com/JacksonTheMaster/StationeersServerUI/v5/wiki │") + logger.Core.Cleanf(" │ • https://github.com/SteamServerUI/StationeersServerUI/v5/wiki │") logger.Core.Cleanf(" └─────────────────────────────────────────────────────────────────────────────────────────────┘") } diff --git a/src/managers/detectionmgr/detector.go b/src/managers/detectionmgr/detector.go index ddccf19c..0aec9a7d 100644 --- a/src/managers/detectionmgr/detector.go +++ b/src/managers/detectionmgr/detector.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "github.com/JacksonTheMaster/StationeersServerUI/v5/src/config" "github.com/JacksonTheMaster/StationeersServerUI/v5/src/discordbot" ) @@ -240,6 +241,19 @@ func (d *Detector) processRegexPatterns(logMessage string) { }) }, }, + { + pattern: regexp.MustCompile(`Version\s*:\s*(\d+\.\d+\.\d+\.\d+)`), + handler: func(matches []string, logMessage string) { + version := matches[1] + d.triggerEvent(Event{ + Type: EventVersionExtracted, + Message: fmt.Sprintf("Version %s detected", version), + RawLog: logMessage, + Timestamp: time.Now().Format(time.RFC3339), + }) + config.SetExtractedGameVersion(version) + }, + }, } for _, p := range patterns { diff --git a/src/managers/detectionmgr/handlers.go b/src/managers/detectionmgr/handlers.go index abcc6b9c..d8ff75f3 100644 --- a/src/managers/detectionmgr/handlers.go +++ b/src/managers/detectionmgr/handlers.go @@ -66,6 +66,12 @@ func DefaultHandlers() map[EventType]Handler { ssestream.BroadcastDetectionEvent(message) discordbot.SendMessageToStatusChannel(message) }, + EventVersionExtracted: func(event Event) { + message := fmt.Sprintf("🎮 [Gameserver] 📦 Version %s detected", event.Message) + logger.Detection.Info(message) + ssestream.BroadcastDetectionEvent(message) + discordbot.SendMessageToStatusChannel(message) + }, EventServerRunning: func(event Event) { message := "🎮 [Gameserver] ✅ Server process has started!" logger.Detection.Info(message) diff --git a/src/managers/detectionmgr/types.go b/src/managers/detectionmgr/types.go index c24773f6..efa327d2 100644 --- a/src/managers/detectionmgr/types.go +++ b/src/managers/detectionmgr/types.go @@ -18,6 +18,7 @@ const ( EventSettingsChanged EventType = "SETTINGS_CHANGED" EventServerHosted EventType = "SERVER_HOSTED" EventNewGameStarted EventType = "NEW_GAME_STARTED" + EventVersionExtracted EventType = "VERSION_EXTRACTED" EventServerRunning EventType = "SERVER_RUNNING" EventCustomDetection EventType = "CUSTOM_DETECTION" )