feat(palworld) add palworld (#17479)

**Description**
> Fight, farm, build and work alongside mysterious creatures called
"Pals" in this completely new multiplayer, open world survival and
crafting game!

It's pokemon, a legit pokemon clone.

⚒️ Fixes  # <!--(issue)-->

**⚙️ Type of change**

- [X] ⚙️ Feature/App addition
- [ ] 🪛 Bugfix
- [ ] ⚠️ Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] 🔃 Refactor of current code

**🧪 How Has This Been Tested?**
<!--
Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration
-->

**📃 Notes:**
<!-- Please enter any other relevant information here -->

**✔️ Checklist:**

- [X] ⚖️ My code follows the style guidelines of this project
- [X] 👀 I have performed a self-review of my own code
- [ ] #️⃣ I have commented my code, particularly in hard-to-understand
areas
- [ ] 📄 I have made corresponding changes to the documentation
- [ ] ⚠️ My changes generate no new warnings
- [ ] 🧪 I have added tests to this description that prove my fix is
effective or that my feature works
- [ ] ⬆️ I increased versions for any altered app according to semantic
versioning

** App addition**

If this PR is an app addition please make sure you have done the
following.

- [X] 🖼️ I have added an icon in the Chart's root directory called
`icon.png`

---

_Please don't blindly check all the boxes. Read them and only check
those that apply.
Those checkboxes are there for the reviewer to see what is this all
about and
the status of this PR with a quick glance._

---------

Signed-off-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com>
Co-authored-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com>
This commit is contained in:
Xstar97TheNoob 2024-01-24 04:09:45 -05:00 committed by GitHub
parent 12749c20a3
commit 55267773dc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 393 additions and 0 deletions

View File

@ -0,0 +1,30 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
# OWNERS file for Kubernetes
OWNERS
# helm-docs templates
*.gotmpl
# docs folder
/docs
# icon
icon.png

View File

@ -0,0 +1 @@
# Changelog

View File

@ -0,0 +1,37 @@
annotations:
max_scale_version: 23.10.2
min_scale_version: 23.10.0
truecharts.org/SCALE-support: "true"
truecharts.org/category: GameServers
truecharts.org/max_helm_version: "3.14"
truecharts.org/min_helm_version: "3.12"
truecharts.org/train: incubator
apiVersion: v2
appVersion: palworld
dependencies:
- name: common
version: 17.2.26
repository: oci://tccr.io/truecharts
condition: ""
alias: ""
tags: []
import-values: []
deprecated: false
description: A custom SteamCMD chart that runs Palworld.
home: https://truecharts.org/charts/incubator/palworld
icon: https://truecharts.org/img/hotlink-ok/chart-icons/palworld.png
keywords:
- palworld
- GameServers
kubeVersion: '>=1.24.0-0'
maintainers:
- name: TrueCharts
email: info@truecharts.org
url: https://truecharts.org
name: palworld
sources:
- https://github.com/ich777/docker-steamcmd-server/tree/palworld
- https://github.com/truecharts/charts/tree/master/charts/incubator/palworld
- https://ghcr.io/ich777/steamcmd
type: application
version: 0.0.1

View File

@ -0,0 +1 @@
# README

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -0,0 +1,209 @@
# Include{groups}
portals: {}
questions:
# Include{global}
# Include{workload}
# Include{workloadDeployment}
# Include{replicas1}
# Include{podSpec}
# Include{containerMain}
# Include{containerBasic}
# Include{containerAdvanced}
- variable: palworld
group: App Configuration
label: Palworld Configuration
schema:
additional_attrs: true
type: dict
attrs:
- variable: game
label: Game Configuration
schema:
additional_attrs: true
type: dict
attrs:
- variable: id
label: Game Id
description: The ID of the container to download at start up.
schema:
type: string
required: true
default: "2394010"
- variable: steam
label: Steam Configuration
schema:
additional_attrs: true
type: dict
attrs:
- variable: username
label: Username
description: Optionally set a steam username otherwise (disable Steam Guard).
schema:
type: string
default: ""
- variable: password
label: Password
description: Optionally set a steam password (disable Steam Guard).
schema:
type: string
private: true
default: ""
- variable: admin
label: Admin Configuration
schema:
additional_attrs: true
type: dict
attrs:
- variable: password
label: Server Admin Password
description: Optionally set a password for the admin (this field accepts no spaces)
schema:
type: string
private: true
default: ""
- variable: params
label: Game Params
schema:
type: list
default:
- EpicApp=PalServer
required: true
items:
- variable: param
label: Param
schema:
type: string
required: true
default: ""
- variable: params_extra
label: Game Params Extra
schema:
type: list
default:
- -No-useperfthreads
- -NoAsyncLoadingThread
- -UseMultithreadForDS
required: true
items:
- variable: extra_param
label: Extra Param
schema:
type: string
required: true
default: ""
- variable: update_public_ip
label: Update Public IP
description: Will check if the Public IP is still valid (the container will try to grab your public IP on the first server start since the public IP is necessary to run a community server).
schema:
type: boolean
default: false
- variable: validate
label: Validate
description: Validates the game data.
schema:
type: boolean
default: false
# Include{containerConfig}
# Include{podOptions}
# Include{serviceRoot}
# Include{serviceMain}
# Include{serviceSelectorLoadBalancer}
# Include{serviceSelectorExtras}
- variable: main
label: "Main Service Port Configuration"
schema:
additional_attrs: true
type: dict
attrs:
- variable: port
label: "Port"
description: "This port exposes the container port on the service"
schema:
type: int
default: 8211
required: true
- variable: rcon
label: RCON Service
description: The RCON service.
schema:
additional_attrs: true
type: dict
attrs:
# Include{serviceSelectorLoadBalancer}
# Include{serviceSelectorExtras}
- variable: rcon
label: RCON Service Port Configuration
schema:
additional_attrs: true
type: dict
attrs:
- variable: port
label: Port
description: This port exposes the container port on the service
schema:
type: int
default: 25575
required: true
# Include{serviceExpertRoot}
# Include{serviceExpert}
# Include{serviceList}
# Include{persistenceRoot}
- variable: steamcmd
label: "App SteamCMD Storage"
description: "Stores the Application SteamCMD."
schema:
additional_attrs: true
type: dict
attrs:
# Include{persistenceBasic}
- variable: serverfiles
label: "App Server Files Storage"
description: "Stores the Application Server Files."
schema:
additional_attrs: true
type: dict
attrs:
# Include{persistenceBasic}
# Include{persistenceList}
# Include{ingressRoot}
- variable: main
label: "Main Ingress"
schema:
additional_attrs: true
type: dict
attrs:
# Include{ingressDefault}
# Include{ingressAdvanced}
# Include{ingressList}
# Include{securityContextRoot}
- variable: runAsUser
label: "runAsUser"
description: "The UserID of the user running the application"
schema:
type: int
default: 0
- variable: runAsGroup
label: "runAsGroup"
description: "The groupID of the user running the application"
schema:
type: int
default: 0
# Include{securityContextContainer}
# Include{securityContextAdvanced}
# Include{securityContextPod}
- variable: fsGroup
label: "fsGroup"
description: "The group that should own ALL storage."
schema:
type: int
default: 568
# Include{resources}
# Include{advanced}
# Include{addons}
# Include{codeserver}
# Include{netshoot}
# Include{vpn}
# Include{documentation}

View File

@ -0,0 +1 @@
{{- include "tc.v1.common.lib.chart.notes" $ -}}

View File

@ -0,0 +1 @@
{{ include "tc.v1.common.loader.all" . }}

View File

@ -0,0 +1,113 @@
image:
repository: ghcr.io/ich777/steamcmd
pullPolicy: IfNotPresent
tag: palworld@sha256:c7ed87dfb13890f340d663ca0a97acb6a8b83a40ab81a9c94c8675cee03af325
securityContext:
container:
readOnlyRootFilesystem: false
runAsUser: 0
runAsGroup: 0
service:
main:
ports:
main:
protocol: udp
port: 8211
rcon:
enabled: true
ports:
rcon:
enabled: true
protocol: tcp
port: 25575
palworld:
game:
id: "2394010"
steam:
username: ""
password: ""
admin:
password: adminDocker
params:
- EpicApp=PalServer
params_extra:
- -No-useperfthreads
- -NoAsyncLoadingThread
- -UseMultithreadForDS
update_public_ip: false
validate: false
workload:
main:
podSpec:
initContainers:
update-config-ini:
enabled: true
type: init
imageSelector: "image"
command:
- /bin/sh
- -c
args:
- |
config=/serverdata/serverfiles/Pal/Saved/Config/LinuxServer
cfgFile=${config}/PalWorldSettings.ini
mkdir -p ${config}
if [ ! -f ${cfgFile} ]; then
echo "Config file not found, fetching..."
# Fetch the config file if it doesn't exist, just like the container does
wget -qO ${cfgFile} https://github.com/ich777/docker-steamcmd-server/raw/palworld/config/PalWorldSettings.ini
fi
echo "Setting RCON status..."
sed -i 's/\(RCONEnabled=\)[^,]*/\1True/g' ${cfgFile}
echo "Set to [$(grep -Po 'RCONEnabled=[^,]*' ${cfgFile})]"
echo "Setting RCON Port..."
sed -i 's/\(RCONPort=\)[^,]*/\1{{ .Values.service.rcon.ports.rcon.port }}/g' ${cfgFile}
echo "Set to [$(grep -Po 'RCONPort=[^,]*' ${cfgFile})]"
echo "Setting Game Port..."
sed -i 's/\(PublicPort=\)[^,]*/\1{{ .Values.service.main.ports.main.port }}/g' ${cfgFile}
echo "Set to [$(grep -Po 'PublicPort=[^,]*' ${cfgFile})]"
echo "Done!"
containers:
main:
probes:
liveness:
type: tcp
port: "{{ .Values.service.rcon.ports.rcon.port }}"
readiness:
type: tcp
port: "{{ .Values.service.rcon.ports.rcon.port }}"
startup:
type: tcp
port: "{{ .Values.service.rcon.ports.rcon.port }}"
env:
STEAMCMD_DIR: "{{ .Values.persistence.steamcmd.mountPath }}"
SERVER_DIR: "{{ .Values.persistence.serverfiles.targetSelector.main.main.mountPath }}"
GAME_ID: "{{ .Values.palworld.game.id }}"
SRV_ADMIN_PWD: "{{ .Values.palworld.admin.password }}"
GAME_PARAMS: '{{ join " " .Values.palworld.params }}'
GAME_PARAMS_EXTRA: '{{ join " " .Values.palworld.params_extra }}'
UPDATE_PUBLIC_IP: "{{ .Values.palworld.update_public_ip }}"
VALIDATE: "{{ .Values.palworld.validate }}"
USERNAME: "{{ .Values.palworld.steam.username }}"
PASSWRD: "{{ .Values.palworld.steam.password }}"
persistence:
steamcmd:
enabled: true
mountPath: /serverdata/steamcmd
serverfiles:
enabled: true
targetSelector:
main:
main:
mountPath: /serverdata/serverfiles
update-config-ini:
mountPath: /serverdata/serverfiles
portal:
open:
enabled: false