Skip to content

Releases: heyvaldemar/cs2-server-docker-compose

v1.2.0

Choose a tag to compare

@heyvaldemar heyvaldemar released this 20 Sep 15:52

Added

  • CS2_SERVER_DELTATICKS_ENFORCE and CS2_SERVER_TV_RELAYVOICE. Upstream added both in 5.0.0 with defaults baked into the image, so the server behaves the same whether or not they are set. They are wired through and documented because a knob nobody can find is a knob that does not exist. The second one decides whether GOTV relays player voice, which is a privacy question on a public server rather than a tuning one.

Changed

  • joedwards32/cs2:4.0.1 moved to joedwards32/cs2:5.0.0. The freshness check reported the lag; the deploy job booted the stack on the new image before this landed.
  • The container's base runtime changed, and nothing in this file had to. Upstream marked 5.0.0 breaking for moving off Steam Runtime "sniper" onto steamrt4, and for replacing the RCON forwarder simpleproxy with socat. Both live inside the image: the ports, the variables and the compose interface are unchanged, and the socat form forks per connection where the old one did not. The review was right to stop on that marker: the release notes carry the title and nothing else, so what ! meant could not be read from them. It is readable from the change itself — upstream PR 218 is a directory rename plus two lines of Dockerfile, and that is what settled it.

Upgrading

git pull (or ./update.sh), then docker compose up -d. The container is recreated on the new image; the game files and .env are untouched.

Upstream calls 5.0.0 breaking because the image moved off Steam Runtime "sniper" onto steamrt4 and replaced the RCON forwarder simpleproxy with socat. Nothing in this repository had to change for it: same ports, same variables, same compose interface. The first start after the move re-verifies the game files through SteamCMD, so give it the usual long start period before calling it unhealthy.

Two new optional variables come with 5.0.0, both already at the image's own defaults. TV_RELAYVOICE is the one worth a look: it decides whether GOTV relays player voice.

Full history in CHANGELOG.md.

v1.1.0

Choose a tag to compare

@heyvaldemar heyvaldemar released this 07 Sep 20:39

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-run says 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.1

Choose a tag to compare

@heyvaldemar heyvaldemar released this 07 Sep 01:53
9403726

Fixed

  • The freshness job was watching the wrong pins. It looped over
    MINECRAFT_SERVER_IMAGE_TAG and MINECRAFT_SERVER_BACKUP_IMAGE_TAG, names
    carried over from the template this workflow was adapted from and absent from
    the compose file here. The CS2 pin was never compared against the registry:
    the one thing the job exists to do was not happening, while the job failed
    daily for an unrelated reason.
  • An absent variable no longer reports itself as a registry failure. An
    empty pin fell through to the image lookup and surfaced as "did not resolve
    after three attempts", which points at Docker Hub. The variable is checked
    first now and the error names this file, so the same mistake is loud instead
    of misleading.

Upgrading

Nothing to do on a running server: this release changes CI only. git pull picks it up.

Full history in CHANGELOG.md.

v1.0.0

Choose a tag to compare

@heyvaldemar heyvaldemar released this 05 Sep 11:41

Added

  • A Counter-Strike 2 dedicated server, image pinned by digest as an
    interpolation default, so git pull delivers the version this repository has
    tested and .env overrides survive it.
  • A health check that matches the game exactly rather than as a substring.
    Two commands run in the container: cs2, the game, and cs2.sh, its
    supervisor. A substring search is satisfied by either, so the game can crash
    and leave the wrapper standing while the container reports healthy — and
    docker does not restart an unhealthy container by itself, so nothing else
    catches it. tests/e2e-healthcheck.sh proves the distinction against a real
    container, and no CS2 download is involved.
  • The game volume declared external, so docker compose down -v cannot
    delete 60 GB of SteamCMD content. down -v is the command everyone reaches
    for when a stack misbehaves, and on a metered connection that content comes
    back twice: once in bytes, once on the bill.
  • The published port equal to the port the server binds. Steam's list
    records what the server bound, not what was forwarded, so a mismatch hands
    players an address where a different server answers.
  • Measured limits. A populated server sits near 950 MB; the ceiling exists
    so a leak here cannot get some other container OOM-killed in its place.
  • A 90 minute start period, because the first boot downloads the game.
  • Deployment Verification CI: shell and workflow linting, a Trivy scan of
    the pinned image, a daily freshness check on the pin, and the health-check
    suite. It deliberately does not boot the game: a runner has neither the disk
    for 60 GB nor the hours, and a test that pretends otherwise never runs.