OXYGENHUB

A native RISC-V check on narvi-1: oh built and run on riscv64 021f36a627f3

The riscv64 job builds oh on narvi-1 (a riscv64 board, syscall tier,
cached target) and runs it, so a release is known to work on real RISC-V
hardware, not only to cross-compile. Scoped like dist.

Refs andymccall/oxygenflow#69
Author
Andy McCall @andymccall <[email protected]>
via
agent agent:claude@andymccall <[email protected]> · keyless, under your grant for changes,refs,seal · key f10b0260ac23
When
· 2026-10-19 20:13 UTC
Signature
◈ sealed by agent:claude@andymccall
Hash
021f36a627f32602d06536c414c44f9c7448e2424a05286b46da4804baa53591
Depends on
380996db84e5 913e5ad27b17
Depended on by
nothing yet
In bookmarks
api-unknown-fields diffusion-pin-bookmark draft-ready main proposal-list-fast
In tags
v0.6.0 v0.6.1 v0.7.0 v0.8.0 v0.9.0 v0.9.1 v0.9.11 v0.9.15 v0.9.16 v0.9.19 v0.9.2 v0.9.20 v0.9.21 v0.9.22 v0.9.23 v0.9.24 v0.9.3 v0.9.4 v0.9.5 v0.9.6 v0.9.7 v0.9.8 v0.9.9
Edits
3 atoms, 1 tree operation, 2 files

Browse the tree at this change

added .flow/riscv64-check.sh +13 −0
1 +
#!/bin/sh
2 +
# The native RISC-V check (oxygenflow#69): on narvi-1, a riscv64 board,
3 +
# build oh natively and run it, so a release is known to work on real
4 +
# RISC-V hardware, not only to cross-compile for it (dist does that).
5 +
set -eu
6 +
uname -m
7 +
cargo build --release --locked -p oh
8 +
oh=/src/target/release/oh
9 +
"$oh" --version
10 +
"$oh" --help >/dev/null
11 +
"$oh" issue --help >/dev/null
12 +
"$oh" run --help >/dev/null
13 +
echo "oh works natively on $(uname -m)"
modified .flow/pipeline.kdl +43 −0
…
25 unchanged lines
26 26
    network "isolated"
27 27
}
28 28
29 +
// The riscv64 build image on narvi-1 (oxygenflow#69): Ubuntu 24.04 riscv64
30 +
// with Rust 1.97.1 and the same vendored crates, in the syscall tier (the
31 +
// board has no hardware virtualisation, so no microVM). `runs-on` keeps it
32 +
// on a RISC-V runner.
33 +
sandbox "rust-riscv64" {
34 +
    runtime "syscall"
35 +
    rootfs "cas://blob/b4edba9173ddf63aa1df46222e6a59b265071b19f2815c89d0153b593835c616"
36 +
    runs-on "riscv64"
37 +
    memory-limit "4GiB"
38 +
    cpu-limit 6
39 +
    network "loopback"
40 +
    env {
41 +
        CARGO_INCREMENTAL "0"
42 +
        CARGO_PROFILE_RELEASE_DEBUG "0"
43 +
        CARGO_BUILD_JOBS "4"
44 +
    }
45 +
}
46 +
29 47
job "fmt" {
30 48
    sandbox "rust-small"
31 49
    // Only this workspace's packages: --all would also check the path
…
93 unchanged lines
125 143
        }
126 144
        artifact "oh_arm64.deb" {
127 145
            path "/src/target/dist-flat/oh_arm64.deb"
146 +
        }
147 +
    }
148 +
}
149 +
150 +
// The native RISC-V check (oxygenflow#69): oh built and run on narvi-1, a
151 +
// real riscv64 board, so each release is known to run there and not only
152 +
// to cross-compile (dist). Like dist, a push runs it only when it touches
153 +
// these paths; "Run pipeline" and reruns always do. Its target directory
154 +
// is cached between passing runs (oxygenflow#70).
155 +
job "riscv64" {
156 +
    sandbox "rust-riscv64"
157 +
    depends-on "fmt"
158 +
    scope "Cargo.toml" "scripts/dist.sh" "packaging/**" ".flow/riscv64-check.sh"
159 +
    timeout "3h"
160 +
    mount {
161 +
        source "ephemeral://disk"
162 +
        target "/src/target"
163 +
        size "16GiB"
164 +
        cache "target"
165 +
        key "Cargo.lock"
166 +
    }
167 +
    exec "sh" ".flow/riscv64-check.sh"
168 +
    output {
169 +
        artifact "oh-linux-riscv64-native" {
170 +
            path "/src/target/release/oh"
128 171
        }
129 172
        artifact "oh_riscv64.deb" {
130 173
            path "/src/target/dist-flat/oh_riscv64.deb"
…
6 unchanged lines