This project publishes runnable Linux and Win64 release bundles for both the simulator and the Raylib visualizer.
Tagging the repository with v* drives .github/workflows/release.yml, which builds and uploads:
engine-control-test-rig-simulator-linux-x64.tar.gzengine-control-test-rig-simulator-win64.zip
Each archive contains:
testrigortestrig.exevisualizerorvisualizer.execalibration.jsonscenarios/schema/engine_test_rig.schema.jsontests/integration/invalid_script.txttools/release_audit.pytools/validate_json_contract.pyvisualization/scenarios.jsonvisualization/PxPlus_IBM_EGA_8x14.ttf
Platform-specific runtime packaging:
- Linux bundles discovered shared libraries under
lib/and providesrun-testrig.shplusrun-visualizer.shwrapper scripts that setLD_LIBRARY_PATH. - Win64 bundles the required non-system MinGW runtime DLLs next to the
.exefiles.
Every bundle includes a portable black-box audit entry point:
python3 tools/release_audit.pyThe audit script verifies the packaged simulator and runtime data by:
- running the built-in validation suite in console and JSON modes
- validating JSON output against the shipped schema
- checking the calibration-file path
- checking the negative parser path with the shipped invalid-script fixture
- regenerating the visualization bundle from the packaged simulator outputs and comparing it to the shipped
visualization/scenarios.json - smoke-launching the visualizer unless
--skip-visualizeris used
Windows invocation:
py -3 tools\release_audit.pyor:
python tools\release_audit.pyThe GitHub Release workflow runs the packaged simulator audit in both the Linux and Win64 jobs before uploading artifacts. Those CI audits use --skip-visualizer because hosted runners are headless.
The released binaries are command-line tools. Running them with no arguments prints usage; reviewers should use the exact commands below.
Linux bundle review:
cd engine-control-test-rig-simulator-linux-x64
./run-testrig.sh --version
./run-testrig.sh --run-all
./run-testrig.sh --script scenarios/normal_operation.txt --json
./run-visualizer.sh visualization/scenarios.json
python3 tools/release_audit.py --bundle-dir .Win64 bundle review on Windows:
cd engine-control-test-rig-simulator-win64
.\testrig.exe --version
.\testrig.exe --run-all
.\testrig.exe --script scenarios\normal_operation.txt --json
.\visualizer.exe visualization\scenarios.json
py -3 tools\release_audit.pyWin64 bundle review on Linux with Wine:
cd engine-control-test-rig-simulator-win64
wine ./testrig.exe --version
wine ./testrig.exe --run-all
wine ./testrig.exe --script scenarios/normal_operation.txt --json
wine ./visualizer.exe visualization/scenarios.json
python3 tools/release_audit.py --bundle-dir . --command-prefix wine --skip-visualizer --skip-visualization-regenerationReviewer notes:
- The Linux bundle uses
run-testrig.shandrun-visualizer.shas the supported entry points because they setLD_LIBRARY_PATHfor the bundled runtime library directory. - The Win64 bundle does not include
run-*.shwrappers. On Windows, launch the.exefiles directly; on Linux, launch them withwine. - The visualizer always needs at least one JSON input path, and the shipped bundle is
visualization/scenarios.json.
Local artifact testing exercises the packaged bundles, not just the build tree:
- Linux: builds the tarball, bundles shared libraries, unpacks the archive, and runs the shipped audit.
- Win64 on Linux: cross-builds Raylib and the project, creates the zip, unpacks it, and runs the shipped audit against the packaged
.exefiles via Wine.
The local Wine-based audit skips the visualization-bundle regeneration comparison because repeated Wine process startup makes that specific check disproportionately slow. The rest of the simulator audit still runs, and native release audits can still execute the full regeneration path.
Dry-run commands:
make test-release-linux RELEASE_PLATFORM=linux-x64 RELEASE_ARCHIVE=./dist/engine-control-test-rig-simulator-linux-x64.tar.gz CC=gcc PYTHON=python3
make test-release-win64-local RELEASE_PLATFORM=win64 RELEASE_ARCHIVE=./dist/engine-control-test-rig-simulator-win64.zip PYTHON=python3Prerequisites for local testing on Linux:
- Native Linux path:
gcc,make,python3,raylib,ldd, and a working GUI session for the visualizer smoke launch. - Win64-on-Linux path:
x86_64-w64-mingw32-gcc,x86_64-w64-mingw32-g++,cmake,git, andwine.
Use this sequence before pushing a release tag:
- Run the local Linux artifact test.
make test-release-linux RELEASE_PLATFORM=linux-x64 RELEASE_ARCHIVE=./dist/engine-control-test-rig-simulator-linux-x64.tar.gz CC=gcc PYTHON=python3- Run the local Win64 artifact test under Wine.
make test-release-win64-local RELEASE_PLATFORM=win64 RELEASE_ARCHIVE=./dist/engine-control-test-rig-simulator-win64.zip PYTHON=python3- Check the working tree and review the release-related diff.
git status
git diff --stat- Commit the release changes.
git add .
git commit -m "Add audited cross-platform release artifacts"- Create and push the release tag.
git tag v0.1.0
git push origin HEAD
git push origin v0.1.0-
Verify the GitHub Release workflow succeeds and that both uploaded artifacts are present on the GitHub release page.
-
As a final spot-check, download each published archive, unpack it, and run the shipped audit from the bundle itself.
Workspace tasks in .vscode/tasks.json support the local release workflow:
release: test linux artifactrelease: test win64 artifact with winerelease: package linux artifactrelease: package win64 artifactrelease: generate visualization bundle
Run them from Terminal -> Run Task in VS Code.