rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwood88af09b7029887ffec5357c457ae0cbe0b4f0d02
{
"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": "Created",
"patch": {
"id": "1d02aa0ea1e7fc1822e9564478f6357183a8bc7c",
"author": {
"id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
"alias": "lorenz"
},
"title": "remote-helper: Small improvements",
"state": {
"status": "open",
"conflicts": []
},
"before": "646d4360e7d905f0a9ec87d32c6768c5390eabf3",
"after": "88af09b7029887ffec5357c457ae0cbe0b4f0d02",
"commits": [
"88af09b7029887ffec5357c457ae0cbe0b4f0d02",
"9c8905f829d62a2d269e5f0fdb309273bc9ecc62",
"f00a56c52e7c95a072430f523baacff7633faa18"
],
"target": "646d4360e7d905f0a9ec87d32c6768c5390eabf3",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "1d02aa0ea1e7fc1822e9564478f6357183a8bc7c",
"author": {
"id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
"alias": "lorenz"
},
"description": "This patch combines three only loosely connected improvements to `radicle-remote-helper`, which also touch `radicle` and `radicle-cli`:\n 1. Interpret the `verbosity` option part of the Git remote helper protocol.\n 2. Move interpretation of output of `git` commands to binary crates.\n 3. Prevent doubly verifying pushes from working copy to storage.",
"base": "646d4360e7d905f0a9ec87d32c6768c5390eabf3",
"oid": "88af09b7029887ffec5357c457ae0cbe0b4f0d02",
"timestamp": 1757604617
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "61034954-f899-4d2a-9b3b-d8ad0c0a98da"
},
"info_url": "https://cci.rad.levitte.org//61034954-f899-4d2a-9b3b-d8ad0c0a98da.html"
}
Started at: 2025-09-11 17:30:21.376383+02: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/61034954-f899-4d2a-9b3b-d8ad0c0a98da/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 112 issues · 19 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout 1d02aa0ea1e7fc1822e9564478f6357183a8bc7c
✓ Switched to branch patch/1d02aa0 at revision 1d02aa0
✓ Branch patch/1d02aa0 setup to track rad/patches/1d02aa0ea1e7fc1822e9564478f6357183a8bc7c
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout 88af09b7029887ffec5357c457ae0cbe0b4f0d02
HEAD is now at 88af09b7 remote-helper: Prevent doubly verifying each push
Exit code: 0
$ git show 88af09b7029887ffec5357c457ae0cbe0b4f0d02
commit 88af09b7029887ffec5357c457ae0cbe0b4f0d02
Author: Lorenz Leutgeb <lorenz.leutgeb@radicle.xyz>
Date: Thu Sep 11 10:02:51 2025 +0200
remote-helper: Prevent doubly verifying each push
The context of the invocation of `git push` "internally" by the
remote helper is the same as by the user invoking `git push` most
of the time. That is, these pushes run within the same repository,
thus the configuration for pre-push hooks applies to both. This
leads to every push being verified *twice*.
If the user intends to configure pre-push hooks, then they would
do that on the remote with URL `rad://…`, and so the hook would
be executed before `git-remote-rad` even gets called.
We thus specify `--no-verify` to not verify again.
diff --git a/crates/radicle-remote-helper/src/push.rs b/crates/radicle-remote-helper/src/push.rs
index 472d3add..03ff4e39 100644
--- a/crates/radicle-remote-helper/src/push.rs
+++ b/crates/radicle-remote-helper/src/push.rs
@@ -881,8 +881,18 @@ fn push_ref(
// This happens during the `list for-push` phase.
let refspec = git::Refspec { src, dst, force };
let repo = working.workdir().unwrap_or_else(|| working.path());
-
- let mut args = vec!["push".to_string()];
+
+ let mut args = vec![
+ "push".to_string(),
+ // This push is "internal" from the point of view of the user.
+ // If they want to run a pre-push hook, then they would configure
+ // this on their remote, and the hook would run before we get here.
+ // However, the context of this invocation of `git push` is
+ // the same repository, so if the user has configured a pre-push
+ // hook it would run twice, which is not what we want, so set this
+ // option.
+ "--no-verify".to_string(),
+ ];
let verbosity: git::Verbosity = verbosity.into();
args.extend(verbosity.into_flag());
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 61034954-f899-4d2a-9b3b-d8ad0c0a98da -v /opt/radcis/ci.rad.levitte.org/cci/state/61034954-f899-4d2a-9b3b-d8ad0c0a98da/s:/61034954-f899-4d2a-9b3b-d8ad0c0a98da/s:ro -v /opt/radcis/ci.rad.levitte.org/cci/state/61034954-f899-4d2a-9b3b-d8ad0c0a98da/w:/61034954-f899-4d2a-9b3b-d8ad0c0a98da/w -w /61034954-f899-4d2a-9b3b-d8ad0c0a98da/w -v /opt/radcis/ci.rad.levitte.org/.radicle:/${id}/.radicle:ro -e RAD_HOME=/${id}/.radicle rust:bookworm bash /61034954-f899-4d2a-9b3b-d8ad0c0a98da/s/script.sh
time="2025-09-11T17:30:23+02:00" level=error msg="User-selected graph driver \"overlay\" overwritten by graph driver \"vfs\" from database - delete libpod local files (\"/opt/radcis/ci.rad.levitte.org/.local/share/containers/storage\") to resolve. May prevent use of images created by other tools"
time="2025-09-11T17:30:23+02:00" level=error msg="User-selected graph driver \"overlay\" overwritten by graph driver \"vfs\" from database - delete libpod local files (\"/opt/radcis/ci.rad.levitte.org/.local/share/containers/storage\") to resolve. May prevent use of images created by other tools"
+ cargo --version
info: syncing channel updates for '1.88-x86_64-unknown-linux-gnu'
info: latest update on 2025-06-26, rust version 1.88.0 (6b00bc388 2025-06-23)
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.88.0 (873a06493 2025-05-10)
+ rustc --version
rustc 1.88.0 (6b00bc388 2025-06-23)
+ cargo fmt --check
Diff in /61034954-f899-4d2a-9b3b-d8ad0c0a98da/w/crates/radicle-remote-helper/src/lib.rs:174:
println!("fetch");
println!();
}
- ["option", "verbosity", verbosity] => {
- match verbosity.parse::<Verbosity>() {
- Ok(verbosity) => {
- opts.verbosity = verbosity;
- println!("ok");
- },
- Err(err) => {
- println!("error {err}");
- }
+ ["option", "verbosity", verbosity] => match verbosity.parse::<Verbosity>() {
+ Ok(verbosity) => {
+ opts.verbosity = verbosity;
+ println!("ok");
}
- }
+ Err(err) => {
+ println!("error {err}");
+ }
+ },
["option", "push-option", args @ ..] => {
// Nb. Git documentation says that we can print `error <msg>` or `unsupported`
// for options that are not supported, but this results in Git saying that
Diff in /61034954-f899-4d2a-9b3b-d8ad0c0a98da/w/crates/radicle-remote-helper/src/push.rs:356:
let rules = crefs.rules();
let me = Did::from(nid);
- let explorer =
- push(src, &dst, *force, &nid, &working, stored, patches, &signer, opts.verbosity)?;
+ let explorer = push(
+ src,
+ &dst,
+ *force,
+ &nid,
+ &working,
+ stored,
+ patches,
+ &signer,
+ opts.verbosity,
+ )?;
// If we're trying to update the canonical head, make sure
// we don't diverge from the current head. This only applies
// to repos with more than one delegate.
Exit code: 1
{
"response": "finished",
"result": "failure"
}