-
-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* add script `build.sh` * add Dockerfile and build tasks
- Loading branch information
1 parent
6e7a275
commit 2c22486
Showing
4 changed files
with
263 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
build.sh |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
#!/bin/bash | ||
|
||
# Define color codes | ||
RED="\e[31m" | ||
ORANGE="\e[33m" | ||
GREEN="\e[32m" | ||
WHITE_BG="\e[47m" | ||
RESET="\e[0m" | ||
|
||
# Function to print colored messages | ||
print_color() { | ||
local color="$1" | ||
local message="$2" | ||
echo -e "${color}${message}${RESET}" | ||
} | ||
|
||
|
||
# Define directories | ||
srcDir="$1" | ||
|
||
# Check if directory is not empty | ||
if [ -z "$srcDir" ]; then | ||
print_color $RED "❌ Error: Argument 1 not provided" | ||
exit 1 | ||
fi | ||
|
||
# Check if directory does not exist | ||
if [ ! -d "$srcDir" ]; then | ||
print_color $RED "❌ Error: Directory '$srcDir' not found" | ||
exit 1 | ||
fi | ||
|
||
# Make amxxpc happy to find amxxpc32.so nearly | ||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$srcDir/scripting | ||
|
||
destinationDir="$2" | ||
|
||
# Check if directory is not empty | ||
if [ -z "$destinationDir" ]; then | ||
print_color $RED "❌ Error: Argument 2 not provided" | ||
exit 1 | ||
fi | ||
|
||
# Check if directory does not exist | ||
if [ ! -d "$destinationDir" ]; then | ||
print_color $RED "❌ Error: Directory '$destinationDir' not found" | ||
exit 1 | ||
fi | ||
|
||
scriptingDir="$destinationDir/scripting" | ||
|
||
|
||
|
||
# Function to compile a .sma file | ||
compile_sma() { | ||
local smaFile="$1" | ||
local outputPluginDir="$2" | ||
|
||
pluginName=$(basename "${smaFile%.sma}") | ||
relativeDir=$(dirname "${smaFile#$srcDir}") | ||
outputPlugin="$outputPluginDir/${pluginName}.amxx" | ||
|
||
# Create the output plugin directory if it doesn't exist | ||
mkdir -p "$outputPluginDir" | ||
|
||
# Print the name of the .sma file with white background | ||
# print_color $WHITE_BG " - Compiling: $(basename $smaFile)" | ||
|
||
# Get the last modification time of the output plugin file | ||
lastModTime=$(stat -c %Y "$smaFile" 2>/dev/null) | ||
now=$(date +%s) | ||
diff=$((now-lastModTime)) | ||
|
||
# Check if the file exists and its last modification time is within the last minute | ||
|
||
# Compile the .sma file and capture its output, excluding the lines with version and copyright info | ||
compile_output=$("$scriptingDir/amxxpc" \ | ||
"$smaFile" \ | ||
-i"$srcDir/scripting" \ | ||
-i"$srcDir/scripting/include" \ | ||
-i"$srcDir/scripting/ReDeathmatch" \ | ||
-o"$outputPlugin" 2>&1 | grep -vE "AMX Mod X Compiler|Copyright|Could not locate output file") | ||
|
||
# Check if there are any errors or warnings in the compile output | ||
if echo "$compile_output" | grep -qi "error"; then | ||
error_lines=$(echo "$compile_output" | grep -i "error" | sed 's/.*scripting\///') | ||
warning_lines=$(echo "$compile_output" | grep -i "warning" | sed 's/.*scripting\///') | ||
print_color $RED "❌ $error_lines" | ||
if [ -n "$warning_lines" ]; then | ||
print_color $ORANGE "⚠️ $warning_lines" | ||
fi | ||
elif echo "$compile_output" | grep -qi "warning"; then | ||
warning_lines=$(echo "$compile_output" | grep -i "warning" | sed 's/.*scripting\///') | ||
print_color $ORANGE "⚠️ $warning_lines" | ||
else | ||
print_color $GREEN " ✅ Compiled: $(basename $smaFile)" | ||
fi | ||
|
||
} | ||
|
||
# Find and compile all .sma files in the source directory and its subdirectories | ||
find $srcDir -name "*.sma" -type f | while read smaFile; do | ||
relativeDir=$(dirname "${smaFile#$srcDir/scripting}") | ||
outputPluginDir="$destinationDir/plugins$relativeDir" | ||
compile_sma "$smaFile" "$outputPluginDir" | ||
done | ||
|
||
needCopyOther=$3 | ||
if [ "$needCopyOther" ]; then | ||
echo "" | ||
|
||
# Copy directories without confirmation with green messages | ||
print_color $GREEN " - Copying configs..." | ||
cp -an $srcDir/configs/* $destinationDir/configs/ | ||
print_color $GREEN " - Copying data..." | ||
cp -an $srcDir/data/* $destinationDir/data/ | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
{ | ||
"version": "2.0.0", | ||
"tasks": [ | ||
{ | ||
"label": "Build AMX Mod X Plugins", | ||
"type": "shell", | ||
"command": "bash", | ||
"args": [ | ||
".vscode/build.sh", | ||
// sourceDir | ||
"$PWD/cstrike/addons/amxmodx", | ||
// outputDir | ||
"D:/Dev/HLDS_Server/cstrike/addons/amxmodx", | ||
// copy `data` and `configs` ? | ||
"1" | ||
], | ||
"group": { | ||
"kind": "build", | ||
"isDefault": false | ||
} | ||
}, | ||
{ | ||
"label": "Build ReDeathmatch Image", | ||
"type": "docker-build", | ||
"dockerBuild": { | ||
"context": "${workspaceFolder}/", | ||
"tag": "redeathmatch:${input:mod}", | ||
"buildArgs": { | ||
"MOD": "${input:mod}" | ||
} | ||
}, | ||
"group": { | ||
"kind": "build", | ||
"isDefault": false | ||
} | ||
}, | ||
{ | ||
"type": "shell", | ||
"label": "Run HLDS container", | ||
"command": "docker run --rm -ti -p 26900-27020:26900-27020/udp redeathmatch:${input:mod} ./hlds_run -game ${input:mod} +maxplayers 32 -bots +ip 0.0.0.0 -port 27016 +map de_dust2", | ||
"dependsOn": [ | ||
"Build ReDeathmatch Image" | ||
], | ||
"group": { | ||
"kind": "build", | ||
"isDefault": false | ||
} | ||
} | ||
], | ||
"presentation": { | ||
"echo": false, | ||
"reveal": "always", | ||
"focus": false, | ||
"panel": "dedicated", | ||
"showReuseMessage": false, | ||
"clear": true | ||
}, | ||
"problemMatcher": { | ||
"fileLocation": "autoDetect", | ||
"owner": "problem", | ||
"pattern": { | ||
// Group 1 - filename (absolute path for filename) | ||
// Group 2 - beginning line | ||
// Group 3 - ending line (optional) | ||
// Group 4 - error | warning (severity) | ||
// Group 5 - message | ||
"regexp": "(.+?)\\((\\d+)(?:\\s--\\s(\\d+))?\\)\\s:\\s(warning|error)\\s\\d+:\\s(.*)", | ||
"file": 1, | ||
"line": 2, | ||
"column": 3, | ||
"severity": 4, | ||
"message": 5 | ||
} | ||
}, | ||
"inputs": [ | ||
{ | ||
"type": "pickString", | ||
"id": "mod", | ||
"default": "cstrike", | ||
"description": "Select mod.", | ||
"options": [ | ||
"cstrike", | ||
"czero" | ||
] | ||
} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
# syntax=docker/dockerfile:1 | ||
|
||
ARG MOD="cstrike" | ||
|
||
FROM debian:trixie-slim AS build_stage | ||
|
||
# Install required packages | ||
RUN set -x \ | ||
&& apt-get update \ | ||
&& apt-get install -y --no-install-recommends --no-install-suggests \ | ||
ca-certificates=20240203 \ | ||
curl=8.5.0-2 \ | ||
libarchive-tools=3.7.2-1 \ | ||
lib32stdc++6=14-20240201-3 \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
WORKDIR /usr/local/bin/ | ||
ADD --chmod=755 https://raw.githubusercontent.com/hldsdocker/rehlds/master/utils/GetGithubReleaseUrl.sh GetGithubReleaseUrl | ||
|
||
WORKDIR /root/hlds/cstrike | ||
|
||
# Install Metamod-R | ||
RUN releaseLink="https://github.com/theAsmodai/metamod-r/releases/download/1.3.0.149/metamod-bin-1.3.0.149.zip" \ | ||
&& curl -sSL ${releaseLink} | bsdtar -xf - --exclude='*.dll' --exclude='*.pdb' addons/* | ||
|
||
# Install AMXModX 1.9.0 | ||
ARG AMXModX_URL="https://www.amxmodx.org/amxxdrop/1.9/amxmodx-1.9.0-git5294-base-linux.tar.gz" | ||
RUN curl -sSL ${AMXModX_URL} | bsdtar -xf - addons/ \ | ||
&& echo "linux addons/amxmodx/dlls/amxmodx_mm_i386.so" > addons/metamod/plugins.ini | ||
|
||
# Install ReAPI | ||
RUN releaseLink="https://github.com/s1lentq/reapi/releases/download/5.24.0.300/reapi-bin-5.24.0.300.zip" \ | ||
&& curl -sSL ${releaseLink} | bsdtar -xf - --exclude='*.dll' --exclude='*.pdb' addons/ | ||
|
||
COPY cstrike . | ||
|
||
SHELL ["/bin/bash", "-c"] | ||
|
||
WORKDIR /usr/local/bin/ | ||
COPY --chmod=755 .vscode/build.sh BuildAMXXPlugins | ||
|
||
WORKDIR /root/hlds/cstrike/addons/amxmodx/ | ||
RUN BuildAMXXPlugins . . | ||
|
||
|
||
WORKDIR /root/hlds/cstrike/ | ||
ARG YaPB_URL="https://github.com/yapb/yapb/releases/download/4.4.957/yapb-4.4.957-linux.tar.xz" | ||
RUN curl -sSL ${YaPB_URL} | bsdtar -xf - addons/ \ | ||
&& echo "linux addons/yapb/bin/yapb.so" >> addons/metamod/plugins.ini | ||
|
||
|
||
ARG MOD | ||
FROM hldsdocker/rehlds-${MOD}:regamedll AS run_stage | ||
|
||
COPY --chown=${APPUSER}:${APPUSER} --chmod=755 --from=build_stage /root/hlds/cstrike ${MOD} | ||
|
||
# Activate Metamod-R | ||
RUN sed -i 's/gamedll_linux ".*"/gamedll_linux "addons\/metamod\/metamod_i386.so"/' ${MOD}/liblist.gam |