Skip to content

Add a ci-dos image for building MS-DOS programs in Rust and C - #41

Merged
ScottMorris merged 3 commits into
mainfrom
feat/ci-dos-image
Oct 21, 2026
Merged

ScottMorris merged 3 commits into
mainfrom
feat/ci-dos-image

Conversation

@ScottMorris

Copy link
Copy Markdown
Contributor

Summary

  • New image: ghcr.io/liminal-hq/ci-dos, a CI tier on ci-rust for building MS-DOS programs in Rust and C: DJGPP 12.2, DOSBox Staging 0.83 and CWSDPMI under DOS_TOOLCHAIN (/opt/dos-toolchain), rust-src with the i586-unknown-linux-gnu and wasm32-unknown-unknown targets, gcc-multilib, mtools, dosfstools, patch, python3, libfl2 and Bun at the shared pin.
  • Pinned downloads: each DOS tool is checked against a SHA-256 kept as a Dockerfile ARG.
  • Publishing: ci-dos joins the single-platform publish-images matrix (linux/amd64), with the same smoke check, tags and summary as the other images.
  • Smoke profile: ci-dos checks the tools, the DJGPP compiler and archiver, DOSBox, the CWSDPMI file, the Rust components and targets, a 32-bit native C build, and that Node is absent.

Documentation

  • README, the layout reference, the implementation spec and the runbook list ci-dos.

Known limitations

  • Platform: linux/amd64 only; DJGPP's Linux build and DOSBox Staging's release are x86-64.
  • Consumer: the Lieutenant Fizz for DOS repository (ScottMorris/lieutenant-fizz-dos) will run its CI and release in this image once it is published.

Test plan

  • docker build -f docker/ci/Dockerfile --target ci-dos . builds locally (3.07 GB unpacked)
  • bash docker/ci/smoke-check.sh ci-dos <image> passes
  • In the image, with the Lieutenant Fizz for DOS repository and the main game side by side, tools/setup.sh --no-clone && tools/check.sh ends with "All checks passed" (800 checkpoints identical to the web build's wasm)
  • The workflow file parses as YAML
  • Publish workflow not run in Actions: only the ci-dos target was built, and only for linux/amd64
  • After the first publish: set the new package's visibility to public and connect it to this repository (runbook step 4), then record the digest in the recommended pins

ScottMorris and others added 3 commits October 21, 2026 18:30
… and C

- **Tier:** `ci-dos` builds on `ci-rust` and adds `rust-src`, the `i586-unknown-linux-gnu` and `wasm32-unknown-unknown` Rust targets, `gcc-multilib`, `mtools`, `dosfstools`, `patch`, `python3`, `libfl2` and Bun at the shared `BUN_VERSION` pin.
- **DOS toolchain:** DJGPP 12.2 (build-djgpp 3.4), DOSBox Staging 0.83 and CWSDPMI install under `DOS_TOOLCHAIN` (`/opt/dos-toolchain`, with `djgpp/`, `dosbox/` and `cwsdpmi/`), each download checked against a SHA-256 pinned as a Dockerfile `ARG`.
- **Smoke check:** a `ci-dos` profile checks the tools, the DJGPP compiler and archiver, DOSBox, the CWSDPMI file, the Rust components and targets, a 32-bit native C build, and that Node is absent.

**Why**
- The Lieutenant Fizz for DOS repository installs these tools on every CI run from sources that move. A shared tier pins them once for any Liminal HQ DOS project.
- Built locally for `linux/amd64` (3.07 GB unpacked); the smoke check passes, and the Lieutenant Fizz for DOS repository's `tools/check.sh` passes inside it ("All checks passed", 800 checkpoints identical to the web build's wasm).
- `linux/amd64` only: DJGPP's Linux build and DOSBox Staging's release are x86-64 builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Adds `ci-dos` (`ghcr.io/liminal-hq/ci-dos`, target `ci-dos`, `linux/amd64`) to the `publish-images` matrix, so it gets the same smoke check, tags (`latest`, `sha-*`, the dated tag) and publish summary as the other images.
- Not run: the publish workflow in Actions. A new package is private on its first publish and needs the visibility and repository link described in the runbook.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Adds `ci-dos` to the README, the layout reference (published images, tier tree, platform table), the implementation spec (image set, stages, platform policy, consumer guidance) and the publish and rollback runbook (families, targets, smoke checks, leanness and environment values).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@ScottMorris ScottMorris added infrastructure Shared infrastructure and automation work ci Continuous integration workflows and checks docker Container build and publish work labels Oct 21, 2026
@ScottMorris
ScottMorris merged commit 40e14e5 into main Oct 21, 2026
6 checks passed
@ScottMorris
ScottMorris deleted the feat/ci-dos-image branch October 21, 2026 22:41
ScottMorris added a commit to ScottMorris/lieutenant-fizz-dos that referenced this pull request Oct 21, 2026
**What**

- `ci.yml` and `release.yml` run their jobs in `ghcr.io/liminal-hq/ci-dos`, named by digest (`sha256:93d129b5…`, the `20261021-40e14e5` publish).
- The image's definition, its tag script and its publish workflow (`.github/images/dos-build/`, `image.yml`) are removed from this repository, along with the `image` job in each workflow.
- `docs/ARCHITECTURE.md`, `AGENTS.md` and `CLAUDE.md` describe the shared image and how the digest is updated.

**Why**

- The image holds no game-specific tools, so it belongs with the other shared images in `liminal-hq/.github`, where it is published as the `ci-dos` tier (liminal-hq/.github#41). A workflow in this repository could not create a package in the organization either.
- A digest means a run never changes under the project, and no job waits on an image build.
- The same `tools/setup.sh` links the image's toolchain as `vendor/`, so no script changed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Continuous integration workflows and checks docker Container build and publish work infrastructure Shared infrastructure and automation work

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant