OXYGENHUB

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
· 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

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