OXYGENHUB
# a673804c781c x16-emulator / .flow / pipeline.kdl
1.7 KiB · last changed ci: build and test x16emu natively on narvi-1, OxygenHub's RISC-V runner 17 days ago source blame history raw
a673804c Andy McCall 1
// x16emu's pipeline on OxygenFlow: every push to a bookmark on OxygenHub
2
// builds the emulator natively on narvi-1, a real riscv64 board, and runs
3
// the control-API conformance suite against what it built. The jobs appear
4
// as checks on the change and in the Flow tab. The retro-remote-debug-
5
// controller subrepo (src/extern) is put in the workspace by the runner.
6
schema-version 1
7
8
// Ubuntu 24.04 riscv64 with gcc, make, SDL2, zlib, Python and pytest
9
// (.flow/image/build-riscv64.sh), in the syscall tier: narvi's Ky X1 has no
10
// hardware virtualisation, so no microVM. `runs-on` keeps it on a RISC-V
11
// runner. Loopback only: the suite talks to the emulator on 127.0.0.1.
12
sandbox "x16-riscv64" {
13
    runtime "syscall"
14
    rootfs "cas://blob/a1405289def4850dade956ea6d4e4870a73bb631cc353f16f0e5fcd796fe2541"
15
    runs-on "riscv64"
16
    memory-limit "2GiB"
17
    cpu-limit 6
18
    network "loopback"
19
}
20
21
// make as README.md gives it, -Werror included; the binary is kept with the
22
// runner's signed receipt and handed to the conformance job.
23
job "build" {
24
    sandbox "x16-riscv64"
25
    timeout "30m"
26
    exec "sh" "-eu" ".flow/jobs/build.sh"
27
    output {
28
        artifact "x16emu-linux-riscv64" {
29
            path "/src/x16emu"
30
        }
31
    }
32
}
33
34
// The conformance suite (src/extern/retro-remote-debug-controller) against
35
// that binary, headless; pytest's JUnit XML for the hub's Tests tab.
36
job "conformance" {
37
    sandbox "x16-riscv64"
38
    depends-on "build"
39
    timeout "15m"
40
    input {
41
        artifact "x16emu-linux-riscv64" from "build"
42
        path "/src/x16emu"
43
    }
44
    exec "sh" "-eu" ".flow/jobs/conformance.sh"
45
    output {
46
        artifact "junit" {
47
            path "/src/junit.xml"
48
            when "always"
49
        }
50
    }
51
}