A DOS-programjaink C++98-ban készülnek, Open Watcom v2-vel fordítva: egy 16 bites DOS-programfájl (8086, large modell), és ahol van, egy 32 bites Win32-es konzolos build Windows 95-re és újabbra. Fej nélküli DOSBox Staging-ben és Wine alatt teszteljük őket, a közös kód a DOSLIB.
Open Watcom v2: https://github.com/open-watcom/open-watcom-v2 DOSBox Staging: https://www.dosbox-staging.org Eszközrepó: https://git.teletypegames.org/build/dos-tools Ezzel az eszközlánccal készülő programok: GMENU, DOSINST, BMAGIC, TTGWIKI
Mint minden más platformon, egy DOS-program repójában egy egysoros marker és a metaadat van; a pipeline-t a teletypegames.org WarpEngine-je szolgálja ki, és minden, amit futtat, a builder image-ben van.
# .woodpecker.yaml
platform: dos
// metadata.json
{
"name": "dosinst",
"version": "0.6.1",
"title": "DOSINST",
"author": "Teletype Games",
"desc": "Installs, updates and removes DOS programs from an FTP store.",
"license": "GPL-3.0",
"category": "tool",
"dos": {
"folder": "DOSINST",
"files": ["DOSINST.EXE", "DOSINST.CFG", "README.md", "LICENSE"],
"settings": ["DOSINST.CFG"],
"store_name": "DOSInst Store",
"store_description": "Installs, updates and removes DOS programs from this store.",
"win32_folder": "DOSINSTW",
"win32_files": ["DOSINSTW.EXE", "DOSINST.CFG", "README.md", "LICENSE"],
"win32_store_name": "DOSInst Store for Windows",
"win32_store_description": "DOSINST for Windows 95 and later."
}
}
A dos szakasz mondja meg, mi kerül egy kiadásba: a mappa, amelyként a program települ, a benne lévő fájlok, a settings, amelyek a kiadás zipjében benne vannak, de egy bolti frissítésben soha (így egy frissítés megtartja a telepített program beállításait), és a név meg a szöveg, amit a DOSINST listája mutat. A win32_ kulcsok ugyanezek egy Win32-es buildhez, opcionálisan.
A többi konvenció: a SOURCE/build.sh a $WATCOM-beli Open Watcommal a repó gyökerébe fordítja a programfájlokat, a tesztek pedig ott vannak, ahol a parancsok keresik őket. A verzió a metadata.json version mezője, mint minden platformon; ha a SOURCE/app/version.h-ban van Version, annak egyeznie kell vele (a kettőt együtt emeld).
Push után a pipeline sorrendje: version → test → tag; a tagre: version → test → package → upload → publish → release. A version lépés az engine közös lépése, és a DOS csak tagből ad ki (release_rule "tag"), így a teszt utáni lépések csak tagre futnak. A taget a pipeline maga készíti (WarpEngine 1.9): a metadata.json új version-je a masterre pusholva a tag lépéstől megkapja a vX.Y.Z tagjét, és ez a tag adja ki. Egy push, amely nem emeli a verziót, csak tesztel; a masteren kívül a build dev-<verzió>-<ág>, és a dev-<ág> tagje áthelyeződik, ami a dev buildet a katalógusba kiadja, de a boltba soha (a polc a legújabb nem dev- kiadást veszi). 2026-10-27-ig a DOS-repók metadata.json-jában nem volt verzió, és kézi taggel adtak ki; a kézi tag ma is működik, és egyeznie kell a verzióval.
| Lépés | Parancs | Mikor | Mit csinál |
|---|---|---|---|
| test | dos-check |
minden esemény | kódstílus (a DOSLIB clang-format-burkolója), unit-tesztek (SOURCE/test/unit/run.sh), egy szerveroldal Python-tesztjei (server/test) |
| test | dos-build |
minden esemény | SOURCE/build.sh, utána a fájllisták minden .EXE-jének meg kell lennie |
| test | dos-test |
minden esemény | SOURCE/test/run.sh (DOS fej nélküli DOSBox Staging-ben), SOURCE/test/runw32.sh (Win32 Wine alatt), SOURCE/test/run.py (DOSBox-képernyőtesztek) |
| tag | push után | az engine közös lépése (1.9): egy új verzió megkapja a vX.Y.Z tagjét, és annak pipeline-ja futtatja a lenti sorokat; egy már tagelt verzió nem ad ki semmit; egy dev build az ága dev-<ág> tagjét helyezi át |
|
| package | dos-pack |
egy tag | a mappák zipjei és minden .EXE külön, a .release-assets-ben felsorolva |
| upload, publish | egy tag | a mappa zipje a cartridge asset, a Win32-es zip a win_x86; a feltöltött metaadat megtartja a dos szakaszt |
|
| release | egy verziótag | az engine közös kiadási lépése: a Gitea-kiadás a RELEASE_NOTES.md-vel, csatolva a .release-assets fájljait |
Nincs store lépés és nincs deploy-kulcs: a titkok csak a globális application_token és gitea_token. Az FTP-bolt, a ftp://ftp.teletypegames.org/APPS, ahonnan a DOSINST telepít és frissít, a WarpEngine DOS-polca (layout: "folders"). Az engine minden publikáláskor a katalógusból építi újra: a zipből és a dos szakaszból megírja a mappákat a settings fájljaik nélkül, egy INFO.INI-vel és egy FILES.LST-vel. Egy a katalógusban elrejtett vagy törölt program kikerül a boltból.
git.teletypegames.org/build/dos-builder (az eszközrepó builder.Dockerfile-ja): Open Watcom v2, DOSBox Staging (a /opt/dosbox-staging-ben, a PATH-on kívül) és a Debian DOSBoxa (a PATH-on, a képernyőtesztekhez), 32 bites Wine, g++, Python pyftpdlibbel, clang-format, zip, jq és curl, a dos-* parancsokkal. A rögzített verziók a /opt/dos-ci/versions-ben vannak. Ugyanez az image helyben is lefuttatja egy program ellenőrzéseit:
docker run --rm -v "$PWD:/workspace" git.teletypegames.org/build/dos-builder:latest \
sh -c 'dos-check && dos-build && dos-test && TAG=v1.2.3 dos-pack'