rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwood1473ff5e1deb16c5bc203b7bf566008ff32e9a3c
{
"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:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz"
]
},
"action": "Created",
"patch": {
"id": "3be0e68b8948e65431a288f225454bafd93de34a",
"author": {
"id": "did:key:z6MkqLaY4fyQUyrQ263g9Ckccs8hUs1PepsVEAgtvjr8xo5K",
"alias": "stemporus"
},
"title": "cli: Allow specifying multiple rids to the seed command",
"state": {
"status": "merged",
"conflicts": []
},
"before": "f13afe491d169004159a033c4ad7548a7ba76271",
"after": "1473ff5e1deb16c5bc203b7bf566008ff32e9a3c",
"commits": [
"1473ff5e1deb16c5bc203b7bf566008ff32e9a3c",
"d788677c07e3f1d5d6a1f51dfb7b0cb8377f1819"
],
"target": "7e1cb406bb935c3de008d2171e8961f57b4336ea",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "3be0e68b8948e65431a288f225454bafd93de34a",
"author": {
"id": "did:key:z6MkqLaY4fyQUyrQ263g9Ckccs8hUs1PepsVEAgtvjr8xo5K",
"alias": "stemporus"
},
"description": "Implements issue f9ec8a2ee4d52dd7102b001f92f9bea2a96322f9",
"base": "f13afe491d169004159a033c4ad7548a7ba76271",
"oid": "d788677c07e3f1d5d6a1f51dfb7b0cb8377f1819",
"timestamp": 1745522245
},
{
"id": "d3e99259c76bb4e5d6d80a58dcd5f7b4cd03075a",
"author": {
"id": "did:key:z6MkqLaY4fyQUyrQ263g9Ckccs8hUs1PepsVEAgtvjr8xo5K",
"alias": "stemporus"
},
"description": "change to a single loop over rids ops\n\nThis should make the output a little more obvious for each rid being\nseeded.",
"base": "f13afe491d169004159a033c4ad7548a7ba76271",
"oid": "1473ff5e1deb16c5bc203b7bf566008ff32e9a3c",
"timestamp": 1745522835
},
{
"id": "bcc2d21e9fae5f1cfc71bc7dbb2cbbc6c2ea29b2",
"author": {
"id": "did:key:z6MkqLaY4fyQUyrQ263g9Ckccs8hUs1PepsVEAgtvjr8xo5K",
"alias": "stemporus"
},
"description": "Changes:\n- Use `NonEmpty` for RIDs\n- Ensure that a failed fetch does not exit\n- Add a CLI test to ensure it works\n- Use `for` directly rather than `iter().copied()`",
"base": "f13afe491d169004159a033c4ad7548a7ba76271",
"oid": "18497b8bbd967d4d597b999af63cb0237ab9f566",
"timestamp": 1745587961
},
{
"id": "95f0e3b2ab968199c82691536ab562cc14b82c59",
"author": {
"id": "did:key:z6MkqLaY4fyQUyrQ263g9Ckccs8hUs1PepsVEAgtvjr8xo5K",
"alias": "stemporus"
},
"description": "Changes:\n- Change help doc to `[<rid>...]`\n- Remove `eprintln`s",
"base": "f13afe491d169004159a033c4ad7548a7ba76271",
"oid": "f13afe491d169004159a033c4ad7548a7ba76271",
"timestamp": 1745604306
},
{
"id": "49512f5ecc0887293c69cfd5d0acb1384da52b0c",
"author": {
"id": "did:key:z6MkqLaY4fyQUyrQ263g9Ckccs8hUs1PepsVEAgtvjr8xo5K",
"alias": "stemporus"
},
"description": "Changes:\n- Accidentally pushed master :facepalm:",
"base": "f13afe491d169004159a033c4ad7548a7ba76271",
"oid": "44db61ede60dc15cdf3ece05789a844e47a212fb",
"timestamp": 1745604380
},
{
"id": "78ae2da00934513cd5266b753576550fca5947ab",
"author": {
"id": "did:key:z6MkqLaY4fyQUyrQ263g9Ckccs8hUs1PepsVEAgtvjr8xo5K",
"alias": "stemporus"
},
"description": "Rebase",
"base": "a90aabb1fe2c5d6d969f6c3236f45f93bc6bf3c4",
"oid": "6bbe919c4b6ab9639b1130b12f83457f9fafa61c",
"timestamp": 1745653633
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "87990d92-74b1-4f54-99d5-b9db2a1ce946"
},
"info_url": "https://cci.rad.levitte.org//87990d92-74b1-4f54-99d5-b9db2a1ce946.html"
}
Started at: 2026-09-09 00:02:05.528751+02:00
Commands:
$ rad clone rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 .
✓ Creating checkout in ./...
✓ Remote cloudhead@z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT added
✓ Remote-tracking branch cloudhead@z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT/master created for z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT
✓ Remote fintohaps@z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM added
✓ Remote-tracking branch fintohaps@z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM/master created for z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM
✓ 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/87990d92-74b1-4f54-99d5-b9db2a1ce946/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 189 issues · 39 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout 3be0e68b8948e65431a288f225454bafd93de34a
✓ Switched to branch patch/3be0e68 at revision d3e9925
✓ Branch patch/3be0e68 setup to track rad/patches/3be0e68b8948e65431a288f225454bafd93de34a
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout 1473ff5e1deb16c5bc203b7bf566008ff32e9a3c
HEAD is now at 1473ff5e change to a single loop over rids ops
Exit code: 0
$ rad patch show 3be0e68b8948e65431a288f225454bafd93de34a -p
╭───────────────────────────────────────────────────────────────────────────────╮
│ Title cli: Allow specifying multiple rids to the seed command │
│ Patch 3be0e68b8948e65431a288f225454bafd93de34a │
│ Author stemporus z6MkqLa…jr8xo5K │
│ Head 1473ff5e1deb16c5bc203b7bf566008ff32e9a3c │
│ Base f13afe491d169004159a033c4ad7548a7ba76271 │
│ Target master │
│ Branches patch/3be0e68 │
│ Commits ahead 2, behind 1086 │
│ Status merged │
│ │
│ Implements issue f9ec8a2ee4d52dd7102b001f92f9bea2a96322f9 │
├───────────────────────────────────────────────────────────────────────────────┤
│ 1473ff5 change to a single loop over rids ops │
│ d788677 Allow specifying multiple rids to the seed command │
├───────────────────────────────────────────────────────────────────────────────┤
│ ● Revision 3be0e68 @ f13afe4..d788677 by stemporus z6MkqLa…jr8xo5K 1 year ago │
│ ↑ Revision d3e9925 @ f13afe4..1473ff5 by stemporus z6MkqLa…jr8xo5K 1 year ago │
│ └─ ⋄ reviewed by stemporus z6MkqLa…jr8xo5K 1 year ago │
│ ↑ Revision bcc2d21 @ f13afe4..18497b8 by fintohaps z6Mkire…SQZ3voM 1 year ago │
│ ↑ Revision 95f0e3b @ f13afe4..f13afe4 by fintohaps z6Mkire…SQZ3voM 1 year ago │
│ └─ ✓ merged by fintohaps z6Mkire…SQZ3voM │
│ ↑ Revision 49512f5 @ f13afe4..44db61e by fintohaps z6Mkire…SQZ3voM 1 year ago │
│ ↑ Revision 78ae2da @ a90aabb..6bbe919 by lorenz z6MkkPv…WX5sTEz 1 year ago │
╰───────────────────────────────────────────────────────────────────────────────╯
commit 1473ff5e1deb16c5bc203b7bf566008ff32e9a3c
Author: Sekhat Temporus <sekhat@temporus.me>
Date: Thu Apr 24 20:25:14 2025 +0100
change to a single loop over rids ops
This should make the output a little more obvious for each rid being
seeded.
diff --git a/radicle-cli/src/commands/seed.rs b/radicle-cli/src/commands/seed.rs
index 055e493288..976a648240 100644
--- a/radicle-cli/src/commands/seed.rs
+++ b/radicle-cli/src/commands/seed.rs
@@ -146,10 +146,8 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
} => {
for rid in rids.iter().copied() {
update(rid, scope, &mut node, &profile)?;
- }
- if fetch && node.is_running() {
- for rid in rids.iter().copied() {
+ if fetch && node.is_running() {
sync::fetch(
rid,
SyncSettings::default()
@@ -180,7 +178,10 @@ pub fn update(
if let Ok(repo) = profile.storage.repository(rid) {
if repo.identity_doc()?.is_public() {
profile.add_inventory(rid, node)?;
- term::success!("Inventory updated with {}", term::format::tertiary(rid));
+ term::success!(
+ "Inventory updated with {}",
+ term::format::tertiary(rid)
+ );
}
}
commit d788677c07e3f1d5d6a1f51dfb7b0cb8377f1819
Author: Sekhat Temporus <sekhat@temporus.me>
Date: Thu Apr 24 20:13:42 2025 +0100
Allow specifying multiple rids to the seed command
Implements issue f9ec8a2ee4d52dd7102b001f92f9bea2a96322f9
diff --git a/radicle-cli/src/commands/seed.rs b/radicle-cli/src/commands/seed.rs
index 507566b284..055e493288 100644
--- a/radicle-cli/src/commands/seed.rs
+++ b/radicle-cli/src/commands/seed.rs
@@ -22,7 +22,7 @@ pub const HELP: Help = Help {
usage: r#"
Usage
- rad seed [<rid>] [--[no-]fetch] [--from <nid>] [--scope <scope>] [<option>...]
+ rad seed [<rid> [<rid>...]] [--[no-]fetch] [--from <nid>] [--scope <scope>] [<option>...]
The `seed` command, when no Repository ID (<rid>) is provided, will list the
repositories being seeded.
@@ -49,7 +49,7 @@ Options
#[derive(Debug)]
pub enum Operation {
Seed {
- rid: RepoId,
+ rids: Vec<RepoId>,
fetch: bool,
seeds: BTreeSet<NodeId>,
timeout: time::Duration,
@@ -69,7 +69,7 @@ impl Args for Options {
use lexopt::prelude::*;
let mut parser = lexopt::Parser::from_args(args);
- let mut rid: Option<RepoId> = None;
+ let mut rids: Option<Vec<RepoId>> = None;
let mut scope: Option<Scope> = None;
let mut fetch: Option<bool> = None;
let mut timeout = time::Duration::from_secs(9);
@@ -79,7 +79,11 @@ impl Args for Options {
while let Some(arg) = parser.next()? {
match &arg {
Value(val) => {
- rid = Some(term::args::rid(val)?);
+ let rid = term::args::rid(val)?;
+ let mut vec = rids.unwrap_or_else(|| Vec::new());
+ vec.push(rid);
+
+ rids = Some(vec);
}
Long("scope") => {
let val = parser.value()?;
@@ -113,9 +117,9 @@ impl Args for Options {
}
}
- let op = match rid {
- Some(rid) => Operation::Seed {
- rid,
+ let op = match rids {
+ Some(rids) => Operation::Seed {
+ rids,
fetch: fetch.unwrap_or(true),
scope: scope.unwrap_or(Scope::All),
timeout,
@@ -134,24 +138,28 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
match options.op {
Operation::Seed {
- rid,
+ rids,
fetch,
scope,
timeout,
seeds,
} => {
- update(rid, scope, &mut node, &profile)?;
+ for rid in rids.iter().copied() {
+ update(rid, scope, &mut node, &profile)?;
+ }
if fetch && node.is_running() {
- sync::fetch(
- rid,
- SyncSettings::default()
- .seeds(seeds)
- .timeout(timeout)
- .with_profile(&profile),
- &mut node,
- &profile,
- )?;
+ for rid in rids.iter().copied() {
+ sync::fetch(
+ rid,
+ SyncSettings::default()
+ .seeds(seeds.clone())
+ .timeout(timeout)
+ .with_profile(&profile),
+ &mut node,
+ &profile,
+ )?;
+ }
}
}
Operation::List => seeding(&profile)?,
Exit code: 0
shell: 'cargo --version rustc --version cargo fmt --check cargo clippy --all-targets --workspace -- --deny warnings cargo build --all-targets --workspace cargo doc --workspace --no-deps cargo test --workspace --no-fail-fast '
Commands:
$ podman run --name 87990d92-74b1-4f54-99d5-b9db2a1ce946 -v /opt/radcis/ci.rad.levitte.org/cci/state/87990d92-74b1-4f54-99d5-b9db2a1ce946/s:/87990d92-74b1-4f54-99d5-b9db2a1ce946/s:ro -v /opt/radcis/ci.rad.levitte.org/cci/state/87990d92-74b1-4f54-99d5-b9db2a1ce946/w:/87990d92-74b1-4f54-99d5-b9db2a1ce946/w -w /87990d92-74b1-4f54-99d5-b9db2a1ce946/w -v /opt/radcis/ci.rad.levitte.org/.radicle:/${id}/.radicle:ro -e RAD_HOME=/${id}/.radicle rust:trixie bash /87990d92-74b1-4f54-99d5-b9db2a1ce946/s/script.sh
+ cargo --version
info: syncing channel updates for '1.85-x86_64-unknown-linux-gnu'
info: latest update on 2025-03-18, rust version 1.85.1 (4eb161250 2025-03-15)
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.85.1 (d73d2caf9 2024-12-31)
+ rustc --version
rustc 1.85.1 (4eb161250 2025-03-15)
+ cargo fmt --check
Diff in /87990d92-74b1-4f54-99d5-b9db2a1ce946/w/radicle-cli/src/commands/seed.rs:178:
if let Ok(repo) = profile.storage.repository(rid) {
if repo.identity_doc()?.is_public() {
profile.add_inventory(rid, node)?;
- term::success!(
- "Inventory updated with {}",
- term::format::tertiary(rid)
- );
+ term::success!("Inventory updated with {}", term::format::tertiary(rid));
}
}
Exit code: 1
{
"response": "finished",
"result": "failure"
}