oxygen and oxygenflow as pinned subrepos in deps/ (make pins moves them), and an OxygenFlow pipeline: fmt of this workspace, then clippy, tests and a release build against the pins 380996db84e5
closes #19
- Author
- Andy McCall @andymccall <[email protected]>
- When
- · 2026-09-28 18:55 UTC
- Signature
- ✔ signed by Andy McCall
- Hash
380996db84e5398ec51f22c3c34ff9942f1ec928d59469ec5d048f09d1a7db93- Depends on
- 42fa95540468 d23464c0ac60
- Depended on by
- 40a43921ef42 b7e1be264c0a 93f445fa50d8 aeed63c00ad7 12325e1b1020 0468394734e9 951aed50c2f5 668b2ad7495c 27babfa16580 dd0788b756f2 8501fd5815b9 e4203e141e90 e8534c304744 3b65065298b7 fbd7c8551932 80642fde09cc 69e4f27c5633 ba0a55bb5b3c a66c05a6a881 ab2d8b40f9f4 a549ddd5941f 4c77a1c8aad8 ea55fb62f919 4745b9844987 df68c58de947 9c04c779f032 1c4ad601ef9d c30444e35f2e 021f36a627f3 0f1727376823 76fdeedccf44 13b27cb2200c 7c06f5b28ade 8a48dd830178 8dcaeeb848c6 a2a96bf21455 4f40eed0588f 7dbb41b09a99 e5b97ac399e7 965b950f9b96 559c39204234 8aa5ef384ef1 3eb491e9489b a74ba3cb4511 2c31915f5c89 026a76d251ce 53a0fb2e4ac6 4cc40ccc6034 7e51c8a2d23c 6aedcd6c0ad2 529c703db24d 2bae995eb2f1 a268d4df52bf c4027e038d25 fb8aafc64f9c ed3a36b6414c e15409084ed6 fe0bb950a300 47e374020b59 b644e1757711 417184c73f4e cd437c4f5f8d c65b0f0a196f c2be148cfe83 93501da2a162 3a01077da29a 4fa0da126b70 bf614c3d7906 d8b86dc23809 e5acd2a2ceb5 1d634f698ecd 6adcd68b90b1 a46d15e72101 44a3d2ebaddd 2fb70d019851 92a797b20912 a36bab6b9ffc 4597750166e7 8aafd2023dec 4bae285c6ed8 336c953a020f 1f8a37d351ab 1f78655a0466 4d2e44d79b03 efd29a0033e8 d1727c573f30 4ac01a732552 2a83f5303458 a6c241e8eba0 8933faff2043 f28389bd6aab b43a9ab0498f 8a3334b7a364 a85b0055a841 78b57440054e d3f6ac2af246 7074e47e99b0 348f8c4baccf c889911bec12 0a56c5313bc0 5dead1f4f26d 913e5ad27b17 34f40eb4b205 eef677c48cd1 b0612e7dce30 d305b3b0afdc 2bbe88a85860 c4c87f481d05 484527d5ba1b d1c9e8e3273d 046bd71a180f a4f01d51c2a7 7c36794d3630 df15b74774ca 3d3d29fbcb00 e9bfea8e26db b6b7e4cf6b24 5c6e92fd8d71 a3c8288b0141 cc19697f8871 65be9f9c3074 9e5ef6c23006 a22ff236b65a 705d11b01a2c 045f967db8f2 08057ce15e77 ea839b44cfb6 9a065bc0ce33 e271a37b629a 5e9dbc57bc31 76bc5a058351 25091e5c3bba
- In bookmarks
- api-unknown-fields cancel-landed-runs clear-waiting close-proposal-140 diffusion-pin-bookmark draft-ready image-check job-waits main oh-comment-body-file proposal-list-fast run-one-job wiki-says-so
- In tags
- v0.1.0 v0.2.0 v0.3.0 v0.3.1 v0.4.0 v0.4.1 v0.4.2 v0.5.0 v0.5.1 v0.5.2 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
- 10 atoms, 6 tree operations, 7 files
Browse the tree at this change
added .flow/pipeline.kdl +74 −0
| 1 | + | // OxygenHub's pipeline (OxygenFlow, docs in the oxygenflow repository). |
|
| 2 | + | // Every push to a bookmark on OxygenHub runs it in Firecracker microVMs on |
|
| 3 | + | // Earth; the jobs appear as checks on the change. oxygen and oxygenflow come |
|
| 4 | + | // from the pinned subrepos in deps/, which the runner puts in the workspace. |
|
| 5 | + | schema-version 1 |
|
| 6 | + | ||
| 7 | + | // The OxygenFlow build image: Rust with rustfmt and clippy, Node, and every |
|
| 8 | + | // crate of Cargo.lock vendored (oxygenflow/images/rust). Rebuild and re-pin |
|
| 9 | + | // it when Cargo.lock changes. |
|
| 10 | + | sandbox "rust" { |
|
| 11 | + | runtime "microvm" |
|
| 12 | + | rootfs "cas://blob/3ba0779a55b1d66fce10adf5a01585624c9aab089f590d228368c38fd3e65a46" |
|
| 13 | + | memory-limit "8GiB" |
|
| 14 | + | cpu-limit 4 |
|
| 15 | + | // Tests serve and connect on 127.0.0.1; nothing leaves the guest. |
|
| 16 | + | network "loopback" |
|
| 17 | + | } |
|
| 18 | + | ||
| 19 | + | sandbox "rust-small" { |
|
| 20 | + | runtime "microvm" |
|
| 21 | + | rootfs "cas://blob/3ba0779a55b1d66fce10adf5a01585624c9aab089f590d228368c38fd3e65a46" |
|
| 22 | + | memory-limit "1GiB" |
|
| 23 | + | cpu-limit 1 |
|
| 24 | + | network "isolated" |
|
| 25 | + | } |
|
| 26 | + | ||
| 27 | + | job "fmt" { |
|
| 28 | + | sandbox "rust-small" |
|
| 29 | + | // Only this workspace's packages: --all would also check the path |
|
| 30 | + | // dependencies in deps/, which follow their own formatting. |
|
| 31 | + | exec "cargo" "fmt" "--check" "-p" "oxygenhub" "-p" "hub-api" |
|
| 32 | + | } |
|
| 33 | + | ||
| 34 | + | job "clippy" { |
|
| 35 | + | sandbox "rust" |
|
| 36 | + | depends-on "fmt" |
|
| 37 | + | mount { |
|
| 38 | + | source "ephemeral://disk" |
|
| 39 | + | target "/src/target" |
|
| 40 | + | size "24GiB" |
|
| 41 | + | } |
|
| 42 | + | env { |
|
| 43 | + | CARGO_INCREMENTAL "0" |
|
| 44 | + | } |
|
| 45 | + | exec "cargo" "clippy" "--workspace" "--all-targets" "--locked" "--" "-D" "warnings" |
|
| 46 | + | } |
|
| 47 | + | ||
| 48 | + | job "test" { |
|
| 49 | + | sandbox "rust" |
|
| 50 | + | depends-on "fmt" |
|
| 51 | + | mount { |
|
| 52 | + | source "ephemeral://disk" |
|
| 53 | + | target "/src/target" |
|
| 54 | + | size "24GiB" |
|
| 55 | + | } |
|
| 56 | + | env { |
|
| 57 | + | CARGO_INCREMENTAL "0" |
|
| 58 | + | } |
|
| 59 | + | exec "cargo" "test" "--workspace" "--locked" |
|
| 60 | + | } |
|
| 61 | + | ||
| 62 | + | job "build" { |
|
| 63 | + | sandbox "rust" |
|
| 64 | + | depends-on "fmt" |
|
| 65 | + | mount { |
|
| 66 | + | source "ephemeral://disk" |
|
| 67 | + | target "/src/target" |
|
| 68 | + | size "24GiB" |
|
| 69 | + | } |
|
| 70 | + | env { |
|
| 71 | + | CARGO_INCREMENTAL "0" |
|
| 72 | + | } |
|
| 73 | + | exec "cargo" "build" "--release" "--locked" |
|
| 74 | + | } |
added .oxymodules +8 −0
| 1 | + | [deps/oxygen] |
|
| 2 | + | url = https://earth.andymccall.xyz:7343/andymccall/oxygen |
|
| 3 | + | bookmark = main |
|
| 4 | + | ||
| 5 | + | [deps/oxygenflow] |
|
| 6 | + | url = https://earth.andymccall.xyz:7343/andymccall/oxygenflow |
|
| 7 | + | bookmark = main |
|
| 8 | + |
added deps/oxygen +0 −0
No line changes.
added deps/oxygenflow +0 −0
No line changes.
modified Cargo.toml +6 −3
| 1 | 1 | [workspace] |
|
| 2 | 2 | members = ["crates/hub", "crates/hub-api"] |
|
| 3 | + | # Pinned subrepos (oxy submodule): oxygen and oxygenflow at the states this |
|
| 4 | + | # hub builds against. They are workspaces of their own. |
|
| 5 | + | exclude = ["deps"] |
|
| 3 | 6 | resolver = "2" |
|
| 4 | 7 | ||
| 5 | 8 | [workspace.package] |
|
| … | 4 unchanged lines |
||
| 10 | 13 | repository = "https://earth.andymccall.xyz:7343/andymccall/oxygenhub" |
|
| 11 | 14 | ||
| 12 | 15 | [workspace.dependencies] |
|
| 13 | - | oxy-core = { path = "../oxygen/crates/oxy-core" } |
|
| 14 | - | oxy-server = { path = "../oxygen/crates/oxy-server" } |
|
| 16 | + | oxy-core = { path = "deps/oxygen/crates/oxy-core" } |
|
| 17 | + | oxy-server = { path = "deps/oxygen/crates/oxy-server" } |
|
| 15 | 18 | hub-api = { path = "crates/hub-api" } |
|
| 16 | - | flow-core = { path = "../oxygenflow/crates/flow-core" } |
|
| 19 | + | flow-core = { path = "deps/oxygenflow/crates/flow-core" } |
|
| 17 | 20 | ||
| 18 | 21 | anyhow = "1" |
|
| 19 | 22 | thiserror = "2" |
|
| … | 42 unchanged lines |
modified Makefile +6 −0
| … | 24 unchanged lines |
||
| 25 | 25 | deploy: |
|
| 26 | 26 | rsync -a --delete --exclude target --exclude node_modules --exclude .oxy/objects/loose ../oxygen ../oxygenflow ../oxygenhub claude@earth:src/ |
|
| 27 | 27 | ssh claude@earth 'source ~/.cargo/env && cd src/oxygenhub && cargo build --release && sudo install -m 0755 target/release/oxygenhub /usr/local/bin/oxygenhub && sudo systemctl restart oxygenhub && systemctl is-active oxygenhub' |
|
| 28 | + | ||
| 29 | + | # Move the pinned subrepos (deps/oxygen, deps/oxygenflow) to their bookmark on |
|
| 30 | + | # Earth; the next commit records the new pins. Push oxygen and oxygenflow first. |
|
| 31 | + | .PHONY: pins |
|
| 32 | + | pins: |
|
| 33 | + | for d in deps/oxygen deps/oxygenflow; do (cd $$d && OXY_CA=$(HOME)/.config/oxy/earth-ca.pem oxy --plain pull origin) || exit 1; done |
modified README.md +4 −0
| … | 62 unchanged lines |
||
| 63 | 63 | `make check` runs formatting, clippy with warnings as errors, and the tests. |
|
| 64 | 64 | The tests use a real `oxy-core` client against a hub on a loopback port and |
|
| 65 | 65 | never touch your own Oxygen configuration. |
|
| 66 | + | ||
| 67 | + | ## oxygen and oxygenflow as pinned subrepos |
|
| 68 | + | ||
| 69 | + | The hub builds against `deps/oxygen` and `deps/oxygenflow`, subrepos (`oxy submodule`) pinned to exact states, so every build says which oxygen it used and OxygenFlow can build it without network. `make pins` moves both to their `main` on Earth (push those repositories first); the next commit records the new pins. Format only this workspace, `cargo fmt -p oxygenhub -p hub-api`: `--all` also reaches the path dependencies in `deps/`, which have their own formatting. After a fresh clone, `oxy submodule update --init` fetches them. |