rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwoodbde727e6562e4d41463daf80dea6dae8f4be5735
{
"request": "trigger",
"version": 1,
"event_type": "patch",
"repository": {
"id": "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5",
"name": "heartwood",
"description": "Radicle Heartwood Protocol & Stack",
"private": false,
"default_branch": "master",
"delegates": [
"did:key:z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT",
"did:key:z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW",
"did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz"
]
},
"action": "Updated",
"patch": {
"id": "3219ef871dd44c7ef51693f4aeba4c2c5c0c5c7b",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"title": "Remove predefined bootstrap nodes",
"state": {
"status": "open",
"conflicts": []
},
"before": "02318f199c6f29a2eede1f282e1f9b99927d27ec",
"after": "bde727e6562e4d41463daf80dea6dae8f4be5735",
"commits": [
"bde727e6562e4d41463daf80dea6dae8f4be5735",
"1abc29414c2ade8a68f7c9aa646bcf6dfafff440"
],
"target": "02318f199c6f29a2eede1f282e1f9b99927d27ec",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "3219ef871dd44c7ef51693f4aeba4c2c5c0c5c7b",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "Instead, expect a \"network\" field that names a network file that must exist\nunder $RAD_HOME/networks.\n\nA network file is a JSON file containing nodes and preferred nodes, e.g.\n\n {\n \"nodes\": {\n \"seed.radicle.xyz\": \"z6MksmpU5b1dS7oaqF2bHXhQi1DWy2hB7Mh9CuN7y1DN6QSz@seed.radicle.xyz:8776\",\n \"seed.radicle.garden\", \"z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@seed.radicle.garden:8776\",\n \"ash.radicle.garden\", \"z6Mkmqogy2qEM2ummccUthFEaaHvyYmYBYh3dbe9W4ebScxo@ash.radicle.garden:8776\"\n },\n \"preferredNodes\": [\"seed.radicle.xyz\"]\n }",
"base": "74336f961a5f6cfbb30f867a9eacfd5da579f597",
"oid": "e46acdc3cbcebaf3552b97babf6d6bec953ea230",
"timestamp": 1722634346
},
{
"id": "1d23961eeb8247bc29ea02db5c475642b81868ad",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "c8fbcf2a7aeb0dc8b5c2f709532ae464fedc3677",
"oid": "b96908a5b04926bf42cd2e7b657326c3f34556fa",
"timestamp": 1724509992
},
{
"id": "38969304ecf11a97070328f074ed93915fb9c003",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "3b5fac178eaf9bca639fbd0c1df0c68619a7f51f",
"oid": "34463b0031d6da1578cd5d45d1e683309ef3a3d3",
"timestamp": 1744061017
},
{
"id": "263374575f2a74b428c3c78d594df78edc3802ff",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "ffc86f8a9687a1a085f955abe058c7f1cb65daa6",
"oid": "3782686c36c00f643eb4ef3f93db29155063d848",
"timestamp": 1744478283
},
{
"id": "602ee13f09319b2bd660ecdf16f3d5950d259ec5",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "ffc86f8a9687a1a085f955abe058c7f1cb65daa6",
"oid": "653dd9d53b7f31330707b2473609e15120863e05",
"timestamp": 1744492675
},
{
"id": "e2d02d3bdaae0941620906c3a8542b617d21a8df",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "ffc86f8a9687a1a085f955abe058c7f1cb65daa6",
"oid": "e9d51d65c3b3f836bd5cd25478d90e4e994d443a",
"timestamp": 1744574174
},
{
"id": "eaf5e0b423bb9a919e627dd8a73828046b95fb98",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "47c785b9160c31ab360e15c7b2f849e5225ecc66",
"oid": "3273d81f73bcb510c595510c36a48a57fdab2822",
"timestamp": 1744844180
},
{
"id": "43076f3ce705d2d45c0197f0c125304b743fa0d4",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "433483e07aaee791c3c7ca6e9ffff1f24060ce26",
"oid": "0a8f0b2a99e9c7ec22d2c7bba20d17c6f8127913",
"timestamp": 1745237998
},
{
"id": "7ffde3dd1e00bce7012624813949571149c11b25",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "8fd044833e40440e7b9d7a2c08281f404e5f5ed7",
"oid": "a260405f7b121905e24d37a72ee088e6a0a34fcf",
"timestamp": 1745238057
},
{
"id": "854cf69f63cdd526be0fade57f4ccc2669a58e0f",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "8fd044833e40440e7b9d7a2c08281f404e5f5ed7",
"oid": "0fc788768082521d1d8e11f3338dd58eab815cf2",
"timestamp": 1745238387
},
{
"id": "982302c3e6e41d6cc700a13c2f06bb733748164a",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "8fd044833e40440e7b9d7a2c08281f404e5f5ed7",
"oid": "2a2b2d613aa07bbf4bec7ff619bd10bdb0aa67a7",
"timestamp": 1745240871
},
{
"id": "28ea60d89fb24e1bc77e9711885c27d509e9d3cb",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "8fd044833e40440e7b9d7a2c08281f404e5f5ed7",
"oid": "d6f14205e6a631b74e7d8efa60ae4792779013a5",
"timestamp": 1745345979
},
{
"id": "e908a107af0cf0a4e29202627ce1dfb875046885",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "8fd044833e40440e7b9d7a2c08281f404e5f5ed7",
"oid": "7eddb63cfed766cafa70579abd9bcc815ec610ec",
"timestamp": 1745347056
},
{
"id": "c53abe9ba40da6407ead0bd103e2ddad4389235b",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "f5fa84fac6736d2e31ec20c9b844ff12e6414d14",
"oid": "7322e3ac61669ba6dbde16bb0f7d30edf1ee85ce",
"timestamp": 1749306161
},
{
"id": "581d904f5cb4f24542a9cfaf741698eec28cf66e",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "cf023f750dee2681eb73e4e0704da137ea2195ef",
"oid": "3da8b71a7bceda0268ad516ba17a2162c2833377",
"timestamp": 1768155751
},
{
"id": "b0bca7b3f73cc967221b8af7e3a2681761271b22",
"author": {
"id": "did:key:z6MkmiJDUjPwusmFndWci1Gx46iSvPx5zfZCtJ4SPmkTV5sS",
"alias": "istankovic"
},
"description": "",
"base": "02318f199c6f29a2eede1f282e1f9b99927d27ec",
"oid": "bde727e6562e4d41463daf80dea6dae8f4be5735",
"timestamp": 1768329133
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "656f78e9-0537-45a4-b7f8-0f972e3169c8"
},
"info_url": "https://cci.rad.levitte.org//656f78e9-0537-45a4-b7f8-0f972e3169c8.html"
}
Started at: 2026-01-13 19:33:19.316081+01:00
Commands:
$ rad clone rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 .
✓ Creating checkout in ./...
✓ Remote cloudhead@z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT added
✓ Remote-tracking branch cloudhead@z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT/master created for z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT
✓ Remote cloudhead@z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW added
✓ Remote-tracking branch cloudhead@z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW/master created for z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW
✓ Remote fintohaps@z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM added
✓ Remote-tracking branch fintohaps@z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM/master created for z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM
✓ Remote erikli@z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz added
✓ Remote-tracking branch erikli@z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz/master created for z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz
✓ Remote lorenz@z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz added
✓ Remote-tracking branch lorenz@z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz/master created for z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz
✓ Repository successfully cloned under /opt/radcis/ci.rad.levitte.org/cci/state/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 131 issues · 15 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout 3219ef871dd44c7ef51693f4aeba4c2c5c0c5c7b
✓ Switched to branch patch/3219ef8 at revision b0bca7b
✓ Branch patch/3219ef8 setup to track rad/patches/3219ef871dd44c7ef51693f4aeba4c2c5c0c5c7b
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout bde727e6562e4d41463daf80dea6dae8f4be5735
HEAD is now at bde727e6 node, cli: remove predefined bootstrap nodes
Exit code: 0
$ rad patch show 3219ef871dd44c7ef51693f4aeba4c2c5c0c5c7b -p
╭──────────────────────────────────────────────────────────────────────────────────╮
│ Title Remove predefined bootstrap nodes │
│ Patch 3219ef871dd44c7ef51693f4aeba4c2c5c0c5c7b │
│ Author istankovic z6MkmiJ…mkTV5sS │
│ Head bde727e6562e4d41463daf80dea6dae8f4be5735 │
│ Base 02318f199c6f29a2eede1f282e1f9b99927d27ec │
│ Branches patch/3219ef8 │
│ Commits ahead 2, behind 0 │
│ Status open │
│ │
│ Instead, expect a "network" field that names a network file that must exist │
│ under $RAD_HOME/networks. │
│ │
│ A network file is a JSON file containing nodes and preferred nodes, e.g. │
│ │
│ { │
│ "nodes": { │
│ "seed.radicle.xyz": "z6MksmpU5b1dS7oaqF2bHXhQi1DWy2hB7Mh9CuN7y1DN6QSz@s… │
│ "seed.radicle.garden", "z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm… │
│ "ash.radicle.garden", "z6Mkmqogy2qEM2ummccUthFEaaHvyYmYBYh3dbe9W4ebScxo… │
│ }, │
│ "preferredNodes": ["seed.radicle.xyz"] │
│ } │
├──────────────────────────────────────────────────────────────────────────────────┤
│ bde727e node, cli: remove predefined bootstrap nodes │
│ 1abc294 networks: Add bootstrap nodes for the main network │
├──────────────────────────────────────────────────────────────────────────────────┤
│ ● Revision 3219ef8 @ e46acdc by istankovic z6MkmiJ…mkTV5sS 1 year ago │
│ ↑ Revision 1d23961 @ b96908a by istankovic z6MkmiJ…mkTV5sS 1 year ago │
│ ↑ Revision 3896930 @ 34463b0 by istankovic z6MkmiJ…mkTV5sS 9 months ago │
│ ↑ Revision 2633745 @ 3782686 by istankovic z6MkmiJ…mkTV5sS 9 months ago │
│ ↑ Revision 602ee13 @ 653dd9d by istankovic z6MkmiJ…mkTV5sS 9 months ago │
│ ↑ Revision e2d02d3 @ e9d51d6 by istankovic z6MkmiJ…mkTV5sS 9 months ago │
│ ↑ Revision eaf5e0b @ 3273d81 by istankovic z6MkmiJ…mkTV5sS 8 months ago │
│ ↑ Revision 43076f3 @ 0a8f0b2 by istankovic z6MkmiJ…mkTV5sS 8 months ago │
│ ↑ Revision 7ffde3d @ a260405 by istankovic z6MkmiJ…mkTV5sS 8 months ago │
│ ↑ Revision 854cf69 @ 0fc7887 by istankovic z6MkmiJ…mkTV5sS 8 months ago │
│ ↑ Revision 982302c @ 2a2b2d6 by istankovic z6MkmiJ…mkTV5sS 8 months ago │
│ ↑ Revision 28ea60d @ d6f1420 by istankovic z6MkmiJ…mkTV5sS 8 months ago │
│ ↑ Revision e908a10 @ 7eddb63 by istankovic z6MkmiJ…mkTV5sS 8 months ago │
│ ↑ Revision c53abe9 @ 7322e3a by istankovic z6MkmiJ…mkTV5sS 7 months ago │
│ ↑ Revision 581d904 @ 3da8b71 by istankovic z6MkmiJ…mkTV5sS 2 days ago │
│ ↑ Revision b0bca7b @ bde727e by istankovic z6MkmiJ…mkTV5sS 1 minute ago │
╰──────────────────────────────────────────────────────────────────────────────────╯
commit bde727e6562e4d41463daf80dea6dae8f4be5735
Author: Ivan Stanković <istankovic@posteo.net>
Date: Tue May 14 12:05:24 2024 +0000
node, cli: remove predefined bootstrap nodes
Instead, expect a "network" field that names a network file that must exist
under $RAD_HOME/networks.
A network file is a JSON file containing nodes and preferred nodes, e.g.
{
"nodes": {
"iris.radicle.xyz": "z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@iris.radicle.xyz:8776",
"rosa.radicle.xyz": "z6Mkmqogy2qEM2ummccUthFEaaHvyYmYBYh3dbe9W4ebScxo@rosa.radicle.xyz:8776",
},
"preferredNodes": ["iris.radicle.xyz"]
}
diff --git a/crates/radicle-cli/examples/rad-config.md b/crates/radicle-cli/examples/rad-config.md
index 6e208b20a..742d4383a 100644
--- a/crates/radicle-cli/examples/rad-config.md
+++ b/crates/radicle-cli/examples/rad-config.md
@@ -5,9 +5,7 @@ In its simplest form, `rad config` prints the current configuration.
$ rad config
{
"publicExplorer": "https://app.radicle.xyz/nodes/$host/$rid$path",
- "preferredSeeds": [
- "z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@iris.radicle.xyz:8776"
- ],
+ "preferredSeeds": [],
"web": {
"pinned": {
"repositories": []
@@ -63,7 +61,6 @@ You can also get any value in the configuration by path, eg.
$ rad config get node.alias
alice
$ rad config get preferredSeeds
-z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@iris.radicle.xyz:8776
$ rad config get node.limits.routingMaxSize
1000
```
diff --git a/crates/radicle-cli/tests/commands.rs b/crates/radicle-cli/tests/commands.rs
index ce8ca5262..3014d4878 100644
--- a/crates/radicle-cli/tests/commands.rs
+++ b/crates/radicle-cli/tests/commands.rs
@@ -7,7 +7,6 @@ use radicle::cob;
use radicle::git;
use radicle::node;
use radicle::node::address::Store as _;
-use radicle::node::config::seeds::RADICLE_NODE_BOOTSTRAP_IRIS;
use radicle::node::config::DefaultSeedingPolicy;
use radicle::node::events::Event;
use radicle::node::policy::Scope;
@@ -338,7 +337,7 @@ fn rad_config() {
let mut environment = Environment::new();
let alias = Alias::new("alice");
let profile = environment.profile_with(profile::Config {
- preferred_seeds: vec![RADICLE_NODE_BOOTSTRAP_IRIS.clone()[0].clone()],
+ preferred_seeds: vec![],
..profile::Config::new(alias)
});
let working = tempfile::tempdir().unwrap();
diff --git a/crates/radicle-cli/tests/util/environment.rs b/crates/radicle-cli/tests/util/environment.rs
index 79e547aec..487c7546c 100644
--- a/crates/radicle-cli/tests/util/environment.rs
+++ b/crates/radicle-cli/tests/util/environment.rs
@@ -20,7 +20,7 @@ use crate::util::formula::formula;
pub(crate) mod config {
use super::*;
- use radicle::node::config::{Config, Limits, Network, RateLimit, RateLimits};
+ use radicle::node::config::{Config, Limits, RateLimit, RateLimits};
/// Configuration for a test seed node.
///
@@ -30,7 +30,7 @@ pub(crate) mod config {
/// messages from being dropped.
pub fn seed(alias: &'static str) -> Config {
Config {
- network: Network::Test,
+ network: "test".to_string(),
relay: node::config::Relay::Always,
limits: Limits {
rate: RateLimits {
diff --git a/crates/radicle-node/src/lib.rs b/crates/radicle-node/src/lib.rs
index 94ae8d27e..95d20f676 100644
--- a/crates/radicle-node/src/lib.rs
+++ b/crates/radicle-node/src/lib.rs
@@ -49,7 +49,7 @@ pub static USER_AGENT: LazyLock<UserAgent> = LazyLock::new(|| {
pub mod prelude {
pub use crate::crypto::{PublicKey, Signature};
pub use crate::identity::{Did, RepoId};
- pub use crate::node::{config::Network, Address, Event, NodeId};
+ pub use crate::node::{Address, Event, NodeId};
pub use crate::service::filter::Filter;
pub use crate::service::{DisconnectReason, Message};
pub use crate::storage::refs::Refs;
diff --git a/crates/radicle-node/src/main.rs b/crates/radicle-node/src/main.rs
index 9fcd4cc8e..9d43be894 100644
--- a/crates/radicle-node/src/main.rs
+++ b/crates/radicle-node/src/main.rs
@@ -190,6 +190,11 @@ enum ExecutionError {
#[error(transparent)]
ConfigurationLoading(#[from] profile::config::LoadError),
#[error(transparent)]
+ NetworkLoading(#[from] profile::networks::NetworkLoadError),
+ /// An unknown network was referenced.
+ #[error("unknown network: {0}")]
+ UnknownNetwork(String),
+ #[error(transparent)]
Runtime(#[from] radicle_node::runtime::Error),
#[error(transparent)]
Fingerprint(#[from] radicle_node::fingerprint::Error),
@@ -231,6 +236,11 @@ fn execute(options: Options) -> Result<(), ExecutionError> {
// to do in this case.
}
+ let networks = profile::networks::Networks::load(&home)?;
+ let Some(network) = networks.get(&config.node.network.to_owned().into()) else {
+ return Err(ExecutionError::UnknownNetwork(config.node.network));
+ };
+
log::info!(target: "node", "Starting node..");
log::info!(target: "node", "Version {} ({})", env!("RADICLE_VERSION"), env!("GIT_HEAD"));
log::info!(target: "node", "Unlocking node keystore..");
@@ -335,7 +345,7 @@ fn execute(options: Options) -> Result<(), ExecutionError> {
log::debug!(target: "node", "Removing existing control socket..");
std::fs::remove_file(home.socket()).ok();
}
- Runtime::init(home, config.node, listen, signals, signer)?.run()?;
+ Runtime::init(home, network, config.node, listen, signals, signer)?.run()?;
Ok(())
}
diff --git a/crates/radicle-node/src/runtime.rs b/crates/radicle-node/src/runtime.rs
index 115ef587a..e3b3a897f 100644
--- a/crates/radicle-node/src/runtime.rs
+++ b/crates/radicle-node/src/runtime.rs
@@ -26,7 +26,7 @@ use radicle::node::notifications;
use radicle::node::policy::config as policy;
use radicle::node::Event;
use radicle::node::UserAgent;
-use radicle::profile::Home;
+use radicle::profile::{networks::Network, Home};
use radicle::{cob, git, storage, Storage};
use crate::control;
@@ -126,6 +126,7 @@ impl Runtime {
/// This function spawns threads.
pub fn init<G>(
home: Home,
+ network: &Network,
config: radicle::node::Config,
listen: Vec<net::SocketAddr>,
signals: chan::Receiver<Signal>,
@@ -140,7 +141,6 @@ impl Runtime {
{
let id = *signer.public_key();
let alias = config.alias.clone();
- let network = config.network;
let rng = fastrand::Rng::new();
let clock = LocalTime::now();
let timestamp = clock.into();
@@ -168,7 +168,7 @@ impl Runtime {
}
log::info!(target: "node", "Default seeding policy set to '{}'", &policy);
- log::info!(target: "node", "Initializing service ({network:?})..");
+ log::info!(target: "node", "Using network {}", network.name());
let announcement = service::gossip::node(&config, timestamp)
.solve(Default::default())
@@ -191,21 +191,20 @@ impl Runtime {
if config.connect.is_empty() && stores.addresses().is_empty()? {
log::info!(target: "node", "Address book is empty. Adding bootstrap nodes..");
- for (alias, version, addrs) in config.network.bootstrap() {
- for addr in addrs {
- let (id, addr) = addr.into();
-
- stores.addresses_mut().insert(
- &id,
- version,
- radicle::node::Features::SEED,
- &alias,
- 0,
- &UserAgent::default(),
- clock.into(),
- [node::KnownAddress::new(addr, address::Source::Bootstrap)],
- )?;
- }
+ let version = 1;
+ for (alias, addr) in network.nodes() {
+ let (id, addr) = addr.clone().into();
+
+ stores.addresses_mut().insert(
+ &id,
+ version,
+ radicle::node::Features::SEED,
+ alias,
+ 0,
+ &UserAgent::default(),
+ clock.into(),
+ [node::KnownAddress::new(addr, address::Source::Bootstrap)],
+ )?;
}
log::info!(target: "node", "{} nodes added to address book", stores.addresses().len()?);
}
diff --git a/crates/radicle-node/src/test/environment.rs b/crates/radicle-node/src/test/environment.rs
index edf98c134..0dba812b9 100644
--- a/crates/radicle-node/src/test/environment.rs
+++ b/crates/radicle-node/src/test/environment.rs
@@ -26,7 +26,7 @@ pub use radicle::node::Config;
use radicle::node::{Alias, Database, UserAgent, POLICIES_DB_FILE};
use radicle::node::{ConnectOptions, Handle as _};
use radicle::profile;
-use radicle::profile::{env, Home, Profile};
+use radicle::profile::{env, Home, networks::Network, Profile};
use radicle::rad;
use radicle::storage::{ReadStorage as _, RemoteRepository as _, SignRepository as _};
use radicle::test::fixtures;
@@ -518,8 +518,10 @@ where
pub fn spawn(self) -> NodeHandle<G> {
let listen = vec![([0, 0, 0, 0], 0).into()];
let (_, signals) = chan::bounded(1);
+ let network = Network::new("test");
let rt = Runtime::init(
self.home.clone(),
+ &network,
self.config,
listen,
signals,
diff --git a/crates/radicle-node/src/test/node.rs b/crates/radicle-node/src/test/node.rs
index 2256b7cd1..b71de4ae9 100644
--- a/crates/radicle-node/src/test/node.rs
+++ b/crates/radicle-node/src/test/node.rs
@@ -27,7 +27,7 @@ use radicle::node::Event;
use radicle::node::{self, Alias};
use radicle::node::{ConnectOptions, Handle as _};
use radicle::node::{Database, POLICIES_DB_FILE};
-use radicle::profile::{env, Home, Profile};
+use radicle::profile::{env, networks::Network, Home, Profile};
use radicle::rad;
use radicle::storage::{ReadStorage as _, RemoteRepository as _, SignRepository as _};
use radicle::test::fixtures;
@@ -461,9 +461,11 @@ impl<G: cyphernet::Ecdh<Pk = NodeId> + Signer<Signature> + Clone + Debug> Node<G
pub fn spawn(self) -> NodeHandle<G> {
let alias = self.config.alias.clone();
let listen = vec![([0, 0, 0, 0], 0).into()];
+ let network = Network::new("test");
let (_, signals) = chan::bounded(1);
let rt = Runtime::init(
self.home.clone(),
+ &network,
self.config,
listen,
signals,
diff --git a/crates/radicle/src/node.rs b/crates/radicle/src/node.rs
index 8f761fb5b..3f9e8633b 100644
--- a/crates/radicle/src/node.rs
+++ b/crates/radicle/src/node.rs
@@ -289,7 +289,7 @@ impl AsRef<str> for UserAgent {
}
/// Node alias, i.e. a short and memorable name for it.
-#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Serialize, Deserialize)]
+#[derive(Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Clone, Serialize, Deserialize)]
#[serde(try_from = "String", into = "String")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Alias(
diff --git a/crates/radicle/src/node/config.rs b/crates/radicle/src/node/config.rs
index 6d289e78e..b7335bc6f 100644
--- a/crates/radicle/src/node/config.rs
+++ b/crates/radicle/src/node/config.rs
@@ -15,102 +15,6 @@ use crate::node::{Address, Alias, NodeId};
/// Peer-to-peer protocol version.
pub type ProtocolVersion = u8;
-/// Configured public seeds.
-pub mod seeds {
- use std::{str::FromStr, sync::LazyLock};
-
- use cyphernet::addr::{tor::OnionAddrV3, HostName, NetAddr};
-
- use super::{ConnectAddress, NodeId, PeerAddr};
-
- /// A helper to generate many connect addresses for a node, using port 8776.
- fn to_connect_addresses(id: NodeId, hostnames: Vec<HostName>) -> Vec<ConnectAddress> {
- hostnames
- .into_iter()
- .map(|hostname| PeerAddr::new(id, NetAddr::new(hostname, 8776).into()).into())
- .collect()
- }
-
- /// A public Radicle seed node for the community.
- pub static RADICLE_NODE_BOOTSTRAP_IRIS: LazyLock<Vec<ConnectAddress>> = LazyLock::new(|| {
- to_connect_addresses(
- #[allow(clippy::unwrap_used)] // Value is manually verified.
- NodeId::from_str("z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7").unwrap(),
- vec![
- HostName::Dns("iris.radicle.xyz".to_owned()),
- #[allow(clippy::unwrap_used)] // Value is manually verified.
- OnionAddrV3::from_str(
- "irisradizskwweumpydlj4oammoshkxxjur3ztcmo7cou5emc6s5lfid.onion",
- )
- .unwrap()
- .into(),
- ],
- )
- });
-
- /// A public Radicle seed node for the community.
- pub static RADICLE_NODE_BOOTSTRAP_ROSA: LazyLock<Vec<ConnectAddress>> = LazyLock::new(|| {
- to_connect_addresses(
- #[allow(clippy::unwrap_used)] // Value is manually verified.
- NodeId::from_str("z6Mkmqogy2qEM2ummccUthFEaaHvyYmYBYh3dbe9W4ebScxo").unwrap(),
- vec![
- HostName::Dns("rosa.radicle.xyz".to_owned()),
- #[allow(clippy::unwrap_used)] // Value is manually verified.
- OnionAddrV3::from_str(
- "rosarad5bxgdlgjnzzjygnsxrwxmoaj4vn7xinlstwglxvyt64jlnhyd.onion",
- )
- .unwrap()
- .into(),
- ],
- )
- });
-}
-
-/// Peer-to-peer network.
-#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
-pub enum Network {
- #[default]
- Main,
- Test,
-}
-
-impl Network {
- /// Bootstrap nodes for this network.
- pub fn bootstrap(&self) -> Vec<(Alias, ProtocolVersion, Vec<ConnectAddress>)> {
- match self {
- Self::Main => [
- (
- "iris.radicle.xyz",
- seeds::RADICLE_NODE_BOOTSTRAP_IRIS.clone(),
- ),
- (
- "rosa.radicle.xyz",
- seeds::RADICLE_NODE_BOOTSTRAP_ROSA.clone(),
- ),
- ]
- .into_iter()
- .map(|(a, s)| (Alias::new(a), 1, s))
- .collect(),
-
- Self::Test => vec![],
- }
- }
-
- /// Public seeds for this network.
- pub fn public_seeds(&self) -> Vec<ConnectAddress> {
- match self {
- Self::Main => {
- let mut result = seeds::RADICLE_NODE_BOOTSTRAP_IRIS.clone();
- result.extend(seeds::RADICLE_NODE_BOOTSTRAP_ROSA.clone());
- result
- }
- Self::Test => vec![],
- }
- }
-}
-
/// Configuration parameters defining attributes of minima and maxima.
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(default, rename_all = "camelCase")]
@@ -431,8 +335,7 @@ pub struct Config {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub onion: Option<AddressConfig>,
/// Peer-to-peer network.
- #[serde(default)]
- pub network: Network,
+ pub network: String,
/// Log level.
#[serde(default)]
pub log: LogLevel,
@@ -464,7 +367,7 @@ pub struct Config {
impl Config {
pub fn test(alias: Alias) -> Self {
Self {
- network: Network::Test,
+ network: "test".to_string(),
..Self::new(alias)
}
}
@@ -476,7 +379,7 @@ impl Config {
listen: vec![],
connect: HashSet::default(),
external_addresses: vec![],
- network: Network::default(),
+ network: "main".to_string(),
proxy: None,
onion: None,
relay: Relay::default(),
@@ -653,6 +556,7 @@ mod test {
let config: Config = serde_json::from_value(json!({
"alias": "example",
+ "network": "test",
"limits": {
"connection": {
"inbound": 1337,
@@ -669,6 +573,7 @@ mod test {
let config: Config = serde_json::from_value(json!({
"alias": "example",
+ "network": "test",
"limits": {
"connection": {
"outbound": 1337,
diff --git a/crates/radicle/src/profile.rs b/crates/radicle/src/profile.rs
index 72ec2e607..472ee3b2b 100644
--- a/crates/radicle/src/profile.rs
+++ b/crates/radicle/src/profile.rs
@@ -12,6 +12,7 @@
//!
pub mod config;
+pub mod networks;
pub use config::{Config, ConfigPath, RawConfig, WriteError};
use std::collections::{BTreeMap, BTreeSet};
@@ -565,7 +566,13 @@ impl Home {
path: dunce::canonicalize(path)?,
};
- for dir in &[home.storage(), home.keys(), home.node(), home.cobs()] {
+ for dir in &[
+ home.storage(),
+ home.keys(),
+ home.node(),
+ home.cobs(),
+ home.networks(),
+ ] {
if !dir.exists() {
fs::create_dir_all(dir)?;
}
@@ -598,6 +605,10 @@ impl Home {
self.path.join("cobs")
}
+ pub fn networks(&self) -> PathBuf {
+ self.path.join("networks")
+ }
+
pub fn socket(&self) -> PathBuf {
use env::RAD_SOCKET;
diff --git a/crates/radicle/src/profile/config.rs b/crates/radicle/src/profile/config.rs
index 75cbe9702..39bb28a73 100644
--- a/crates/radicle/src/profile/config.rs
+++ b/crates/radicle/src/profile/config.rs
@@ -155,7 +155,7 @@ impl Config {
Self {
public_explorer: Explorer::default(),
- preferred_seeds: node.network.public_seeds(),
+ preferred_seeds: vec![],
web: web::Config::default(),
cli: cli::Config::default(),
node,
diff --git a/crates/radicle/src/profile/networks.rs b/crates/radicle/src/profile/networks.rs
new file mode 100644
index 000000000..292567cd2
--- /dev/null
+++ b/crates/radicle/src/profile/networks.rs
@@ -0,0 +1,89 @@
+use std::collections::HashMap;
+use std::fs;
+use std::path::Path;
+
+use crate::node::config::ConnectAddress;
+use crate::node::Alias;
+use crate::profile::Home;
+
+#[derive(Debug, Default, Display, Hash, Eq, PartialEq)]
+#[display(inner)]
+pub struct NetworkName(String);
+
+#[derive(Debug, thiserror::Error)]
+pub enum NetworkLoadError {
+ #[error("error parsing JSON: {0}")]
+ Json(#[from] serde_json::Error),
+ #[error("I/O error: {0}")]
+ Io(#[from] std::io::Error),
+}
+
+#[derive(Debug, serde::Serialize, serde::Deserialize)]
+pub struct Network {
+ #[serde(skip)]
+ name: NetworkName,
+ // A map node-alias -> node-address
+ nodes: HashMap<Alias, ConnectAddress>,
+ preferred_nodes: Vec<Alias>,
+}
+
+impl<T> From<T> for NetworkName
+where
+ T: Into<String>,
+{
+ fn from(name: T) -> NetworkName {
+ NetworkName(name.into())
+ }
+}
+
+impl Network {
+ pub fn new(name: impl Into<NetworkName>) -> Network {
+ Network {
+ name: name.into(),
+ nodes: HashMap::new(),
+ preferred_nodes: vec![],
+ }
+ }
+
+ pub fn add_node(&mut self, alias: Alias, addr: ConnectAddress) {
+ self.nodes.insert(alias, addr);
+ }
+
+ pub fn nodes(&self) -> impl Iterator<Item = (&Alias, &ConnectAddress)> {
+ self.nodes.iter()
+ }
+
+ pub fn name(&self) -> &NetworkName {
+ &self.name
+ }
+
+ pub fn from_file(name: &str, path: impl AsRef<Path>) -> Result<Network, NetworkLoadError> {
+ let file = fs::File::open(&path)?;
+ let mut network: Network = serde_json::from_reader(file)?;
+ network.name = name.into();
+ Ok(network)
+ }
+}
+
+#[derive(Debug)]
+pub struct Networks(HashMap<NetworkName, Network>);
+
+impl Networks {
+ pub fn load(home: &Home) -> Result<Networks, NetworkLoadError> {
+ let mut networks = HashMap::new();
+
+ for entry in fs::read_dir(home.networks())? {
+ let path = entry?.path();
+ if let Some(name) = path.file_name().and_then(|x| x.to_str()) {
+ let network = Network::from_file(name, &path)?;
+ networks.insert(name.into(), network);
+ }
+ }
+
+ Ok(Networks(networks))
+ }
+
+ pub fn get(&self, name: &NetworkName) -> Option<&Network> {
+ self.0.get(name)
+ }
+}
commit 1abc29414c2ade8a68f7c9aa646bcf6dfafff440
Author: Ivan Stanković <istankovic@posteo.net>
Date: Sat May 4 13:00:11 2024 +0000
networks: Add bootstrap nodes for the main network
This is the first step in moving predefined bootstrap
nodes out of the config code.
diff --git a/networks/main b/networks/main
new file mode 100644
index 000000000..6aff6a3df
--- /dev/null
+++ b/networks/main
@@ -0,0 +1,7 @@
+{
+ "nodes": {
+ "iris.radicle.xyz": "z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@iris.radicle.xyz:8776",
+ "rosa.radicle.xyz": "z6Mkmqogy2qEM2ummccUthFEaaHvyYmYBYh3dbe9W4ebScxo@rosa.radicle.xyz:8776",
+ },
+ "preferredNodes": ["iris.radicle.xyz"]
+}
Exit code: 0
shell: 'export RUSTDOCFLAGS=''-D warnings'' cargo --version rustc --version cargo fmt --check cargo clippy --all-targets --workspace -- --deny warnings cargo build --all-targets --workspace cargo doc --workspace --no-deps --all-features cargo test --workspace --no-fail-fast '
Commands:
$ podman run --name 656f78e9-0537-45a4-b7f8-0f972e3169c8 -v /opt/radcis/ci.rad.levitte.org/cci/state/656f78e9-0537-45a4-b7f8-0f972e3169c8/s:/656f78e9-0537-45a4-b7f8-0f972e3169c8/s:ro -v /opt/radcis/ci.rad.levitte.org/cci/state/656f78e9-0537-45a4-b7f8-0f972e3169c8/w:/656f78e9-0537-45a4-b7f8-0f972e3169c8/w -w /656f78e9-0537-45a4-b7f8-0f972e3169c8/w -v /opt/radcis/ci.rad.levitte.org/.radicle:/${id}/.radicle:ro -e RAD_HOME=/${id}/.radicle rust:trixie bash /656f78e9-0537-45a4-b7f8-0f972e3169c8/s/script.sh
+ export 'RUSTDOCFLAGS=-D warnings'
+ RUSTDOCFLAGS='-D warnings'
+ cargo --version
info: syncing channel updates for '1.90-x86_64-unknown-linux-gnu'
info: latest update on 2025-09-18, rust version 1.90.0 (1159e78c4 2025-09-14)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-src'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
info: installing component 'rust-src'
info: installing component 'rust-std'
info: installing component 'rustc'
info: installing component 'rustfmt'
cargo 1.90.0 (840b83a10 2025-07-30)
+ rustc --version
rustc 1.90.0 (1159e78c4 2025-09-14)
+ cargo fmt --check
+ cargo clippy --all-targets --workspace -- --deny warnings
Updating crates.io index
Downloading crates ...
Downloaded generic-array v0.14.7
Downloaded dyn-clone v1.0.17
Downloaded jobserver v0.1.31
Downloaded gix-transport v0.48.0
Downloaded flate2 v1.1.1
Downloaded libc v0.2.174
Downloaded linux-raw-sys v0.4.13
Downloaded lexopt v0.3.0
Downloaded indexmap v2.2.6
Downloaded indicatif v0.18.0
Downloaded gix-lock v18.0.0
Downloaded num-bigint-dig v0.8.4
Downloaded lazy_static v1.5.0
Downloaded quick-error v1.2.3
Downloaded chacha20 v0.9.1
Downloaded itoa v1.0.11
Downloaded gix-negotiate v0.21.0
Downloaded env_logger v0.11.8
Downloaded heck v0.5.0
Downloaded nonempty v0.9.0
Downloaded newline-converter v0.3.0
Downloaded num v0.4.3
Downloaded maybe-async v0.2.10
Downloaded litemap v0.7.5
Downloaded lock_api v0.4.14
Downloaded log v0.4.27
Downloaded derive_more-impl v2.0.1
Downloaded nu-ansi-term v0.46.0
Downloaded parking_lot_core v0.9.12
Downloaded icu_provider v1.5.0
Downloaded digest v0.10.7
Downloaded jiff-static v0.2.15
Downloaded icu_collections v1.5.0
Downloaded phf_shared v0.11.3
Downloaded pbkdf2 v0.12.2
Downloaded hashbrown v0.14.3
Downloaded paste v1.0.15
Downloaded parking_lot v0.12.5
Downloaded proc-macro-error-attr2 v2.0.0
Downloaded icu_properties_data v1.5.1
Downloaded num-rational v0.4.2
Downloaded radicle-std-ext v0.2.0
Downloaded phf v0.11.3
Downloaded quote v1.0.41
Downloaded pkg-config v0.3.30
Downloaded uuid v1.16.0
Downloaded qcheck v1.0.0
Downloaded proc-macro2 v1.0.101
Downloaded ref-cast-impl v1.0.24
Downloaded rand_xorshift v0.4.0
Downloaded rand_core v0.6.4
Downloaded pretty_assertions v1.4.0
Downloaded referencing v0.30.0
Downloaded p521 v0.13.3
Downloaded salsa20 v0.10.2
Downloaded rand_chacha v0.9.0
Downloaded outref v0.5.2
Downloaded percent-encoding v2.3.1
Downloaded num-cmp v0.1.0
Downloaded qcheck-macros v1.0.0
Downloaded same-file v1.0.6
Downloaded rfc6979 v0.4.0
Downloaded rusty-fork v0.3.1
Downloaded sem_safe v0.2.0
Downloaded signature v2.2.0
Downloaded sha2 v0.10.8
Downloaded spki v0.7.3
Downloaded signature v1.6.4
Downloaded sqlite v0.32.0
Downloaded serde_derive_internals v0.29.1
Downloaded schemars_derive v1.0.4
Downloaded sqlite3-sys v0.15.2
Downloaded sval_dynamic v2.14.1
Downloaded strsim v0.11.1
Downloaded snapbox v0.4.17
Downloaded sval_json v2.14.1
Downloaded signal-hook-registry v1.4.5
Downloaded sval v2.14.1
Downloaded sval_nested v2.14.1
Downloaded test-log v0.2.18
Downloaded tracing-log v0.2.0
Downloaded toml_writer v1.0.2
Downloaded tree-sitter-highlight v0.24.4
Downloaded timeago v0.4.2
Downloaded tinyvec_macros v0.1.1
Downloaded utf8parse v0.2.1
Downloaded utf8_iter v1.0.4
Downloaded typeid v1.0.3
Downloaded value-bag-sval2 v1.11.1
Downloaded uuid-simd v0.8.0
Downloaded thiserror v2.0.17
Downloaded zerofrom v0.1.6
Downloaded thiserror-impl v1.0.69
Downloaded thiserror v1.0.69
Downloaded zerofrom-derive v0.1.6
Downloaded tracing v0.1.41
Downloaded zerovec-derive v0.10.3
Downloaded typenum v1.17.0
Downloaded tree-sitter-go v0.23.4
Downloaded value-bag v1.11.1
Downloaded unicode-segmentation v1.11.0
Downloaded url v2.5.4
Downloaded proptest v1.9.0
Downloaded tracing-subscriber v0.3.19
Downloaded unicode-normalization v0.1.23
Downloaded serde_json v1.0.140
Downloaded zerocopy v0.7.35
Downloaded zerovec v0.10.4
Downloaded tree-sitter-python v0.23.4
Downloaded winnow v0.7.13
Downloaded zlib-rs v0.5.2
Downloaded regex-syntax v0.6.29
Downloaded regex-syntax v0.8.5
Downloaded tree-sitter-c v0.23.2
Downloaded vcpkg v0.2.15
Downloaded unicode-width v0.2.1
Downloaded tree-sitter-md v0.3.2
Downloaded libgit2-sys v0.17.0+1.8.1
Downloaded tree-sitter-rust v0.23.2
Downloaded rustix v1.0.7
Downloaded rustix v0.38.34
Downloaded tree-sitter-ruby v0.23.1
Downloaded tree-sitter-bash v0.23.3
Downloaded syn v2.0.106
Downloaded tree-sitter v0.24.4
Downloaded syn v1.0.109
Downloaded ssh-key v0.6.6
Downloaded zeroize v1.7.0
Downloaded walkdir v2.5.0
Downloaded regex-automata v0.4.9
Downloaded regex v1.11.1
Downloaded tempfile v3.23.0
Downloaded yoke v0.7.5
Downloaded tree-sitter-toml-ng v0.6.0
Downloaded sha3 v0.10.8
Downloaded tracing-core v0.1.34
Downloaded toml v0.9.5
Downloaded tar v0.4.40
Downloaded yoke-derive v0.7.5
Downloaded linux-raw-sys v0.9.4
Downloaded tokio v1.47.1
Downloaded yansi v0.5.1
Downloaded xattr v1.3.1
Downloaded writeable v0.5.5
Downloaded tree-sitter-typescript v0.23.2
Downloaded write16 v1.0.0
Downloaded wait-timeout v0.2.1
Downloaded vsimd v0.8.0
Downloaded version_check v0.9.4
Downloaded unicode-width v0.1.11
Downloaded unicode-ident v1.0.12
Downloaded tree-sitter-language v0.1.2
Downloaded tree-sitter-html v0.23.2
Downloaded tree-sitter-css v0.23.1
Downloaded value-bag-serde1 v1.11.1
Downloaded utf16_iter v1.0.5
Downloaded universal-hash v0.5.1
Downloaded unit-prefix v0.5.1
Downloaded unicode-display-width v0.3.0
Downloaded similar v2.5.0
Downloaded tree-sitter-json v0.24.8
Downloaded unarray v0.1.4
Downloaded thiserror-impl v2.0.17
Downloaded systemd-journal-logger v2.2.2
Downloaded thread_local v1.1.9
Downloaded test-log-macros v0.2.18
Downloaded sval_serde v2.14.1
Downloaded signal-hook v0.3.18
Downloaded toml_datetime v0.7.0
Downloaded tinyvec v1.6.0
Downloaded structured-logger v1.0.4
Downloaded spin v0.9.8
Downloaded rsa v0.9.6
Downloaded sval_ref v2.14.1
Downloaded shlex v1.3.0
Downloaded tinystr v0.7.6
Downloaded synstructure v0.13.1
Downloaded sharded-slab v0.1.7
Downloaded ssh-cipher v0.2.0
Downloaded sha1-checked v0.10.0
Downloaded serde v1.0.219
Downloaded subtle v2.5.0
Downloaded ssh-encoding v0.2.0
Downloaded siphasher v0.3.11
Downloaded shell-words v1.1.0
Downloaded schemars v1.0.4
Downloaded sval_fmt v2.14.1
Downloaded sval_buffer v2.14.1
Downloaded streaming-iterator v0.1.9
Downloaded socket2 v0.5.7
Downloaded signal-hook-mio v0.2.4
Downloaded serde-untagged v0.1.7
Downloaded prodash v30.0.1
Downloaded smallvec v1.15.1
Downloaded stable_deref_trait v1.2.0
Downloaded snapbox-macros v0.3.8
Downloaded object v0.36.7
Downloaded socks5-client v0.4.1
Downloaded signals_receipts v0.2.0
Downloaded serde_derive v1.0.219
Downloaded regex-automata v0.1.10
Downloaded siphasher v1.0.1
Downloaded scrypt v0.11.0
Downloaded sha1 v0.10.6
Downloaded serde_spanned v1.0.0
Downloaded serde_fmt v1.0.3
Downloaded rand v0.9.2
Downloaded radicle-surf v0.26.0
Downloaded scopeguard v1.2.0
Downloaded rustc-demangle v0.1.26
Downloaded sec1 v0.7.3
Downloaded ref-cast v1.0.24
Downloaded rand v0.8.5
Downloaded p384 v0.13.0
Downloaded rand_core v0.9.3
Downloaded ryu v1.0.17
Downloaded portable-atomic v1.11.0
Downloaded num-traits v0.2.19
Downloaded overload v0.1.1
Downloaded radicle-git-ext v0.11.0
Downloaded pkcs8 v0.10.2
Downloaded bstr v1.12.0
Downloaded rand_chacha v0.3.1
Downloaded num-integer v0.1.46
Downloaded libz-sys v1.1.16
Downloaded jiff v0.2.15
Downloaded proc-macro-error2 v2.0.1
Downloaded primeorder v0.13.6
Downloaded sqlite3-src v0.5.1
Downloaded pem-rfc7468 v0.7.0
Downloaded chrono v0.4.38
Downloaded polyval v0.6.2
Downloaded poly1305 v0.8.0
Downloaded pin-project-lite v0.2.16
Downloaded os_info v3.12.0
Downloaded num-complex v0.4.6
Downloaded mio v0.8.11
Downloaded gimli v0.31.1
Downloaded cyphernet v0.5.2
Downloaded crossterm v0.29.0
Downloaded clap_builder v4.5.44
Downloaded aho-corasick v1.1.3
Downloaded aes-gcm v0.10.3
Downloaded aes v0.8.4
Downloaded num-iter v0.1.45
Downloaded mio v1.0.4
Downloaded git2 v0.19.0
Downloaded ppv-lite86 v0.2.17
Downloaded pkcs1 v0.7.5
Downloaded p256 v0.13.2
Downloaded miniz_oxide v0.8.8
Downloaded elliptic-curve v0.13.8
Downloaded base64 v0.21.7
Downloaded once_cell v1.21.3
Downloaded fancy-regex v0.14.0
Downloaded der v0.7.9
Downloaded base64 v0.22.1
Downloaded backtrace v0.3.75
Downloaded crossbeam-channel v0.5.15
Downloaded opaque-debug v0.3.1
Downloaded jsonschema v0.30.0
Downloaded itertools v0.14.0
Downloaded idna v1.0.3
Downloaded gix-pack v0.60.0
Downloaded ahash v0.8.11
Downloaded num-bigint v0.4.6
Downloaded memchr v2.7.2
Downloaded libm v0.2.8
Downloaded inquire v0.7.5
Downloaded fraction v0.15.3
Downloaded crossterm v0.25.0
Downloaded crc32fast v1.5.0
Downloaded const-oid v0.9.6
Downloaded amplify v4.6.0
Downloaded clap_derive v4.5.41
Downloaded anyhow v1.0.82
Downloaded amplify_derive v4.0.0
Downloaded cbc v0.1.2
Downloaded icu_properties v1.5.1
Downloaded iana-time-zone v0.1.60
Downloaded gix-diff v0.53.0
Downloaded env_filter v0.1.3
Downloaded icu_normalizer_data v1.5.1
Downloaded icu_normalizer v1.5.0
Downloaded hashbrown v0.15.5
Downloaded gix-object v0.50.2
Downloaded gix-features v0.43.1
Downloaded getrandom v0.3.3
Downloaded chacha20poly1305 v0.10.1
Downloaded bitflags v2.9.1
Downloaded ascii v1.1.0
Downloaded memmap2 v0.9.8
Downloaded litrs v0.4.1
Downloaded gix-revision v0.35.0
Downloaded escargot v0.5.10
Downloaded displaydoc v0.2.5
Downloaded crypto-common v0.1.6
Downloaded cipher v0.4.4
Downloaded bytecount v0.6.8
Downloaded amplify_num v0.5.2
Downloaded anstream v0.6.13
Downloaded amplify_syn v2.0.1
Downloaded libz-rs-sys v0.5.2
Downloaded gix-commitgraph v0.29.0
Downloaded equivalent v1.0.1
Downloaded dunce v1.0.5
Downloaded block-padding v0.3.3
Downloaded gix-url v0.32.0
Downloaded gix-revwalk v0.21.0
Downloaded gix-refspec v0.31.0
Downloaded gix-fs v0.16.1
Downloaded either v1.11.0
Downloaded inout v0.1.3
Downloaded group v0.13.0
Downloaded gix-traverse v0.47.0
Downloaded document-features v0.2.11
Downloaded colorchoice v1.0.0
Downloaded bcrypt-pbkdf v0.10.0
Downloaded home v0.5.9
Downloaded gix-tempfile v18.0.0
Downloaded form_urlencoded v1.2.1
Downloaded normalize-line-endings v0.3.0
Downloaded noise-framework v0.4.0
Downloaded multibase v0.9.1
Downloaded matchers v0.1.0
Downloaded idna_adapter v1.2.0
Downloaded gix-config-value v0.15.1
Downloaded fast-glob v0.3.3
Downloaded cyphergraphy v0.3.0
Downloaded gix-utils v0.3.0
Downloaded git-ref-format-core v0.6.0
Downloaded emojis v0.6.4
Downloaded ed25519 v1.5.3
Downloaded ct-codecs v1.1.1
Downloaded crossbeam-utils v0.8.19
Downloaded anstyle-parse v0.2.3
Downloaded human-panic v2.0.3
Downloaded gix-prompt v0.11.1
Downloaded fastrand v2.3.0
Downloaded bit-set v0.8.0
Downloaded base32 v0.4.0
Downloaded autocfg v1.2.0
Downloaded anstyle-query v1.0.2
Downloaded gix-validate v0.10.0
Downloaded fnv v1.0.7
Downloaded adler2 v2.0.0
Downloaded errno v0.3.13
Downloaded erased-serde v0.4.6
Downloaded email_address v0.2.9
Downloaded data-encoding-macro v0.1.14
Downloaded crypto-bigint v0.5.5
Downloaded convert_case v0.7.1
Downloaded anstyle v1.0.11
Downloaded keccak v0.1.5
Downloaded gix-trace v0.1.13
Downloaded ctr v0.9.2
Downloaded base64ct v1.6.0
Downloaded base16ct v0.2.0
Downloaded ec25519 v0.1.0
Downloaded diff v0.1.13
Downloaded clap_complete v4.5.60
Downloaded base-x v0.2.11
Downloaded faster-hex v0.10.0
Downloaded ecdsa v0.16.9
Downloaded cypheraddr v0.4.0
Downloaded clap_lex v0.7.5
Downloaded bytes v1.10.1
Downloaded aead v0.5.2
Downloaded gix-command v0.6.2
Downloaded gix-chunk v0.4.11
Downloaded data-encoding-macro-internal v0.1.12
Downloaded data-encoding v2.5.0
Downloaded colored v2.1.0
Downloaded clap v4.5.44
Downloaded byteorder v1.5.0
Downloaded block-buffer v0.10.4
Downloaded heapless v0.8.0
Downloaded hash32 v0.3.1
Downloaded gix-ref v0.53.1
Downloaded gix-path v0.10.20
Downloaded gix-packetline v0.19.1
Downloaded gix-hashtable v0.9.0
Downloaded gix-hash v0.19.0
Downloaded gix-date v0.10.5
Downloaded gix-credentials v0.30.0
Downloaded gix-actor v0.35.4
Downloaded git-ref-format v0.6.0
Downloaded getrandom v0.2.15
Downloaded fluent-uri v0.3.2
Downloaded derive_more v2.0.1
Downloaded cc v1.2.2
Downloaded bytesize v2.0.1
Downloaded icu_provider_macros v1.5.0
Downloaded icu_locid_transform_data v1.5.1
Downloaded icu_locid_transform v1.5.0
Downloaded icu_locid v1.5.0
Downloaded hmac v0.12.1
Downloaded gix-shallow v0.5.0
Downloaded gix-sec v0.12.0
Downloaded gix-quote v0.6.0
Downloaded gix-protocol v0.51.0
Downloaded git-ref-format-macro v0.6.0
Downloaded ghash v0.5.1
Downloaded cpufeatures v0.2.12
Downloaded console v0.16.0
Downloaded cfg-if v1.0.0
Downloaded borrow-or-share v0.2.2
Downloaded blowfish v0.9.1
Downloaded bloomy v1.2.0
Downloaded bitflags v1.3.2
Downloaded bit-vec v0.8.0
Downloaded ff v0.13.0
Downloaded gix-odb v0.70.0
Downloaded filetime v0.2.23
Downloaded arc-swap v1.7.1
Downloaded addr2line v0.24.2
Downloaded fxhash v0.2.1
Compiling libc v0.2.174
Compiling proc-macro2 v1.0.101
Compiling quote v1.0.41
Compiling unicode-ident v1.0.12
Checking cfg-if v1.0.0
Compiling shlex v1.3.0
Compiling version_check v0.9.4
Checking memchr v2.7.2
Compiling typenum v1.17.0
Checking getrandom v0.2.15
Compiling jobserver v0.1.31
Compiling generic-array v0.14.7
Compiling syn v2.0.106
Compiling cc v1.2.2
Checking rand_core v0.6.4
Compiling serde v1.0.219
Checking regex-syntax v0.8.5
Checking crypto-common v0.1.6
Checking aho-corasick v1.1.3
Checking smallvec v1.15.1
Compiling thiserror v2.0.17
Checking subtle v2.5.0
Checking once_cell v1.21.3
Checking stable_deref_trait v1.2.0
Checking cpufeatures v0.2.12
Checking fastrand v2.3.0
Checking regex-automata v0.4.9
Compiling parking_lot_core v0.9.12
Checking scopeguard v1.2.0
Checking lock_api v0.4.14
Checking block-buffer v0.10.4
Checking parking_lot v0.12.5
Checking digest v0.10.7
Compiling crc32fast v1.5.0
Checking tinyvec_macros v0.1.1
Checking bitflags v2.9.1
Checking byteorder v1.5.0
Checking tinyvec v1.6.0
Compiling typeid v1.0.3
Checking gix-trace v0.1.13
Checking home v0.5.9
Compiling synstructure v0.13.1
Checking unicode-normalization v0.1.23
Checking gix-utils v0.3.0
Checking zlib-rs v0.5.2
Checking same-file v1.0.6
Checking walkdir v2.5.0
Checking bstr v1.12.0
Checking prodash v30.0.1
Checking itoa v1.0.11
Compiling getrandom v0.3.3
Compiling heapless v0.8.0
Checking libz-rs-sys v0.5.2
Checking hash32 v0.3.1
Compiling serde_derive v1.0.219
Compiling thiserror-impl v2.0.17
Compiling zerofrom-derive v0.1.6
Checking flate2 v1.1.1
Compiling yoke-derive v0.7.5
Checking gix-validate v0.10.0
Checking zerofrom v0.1.6
Compiling zerovec-derive v0.10.3
Checking gix-path v0.10.20
Checking yoke v0.7.5
Checking gix-features v0.43.1
Compiling displaydoc v0.2.5
Checking zeroize v1.7.0
Checking litemap v0.7.5
Checking zerovec v0.10.4
Compiling rustix v1.0.7
Compiling pkg-config v0.3.30
Compiling icu_locid_transform_data v1.5.1
Checking writeable v0.5.5
Checking faster-hex v0.10.0
Compiling icu_provider_macros v1.5.0
Checking tinystr v0.7.6
Compiling icu_properties_data v1.5.1
Checking linux-raw-sys v0.9.4
Checking icu_locid v1.5.0
Checking sha1 v0.10.6
Checking icu_provider v1.5.0
Checking block-padding v0.3.3
Compiling icu_normalizer_data v1.5.1
Checking icu_locid_transform v1.5.0
Checking inout v0.1.3
Checking sha1-checked v0.10.0
Checking icu_collections v1.5.0
Compiling syn v1.0.109
Checking icu_properties v1.5.1
Checking gix-hash v0.19.0
Checking cipher v0.4.4
Checking erased-serde v0.4.6
Checking serde_fmt v1.0.3
Checking write16 v1.0.0
Checking utf8_iter v1.0.4
Checking utf16_iter v1.0.5
Checking value-bag-serde1 v1.11.1
Checking value-bag v1.11.1
Checking log v0.4.27
Checking percent-encoding v2.3.1
Compiling thiserror v1.0.69
Checking icu_normalizer v1.5.0
Compiling thiserror-impl v1.0.69
Checking form_urlencoded v1.2.1
Checking idna_adapter v1.2.0
Checking sha2 v0.10.8
Checking idna v1.0.3
Compiling vcpkg v0.2.15
Checking url v2.5.4
Checking tempfile v3.23.0
Compiling libz-sys v1.1.16
Checking universal-hash v0.5.1
Compiling serde_json v1.0.140
Checking opaque-debug v0.3.1
Checking hashbrown v0.14.3
Checking equivalent v1.0.1
Checking ryu v1.0.17
Compiling autocfg v1.2.0
Compiling ref-cast v1.0.24
Checking indexmap v2.2.6
Compiling num-traits v0.2.19
Compiling amplify_syn v2.0.1
Compiling libgit2-sys v0.17.0+1.8.1
Compiling ref-cast-impl v1.0.24
Checking signature v1.6.4
Compiling amplify_derive v4.0.0
Checking ed25519 v1.5.3
Checking aead v0.5.2
Checking amplify_num v0.5.2
Checking dyn-clone v1.0.17
Checking ct-codecs v1.1.1
Checking ascii v1.1.0
Checking ec25519 v0.1.0
Checking git-ref-format-core v0.6.0
Checking amplify v4.6.0
Checking poly1305 v0.8.0
Checking chacha20 v0.9.1
Checking polyval v0.6.2
Checking cyphergraphy v0.3.0
Compiling sqlite3-src v0.5.1
Compiling serde_derive_internals v0.29.1
Checking hmac v0.12.1
Checking keccak v0.1.5
Checking base64ct v1.6.0
Checking sha3 v0.10.8
Checking pbkdf2 v0.12.2
Checking pem-rfc7468 v0.7.0
Checking ghash v0.5.1
Checking ctr v0.9.2
Checking aes v0.8.4
Compiling schemars_derive v1.0.4
Checking rand v0.8.5
Compiling data-encoding v2.5.0
Checking base32 v0.4.0
Checking cypheraddr v0.4.0
Checking schemars v1.0.4
Compiling data-encoding-macro-internal v0.1.12
Checking qcheck v1.0.0
Checking aes-gcm v0.10.3
Checking ssh-encoding v0.2.0
Checking chacha20poly1305 v0.10.1
Checking cbc v0.1.2
Checking blowfish v0.9.1
Checking bcrypt-pbkdf v0.10.0
Checking ssh-cipher v0.2.0
Checking data-encoding-macro v0.1.14
Checking noise-framework v0.4.0
Checking socks5-client v0.4.1
Checking signature v2.2.0
Compiling crossbeam-utils v0.8.19
Checking base-x v0.2.11
Checking multibase v0.9.1
Checking ssh-key v0.6.6
Checking cyphernet v0.5.2
Checking radicle-ssh v0.10.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-ssh)
Checking lazy_static v1.5.0
Checking jiff v0.2.15
Checking crossbeam-channel v0.5.15
Checking nonempty v0.9.0
Checking siphasher v1.0.1
Checking anstyle-query v1.0.2
Checking radicle-git-metadata v0.1.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-git-metadata)
Checking radicle-dag v0.10.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-dag)
Checking winnow v0.7.13
Checking hashbrown v0.15.5
Checking utf8parse v0.2.1
Checking gix-date v0.10.5
Checking anstyle-parse v0.2.3
Checking gix-actor v0.35.4
Checking gix-hashtable v0.9.0
Checking radicle-git-ref-format v0.1.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-git-ref-format)
Checking colorchoice v1.0.0
Checking anstyle v1.0.11
Checking iana-time-zone v0.1.60
Checking base64 v0.21.7
Checking chrono v0.4.38
Checking anstream v0.6.13
Checking gix-object v0.50.2
Checking colored v2.1.0
Checking radicle-localtime v0.1.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-localtime)
Checking serde-untagged v0.1.7
Checking bytesize v2.0.1
Checking memmap2 v0.9.8
Checking tree-sitter-language v0.1.2
Checking dunce v1.0.5
Checking fast-glob v0.3.3
Checking gix-chunk v0.4.11
Checking gix-fs v0.16.1
Checking gix-commitgraph v0.29.0
Checking gix-tempfile v18.0.0
Checking mio v1.0.4
Checking gix-revwalk v0.21.0
Checking gix-quote v0.6.0
Checking sem_safe v0.2.0
Checking errno v0.3.13
Checking either v1.11.0
Checking shell-words v1.1.0
Checking gix-command v0.6.2
Checking signals_receipts v0.2.0
Compiling signal-hook v0.3.18
Compiling object v0.36.7
Checking gix-lock v18.0.0
Checking gix-url v0.32.0
Checking gix-config-value v0.15.1
Checking gix-sec v0.12.0
Checking signal-hook-registry v1.4.5
Checking adler2 v2.0.0
Checking gimli v0.31.1
Compiling rustix v0.38.34
Checking miniz_oxide v0.8.8
Checking gix-prompt v0.11.1
Checking addr2line v0.24.2
Checking radicle-signals v0.11.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-signals)
Checking gix-revision v0.35.0
Checking gix-traverse v0.47.0
Checking gix-diff v0.53.0
Checking mio v0.8.11
Checking gix-packetline v0.19.1
Compiling tree-sitter v0.24.4
Compiling anyhow v1.0.82
Compiling linux-raw-sys v0.4.13
Compiling unicode-segmentation v1.11.0
Checking rustc-demangle v0.1.26
Checking backtrace v0.3.75
Compiling convert_case v0.7.1
Checking gix-transport v0.48.0
Checking signal-hook-mio v0.2.4
Checking gix-pack v0.60.0
Checking gix-refspec v0.31.0
Checking gix-credentials v0.30.0
Checking gix-shallow v0.5.0
Checking gix-ref v0.53.1
Checking gix-negotiate v0.21.0
Compiling maybe-async v0.2.10
Checking regex v1.11.1
Compiling proc-macro-error-attr2 v2.0.0
Compiling portable-atomic v1.11.0
Checking arc-swap v1.7.1
Checking gix-odb v0.70.0
Compiling proc-macro-error2 v2.0.1
Checking gix-protocol v0.51.0
Compiling xattr v1.3.1
Compiling derive_more-impl v2.0.1
Compiling filetime v0.2.23
Checking uuid v1.16.0
Checking unicode-width v0.2.1
Checking bitflags v1.3.2
Checking bytes v1.10.1
Compiling litrs v0.4.1
Checking console v0.16.0
Compiling document-features v0.2.11
Checking crossterm v0.25.0
Checking derive_more v2.0.1
Compiling tar v0.4.40
Compiling git-ref-format-macro v0.6.0
Checking newline-converter v0.3.0
Checking snapbox-macros v0.3.8
Checking salsa20 v0.10.2
Checking fxhash v0.2.1
Compiling heck v0.5.0
Checking unit-prefix v0.5.1
Checking sqlite3-sys v0.15.2
Checking sqlite v0.32.0
Checking streaming-iterator v0.1.9
Checking clap_lex v0.7.5
Checking radicle-crypto v0.14.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-crypto)
Checking siphasher v0.3.11
Checking unicode-width v0.1.11
Checking similar v2.5.0
Checking strsim v0.11.1
Checking normalize-line-endings v0.3.0
Checking clap_builder v4.5.44
Checking inquire v0.7.5
Checking snapbox v0.4.17
Checking bloomy v1.2.0
Compiling clap_derive v4.5.41
Checking indicatif v0.18.0
Compiling radicle-surf v0.26.0
Checking scrypt v0.11.0
Checking git-ref-format v0.6.0
Checking crossterm v0.29.0
Checking unicode-display-width v0.3.0
Checking systemd-journal-logger v2.2.2
Checking serde_spanned v1.0.0
Checking toml_datetime v0.7.0
Compiling tree-sitter-rust v0.23.2
Compiling tree-sitter-typescript v0.23.2
Compiling tree-sitter-css v0.23.1
Compiling tree-sitter-ruby v0.23.1
Compiling tree-sitter-toml-ng v0.6.0
Compiling tree-sitter-python v0.23.4
Compiling tree-sitter-go v0.23.4
Compiling tree-sitter-c v0.23.2
Compiling tree-sitter-bash v0.23.3
Compiling tree-sitter-json v0.24.8
Compiling tree-sitter-html v0.23.2
Compiling tree-sitter-md v0.3.2
Checking radicle-std-ext v0.2.0
Checking toml_writer v1.0.2
Checking pin-project-lite v0.2.16
Checking tokio v1.47.1
Checking toml v0.9.5
Checking clap v4.5.44
Checking os_info v3.12.0
Checking yansi v0.5.1
Compiling radicle-cli v0.17.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-cli)
Compiling radicle-node v0.16.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-node)
Checking diff v0.1.13
Checking pretty_assertions v1.4.0
Checking human-panic v2.0.3
Checking clap_complete v4.5.60
Checking structured-logger v1.0.4
Checking radicle-systemd v0.11.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-systemd)
Checking tree-sitter-highlight v0.24.4
Checking itertools v0.14.0
Checking num-integer v0.1.46
Compiling qcheck-macros v1.0.0
Checking socket2 v0.5.7
Checking lexopt v0.3.0
Compiling escargot v0.5.10
Checking timeago v0.4.2
Checking bit-vec v0.8.0
Checking bit-set v0.8.0
Checking num-bigint v0.4.6
Checking rand_core v0.9.3
Compiling ahash v0.8.11
Checking num-iter v0.1.45
Checking num-complex v0.4.6
Checking env_filter v0.1.3
Checking borrow-or-share v0.2.2
Checking zerocopy v0.7.35
Checking fluent-uri v0.3.2
Checking num-rational v0.4.2
Checking env_logger v0.11.8
Checking phf_shared v0.11.3
Checking num v0.4.3
Compiling test-log-macros v0.2.18
Checking wait-timeout v0.2.1
Compiling paste v1.0.15
Checking fnv v1.0.7
Checking vsimd v0.8.0
Checking ppv-lite86 v0.2.17
Compiling radicle-remote-helper v0.14.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-remote-helper)
Checking quick-error v1.2.3
Checking outref v0.5.2
Checking uuid-simd v0.8.0
Checking rusty-fork v0.3.1
Checking rand_chacha v0.9.0
Checking test-log v0.2.18
Checking phf v0.11.3
Checking fraction v0.15.3
Checking referencing v0.30.0
Checking rand_xorshift v0.4.0
Checking rand v0.9.2
Checking fancy-regex v0.14.0
Checking email_address v0.2.9
Checking bytecount v0.6.8
Checking num-cmp v0.1.0
Checking base64 v0.22.1
Checking unarray v0.1.4
Checking proptest v1.9.0
Checking emojis v0.6.4
Checking jsonschema v0.30.0
Checking git2 v0.19.0
Checking radicle-oid v0.1.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-oid)
Checking radicle-git-ext v0.11.0
Checking radicle-term v0.16.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-term)
Checking radicle-cob v0.17.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-cob)
Checking radicle-core v0.1.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-core)
Checking radicle v0.20.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle)
Checking radicle-fetch v0.16.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-fetch)
Checking radicle-cli-test v0.13.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-cli-test)
Checking radicle-schemars v0.6.0 (/656f78e9-0537-45a4-b7f8-0f972e3169c8/w/crates/radicle-schemars)
error: large size difference between variants
--> crates/radicle-schemars/src/main.rs:85:13
|
85 | / enum CommandResult {
86 | | Nid(
87 | | #[schemars(with = "radicle::schemars_ext::crypto::PublicKey")]
88 | | radicle::node::NodeId,
89 | | ),
90 | | Config(radicle::node::Config),
| | ----------------------------- the largest variant contains at least 448 bytes
... |
98 | | Session(Option<radicle::node::Session>),
| | --------------------------------------- the second-largest variant contains at least 240 bytes
99 | | Error(Error),
100 | | }
| |_____________^ the entire enum is at least 448 bytes
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant
= note: `-D clippy::large-enum-variant` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::large_enum_variant)]`
help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum
|
90 - Config(radicle::node::Config),
90 + Config(Box<radicle::node::Config>),
|
error: could not compile `radicle-schemars` (bin "radicle-schemars" test) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
Exit code: 101
{
"response": "finished",
"result": "failure"
}