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 17 days ago · 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
.flow/riscv64-check.sh .flow/pipeline.kdl
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