Initial: MPQ patch packager (Gitea Action, StormLib-based)

A BigWigs-style CI packager for WoW MPQ patch archives. Reads an mpq.yaml
manifest, stages files, builds a vanilla-1.12-compatible patch-X.mpq via
StormLib, and (in the example workflow) attaches it to a Gitea release on tag.
This commit is contained in:
2026-06-25 21:34:12 -05:00
parent df6372ac94
commit 4293e90a97
12 changed files with 628 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
# mpq-packager — build image for the Gitea Action.
#
# Stage 1 builds StormLib (the MoPaQ library MPQEditor itself is built on) and
# our small `mpqpack` binary against it. Stage 2 is a slim runtime carrying the
# binary plus Python for the orchestration layer.
FROM debian:bookworm-slim AS build
RUN apt-get update && apt-get install -y --no-install-recommends \
git cmake g++ make zlib1g-dev libbz2-dev ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /build
# Pin StormLib to a known-good tag for reproducible builds.
ARG STORMLIB_REF=v9.25
RUN git clone --depth 1 --branch "${STORMLIB_REF}" \
https://github.com/ladislav-zezula/StormLib.git
RUN cmake -S StormLib -B StormLib/build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DWITH_LIBTOMCRYPT=OFF \
&& cmake --build StormLib/build --target storm -j "$(nproc)" \
&& cmake --install StormLib/build
COPY src/mpqpack.c .
# StormLib installs headers to /usr/local/include and libstorm.a to
# /usr/local/lib. Link zlib/bz2 for sector (de)compression.
RUN g++ -O2 -std=c++17 -o /usr/local/bin/mpqpack mpqpack.c \
-I/usr/local/include -lstorm -lz -lbz2 \
&& /usr/local/bin/mpqpack 2>/dev/null; \
test -x /usr/local/bin/mpqpack
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 python3-yaml zlib1g libbz2-1.0 ca-certificates \
&& rm -rf /var/lib/apt/lists/*
COPY --from=build /usr/local/bin/mpqpack /usr/local/bin/mpqpack
COPY package.py /opt/mpq-packager/package.py
COPY entrypoint.sh /opt/mpq-packager/entrypoint.sh
RUN chmod +x /opt/mpq-packager/entrypoint.sh
ENTRYPOINT ["/opt/mpq-packager/entrypoint.sh"]