Skip to content

Install FAT tooling before FreeMiNT disk staging #220

Install FAT tooling before FreeMiNT disk staging

Install FAT tooling before FreeMiNT disk staging #220

Workflow file for this run

name: qualification
on:
push:
pull_request:
workflow_dispatch:
jobs:
infrastructure:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build atari-runtime image
run: docker build -t atari-runtime:m2 -f Containerfile .
- name: Runtime metadata
run: docker run --rm atari-runtime:m2 tools/runtime-info.sh
- name: Hatari CLI capabilities
run: docker run --rm atari-runtime:m2 sh -c 'hatari --help 2>&1 | tee /tmp/hatari-help.txt; grep -Ei "auto|run|program|gemdos|harddrive" /tmp/hatari-help.txt || true'
- name: Hatari + EmuTOS smoke
run: docker run --rm atari-runtime:m2 tools/smoke.sh
- name: Verify M2 helper
run: docker run --rm atari-runtime:m2 sh -n tools/qualify-m2.sh
m2-emulator:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
profile: [st, ste]
steps:
- uses: actions/checkout@v4
- name: Build atari-runtime image
run: docker build -t atari-runtime:m2 -f Containerfile .
- name: Install floppy image tools
run: sudo apt-get update && sudo apt-get install -y dosfstools mtools
- name: Download canonical atari-dev M2 artifact
env:
GH_TOKEN: ${{ github.token }}
run: |
mkdir -p artifacts
curl --fail --location \
-H "Authorization: Bearer $GH_TOKEN" \
-H "Accept: application/vnd.github+json" \
-o /tmp/atari-dev-m2.zip \
https://api.github.com/repos/Ploos-AS/atari-dev/actions/artifacts/10600359653/zip
unzip -q /tmp/atari-dev-m2.zip -d artifacts
test -s artifacts/HELLO.TOS
test -s artifacts/MINIMAL.PRG
sha256sum artifacts/HELLO.TOS artifacts/MINIMAL.PRG
- name: Prove EmuTOS reaches video boot
run: |
rm -f artifacts/xvfb-${{ matrix.profile }}.log artifacts/boot-hatari-${{ matrix.profile }}.log
docker run --rm \
-v "$PWD/artifacts:/runtime/artifacts" atari-runtime:m2 \
sh -c 'set -eu; Xvfb :99 -screen 0 1024x768x24 >/tmp/xvfb.log 2>&1 & x=$!; export DISPLAY=:99; sleep 1; timeout --signal=TERM --kill-after=2s 8s hatari --machine "${{ matrix.profile }}" --memsize 1 --tos /runtime/roms/emutos.img >/tmp/hatari.log 2>&1 || rc=$?; rc=${rc:-0}; cp /tmp/xvfb.log /runtime/artifacts/xvfb-${{ matrix.profile }}.log; cp /tmp/hatari.log /runtime/artifacts/boot-hatari-${{ matrix.profile }}.log; kill "$x" 2>/dev/null || true; wait "$x" 2>/dev/null || true; case "$rc" in 0|124|137) exit 0 ;; *) exit "$rc" ;; esac'
cat artifacts/xvfb-${{ matrix.profile }}.log || true
cat artifacts/boot-hatari-${{ matrix.profile }}.log || true
test -e artifacts/boot-hatari-${{ matrix.profile }}.log
if grep -Eqi 'fatal|cannot open.*tos|no tos|failed to.*tos' artifacts/boot-hatari-${{ matrix.profile }}.log; then
echo "ERROR: Hatari reported a fatal TOS boot error" >&2
exit 1
fi
printf 'EmuTOS boot window %s: PASS\n' "${{ matrix.profile }}"
- name: Execute canonical probe from GEMDOS drive
run: |
rm -f artifacts/MINPASS.TXT
test -s artifacts/MINIMAL.PRG
set +e
docker run --rm \
-v "$PWD/artifacts:/runtime/artifacts" atari-runtime:m2 \
sh -c 'set +e; Xvfb :99 -screen 0 1024x768x24 >/tmp/xvfb.log 2>&1 & x=$!; export DISPLAY=:99; sleep 1; timeout --signal=TERM --kill-after=2s 45s hatari --machine "${{ matrix.profile }}" --memsize 1 --tos /runtime/roms/emutos.img --harddrive /runtime/artifacts --gemdos-drive C --auto MINIMAL.PRG --trace os_base,gemdos --trace-file /runtime/artifacts/hatari-boot-trace-${{ matrix.profile }}.log --log-level debug --log-file /runtime/artifacts/hatari-boot-debug-${{ matrix.profile }}.log --run-vbls 1500 >/runtime/artifacts/hatari-stdout-${{ matrix.profile }}.log 2>/runtime/artifacts/hatari-stderr-${{ matrix.profile }}.log; rc=$?; kill "$x" 2>/dev/null || true; wait "$x" 2>/dev/null || true; exit "$rc"'
rc=$?
set -e
cat "artifacts/hatari-stderr-${{ matrix.profile }}.log" || true
cat "artifacts/hatari-stdout-${{ matrix.profile }}.log" || true
grep -Ei 'MINIMAL|PRG|Pexec|Fcreate|Fwrite|Fclose|GEMDOS|boot' "artifacts/hatari-boot-trace-${{ matrix.profile }}.log" 2>/dev/null | tail -n 300 || true
if [ "$rc" -ne 0 ] && [ ! -s artifacts/MINPASS.TXT ]; then
echo "ERROR: Hatari ended without guest marker (rc=$rc)" >&2
exit 1
fi
test -s artifacts/MINPASS.TXT
grep -F 'Ploos-AS atari-runtime minimal GEMDOS execution PASS' artifacts/MINPASS.TXT
printf 'Canonical GEMDOS execution probe %s: PASS\n' "${{ matrix.profile }}"
- name: Verify Atari-side GEMDOS execution evidence
run: |
test -s artifacts/MINPASS.TXT
grep -F 'Ploos-AS atari-runtime minimal GEMDOS execution PASS' artifacts/MINPASS.TXT
file artifacts/MINIMAL.PRG