add initial hermetic container build-and-test support
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
FROM ubuntu:24.04
|
||||
|
||||
# Avoid interactive prompts during package installation
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /build
|
||||
|
||||
# Install system dependencies and development packages
|
||||
RUN apt-get update && apt-get install --no-install-recommends --no-install-suggests -y \
|
||||
wget \
|
||||
build-essential \
|
||||
libsdl2-dev \
|
||||
libfreetype-dev \
|
||||
\
|
||||
# FFmpeg development packages
|
||||
libavcodec-dev \
|
||||
libavformat-dev \
|
||||
libavutil-dev \
|
||||
libavfilter-dev \
|
||||
libavdevice-dev \
|
||||
libswscale-dev \
|
||||
libswresample-dev \
|
||||
libpostproc-dev \
|
||||
ffmpeg \
|
||||
\
|
||||
# Utilities
|
||||
pkg-config \
|
||||
python3 \
|
||||
python3-pip \
|
||||
\
|
||||
# Running render tests
|
||||
weston \
|
||||
libgl1-mesa-dri \
|
||||
mesa-vulkan-drivers \
|
||||
libvulkan1 \
|
||||
imagemagick
|
||||
|
||||
RUN wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | tee /etc/apt/trusted.gpg.d/lunarg.asc \
|
||||
&& wget -qO /etc/apt/sources.list.d/lunarg-vulkan-noble.list http://packages.lunarg.com/vulkan/lunarg-vulkan-noble.list \
|
||||
&& apt update \
|
||||
&& apt install --no-install-recommends --no-install-suggests -y vulkan-sdk
|
||||
|
||||
# Remove extra cache after all the installations
|
||||
RUN rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN chown -R ubuntu:ubuntu /build
|
||||
|
||||
COPY build-and-test.sh /build/
|
||||
|
||||
# Switch to non-root user
|
||||
USER ubuntu
|
||||
|
||||
# Default command
|
||||
WORKDIR /build
|
||||
CMD ["/build/build-and-test.sh"]
|
||||
Executable
+26
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
#set -eux
|
||||
set -ux
|
||||
|
||||
XDG_RUNTIME_DIR=/tmp weston \
|
||||
--backend=headless \
|
||||
--renderer=gl \
|
||||
--width=1280 \
|
||||
--height=800 \
|
||||
--socket=wayland-headless &
|
||||
|
||||
build() {
|
||||
pushd /build/xash3d-fwgs
|
||||
./waf configure -T release -o /build/obj -8
|
||||
./waf install --destdir=/build/out
|
||||
popd
|
||||
}
|
||||
|
||||
rendertest() {
|
||||
pushd /build/HLRTest/render
|
||||
WAYLAND_DISPLAY=/tmp/wayland-headless ./rendertest.py --xash-dir /build/out run
|
||||
popd
|
||||
}
|
||||
|
||||
time build
|
||||
time rendertest
|
||||
@@ -0,0 +1,9 @@
|
||||
# Path to Steam Half-Life data, where ./valve and ./valve_hd dirs are located (readonly)
|
||||
# Must already contain build https://github.com/FWGS/hlsdk-portable libs in `dlls` and `cl_dlls/`
|
||||
STEAM_HALFLIFE_DIR=${HOME}/opt/Half-Life
|
||||
|
||||
# Path to https://rtxash.omgwtf.ru/Half-Life-RTX/Half-Life-PBR repo clone (readonly)
|
||||
HALFLIFE_PBR_REPO_DIR=${HOME}/src/Half-Life-PBR
|
||||
|
||||
# Path to https://github.com/w23/xash3d-fwgs/ clone (readonly)
|
||||
XASH3D_RT_REPO_DIR=${HOME}/src/xash3d-fwgs
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
set -eux
|
||||
|
||||
NAME=xash-builder
|
||||
|
||||
HLRTEST_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
|
||||
|
||||
source .env
|
||||
|
||||
build-image() {
|
||||
podman build -t ubuntu-xash-builder .
|
||||
}
|
||||
|
||||
run() {
|
||||
podman run -it --rm \
|
||||
--name ${NAME} \
|
||||
--userns=keep-id \
|
||||
--user $(id -u):$(id -g) \
|
||||
\
|
||||
--cap-drop=ALL \
|
||||
--security-opt=no-new-privileges \
|
||||
--read-only \
|
||||
--tmpfs /tmp \
|
||||
--tmpfs /build/obj \
|
||||
--tmpfs /build/out \
|
||||
\
|
||||
-v /dev/dri/renderD128:/dev/dri/renderD128:ro \
|
||||
\
|
||||
-v ${STEAM_HALFLIFE_DIR}/valve:/build/out/valve:O \
|
||||
-v ${STEAM_HALFLIFE_DIR}/valve_hd:/build/out/valve_hd:ro \
|
||||
-v ${HALFLIFE_PBR_REPO_DIR}/valve/pbr:/build/out/valve/pbr:ro \
|
||||
\
|
||||
-v ${XASH3D_RT_REPO_DIR}:/build/xash3d-fwgs:O \
|
||||
\
|
||||
-v ${HLRTEST_PATH}:/build/HLRTest:ro \
|
||||
-v ${HLRTEST_PATH}/render/work:/build/HLRTest/render/work \
|
||||
\
|
||||
ubuntu-xash-builder:latest \
|
||||
"$@"
|
||||
}
|
||||
|
||||
shell() {
|
||||
podman exec -it ${NAME} /bin/bash
|
||||
}
|
||||
|
||||
time "$@"
|
||||
Reference in New Issue
Block a user