rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwood220627949255de53d6ce2772740200b1a64f08c9
{
"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": "1f62d893f764f2ec4b6f99566c65ccffbc53b187",
"author": {
"id": "did:key:z6MkkfM3tPXNPrPevKr3uSiQtHPuwnNhu2yUVjgd2jXVsVz5",
"alias": "sebastinez"
},
"title": "httpd: Add alias to project delegates",
"state": {
"status": "merged",
"conflicts": []
},
"before": "0c93a1c1a4bf141412700c55a7ab3615d4110446",
"after": "220627949255de53d6ce2772740200b1a64f08c9",
"commits": [
"220627949255de53d6ce2772740200b1a64f08c9",
"ac7786a862c121331aa740ed49336c5aefc9a221"
],
"target": "7e1cb406bb935c3de008d2171e8961f57b4336ea",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "1f62d893f764f2ec4b6f99566c65ccffbc53b187",
"author": {
"id": "did:key:z6MkkfM3tPXNPrPevKr3uSiQtHPuwnNhu2yUVjgd2jXVsVz5",
"alias": "sebastinez"
},
"description": "",
"base": "a3ffe51ddf28e564dccf1558e2c3fdf4c62278f7",
"oid": "5ae909a2d5280bac2bd13e3c5f92135e2eea3ba8",
"timestamp": 1714381198
},
{
"id": "c736c698e067033f079157e0b438bbb5baf134cd",
"author": {
"id": "did:key:z6MkkfM3tPXNPrPevKr3uSiQtHPuwnNhu2yUVjgd2jXVsVz5",
"alias": "sebastinez"
},
"description": "Rebase",
"base": "0c93a1c1a4bf141412700c55a7ab3615d4110446",
"oid": "ac7786a862c121331aa740ed49336c5aefc9a221",
"timestamp": 1714381557
},
{
"id": "1b294a9da724c231a7978909d234ca3296ecc2a2",
"author": {
"id": "did:key:z6MkkfM3tPXNPrPevKr3uSiQtHPuwnNhu2yUVjgd2jXVsVz5",
"alias": "sebastinez"
},
"description": "httpd: Add threshold to project info",
"base": "0c93a1c1a4bf141412700c55a7ab3615d4110446",
"oid": "220627949255de53d6ce2772740200b1a64f08c9",
"timestamp": 1714484947
},
{
"id": "d9cb475ded074f661df0be36ebdf37c06e4e4199",
"author": {
"id": "did:key:z6MkkfM3tPXNPrPevKr3uSiQtHPuwnNhu2yUVjgd2jXVsVz5",
"alias": "sebastinez"
},
"description": "Rebase.",
"base": "a9b94b0ad671e4d8e3129b1e2da86325a114896f",
"oid": "d04d9d7d1fb0329b62673ee9ec25b1a2081316ee",
"timestamp": 1714653796
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "20b3a732-62e9-4c67-a3d7-311a62398686"
},
"info_url": "https://cci.rad.levitte.org//20b3a732-62e9-4c67-a3d7-311a62398686.html"
}
Started at: 2026-09-08 21:39:37.589364+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/20b3a732-62e9-4c67-a3d7-311a62398686/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 189 issues · 39 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout 1f62d893f764f2ec4b6f99566c65ccffbc53b187
✓ Switched to branch patch/1f62d89 at revision 1b294a9
✓ Branch patch/1f62d89 setup to track rad/patches/1f62d893f764f2ec4b6f99566c65ccffbc53b187
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout 220627949255de53d6ce2772740200b1a64f08c9
HEAD is now at 22062794 httpd: Add threshold to project info
Exit code: 0
$ rad patch show 1f62d893f764f2ec4b6f99566c65ccffbc53b187 -p
╭─────────────────────────────────────────────────────────────────────────────────╮
│ Title httpd: Add alias to project delegates │
│ Patch 1f62d893f764f2ec4b6f99566c65ccffbc53b187 │
│ Author sebastinez z6MkkfM…jXVsVz5 │
│ Head 220627949255de53d6ce2772740200b1a64f08c9 │
│ Base 0c93a1c1a4bf141412700c55a7ab3615d4110446 │
│ Target master │
│ Branches patch/1f62d89 │
│ Commits ahead 2, behind 1418 │
│ Status merged │
├─────────────────────────────────────────────────────────────────────────────────┤
│ 2206279 httpd: Add threshold to project info │
│ ac7786a httpd: Add alias to project delegates │
├─────────────────────────────────────────────────────────────────────────────────┤
│ ● Revision 1f62d89 @ a3ffe51..5ae909a by sebastinez z6MkkfM…jXVsVz5 2 years ago │
│ ↑ Revision c736c69 @ 0c93a1c..ac7786a by sebastinez z6MkkfM…jXVsVz5 2 years ago │
│ └─ ✓ accepted by fintohaps z6Mkire…SQZ3voM 2 years ago │
│ ↑ Revision 1b294a9 @ 0c93a1c..2206279 by sebastinez z6MkkfM…jXVsVz5 2 years ago │
│ ↑ Revision d9cb475 @ a9b94b0..d04d9d7 by cloudhead z6MksFq…bS9wzpT 2 years ago │
│ └─ ✓ merged by cloudhead z6MksFq…bS9wzpT │
╰─────────────────────────────────────────────────────────────────────────────────╯
commit 220627949255de53d6ce2772740200b1a64f08c9
Author: Sebastian Martinez <me@sebastinez.dev>
Date: Tue Apr 30 15:49:03 2024 +0200
httpd: Add threshold to project info
diff --git a/radicle-httpd/src/api.rs b/radicle-httpd/src/api.rs
index 04bb9f3391..0de97c4ee3 100644
--- a/radicle-httpd/src/api.rs
+++ b/radicle-httpd/src/api.rs
@@ -79,6 +79,7 @@ impl Context {
Ok(project::Info {
payload,
delegates,
+ threshold: doc.threshold,
visibility: doc.visibility,
head,
issues,
@@ -238,6 +239,7 @@ mod project {
#[serde(flatten)]
pub payload: Project,
pub delegates: Vec<Value>,
+ pub threshold: usize,
pub visibility: Visibility,
pub head: Oid,
pub patches: cob::patch::PatchCounts,
diff --git a/radicle-httpd/src/api/v1/delegates.rs b/radicle-httpd/src/api/v1/delegates.rs
index e7cd6d5e29..bfd53bb577 100644
--- a/radicle-httpd/src/api/v1/delegates.rs
+++ b/radicle-httpd/src/api/v1/delegates.rs
@@ -94,6 +94,7 @@ async fn delegates_projects_handler(
Some(Info {
payload,
delegates,
+ threshold: id.doc.threshold,
visibility: id.doc.visibility,
head,
issues,
@@ -150,6 +151,7 @@ mod routes {
"alias": "seed"
}
],
+ "threshold": 1,
"visibility": {
"type": "public"
},
@@ -199,6 +201,7 @@ mod routes {
"alias": "seed"
}
],
+ "threshold": 1,
"visibility": {
"type": "public"
},
diff --git a/radicle-httpd/src/api/v1/projects.rs b/radicle-httpd/src/api/v1/projects.rs
index d5632de5d4..ce06d5f4ae 100644
--- a/radicle-httpd/src/api/v1/projects.rs
+++ b/radicle-httpd/src/api/v1/projects.rs
@@ -150,6 +150,7 @@ async fn project_root_handler(
payload,
delegates,
head,
+ threshold: info.doc.threshold,
visibility: info.doc.visibility,
issues,
patches,
@@ -1004,6 +1005,7 @@ mod routes {
"alias": "seed"
}
],
+ "threshold": 1,
"visibility": {
"type": "public"
},
@@ -1044,6 +1046,7 @@ mod routes {
"alias": "seed"
}
],
+ "threshold": 1,
"visibility": {
"type": "public"
},
@@ -1084,6 +1087,7 @@ mod routes {
"alias": "seed"
}
],
+ "threshold": 1,
"visibility": {
"type": "public"
},
commit ac7786a862c121331aa740ed49336c5aefc9a221
Author: Sebastian Martinez <me@sebastinez.dev>
Date: Mon Apr 29 10:59:55 2024 +0200
httpd: Add alias to project delegates
diff --git a/radicle-httpd/src/api.rs b/radicle-httpd/src/api.rs
index 498b052b1c..04bb9f3391 100644
--- a/radicle-httpd/src/api.rs
+++ b/radicle-httpd/src/api.rs
@@ -17,11 +17,11 @@ use serde_json::json;
use tokio::sync::RwLock;
use tower_http::cors::{self, CorsLayer};
-use radicle::cob::issue;
-use radicle::cob::patch;
+use radicle::cob::{issue, patch, Author};
use radicle::identity::{DocAt, RepoId};
use radicle::node::policy::Scope;
use radicle::node::routing::Store;
+use radicle::node::AliasStore;
use radicle::node::{Handle, NodeId};
use radicle::storage::{ReadRepository, ReadStorage};
use radicle::{Node, Profile};
@@ -65,7 +65,12 @@ impl Context {
let id = repo.id();
let payload = doc.project()?;
- let delegates = doc.delegates;
+ let aliases = self.profile.aliases();
+ let delegates = doc
+ .delegates
+ .into_iter()
+ .map(|did| json::author(&Author::new(did), aliases.alias(did.as_key())))
+ .collect::<Vec<_>>();
let issues = self.profile.issues(repo)?.counts()?;
let patches = self.profile.patches(repo)?.counts()?;
let db = &self.profile.database()?;
@@ -217,14 +222,13 @@ impl PatchState {
}
mod project {
- use nonempty::NonEmpty;
use serde::Serialize;
+ use serde_json::Value;
use radicle::cob;
use radicle::git::Oid;
use radicle::identity::project::Project;
use radicle::identity::{RepoId, Visibility};
- use radicle::prelude::Did;
/// Project info.
#[derive(Serialize)]
@@ -233,7 +237,7 @@ mod project {
/// Project metadata.
#[serde(flatten)]
pub payload: Project,
- pub delegates: NonEmpty<Did>,
+ pub delegates: Vec<Value>,
pub visibility: Visibility,
pub head: Oid,
pub patches: cob::patch::PatchCounts,
diff --git a/radicle-httpd/src/api/json.rs b/radicle-httpd/src/api/json.rs
index 212beaac9d..c6b06b5519 100644
--- a/radicle-httpd/src/api/json.rs
+++ b/radicle-httpd/src/api/json.rs
@@ -185,7 +185,7 @@ fn reactions(
}
/// Returns JSON for an `author` and fills in `alias` when present.
-fn author(author: &Author, alias: Option<Alias>) -> Value {
+pub(crate) fn author(author: &Author, alias: Option<Alias>) -> Value {
match alias {
Some(alias) => json!({
"id": author.id,
diff --git a/radicle-httpd/src/api/v1/delegates.rs b/radicle-httpd/src/api/v1/delegates.rs
index fc5d27c2ae..e7cd6d5e29 100644
--- a/radicle-httpd/src/api/v1/delegates.rs
+++ b/radicle-httpd/src/api/v1/delegates.rs
@@ -3,13 +3,16 @@ use axum::response::IntoResponse;
use axum::routing::get;
use axum::{Json, Router};
+use radicle::cob::Author;
use radicle::identity::Did;
use radicle::issue::cache::Issues as _;
use radicle::node::routing::Store;
+use radicle::node::AliasStore;
use radicle::patch::cache::Patches as _;
use radicle::storage::{ReadRepository, ReadStorage};
use crate::api::error::Error;
+use crate::api::json;
use crate::api::project::Info;
use crate::api::Context;
use crate::api::{PaginationQuery, ProjectQuery};
@@ -79,7 +82,13 @@ async fn delegates_projects_handler(
return None;
};
- let delegates = id.doc.delegates;
+ let aliases = ctx.profile.aliases();
+ let delegates = id
+ .doc
+ .delegates
+ .into_iter()
+ .map(|did| json::author(&Author::new(did), aliases.alias(did.as_key())))
+ .collect::<Vec<_>>();
let seeding = db.count(&id.rid).unwrap_or_default();
Some(Info {
@@ -135,7 +144,12 @@ mod routes {
"name": "hello-world",
"description": "Rad repository for tests",
"defaultBranch": "master",
- "delegates": ["did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi"],
+ "delegates": [
+ {
+ "id": "did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi",
+ "alias": "seed"
+ }
+ ],
"visibility": {
"type": "public"
},
@@ -179,7 +193,12 @@ mod routes {
"name": "hello-world",
"description": "Rad repository for tests",
"defaultBranch": "master",
- "delegates": ["did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi"],
+ "delegates": [
+ {
+ "id": "did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi",
+ "alias": "seed"
+ }
+ ],
"visibility": {
"type": "public"
},
diff --git a/radicle-httpd/src/api/v1/projects.rs b/radicle-httpd/src/api/v1/projects.rs
index d3e9790874..d5632de5d4 100644
--- a/radicle-httpd/src/api/v1/projects.rs
+++ b/radicle-httpd/src/api/v1/projects.rs
@@ -14,8 +14,8 @@ use serde_json::json;
use tower_http::set_header::SetResponseHeaderLayer;
use radicle::cob::{
- issue, issue::cache::Issues as _, patch, patch::cache::Patches as _, resolve_embed, Embed,
- Label, Uri,
+ issue, issue::cache::Issues as _, patch, patch::cache::Patches as _, resolve_embed, Author,
+ Embed, Label, Uri,
};
use radicle::identity::{Did, RepoId};
use radicle::node::routing::Store;
@@ -137,7 +137,13 @@ async fn project_root_handler(
let Ok(patches) = patches.counts() else {
return None;
};
- let delegates = info.doc.delegates;
+ let aliases = ctx.profile.aliases();
+ let delegates = info
+ .doc
+ .delegates
+ .into_iter()
+ .map(|did| api::json::author(&Author::new(did), aliases.alias(did.as_key())))
+ .collect::<Vec<_>>();
let seeding = db.count(&info.rid).unwrap_or_default();
Some(Info {
@@ -992,7 +998,12 @@ mod routes {
"name": "hello-world",
"description": "Rad repository for tests",
"defaultBranch": "master",
- "delegates": [DID],
+ "delegates": [
+ {
+ "id": DID,
+ "alias": "seed"
+ }
+ ],
"visibility": {
"type": "public"
},
@@ -1027,7 +1038,12 @@ mod routes {
"name": "hello-world",
"description": "Rad repository for tests",
"defaultBranch": "master",
- "delegates": [DID],
+ "delegates": [
+ {
+ "id": DID,
+ "alias": "seed"
+ }
+ ],
"visibility": {
"type": "public"
},
@@ -1062,7 +1078,12 @@ mod routes {
"name": "hello-world",
"description": "Rad repository for tests",
"defaultBranch": "master",
- "delegates": [DID],
+ "delegates": [
+ {
+ "id": DID,
+ "alias": "seed"
+ }
+ ],
"visibility": {
"type": "public"
},
Exit code: 0
shell: 'cargo --version rustc --version cargo fmt --check cargo clippy --all-targets --workspace -- --deny clippy::all cargo build --all-targets --workspace cargo doc --workspace cargo test --workspace --no-fail-fast '
Commands:
$ podman run --name 20b3a732-62e9-4c67-a3d7-311a62398686 -v /opt/radcis/ci.rad.levitte.org/cci/state/20b3a732-62e9-4c67-a3d7-311a62398686/s:/20b3a732-62e9-4c67-a3d7-311a62398686/s:ro -v /opt/radcis/ci.rad.levitte.org/cci/state/20b3a732-62e9-4c67-a3d7-311a62398686/w:/20b3a732-62e9-4c67-a3d7-311a62398686/w -w /20b3a732-62e9-4c67-a3d7-311a62398686/w -v /opt/radcis/ci.rad.levitte.org/.radicle:/${id}/.radicle:ro -e RAD_HOME=/${id}/.radicle rust:trixie bash /20b3a732-62e9-4c67-a3d7-311a62398686/s/script.sh
+ cargo --version
info: syncing channel updates for '1.77-x86_64-unknown-linux-gnu'
info: latest update on 2024-04-09, rust version 1.77.2 (25ef9e3d8 2024-04-09)
info: downloading component 'cargo'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: installing component 'cargo'
info: installing component 'rust-std'
info: installing component 'rustc'
cargo 1.77.2 (e52e36006 2024-03-26)
+ rustc --version
rustc 1.77.2 (25ef9e3d8 2024-04-09)
+ cargo fmt --check
error: 'cargo-fmt' is not installed for the toolchain '1.77-x86_64-unknown-linux-gnu'.
To install, run `rustup component add --toolchain 1.77-x86_64-unknown-linux-gnu rustfmt`
Exit code: 1
{
"response": "finished",
"result": "failure"
}