Releases: heyvaldemar/l4d2-server-docker-compose
Releases · heyvaldemar/l4d2-server-docker-compose
Release list
v1.2.0
Added
L4D2_SERVER_TIMEZONE: the game gets the household clock too. Every timestamp this server writes — a ban, a join, the crash it leaves behind — is read next to a log line from somewhere else, and two clocks turn that into arithmetic. Six of this fleet's eleven game templates already carried the setting and this one did not. It defaults to UTC, which is now a choice rather than an accident, and the image carries the whole tz database so any zone name works. Measured against the pinned image: unset givesUTC, set gives the zone asked for.
Upgrading
git pull (or ./update.sh), then docker compose up -d. Nothing changes unless you set the new variable: the default is UTC, which is what the container did before.
Full history in CHANGELOG.md.
v1.1.0
Added
update.sh: move between release tags on purpose. It updates to the latest release (a combination this repository's CI has booted and smoke-tested), refuses to cross a major version unattended, refuses to run over local changes, and names any new required variable before anything has moved.--dry-runsays what would happen.
Upgrading
git pull (or ./update.sh). Nothing running changes: this release adds or extends the update script and touches no image pin.
Full history in CHANGELOG.md.
v1.0.0
Added
- A Left 4 Dead 2 co-op server, image pinned by digest as an interpolation
default, sogit pulldelivers the build this repository has tested and
.envoverrides survive it. The tag ismasterbecause upstream publishes
no version numbers: the digest is the version. - Direct connect enabled.
sv_allow_lobby_connect_only 0in server.cfg;
the game's default accepts only lobby arrivals and refusesconnect host:portwith nothing useful said. - A campaign rotation that rotates. The file the image ships lists four
maps from the first game under names that do not exist in this build, so
every finale restarted the same campaign. Fourteen campaigns by their real
first chapter, each name checked withmapson a running server. - Three SourceMod plugins, compiled in CI with a pinned compiler.
l4d2_campaign_cyclemoves the group to the next campaign onfinale_win,
because L4D2 exposes no way to see whether the engine reads mapcycle.txt in
co-op at all;l4d2_join_rescueputs a human dropped into Spectator back on
the survivor team when the engine's own takeover does not fire;
l4d2_character_selectlets a player pick their survivor without turning
sv_cheatson for everybody. - Addons and the sourcemod config directory bind-mounted from the host,
because the game sits in the image's writable layer and anything installed
inside vanishes on the next recreate without a word. Only thesourcemod
subdirectory ofcfg/is mounted, so the game's own cfg files stay visible. - An exact-match health check on the game binary, with
tests/e2e-healthcheck.shproving it against a real container. - Measured limits. A four-player server peaked at 432 MB; the 3 GB ceiling
exists so a leak here cannot get some other container OOM-killed in its
place. - Deployment Verification CI that boots the real image:
docker compose up, a health check going green, and an A2S_INFO query answered on the
published port. The image is 3.3 GB compressed, which a runner can hold —
the one Source server in this family for which that is true.
Upgrading
First release: nothing to upgrade from. git clone, copy .env.example to .env, put MetaMod and SourceMod into addons/, and docker compose up -d.
Full history in CHANGELOG.md.