Clean FreeMiNT ARAnyM HostFS qualification path #33
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: aranym integration probe | |
| on: | |
| push: | |
| paths: | |
| - ".github/workflows/aranym-probe.yml" | |
| - "ROADMAP.md" | |
| - "README.md" | |
| pull_request: | |
| paths: | |
| - ".github/workflows/aranym-probe.yml" | |
| workflow_dispatch: | |
| jobs: | |
| aranym-baseline: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install ARAnyM | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y aranym | |
| - name: Record ARAnyM baseline | |
| run: | | |
| set -eux | |
| command -v aranym | |
| dpkg-query -W -f='aranym_version=${Version}\n' aranym | tee aranym-version.txt | |
| (aranym --help || true) > aranym-help.txt 2>&1 | |
| test -s aranym-version.txt | |
| - name: Provision EmuTOS for ARAnyM | |
| run: | | |
| set -eux | |
| curl --fail --location --retry 3 -o /tmp/emutos.zip \ | |
| https://sourceforge.net/projects/emutos/files/emutos/1.4/emutos-512k-1.4.zip/download | |
| unzip -q /tmp/emutos.zip -d /tmp/emutos | |
| rom="$(find /tmp/emutos -type f \( -name 'etos512*.img' -o -name 'etos512*.rom' \) -print -quit)" | |
| test -n "$rom" | |
| mkdir -p "$HOME/.aranym" | |
| cp "$rom" "$HOME/.aranym/emutos-aranym.img" | |
| test -s "$HOME/.aranym/emutos-aranym.img" | |
| sha256sum "$HOME/.aranym/emutos-aranym.img" | tee aranym-emutos.sha256 | |
| - name: Discover current FreeMiNT release | |
| run: | | |
| set -eux | |
| curl --fail --location --retry 3 \ | |
| https://api.github.com/repos/freemint/freemint/releases/latest \ | |
| -o freemint-release.json | |
| python3 - <<'PY' | |
| import json | |
| d=json.load(open("freemint-release.json")) | |
| print("freemint_release_tag="+d.get("tag_name","")) | |
| for a in d.get("assets",[]): | |
| print(a.get("name","")+"\t"+a.get("browser_download_url","")) | |
| PY | |
| python3 - <<'PY' > freemint-release.txt | |
| import json | |
| d=json.load(open("freemint-release.json")) | |
| print("tag="+d.get("tag_name","")) | |
| print("published_at="+d.get("published_at","")) | |
| for a in d.get("assets",[]): | |
| print("asset="+a.get("name","")+"\t"+a.get("browser_download_url","")) | |
| PY | |
| grep -q '^tag=.' freemint-release.txt | |
| - name: Inspect FreeMiNT 1.18.0 distribution | |
| run: | | |
| set -eux | |
| url="$(python3 - <<'PY' | |
| import json | |
| d=json.load(open("freemint-release.json")) | |
| for a in d.get("assets",[]): | |
| if a.get("name","").endswith(".zip"): | |
| print(a["browser_download_url"]) | |
| break | |
| PY | |
| )" | |
| test -n "$url" | |
| curl --fail --location --retry 6 --retry-all-errors --connect-timeout 15 --max-time 180 -o /tmp/freemint.zip "$url" | |
| unzip -l /tmp/freemint.zip | tee freemint-contents.txt | |
| unzip -q /tmp/freemint.zip -d /tmp/freemint | |
| find /tmp/freemint -type f \ | |
| \( -iname '*aranym*' -o -iname 'mint*.prg' -o -iname 'mint*.xfs' -o -iname '*kernel*' \) \ | |
| -printf '%P\n' | sort | tee freemint-boot-candidates.txt | |
| test -s freemint-boot-candidates.txt | |
| - name: Stage FreeMiNT ARAnyM kernel tree | |
| run: | | |
| set -eux | |
| mkdir -p aranym-freemint/C/AUTO aranym-freemint/C/MINT/1-18-0 | |
| mkdir -p aranym-freemint/C/MINT | |
| cp /tmp/freemint/freemint/auto/mintara.prg aranym-freemint/C/AUTO/MINTARA.PRG | |
| cp /tmp/freemint/freemint/auto/mint030.prg aranym-freemint/C/AUTO/MINT030.PRG | |
| cp /tmp/freemint/freemint/driver/xfs/aranym.xfs aranym-freemint/C/MINT/1-18-0/ARANYM.XFS | |
| cp /tmp/freemint/freemint/driver/xfs/hostfs.xfs aranym-freemint/C/MINT/1-18-0/HOSTFS.XFS | |
| cp /tmp/freemint/freemint/mint/1-18-0/mint.cnf aranym-freemint/C/MINT/1-18-0/MINT.CNF | |
| cp /tmp/freemint/freemint/mint/1-18-0/mint.cnf aranym-freemint/C/MINT/MINT.CNF | |
| cp /tmp/freemint/freemint/mint/1-18-0/mint.cnf aranym-freemint/C/MINT.CNF | |
| test -s aranym-freemint/C/AUTO/MINTARA.PRG | |
| test -s aranym-freemint/C/AUTO/MINT030.PRG | |
| test -s aranym-freemint/C/MINT/1-18-0/ARANYM.XFS | |
| test -s aranym-freemint/C/MINT/1-18-0/HOSTFS.XFS | |
| test -s aranym-freemint/C/MINT/MINT.CNF | |
| test -s aranym-freemint/C/MINT.CNF | |
| test -s aranym-freemint/C/MINT/1-18-0/MINT.CNF | |
| sha256sum \ | |
| aranym-freemint/C/AUTO/MINTARA.PRG \ | |
| aranym-freemint/C/MINT/1-18-0/ARANYM.XFS \ | |
| | tee freemint-aranym-files.sha256 | |
| { | |
| echo "freemint_version=1.18.0" | |
| echo "kernel=AUTO/MINTARA.PRG" | |
| echo "xfs=MINT/1-18-0/ARANYM.XFS" | |
| echo "status=STAGED" | |
| } | tee freemint-aranym-stage.txt | |
| - name: Configure ARAnyM hostfs C drive for FreeMiNT | |
| run: | | |
| set -eux | |
| cat > aranym-freemint.cfg <<EOF | |
| [GLOBAL] | |
| FastRAM = 64 | |
| FixedMemoryOffset = 0 | |
| EmuTOS = $HOME/.aranym/emutos-aranym.img | |
| Bootstrap = $GITHUB_WORKSPACE/aranym-freemint/C/AUTO/MINTARA.PRG | |
| BootstrapArgs = MEM_PROT=YES DEBUG_LEVEL=1 | |
| [IDE0] | |
| Present = No | |
| IsCDROM = No | |
| ByteSwap = No | |
| ReadOnly = No | |
| Path = | |
| [HOSTFS] | |
| C = $GITHUB_WORKSPACE/aranym-freemint/C | |
| BootDrive = C | |
| EOF | |
| test -s aranym-freemint.cfg | |
| grep -F "C = $GITHUB_WORKSPACE/aranym-freemint/C" aranym-freemint.cfg | |
| grep -F "BootDrive = C" aranym-freemint.cfg | |
| grep -F "Bootstrap = $GITHUB_WORKSPACE/aranym-freemint/C/AUTO/MINTARA.PRG" aranym-freemint.cfg | |
| grep -F "BootstrapArgs = MEM_PROT=YES DEBUG_LEVEL=1" aranym-freemint.cfg | |
| grep -F "FastRAM = 64" aranym-freemint.cfg | |
| grep -F "FixedMemoryOffset = 0" aranym-freemint.cfg | |
| printf '\n=== ARAnyM startup log ===\n' | |
| # printed after the emulator run below | |
| - name: Probe headless ARAnyM + EmuTOS startup | |
| run: | | |
| set -eux | |
| sudo apt-get install -y xvfb imagemagick x11-utils | |
| Xvfb :99 -screen 0 1024x768x24 > aranym-xvfb.log 2>&1 & | |
| xvfb_pid=$! | |
| export DISPLAY=:99 | |
| sleep 1 | |
| aranym -N -e -c "$GITHUB_WORKSPACE/aranym-freemint.cfg" > aranym-startup.log 2>&1 & | |
| aranym_pid=$! | |
| sleep 30 | |
| import -display :99 -window root aranym-emutos.png | |
| identify aranym-emutos.png | tee aranym-framebuffer.txt | |
| cat aranym-startup.log | tee aranym-startup-visible.log | |
| grep -Ei 'NF BOOTSTRAP|FreeMiNT|MiNT|parse_cnf|realloc_region|panic|fatal|error' aranym-startup.log | tee freemint-bootstrap-trace.txt || true | |
| strings aranym-freemint/C/AUTO/MINTARA.PRG | grep -Ei 'FreeMiNT|MiNT' | head -20 | tee freemint-kernel-identity.txt || true | |
| colors="$(convert aranym-emutos.png -format %c histogram:info:- | wc -l)" | |
| printf 'aranym_framebuffer_colors=%s\n' "$colors" | tee -a aranym-framebuffer.txt | |
| test "$colors" -gt 1 | |
| if test -s aranym-freemint/C/MINT/BOOT.LOG; then | |
| cp aranym-freemint/C/MINT/BOOT.LOG freemint-boot.log | |
| echo "freemint_boot_log=present" | tee freemint-guest-result.txt | |
| grep -Ei 'MiNT|FreeMiNT' freemint-boot.log | head -40 | tee -a freemint-guest-result.txt || true | |
| else | |
| echo "freemint_boot_log=missing" | tee freemint-guest-result.txt | |
| fi | |
| kill "$aranym_pid" 2>/dev/null || true | |
| wait "$aranym_pid" 2>/dev/null || true | |
| kill "$xvfb_pid" 2>/dev/null || true | |
| rc=0 | |
| rc=${rc:-0} | |
| test "$rc" -eq 0 | |
| test -s aranym-startup.log | |
| ! grep -Fq "No operating system found" aranym-startup.log | |
| printf 'aranym_startup_exit=%s\n' "$rc" | tee aranym-startup-result.txt | |
| - name: Record M4.1 host capabilities | |
| run: | | |
| { | |
| echo "milestone=M4.1" | |
| echo "emulator=ARAnyM" | |
| echo "guest_target=FreeMiNT" | |
| echo "machine_class=TT/Falcon-oriented" | |
| echo "status=BASELINE_PASS" | |
| } | tee aranym-baseline.txt | |
| - name: Upload ARAnyM baseline evidence | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: aranym-m4-1-baseline | |
| path: | | |
| aranym-version.txt | |
| aranym-package-files.txt | |
| aranym-manual.txt | |
| aranym-package-docs.txt | |
| aranym-config-doc-hits.txt | |
| aranym-startup-visible.log | |
| freemint-bootstrap-trace.txt | |
| aranym-help.txt | |
| aranym-emutos.sha256 | |
| freemint-release.txt | |
| freemint-release.json | |
| freemint-contents.txt | |
| freemint-boot-candidates.txt | |
| freemint-aranym-files.sha256 | |
| freemint-aranym-stage.txt | |
| aranym-freemint.cfg | |
| aranym-startup.log | |
| aranym-startup-result.txt | |
| aranym-xvfb.log | |
| aranym-emutos.png | |
| aranym-framebuffer.txt | |
| freemint-kernel-identity.txt | |
| freemint-guest-result.txt | |
| freemint-boot.log | |
| aranym-baseline.txt | |
| if-no-files-found: warn |