rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwoodd64180458d014e47dfe7944c9d50cd6f5fc6df1b
{
"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": "e49446f4112159781639b6df0adcb696b2b7ba91",
"author": {
"id": "did:key:z6Mko5mivMvNtheBHB67cSJeMG6BbCn7Xk6MKY9VegkAbgMH",
"alias": "Derick"
},
"title": "node: Fix \"signals\" thread to continue upon other signal",
"state": {
"status": "merged",
"conflicts": []
},
"before": "123f7eb6bbb3cb3f39257b325b2256ecd415fbe4",
"after": "d64180458d014e47dfe7944c9d50cd6f5fc6df1b",
"commits": [
"d64180458d014e47dfe7944c9d50cd6f5fc6df1b"
],
"target": "6cfed884bf37cba1e0d8e97fa8b0e94df4a04b1f",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "e49446f4112159781639b6df0adcb696b2b7ba91",
"author": {
"id": "did:key:z6Mko5mivMvNtheBHB67cSJeMG6BbCn7Xk6MKY9VegkAbgMH",
"alias": "Derick"
},
"description": "Otherwise, previously, when one of the non-shutdown signals was\nreceived, that would cause the \"signals\" thread to finish, but then a\nsubsequent signal that should cause shutdown would not because the\nthread no longer existed to do so. E.g. when SIGHUP or SIGWINCH was\nreceived first and ignored and then SIGTERM or SIGINT was received next,\nthe program should still be shutdown, but it wouldn't be. This is now\nfixed by simply looping to continue handling subsequent signals.\n\nLogging is now done for:\n- Receiving of SIGHUP, at log level `debug`, because the default action\n for that signal would be to terminate the process but that is not done\n by `radicle_signals`. Someone sending that signal might want to debug\n why the process isn't being terminated.\n- Disconnection of the signal-notifications channel, at log level\n `warn`, because, even though that should be impossible, if it somehow\n occurs then a warning is warranted.\n\nLogging is not done for receiving of SIGWINCH, because the default\naction for that signal would be to ignore it, which is what\n`radicle-node` does.\n\nA wildcard pattern is not used in the match arms, so that any future\nchanges to the `Signal` variants will require reviewing their handling\nin the \"signals\" thread.\n\nSigned-off-by: Derick Eddington <kcired@pm.me>",
"base": "4a497fa66f8293c81bc7cb2b10f4653ad7f9f7df",
"oid": "70571ee1233fee38b42afb16d36776aca4ab54eb",
"timestamp": 1721268379
},
{
"id": "a6e492f3a916d75df918c5aeb98d8e6f4b27e944",
"author": {
"id": "did:key:z6Mko5mivMvNtheBHB67cSJeMG6BbCn7Xk6MKY9VegkAbgMH",
"alias": "Derick"
},
"description": "Rebase",
"base": "123f7eb6bbb3cb3f39257b325b2256ecd415fbe4",
"oid": "d64180458d014e47dfe7944c9d50cd6f5fc6df1b",
"timestamp": 1721358048
},
{
"id": "71915b0d0b20417ac6bd399d672651f50ac10ff7",
"author": {
"id": "did:key:z6Mko5mivMvNtheBHB67cSJeMG6BbCn7Xk6MKY9VegkAbgMH",
"alias": "Derick"
},
"description": "Rebase, logging tweaks.",
"base": "123f7eb6bbb3cb3f39257b325b2256ecd415fbe4",
"oid": "6f8d75a00daac96ee4b375b4a7e93cfb8988820c",
"timestamp": 1721637606
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "bedca68e-0e97-45d1-982b-3c7aa1dbeacd"
},
"info_url": "https://cci.rad.levitte.org//bedca68e-0e97-45d1-982b-3c7aa1dbeacd.html"
}
Started at: 2025-10-21 19:33:29.643448+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/bedca68e-0e97-45d1-982b-3c7aa1dbeacd/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 125 issues · 15 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout e49446f4112159781639b6df0adcb696b2b7ba91
✓ Switched to branch patch/e49446f at revision a6e492f
✓ Branch patch/e49446f setup to track rad/patches/e49446f4112159781639b6df0adcb696b2b7ba91
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout d64180458d014e47dfe7944c9d50cd6f5fc6df1b
HEAD is now at d6418045 node: Fix "signals" thread to continue upon other signal
Exit code: 0
$ git show d64180458d014e47dfe7944c9d50cd6f5fc6df1b
commit d64180458d014e47dfe7944c9d50cd6f5fc6df1b
Author: Derick Eddington <kcired@pm.me>
Date: Wed Jul 17 18:58:01 2024 -0700
node: Fix "signals" thread to continue upon other signal
Otherwise, previously, when one of the non-shutdown signals was
received, that would cause the "signals" thread to finish, but then a
subsequent signal that should cause shutdown would not because the
thread no longer existed to do so. E.g. when SIGHUP or SIGWINCH was
received first and ignored and then SIGTERM or SIGINT was received next,
the program should still be shutdown, but it wouldn't be. This is now
fixed by simply looping to continue handling subsequent signals.
Logging is now done for:
- Receiving of SIGHUP, at log level `debug`, because the default action
for that signal would be to terminate the process but that is not done
by `radicle_signals`. Someone sending that signal might want to debug
why the process isn't being terminated.
- Disconnection of the signal-notifications channel, at log level
`warn`, because, even though that should be impossible, if it somehow
occurs then a warning is warranted.
Logging is not done for receiving of SIGWINCH, because the default
action for that signal would be to ignore it, which is what
`radicle-node` does.
A wildcard pattern is not used in the match arms, so that any future
changes to the `Signal` variants will require reviewing their handling
in the "signals" thread.
Signed-off-by: Derick Eddington <kcired@pm.me>
diff --git a/radicle-node/src/runtime.rs b/radicle-node/src/runtime.rs
index dae86c08..4ff64a14 100644
--- a/radicle-node/src/runtime.rs
+++ b/radicle-node/src/runtime.rs
@@ -289,10 +289,21 @@ impl Runtime {
let handle = self.handle.clone();
|| control::listen(self.control, handle)
});
- let _signals = thread::spawn(&self.id, "signals", move || {
- if let Ok(Signal::Terminate | Signal::Interrupt) = self.signals.recv() {
- log::info!(target: "node", "Termination signal received; shutting down..");
- self.handle.shutdown().ok();
+ let _signals = thread::spawn(&self.id, "signals", move || loop {
+ match self.signals.recv() {
+ Ok(Signal::Terminate | Signal::Interrupt) => {
+ log::info!(target: "node", "Termination signal received; shutting down..");
+ self.handle.shutdown().ok();
+ break;
+ }
+ Ok(Signal::Hangup) => {
+ log::debug!(target: "node", "Ignoring received SIGHUP");
+ }
+ Ok(Signal::WindowChanged) => {}
+ Err(_) => {
+ log::warn!(target: "node", "Signal-notifications channel disconnected");
+ break;
+ }
}
});
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 bedca68e-0e97-45d1-982b-3c7aa1dbeacd -v /opt/radcis/ci.rad.levitte.org/cci/state/bedca68e-0e97-45d1-982b-3c7aa1dbeacd/s:/bedca68e-0e97-45d1-982b-3c7aa1dbeacd/s:ro -v /opt/radcis/ci.rad.levitte.org/cci/state/bedca68e-0e97-45d1-982b-3c7aa1dbeacd/w:/bedca68e-0e97-45d1-982b-3c7aa1dbeacd/w -w /bedca68e-0e97-45d1-982b-3c7aa1dbeacd/w -v /opt/radcis/ci.rad.levitte.org/.radicle:/${id}/.radicle:ro -e RAD_HOME=/${id}/.radicle rust:bookworm bash /bedca68e-0e97-45d1-982b-3c7aa1dbeacd/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"
}