A native RISC-V check on narvi-1: oxy built and used on riscv64 8d6cf1f23694
The riscv64 job builds oxy on narvi-1 (a riscv64 board, syscall tier)
and runs a signed init, commit, bookmark, merge, verify and fsck with it,
so a release is known to work on real RISC-V hardware, not only to
cross-compile. Scoped like dist: releases, Run pipeline and reruns.
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 ff319ee5a1a8
When 16 days ago · 2026-10-19 14:16 UTC
Signature ◈ sealed by agent:claude@andymccall
Hash 8d6cf1f236944bd170021f69e38430235045d604941dc4aff5814a6feeadea7e
Depends on 2b668d92b066 b66a5c47cc61
Depended on by f5bd79d06f5c
In bookmarks doctor-trust identical-sides keyless-tags main push-notes subrepo-pin-state
In tags v0.10.0 v0.11.0 v0.5.0 v0.5.1 v0.6.0 v0.7.0 v0.8.0 v0.9.0
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
+29 −0
1
+
#!/bin/sh
2
+
# The native RISC-V check (oxygenflow#69): on narvi-1, a riscv64 board,
3
+
# build oxy natively and use 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 oxy
8
+
oxy=/src/target/release/oxy
9
+
"$oxy" --version
10
+
# A repository's life in miniature: an identity, a signed change, a
11
+
# bookmark, a merge, and a full integrity check.
12
+
export OXY_HOME="$(mktemp -d)"
13
+
cd "$(mktemp -d)"
14
+
"$oxy" --plain identity create --name "narvi-1 check" --email [email protected]
15
+
"$oxy" --plain config --user core.sign change
16
+
"$oxy" --plain init
17
+
echo one > a.txt
18
+
"$oxy" --plain commit -m "first"
19
+
"$oxy" --plain bookmark create side
20
+
"$oxy" --plain bookmark switch side
21
+
echo two > b.txt
22
+
"$oxy" --plain commit -m "second, on side"
23
+
"$oxy" --plain bookmark switch main
24
+
"$oxy" --plain merge side
25
+
"$oxy" --plain log
26
+
"$oxy" --plain verify
27
+
"$oxy" --plain fsck
28
+
test -f b.txt
29
+
echo "oxy works natively on $(uname -m)"
modified
.flow/pipeline.kdl
+41 −0
…
22 unchanged lines
23
23
network "isolated"
24
24
}
25
25
26
+
// The riscv64 build image on narvi-1 (oxygenflow#69): Ubuntu 24.04 riscv64
27
+
// with Rust 1.97.1 and the same vendored crates, in the syscall tier (the
28
+
// board has no hardware virtualisation, so no microVM). `runs-on` keeps it
29
+
// on a RISC-V runner.
30
+
sandbox "rust-riscv64" {
31
+
runtime "syscall"
32
+
rootfs "cas://blob/b4edba9173ddf63aa1df46222e6a59b265071b19f2815c89d0153b593835c616"
33
+
runs-on "riscv64"
34
+
memory-limit "4GiB"
35
+
cpu-limit 6
36
+
network "loopback"
37
+
env {
38
+
CARGO_INCREMENTAL "0"
39
+
CARGO_PROFILE_RELEASE_DEBUG "0"
40
+
CARGO_BUILD_JOBS "4"
41
+
}
42
+
}
43
+
26
44
job "fmt" {
27
45
sandbox "rust-small"
28
46
exec "cargo" "fmt" "--all" "--check"
…
91 unchanged lines
120
138
}
121
139
artifact "oxy_riscv64.deb" {
122
140
path "/src/target/dist-flat/oxy_riscv64.deb"
141
+
}
142
+
}
143
+
}
144
+
145
+
// The native RISC-V check (oxygenflow#69): oxy built and used on narvi-1,
146
+
// a real riscv64 board, so each release is known to run there and not
147
+
// only to cross-compile (dist). Like dist, a push runs it only when it
148
+
// touches these paths; "Run pipeline" and reruns always do. A cold build
149
+
// on a small board: no cache in the syscall tier yet.
150
+
job "riscv64" {
151
+
sandbox "rust-riscv64"
152
+
depends-on "fmt"
153
+
scope "Cargo.toml" "scripts/dist.sh" "packaging/**" ".flow/riscv64-check.sh"
154
+
timeout "3h"
155
+
mount {
156
+
source "ephemeral://disk"
157
+
target "/src/target"
158
+
size "16GiB"
159
+
}
160
+
exec "sh" ".flow/riscv64-check.sh"
161
+
output {
162
+
artifact "oxy-linux-riscv64-native" {
163
+
path "/src/target/release/oxy"
123
164
}
124
165
artifact "SHA256SUMS" {
125
166
path "/src/target/dist-flat/SHA256SUMS"
…
3 unchanged lines