Radicle repository id rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
[2025-10-07T22:54:16Z INFO ambient] ambient starts
deprecated: the `cpus` field is replaced by `qemu.cpus`
deprecated: the `memory` field is replaced by `qemu.memory`
[2J[01;01H[=3h[2J[01;01H[2J[01;01H[=3h[2J[01;01HBdsDxe: failed to load Boot0001 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0): Not Found
BdsDxe: loading Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0)
BdsDxe: starting Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0)
[0m[30m[47mWelcome to GRUB!
[0m[37m[40m[0m[30m[40m[2J[01;01H[0m[37m[40mINFO: Block devices
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 370K 0 rom
vda 254:0 0 100G 0 disk
├─vda1 254:1 0 953M 0 part
└─vda2 254:2 0 99.1G 0 part /
vdb 254:16 0 6.1M 1 disk
vdc 254:32 0 31.9M 1 disk
vdd 254:48 0 953.7M 0 disk
vde 254:64 0 27.9G 0 disk
vdf 254:80 0 1.3G 1 disk
INFO: Extracting tar archive from /dev/vdb
drwxr-xr-x _rad/_rad 0 2025-10-07 22:53 ./
-rw-r--r-- _rad/_rad 2450 2025-10-07 22:53 ./plan.yaml
-rwxr-xr-x _rad/_rad 6369536 2025-10-07 22:53 ./run-ci
INFO: Extracted files:
3538954 4 drwxr-xr-x 2 1000 1000 4096 Oct 7 22:53 .
3538955 4 -rw-r--r-- 1 1000 1000 2450 Oct 7 22:53 ./plan.yaml
3538956 6224 -rwxr-xr-x 1 1000 1000 6369536 Oct 7 22:53 ./run-ci
INFO: Running run-ci from /dev/vdb
================================ BEGIN ================================
[2025-10-07T22:53:55Z TRACE ambient_execute_plan] ambient-execute-plan version 0.8.0@735cb79 starts
[2025-10-07T22:53:55Z DEBUG ambient_execute_plan] ambient-execute-plan version 0.8.0@735cb79 starts
[2025-10-07T22:53:55Z INFO ambient_execute_plan] ambient-execute-plan version 0.8.0@735cb79 starts
[2025-10-07T22:53:55Z WARN ambient_execute_plan] ambient-execute-plan version 0.8.0@735cb79 starts
[2025-10-07T22:53:55Z ERROR ambient_execute_plan] ambient-execute-plan version 0.8.0@735cb79 starts
RunnablePlan::from_file: filename=plan.yaml
steps:
- action: mkdir
pathname: /workspace
- action: mkdir
pathname: /workspace/artifacts
- action: tar_extract
archive: /dev/vdc
directory: /workspace/src
- action: tar_extract
archive: /dev/vdf
directory: /workspace/deps
- action: tar_extract
archive: /dev/vde
directory: /workspace/cache
- action: spawn
argv:
- find
- /workspace
- -maxdepth
- '2'
- -ls
- action: cargo_fmt
- action: cargo_clippy
- action: cargo_build
- action: cargo_test
- action: shell
shell: |
# Because of a (temporary) limitation in Ambient, we need to set
# these variables manually. Once Ambient manages environment
# variables better, these can be deleted.
export CARGO_TARGET_DIR=/workspace/cache
export CARGO_HOME=/workspace/deps
export HOME=/root
export PATH="/root/.cargo/bin:$PATH"
export RUSTDOCFLAGS='-D warnings'
cargo doc --workspace --no-deps
- action: shell
shell: |
# Because of a (temporary) limitation in Ambient, we need to set
# these variables manually. Once Ambient manages environment
# variables better, these can be deleted.
export CARGO_TARGET_DIR=/workspace/cache
export CARGO_HOME=/workspace/deps
export HOME=/root
export PATH="/root/.cargo/bin:$PATH"
# These are based on debian/control.
export DEBEMAIL=liw@liw.fi
export DEBFULLNAME="Lars Wirzenius"
# Clean up after tests and documentation building. The Debian
# package building tools do not want changes outside the
# `debian` directory, compared to what is committed to Git, from
# which the "upstream tarball" is created.
git reset --hard
git clean -fdx
git status --ignored
# Update debian/changelog with a new version so that every run
# creates a newer version. This avoids us having to update the
# file manually for every CI run.
V="$(dpkg-parsechangelog -SVersion | sed 's/-[^-]*$//')"
T="$(date -u "+%Y%m%dT%H%M%S")"
version="$V.ci$T-1"
dch -v "$version" "CI build under Ambient."
dch -r ''
- action: deb
- action: tar_create
archive: /dev/vde
directory: /workspace/cache
- action: tar_create
archive: /dev/vdd
directory: /workspace/artifacts
executor_drive: /dev/vdb
source_drive: /dev/vdc
artifact_drive: /dev/vdd
cache_drive: /dev/vde
deps_drive: /dev/vdf
workspace_dir: /workspace
source_dir: /workspace/src
deps_dir: /workspace/deps
cache_dir: /workspace/cache
artifacts_dir: /workspace/artifacts
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action Mkdir {
pathname: "/workspace",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: plan=Mkdir {
pathname: "/workspace",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action Mkdir {
pathname: "/workspace/artifacts",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: plan=Mkdir {
pathname: "/workspace/artifacts",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
archive: "/dev/vdc",
directory: "/workspace/src",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
archive: "/dev/vdc",
directory: "/workspace/src",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
[2025-10-07T22:53:55Z TRACE ambient_ci::vdrive] extracting /dev/vdc to /workspace/src
[2025-10-07T22:53:55Z TRACE ambient_ci::vdrive] extraction OK
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
archive: "/dev/vdf",
directory: "/workspace/deps",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
archive: "/dev/vdf",
directory: "/workspace/deps",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
[2025-10-07T22:53:55Z TRACE ambient_ci::vdrive] extracting /dev/vdf to /workspace/deps
[2025-10-07T22:53:59Z TRACE ambient_ci::vdrive] extraction OK
[2025-10-07T22:53:59Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:53:59Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
archive: "/dev/vde",
directory: "/workspace/cache",
}
[2025-10-07T22:53:59Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
archive: "/dev/vde",
directory: "/workspace/cache",
}
[2025-10-07T22:53:59Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
[2025-10-07T22:53:59Z TRACE ambient_ci::vdrive] extracting /dev/vde to /workspace/cache
[2025-10-07T22:54:11Z TRACE ambient_ci::vdrive] extraction OK
[2025-10-07T22:54:11Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:54:11Z DEBUG ambient_ci::plan] RUN: Action Spawn {
argv: [
"find",
"/workspace",
"-maxdepth",
"2",
"-ls",
],
}
[2025-10-07T22:54:11Z DEBUG ambient_ci::action] Plan::execute: plan=Spawn {
argv: [
"find",
"/workspace",
"-maxdepth",
"2",
"-ls",
],
}
[2025-10-07T22:54:11Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
SPAWN: argv=["find", "/workspace", "-maxdepth", "2", "-ls"]
cwd=/workspace/src (exists? true)
5242881 4 drwxr-xr-x 6 root root 4096 Oct 7 22:53 /workspace
5242882 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/artifacts
5243710 4 drwxr-xr-x 3 root root 4096 Oct 7 22:53 /workspace/deps
5243711 4 drwxr-xr-x 5 root root 4096 Sep 10 13:40 /workspace/deps/registry
5291324 0 -rw-r--r-- 1 root root 0 Sep 10 13:40 /workspace/deps/.package-cache-mutate
5291323 180 -rw-r--r-- 1 root root 184320 Oct 7 22:53 /workspace/deps/.global-cache
5291325 0 -rw-r--r-- 1 root root 0 Sep 10 13:40 /workspace/deps/.package-cache
5374530 4 drwxr-xr-x 6 root root 4096 Oct 7 15:12 /workspace/cache
5384703 4 -rw-r--r-- 1 root root 218 Oct 7 15:11 /workspace/cache/.rustdoc_fingerprint.json
5374531 4 -rw-r--r-- 1 root root 1037 Oct 7 16:42 /workspace/cache/.rustc_info.json
5384704 4 drwxr-xr-x 7 root root 4096 Oct 7 15:07 /workspace/cache/debug
5374532 4 drwxr-xr-x 7 root root 4096 Oct 7 15:17 /workspace/cache/release
5384702 4 drwxr-xr-x 2 root root 4096 Oct 7 15:02 /workspace/cache/tmp
5379246 4 drwxr-xr-x 24 root root 4096 Oct 7 15:11 /workspace/cache/doc
5242883 4 drwxr-xr-x 12 root root 4096 Oct 7 22:53 /workspace/src
5243572 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/src/.cargo
5242925 4 drwxr-xr-x 20 root root 4096 Oct 7 22:53 /workspace/src/crates
5243551 4 -rw-r--r-- 1 root root 1079 Oct 7 22:53 /workspace/src/LICENSE-MIT
5243562 4 -rw-r--r-- 1 root root 101 Oct 7 22:53 /workspace/src/.gitignore
5243552 12 -rw-r--r-- 1 root root 9723 Oct 7 22:53 /workspace/src/LICENSE-APACHE
5242912 4 drwxr-xr-x 3 root root 4096 Oct 7 22:53 /workspace/src/debian
5243574 4 drwxr-xr-x 8 root root 4096 Oct 7 22:53 /workspace/src/.git
5242893 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/src/scripts
5242905 8 -rw-r--r-- 1 root root 8023 Oct 7 22:53 /workspace/src/rad.1.adoc
5243570 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/src/.config
5242909 12 -rw-r--r-- 1 root root 10819 Oct 7 22:53 /workspace/src/flake.nix
5242904 4 -rw-r--r-- 1 root root 426 Oct 7 22:53 /workspace/src/radicle-node.1.adoc
5243558 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/src/.radicle
5242903 4 -rw-r--r-- 1 root root 77 Oct 7 22:53 /workspace/src/rust-toolchain.toml
5242884 4 -rw-r--r-- 1 root root 3376 Oct 7 22:53 /workspace/src/Cargo.toml
5242908 4 -rw-r--r-- 1 root root 571 Oct 7 22:53 /workspace/src/git-remote-rad.1.adoc
5242906 12 -rw-r--r-- 1 root root 10975 Oct 7 22:53 /workspace/src/rad-patch.1.adoc
5242886 4 drwxr-xr-x 5 root root 4096 Oct 7 22:53 /workspace/src/systemd
5243569 4 -rw-r--r-- 1 root root 30 Oct 7 22:53 /workspace/src/.dockerignore
5243550 4 -rw-r--r-- 1 root root 3133 Oct 7 22:53 /workspace/src/README.md
5243556 16 -rw-r--r-- 1 root root 14022 Oct 7 22:53 /workspace/src/CHANGELOG.md
5243554 4 -rw-r--r-- 1 root root 1203 Oct 7 22:53 /workspace/src/DCO
5243561 4 -rw-r--r-- 1 root root 1083 Oct 7 22:53 /workspace/src/.gitsigners
5243535 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/src/build
5243568 4 -rw-r--r-- 1 root root 61 Oct 7 22:53 /workspace/src/.env.seed
5243563 4 drwxr-xr-x 3 root root 4096 Oct 7 22:53 /workspace/src/.github
5243553 8 -rw-r--r-- 1 root root 7645 Oct 7 22:53 /workspace/src/HACKING.md
5243557 4 -rw-r--r-- 1 root root 79 Oct 7 22:53 /workspace/src/ARCHITECTURE.md
5243548 4 -rw-r--r-- 1 root root 1623 Oct 7 22:53 /workspace/src/build.rs
5243567 4 -rw-r--r-- 1 root root 42 Oct 7 22:53 /workspace/src/.envrc
5242911 8 -rw-r--r-- 1 root root 5432 Oct 7 22:53 /workspace/src/deny.toml
5243549 4 -rw-r--r-- 1 root root 2163 Oct 7 22:53 /workspace/src/VERSIONING.md
5242907 8 -rw-r--r-- 1 root root 7144 Oct 7 22:53 /workspace/src/rad-id.1.adoc
5243555 12 -rw-r--r-- 1 root root 9636 Oct 7 22:53 /workspace/src/CONTRIBUTING.md
5242885 124 -rw-r--r-- 1 root root 122964 Oct 7 22:53 /workspace/src/Cargo.lock
5242910 8 -rw-r--r-- 1 root root 5102 Oct 7 22:53 /workspace/src/flake.lock
[2025-10-07T22:54:11Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:54:11Z DEBUG ambient_ci::plan] RUN: Action CargoFmt
[2025-10-07T22:54:11Z DEBUG ambient_ci::action] Plan::execute: plan=CargoFmt
[2025-10-07T22:54:11Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
SPAWN: argv=["cargo", "--version"]
cwd=/workspace/src (exists? true)
cargo 1.88.0 (873a06493 2025-05-10)
SPAWN: argv=["cargo", "clippy", "--version"]
cwd=/workspace/src (exists? true)
clippy 0.1.88 (6b00bc3880 2025-06-23)
SPAWN: argv=["rustc", "--version"]
cwd=/workspace/src (exists? true)
rustc 1.88.0 (6b00bc388 2025-06-23)
SPAWN: argv=["cargo", "fmt", "--check"]
cwd=/workspace/src (exists? true)
Diff in /workspace/src/crates/radicle/src/cob/common.rs:9:
use serde::{Deserialize, Serialize};
use thiserror::Error;
-use crate::prelude::{Did, PublicKey};
use crate::git::Oid;
+use crate::prelude::{Did, PublicKey};
/// Timestamp used for COB operations.
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
Diff in /workspace/src/crates/radicle/src/cob/external.rs:92:
use crate::cob::object::collaboration::Evaluate;
use crate::cob::op::{Op as CobOp, OpEncodingError};
use crate::cob::store::{Cob, CobAction};
-use crate::storage::ReadRepository;
use crate::git::Oid;
+use crate::storage::ReadRepository;
/// This prefix is used to generate the name of the command,
/// which is executed by the helper to apply operations.
Diff in /workspace/src/crates/radicle/src/cob/identity.rs:7:
use serde::{Deserialize, Serialize};
use thiserror::Error;
+use crate::git::Oid;
use crate::identity::doc::Doc;
use crate::node::device::Device;
use crate::node::NodeId;
Diff in /workspace/src/crates/radicle/src/cob/identity.rs:13:
use crate::storage;
-use crate::git::Oid;
use crate::{
cob,
cob::{
Diff in /workspace/src/crates/radicle/src/cob/issue.rs:982:
use super::*;
use crate::cob::{store::CobWithType, ActorId, Reaction};
+ use crate::git::Oid;
use crate::issue::cache::Issues as _;
use crate::test::arbitrary;
- use crate::git::Oid;
use crate::{assert_matches, test};
#[test]
Diff in /workspace/src/crates/radicle/src/cob/patch.rs:2001:
}
/// Merge a patch revision.
- pub fn merge(&mut self, revision: RevisionId, commit: crate::git::Oid) -> Result<(), store::Error> {
+ pub fn merge(
+ &mut self,
+ revision: RevisionId,
+ commit: crate::git::Oid,
+ ) -> Result<(), store::Error> {
self.push(Action::Merge { revision, commit })
}
Diff in /workspace/src/crates/radicle/src/cob/test.rs:12:
use crate::cob::{patch, Title};
use crate::cob::{Entry, History, Manifest, Timestamp, Version};
use crate::crypto::Signer;
+use crate::git::Oid;
use crate::node::device::Device;
use crate::prelude::Did;
use crate::profile::env;
Diff in /workspace/src/crates/radicle/src/cob/test.rs:18:
use crate::storage::ReadRepository;
use crate::test::arbitrary;
-use crate::git::Oid;
use super::store::{Cob, CobWithType};
use super::thread;
Diff in /workspace/src/crates/radicle/src/cob/test.rs:178:
"nonce": fastrand::u64(..),
}))
.unwrap();
- let oid = crate::git::raw::Oid::hash_object(crate::git::raw::ObjectType::Blob, &data).unwrap();
+ let oid =
+ crate::git::raw::Oid::hash_object(crate::git::raw::ObjectType::Blob, &data).unwrap();
let id = oid.into();
let author = *self.signer.public_key();
let actions = NonEmpty::from_vec(actions).unwrap();
Diff in /workspace/src/crates/radicle/src/cob/test.rs:279:
.to_string();
let hash =
- crate::git::raw::Oid::hash_object(crate::git::raw::ObjectType::Commit, commit.as_bytes()).unwrap();
+ crate::git::raw::Oid::hash_object(crate::git::raw::ObjectType::Commit, commit.as_bytes())
+ .unwrap();
(data, hash.into())
}
Diff in /workspace/src/crates/radicle/src/git/canonical/convergence.rs:1:
use std::{fmt, ops::ControlFlow};
-use crate::prelude::Did;
use crate::git::Oid;
+use crate::prelude::Did;
use super::{effects, error, Object};
Diff in /workspace/src/crates/radicle/src/git/canonical/effects.rs:3:
use crate::git;
use crate::git::fmt::Qualified;
use crate::git::raw::ErrorExt as _;
-use crate::prelude::Did;
use crate::git::Oid;
+use crate::prelude::Did;
use super::{FoundObjects, GraphAheadBehind, MergeBase, Object};
Diff in /workspace/src/crates/radicle/src/git/canonical/rules.rs:22:
use crate::git;
use crate::git::canonical;
use crate::git::canonical::Canonical;
+use crate::git::fmt::refspec::QualifiedPattern;
use crate::git::fmt::Qualified;
use crate::git::fmt::{refname, RefString};
-use crate::git::fmt::refspec::QualifiedPattern;
use crate::identity::{doc, Did};
const ASTERISK: char = '*';
Diff in /workspace/src/crates/radicle/src/git/canonical/rules.rs:781:
doc.delegates().clone()
}
- fn tag(name: RefString, head: crate::git::Oid, repo: &crate::git::raw::Repository) -> crate::git::Oid {
+ fn tag(
+ name: RefString,
+ head: crate::git::Oid,
+ repo: &crate::git::raw::Repository,
+ ) -> crate::git::Oid {
let commit = fixtures::commit(name.as_str(), &[head], repo);
let target = repo.find_object(commit.into(), None).unwrap();
let tagger = repo.signature().unwrap();
Diff in /workspace/src/crates/radicle/src/git/raw.rs:1:
//! This module re-exports selected items from the [`git2`] crate and provides
//! an extension trait for its [`git2::Error`] type to more conveniently handle
//! errors associated with the code [`git2::ErrorCode::NotFound`].
-//!
+//!
// Re-exports created by manually scanning the `heartwood` workspace on 2025-10-04.
// Re-exports that are only used within this crate.
Diff in /workspace/src/crates/radicle/src/git/raw.rs:8:
pub(crate) use git2::{
- message_trailers_strs,
-
- AutotagOption, Blob,
- Config,
- FetchOptions,
- FetchPrune,
- Object,
- RemoteCallbacks,
- Revwalk,
- Sort,
+ message_trailers_strs, AutotagOption, Blob, Config, FetchOptions, FetchPrune, Object,
+ RemoteCallbacks, Revwalk, Sort,
};
// Re-exports that are used by other crates in the workspace, including this crate.
Diff in /workspace/src/crates/radicle/src/git/raw.rs:22:
pub use git2::{
- Repository,
- RepositoryInitOptions,
- Error, ErrorClass, ErrorCode,
- BranchType,
- Commit,
+ Branch, BranchType, Commit, Direction, Error, ErrorClass, ErrorCode, FileMode, ObjectType, Oid,
+ Reference, Remote, Repository, RepositoryInitOptions, RepositoryOpenFlags, Signature, Time,
Tree,
- Oid,
- Direction,
- Reference,
- Signature,
- Remote,
- ObjectType,
- Branch,
- RepositoryOpenFlags,
- Time,
- FileMode,
};
// Re-exports that are used by other crates in the workspace, but *not* this crate.
Diff in /workspace/src/crates/radicle/src/git/raw.rs:42:
pub use git2::{
- MergeAnalysis, MergeOptions,
- AnnotatedCommit,
- Diff, DiffFindOptions, DiffOptions, DiffStats,
+ AnnotatedCommit, Diff, DiffFindOptions, DiffOptions, DiffStats, MergeAnalysis, MergeOptions,
};
// Re-exports for `radicle-cli`.
Diff in /workspace/src/crates/radicle/src/git.rs:181:
use radicle_cob as cob;
- use super::*;
use super::fmt::*;
+ use super::*;
/// Try to get a qualified reference from a generic reference.
- pub fn qualified_from<'a>(
- r: &'a raw::Reference,
- ) -> Result<(Qualified<'a>, Oid), RefError> {
+ pub fn qualified_from<'a>(r: &'a raw::Reference) -> Result<(Qualified<'a>, Oid), RefError> {
let name = r.name().ok_or(RefError::InvalidName)?;
let refstr = RefStr::try_from_str(name)?;
let target = r.resolve()?.target().ok_or(RefError::NoTarget)?;
Diff in /workspace/src/crates/radicle/src/git.rs:380:
///
/// `refs/namespaces/*/refs/drafts/cobs/<typename>/<object_id>`
///
- pub fn cobs(typename: &cob::TypeName, object_id: &cob::ObjectId) -> refspec::PatternString {
+ pub fn cobs(
+ typename: &cob::TypeName,
+ object_id: &cob::ObjectId,
+ ) -> refspec::PatternString {
pattern!("refs/namespaces/*")
.join(refname!("refs/drafts/cobs"))
.join(Component::from(typename))
Diff in /workspace/src/crates/radicle/src/git.rs:742:
Ok(())
}
-pub fn init_default_branch(
- repo: &raw::Repository,
-) -> Result<Option<String>, raw::Error> {
+pub fn init_default_branch(repo: &raw::Repository) -> Result<Option<String>, raw::Error> {
let config = repo.config().and_then(|mut c| c.snapshot())?;
let default_branch = config.get_str("init.defaultbranch")?;
let branch = repo.find_branch(default_branch, raw::BranchType::Local)?;
Diff in /workspace/src/crates/radicle/src/identity/doc.rs:1154:
let remote = arbitrary::gen::<RemoteId>(1);
let proj = arbitrary::gen::<RepoId>(1);
let repo = storage.create(proj).unwrap();
- let oid = crate::git::raw::Oid::from_str("2d52a53ce5e4f141148a5f770cfd3ead2d6a45b8").unwrap();
+ let oid =
+ crate::git::raw::Oid::from_str("2d52a53ce5e4f141148a5f770cfd3ead2d6a45b8").unwrap();
let err = repo.identity_head_of(&remote).unwrap_err();
{
Diff in /workspace/src/crates/radicle/src/identity/project.rs:7:
use thiserror::Error;
use crate::crypto;
+use crate::git::BranchName;
use crate::identity::doc;
use crate::identity::doc::Payload;
-use crate::git::BranchName;
pub use crypto::PublicKey;
Diff in /workspace/src/crates/radicle/src/lib.rs:42:
use super::*;
pub use crypto::{PublicKey, Verified};
+ pub use git::BranchName;
pub use identity::{project::Project, Did, Doc, RawDoc, RepoId};
pub use node::{Alias, NodeId, Timestamp};
pub use profile::Profile;
Diff in /workspace/src/crates/radicle/src/lib.rs:48:
- pub use git::BranchName;
- pub use storage::{
- ReadRepository, ReadStorage, SignRepository, WriteRepository, WriteStorage,
- };
+ pub use storage::{ReadRepository, ReadStorage, SignRepository, WriteRepository, WriteStorage};
}
Diff in /workspace/src/crates/radicle/src/node/events.rs:10:
use crossbeam_channel as chan;
use crate::git::fmt::Qualified;
+use crate::git::Oid;
use crate::node;
use crate::prelude::*;
use crate::storage::{refs, RefUpdate};
Diff in /workspace/src/crates/radicle/src/node/events.rs:16:
-use crate::git::Oid;
/// Maximum unconsumed events allowed per subscription.
pub const MAX_PENDING_EVENTS: usize = 8192;
Diff in /workspace/src/crates/radicle/src/node/notifications/store.rs:11:
use crate::git;
use crate::git::fmt::RefString;
+use crate::git::Oid;
use crate::git::RefError;
use crate::prelude::RepoId;
use crate::sql::transaction;
Diff in /workspace/src/crates/radicle/src/node/notifications/store.rs:17:
use crate::storage::RefUpdate;
-use crate::git::Oid;
use super::{
Notification, NotificationId, NotificationKind, NotificationKindError, NotificationStatus,
Diff in /workspace/src/crates/radicle/src/node/refs/store.rs:7:
use thiserror::Error;
use crate::git::fmt::Qualified;
+use crate::git::Oid;
use crate::node::Database;
use crate::node::NodeId;
use crate::prelude::RepoId;
Diff in /workspace/src/crates/radicle/src/node/refs/store.rs:13:
use crate::storage;
use crate::storage::{ReadRepository, ReadStorage, RemoteRepository, RepositoryError};
-use crate::git::Oid;
#[derive(Error, Debug)]
pub enum Error {
Diff in /workspace/src/crates/radicle/src/node/seed/store.rs:5:
use sqlite as sql;
use thiserror::Error;
+use crate::git::Oid;
use crate::node::address;
use crate::node::address::Store as _;
use crate::node::NodeId;
Diff in /workspace/src/crates/radicle/src/node/seed/store.rs:11:
use crate::node::{seed::SyncedSeed, Database, SyncedAt};
use crate::prelude::{RepoId, Timestamp};
-use crate::git::Oid;
#[derive(Error, Debug)]
pub enum Error {
Diff in /workspace/src/crates/radicle/src/node/seed.rs:25:
impl SyncedAt {
/// Load a new [`SyncedAt`] for the given remote.
- pub fn load<S: ReadRepository>(repo: &S, remote: RemoteId) -> Result<Self, crate::git::raw::Error> {
+ pub fn load<S: ReadRepository>(
+ repo: &S,
+ remote: RemoteId,
+ ) -> Result<Self, crate::git::raw::Error> {
let refs = RefsAt::new(repo, remote)?;
let oid = refs.at;
Diff in /workspace/src/crates/radicle/src/node/seed.rs:33:
}
/// Create a new [`SyncedAt`] given an OID, by looking up the timestamp in the repo.
- pub fn new<S: ReadRepository>(oid: crate::git::Oid, repo: &S) -> Result<Self, crate::git::raw::Error> {
+ pub fn new<S: ReadRepository>(
+ oid: crate::git::Oid,
+ repo: &S,
+ ) -> Result<Self, crate::git::raw::Error> {
let timestamp = repo.commit(oid)?.time();
let timestamp = LocalTime::from_secs(timestamp.seconds() as u64);
Diff in /workspace/src/crates/radicle/src/storage/git/transport/local.rs:30:
&self,
url: &str,
service: crate::git::raw::transport::Service,
- ) -> Result<Box<dyn crate::git::raw::transport::SmartSubtransportStream>, crate::git::raw::Error> {
- let url =
- Url::from_str(url).map_err(|e| crate::git::raw::Error::from_str(e.to_string().as_str()))?;
+ ) -> Result<Box<dyn crate::git::raw::transport::SmartSubtransportStream>, crate::git::raw::Error>
+ {
+ let url = Url::from_str(url)
+ .map_err(|e| crate::git::raw::Error::from_str(e.to_string().as_str()))?;
let service: &str = match service {
crate::git::raw::transport::Service::UploadPack
| crate::git::raw::transport::Service::UploadPackLs => "upload-pack",
Diff in /workspace/src/crates/radicle/src/storage/git/transport/remote/mock.rs:24:
&self,
url: &str,
service: crate::git::raw::transport::Service,
- ) -> Result<Box<dyn crate::git::raw::transport::SmartSubtransportStream>, crate::git::raw::Error> {
- let url =
- Url::from_str(url).map_err(|e| crate::git::raw::Error::from_str(e.to_string().as_str()))?;
+ ) -> Result<Box<dyn crate::git::raw::transport::SmartSubtransportStream>, crate::git::raw::Error>
+ {
+ let url = Url::from_str(url)
+ .map_err(|e| crate::git::raw::Error::from_str(e.to_string().as_str()))?;
let id = thread::current().id();
let nodes = NODES.lock().expect("lock cannot be poisoned");
let storage = if let Some(storage) = nodes.get(&(id, url.node)) {
Diff in /workspace/src/crates/radicle/src/storage/git.rs:27:
ReadRepository, ReadStorage, Remote, Remotes, RepositoryInfo, SetHead, SignRepository,
WriteRepository, WriteStorage,
};
-use crate::{git, node, git::Oid};
+use crate::{git, git::Oid, node};
use crate::git::fmt::{
refname, refspec, refspec::PatternStr, refspec::PatternString, Qualified, RefString,
Diff in /workspace/src/crates/radicle/src/storage/git.rs:542:
pub fn remote_ids(
&self,
- ) -> Result<impl Iterator<Item = Result<RemoteId, refs::Error>> + '_, crate::git::raw::Error> {
+ ) -> Result<impl Iterator<Item = Result<RemoteId, refs::Error>> + '_, crate::git::raw::Error>
+ {
let iter = self.backend.references_glob(SIGREFS_GLOB.as_str())?.map(
|reference| -> Result<RemoteId, refs::Error> {
let r = reference?;
Diff in /workspace/src/crates/radicle/src/storage/git.rs:991:
}
pub fn parse_signatures(msg: &str) -> Result<HashMap<PublicKey, Signature>, Error> {
- let trailers =
- crate::git::raw::message_trailers_strs(msg).map_err(|_| Error::SignatureTrailerFormat)?;
+ let trailers = crate::git::raw::message_trailers_strs(msg)
+ .map_err(|_| Error::SignatureTrailerFormat)?;
let mut signatures = HashMap::with_capacity(trailers.len());
for (key, val) in trailers.iter() {
Diff in /workspace/src/crates/radicle/src/storage/git.rs:1102:
let (rid, _, working, _) =
fixtures::project(tmp.path().join("project"), &storage, &signer).unwrap();
let stored = storage.repository(rid).unwrap();
- let sig = crate::git::raw::Signature::now(&alice.to_string(), "anonymous@radicle.example.com")
- .unwrap();
+ let sig =
+ crate::git::raw::Signature::now(&alice.to_string(), "anonymous@radicle.example.com")
+ .unwrap();
let head = working.head().unwrap().peel_to_commit().unwrap();
git::commit(
Diff in /workspace/src/crates/radicle/src/storage/refs.rs:14:
use crate::git;
use crate::git::raw::ErrorExt as _;
+use crate::git::Oid;
use crate::node::device::Device;
use crate::profile::env;
use crate::storage;
Diff in /workspace/src/crates/radicle/src/storage/refs.rs:20:
use crate::storage::{ReadRepository, RemoteId, RepoId, WriteRepository};
-use crate::git::Oid;
pub use crate::git::refs::storage::*;
Diff in /workspace/src/crates/radicle/src/storage/refs.rs:386:
}
impl RefsAt {
- pub fn new<S: ReadRepository>(repo: &S, remote: RemoteId) -> Result<Self, crate::git::raw::Error> {
+ pub fn new<S: ReadRepository>(
+ repo: &S,
+ remote: RemoteId,
+ ) -> Result<Self, crate::git::raw::Error> {
let at = repo.reference_oid(&remote, &storage::refs::SIGREFS_BRANCH)?;
Ok(RefsAt { remote, at })
}
Diff in /workspace/src/crates/radicle/src/storage.rs:18:
use crate::collections::RandomMap;
use crate::git::canonical;
use crate::git::fmt::{refspec::PatternString, refspec::Refspec, Qualified, RefStr, RefString};
-use crate::git::RefError;
use crate::git::raw::ErrorExt as _;
+use crate::git::RefError;
use crate::identity::{doc, Did, PayloadError};
use crate::identity::{Doc, DocAt, DocError};
use crate::identity::{Identity, RepoId};
Diff in /workspace/src/crates/radicle/src/storage.rs:30:
use self::refs::{RefsAt, SignedRefs};
use crate::git::UserInfo;
-
/// Basic repository information.
#[derive(Debug, Clone, PartialEq, Eq)]
Diff in /workspace/src/crates/radicle/src/test/fixtures.rs:161:
}
/// Create an empty commit on the current branch.
-pub fn commit(msg: &str, parents: &[crate::git::Oid], repo: &crate::git::raw::Repository) -> crate::git::Oid {
+pub fn commit(
+ msg: &str,
+ parents: &[crate::git::Oid],
+ repo: &crate::git::raw::Repository,
+) -> crate::git::Oid {
let head = repo.head().unwrap();
let sig = crate::git::raw::Signature::new(
USER_NAME,
Diff in /workspace/src/crates/radicle/src/test/fixtures.rs:266:
}
/// Creates a regular repository at the given path with a couple of commits.
- pub fn repository<P: AsRef<Path>>(path: P) -> (crate::git::raw::Repository, crate::git::raw::Oid) {
+ pub fn repository<P: AsRef<Path>>(
+ path: P,
+ ) -> (crate::git::raw::Repository, crate::git::raw::Oid) {
let repo = crate::git::raw::Repository::init_opts(
path,
crate::git::raw::RepositoryInitOptions::new().external_template(false),
Diff in /workspace/src/crates/radicle-cli/src/commands/inbox.rs:6:
use localtime::LocalTime;
use radicle::cob::TypedId;
-use radicle::git::BranchName;
use radicle::git::fmt::Qualified;
+use radicle::git::BranchName;
use radicle::identity::Identity;
use radicle::issue::cache::Issues as _;
use radicle::node::notifications;
Diff in /workspace/src/crates/radicle-cli/src/commands/patch/checkout.rs:58:
let mut spinner = term::spinner("Performing checkout...");
let patch_branch = opts.branch(patch_id)?;
- let commit = match working.find_branch(patch_branch.as_str(), radicle::git::raw::BranchType::Local)
- {
- Ok(branch) if opts.force => {
- let commit = find_patch_commit(revision, stored, working)?;
- let mut r = branch.into_reference();
- r.set_target(commit.id(), &format!("force update '{patch_branch}'"))?;
- commit
- }
- Ok(branch) => {
- let head = branch.get().peel_to_commit()?;
- if revision.head() != head.id() {
- anyhow::bail!(
- "branch '{patch_branch}' already exists (use `--force` to overwrite)"
- );
+ let commit =
+ match working.find_branch(patch_branch.as_str(), radicle::git::raw::BranchType::Local) {
+ Ok(branch) if opts.force => {
+ let commit = find_patch_commit(revision, stored, working)?;
+ let mut r = branch.into_reference();
+ r.set_target(commit.id(), &format!("force update '{patch_branch}'"))?;
+ commit
}
- head
- }
- Err(e) if e.is_not_found() => {
- let commit = find_patch_commit(revision, stored, working)?;
- // Create patch branch and switch to it.
- working.branch(patch_branch.as_str(), &commit, true)?;
- commit
- }
- Err(e) => return Err(e.into()),
- };
+ Ok(branch) => {
+ let head = branch.get().peel_to_commit()?;
+ if revision.head() != head.id() {
+ anyhow::bail!(
+ "branch '{patch_branch}' already exists (use `--force` to overwrite)"
+ );
+ }
+ head
+ }
+ Err(e) if e.is_not_found() => {
+ let commit = find_patch_commit(revision, stored, working)?;
+ // Create patch branch and switch to it.
+ working.branch(patch_branch.as_str(), &commit, true)?;
+ commit
+ }
+ Err(e) => return Err(e.into()),
+ };
if opts.force {
let mut builder = radicle::git::raw::build::CheckoutBuilder::new();
Diff in /workspace/src/crates/radicle-cli/src/commands/patch/review/builder.rs:24:
use radicle::crypto;
use radicle::git;
use radicle::git::raw;
+use radicle::git::Oid;
use radicle::node::device::Device;
use radicle::prelude::*;
use radicle::storage::git::{cob::DraftStore, Repository};
Diff in /workspace/src/crates/radicle-cli/src/commands/patch/review/builder.rs:30:
-use radicle::git::Oid;
use radicle_surf::diff::*;
use radicle_term::{Element, VStack};
Diff in /workspace/src/crates/radicle-cli/src/commands/patch/update.rs:1:
use radicle::cob::patch;
use radicle::git::raw;
+use radicle::git::Oid;
use radicle::prelude::*;
use radicle::storage::git::Repository;
-use radicle::git::Oid;
use crate::terminal as term;
use crate::terminal::patch::*;
Diff in /workspace/src/crates/radicle-cli/src/git.rs:20:
use radicle::crypto::ssh;
use radicle::git;
-use radicle::git::{Version, VERSION_REQUIRED};
use radicle::git::raw;
+use radicle::git::{Version, VERSION_REQUIRED};
use radicle::prelude::{NodeId, RepoId};
use radicle::storage::git::transport;
Diff in /workspace/src/crates/radicle-cli/src/terminal/patch/common.rs:2:
use radicle::git;
use radicle::git::raw;
+use radicle::git::Oid;
use radicle::prelude::*;
use radicle::storage::git::Repository;
-use radicle::git::Oid;
use crate::terminal as term;
Diff in /workspace/src/crates/radicle-fetch/src/git/repository/error.rs:1:
+use radicle::git::raw;
use radicle::git::{
fmt::{Namespaced, Qualified},
Oid,
Diff in /workspace/src/crates/radicle-fetch/src/git/repository/error.rs:4:
};
-use radicle::git::raw;
use thiserror::Error;
#[derive(Debug, Error)]
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:1:
pub mod error;
use either::Either;
+use radicle::git::raw;
use radicle::git::{
fmt::{Namespaced, Qualified},
Oid,
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:7:
};
-use radicle::git::raw;
use radicle::storage::git::Repository;
use super::refs::{Applied, Policy, RefUpdate, Update};
[2025-10-07T22:54:12Z ERROR ambient_ci::plan] ERROR: Action failed: failed to execute cargo
[2025-10-07T22:54:12Z ERROR ambient_ci::plan] caused by: command failed: "cargo": exit code 1
ERROR: failed to execute cargo
caused by: command failed: "cargo": exit code 1
EXIT CODE: 1
[2025-10-07T22:54:16Z INFO ambient] ambient ends successfully
{
"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": "1cd8044782249b95d577e0678f10eba8c6f32e35",
"author": {
"id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
"alias": "lorenz"
},
"title": "A Little Less `git2`",
"state": {
"status": "draft",
"conflicts": []
},
"before": "2e77d5ef4df526a8453d38d6d2d735fe9ce7e423",
"after": "7fe1584106be32b9f2c5c153bd0d6052016dd4eb",
"commits": [
"7fe1584106be32b9f2c5c153bd0d6052016dd4eb",
"5b46299ae5bdd3515d1d737054d18f0597455729",
"1c975203888e6a3d60f21bf310898922181a95fe",
"6dfd5a3fbc74281d42e5a6171566c1b655444f84",
"0ba5356337175ac111e012a0a8002496e54107f4",
"8bfb20e10449312161862bcb89365691a024072d"
],
"target": "2e77d5ef4df526a8453d38d6d2d735fe9ce7e423",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "1cd8044782249b95d577e0678f10eba8c6f32e35",
"author": {
"id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
"alias": "lorenz"
},
"description": "(I should write up a lengthy description…)",
"base": "5caa7b302a7d4f247aaa7cc688a692aac4486464",
"oid": "d0b815c1715dfd78a7aba632356513370d189eaa",
"timestamp": 1759707360
},
{
"id": "8a36f8eecf18c0e990125564da0f89bbbbb00aa6",
"author": {
"id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
"alias": "lorenz"
},
"description": "Make `git2` an *optional* dependency of `radicle-cob`, *no* dependency\n(also not transitively) of `radicle-crypto`, and refactor `radicle` to\ndepend on crates that in turn do not depend on `git2`\n*non-optionally*.\n\n### New Crates\n\n`radicle-git-metadata`, `radicle-git-ref-format`, and `radicle-oid` are\nintroduced. Refer to their documentation in the respective `lib.rs`.\n\n### Refactoring\n\nThe main offending dependency of `radicle-cob` is `radicle-git-ext`\nfrom the `radicle-git` workspace in repository\n(rad:z6cFWeWpnZNHh9rUW8phgA3b5yGt) which *non-optionally* depends on\n`git2`.\n\nSo, to achieve removal of this dependency:\n\n 1. The crate is refactored to depend on the new crates\n `radicle-git-ref-format` `radicle-git-metadata`, and\n `radicle-oid` introduced in the previous commits, instead of\n `radicle-git-ext`.\n 2. Some code from the `radicle-git-ext` crate in the `radicle-git`\n workspace in repository (rad:z6cFWeWpnZNHh9rUW8phgA3b5yGt) is\n copied. See `crates/radicle-cob/src/backend/git/commit.rs`.\n\nThis cascades to `radicle` and its dependents.\n\n Firstly, the there is an\n`impl Deref<Target=git2::Oid> for radicle_git_ext::Oid`. This made\nit very convenient to just deref to obtain the wrapped `git2::Oid`,\nso there are many expressions of the shape `*oid` in `radicle` and\nits dependents. However `radicle-oid` does not provide\n`impl Deref<Target=git2::Oid> for radicle_oid::Oid`, as notably,\n`Target` is an associated type, and not a type parameter, so an\nimplementation of `Deref` would tie the new `Oid` too tightly to a\nparticular implementation.\nInstead, work with `impl From<radicle_oid::Oid> for git2::Oid`\n(which can be enabled using the feature flag `radicle-oid/git2`).\nThis explains the changes from `*oid` to `oid.into()` at every\ntransition to \"`git2` land\".\n\n Secondly, `radicle` and its dependents are refactored to also depend\non `radicle-git-ref-format` and (much less prominently)\n`radicle-git-metadata` instead of `radicle-git-ext`\nThis is to avoid pulling in `git2` via these dependencies.\n\n Thirdly, as the re-exports in `crates/radicle/src/git.rs` change,\nthey are at the same time also cleaned up. Notably, the types from\n`radicle-git-ref-format` are re-exported under `fmt` only, not \"twice\".\nAlso, instead of re-exporting all of `git2`, the module `raw` actually\nonly provides the re-exports required to build the workspace\n(potentially breaking dependents outside the workspace, but given just\nhow many types are re-exported, this seems unlikely) and injects an\nextension trait for more ergonomic error handling. Uses of\n`radicle_git_ext::Error` are replaced with uses of the extension trait.\n\nWhile overall this obviously is very much a breaking change, these\nchanges should mostly amount to changing from `Deref` to `Into`, i.e.,\n`*oid` → `oid.into()`, importing the extension trait as necessary, and\nrewriting imports for `radicle::git::fmt`. This is indicated by the\nmostly mechanical nature of the changes to\n`crates/radicle-{cli,node,remote-helper}`.",
"base": "2e77d5ef4df526a8453d38d6d2d735fe9ce7e423",
"oid": "7fe1584106be32b9f2c5c153bd0d6052016dd4eb",
"timestamp": 1759877418
}
]
}
}[2025-10-07T22:53:44Z INFO ambient] ambient starts
[2025-10-07T22:53:44Z DEBUG ambient] load default configuration file /home/_rad/.config/ambient/config.yaml if it exists
deprecated: the `cpus` field is replaced by `qemu.cpus`
deprecated: the `memory` field is replaced by `qemu.memory`
[2025-10-07T22:53:44Z DEBUG ambient] complete configuration: Config {
tmpdir: "/home/_rad/tmp",
image_store: "/home/_rad/ambient-images",
projects: "/dev/null",
state: "/home/_rad/ambient-state",
rsync_target: None,
rsync_target_base: None,
rsync_target_map: None,
dput_target: None,
executor: Some(
"/usr/bin/ambient-execute-plan",
),
artifacts_max_size: Byte(
1000000000,
),
cache_max_size: Byte(
30000000000,
),
qemu: QemuConfig {
cpus: 2,
memory: Byte(
12000000000,
),
kvm_binary: "/usr/bin/kvm",
ovmf_vars_file: "/usr/share/ovmf/OVMF.fd",
ovmf_code_file: "/usr/share/ovmf/OVMF.fd",
},
}
[2025-10-07T22:53:44Z DEBUG ambient] configuration: Config {
tmpdir: "/home/_rad/tmp",
image_store: "/home/_rad/ambient-images",
projects: "/dev/null",
state: "/home/_rad/ambient-state",
rsync_target: None,
rsync_target_base: None,
rsync_target_map: None,
dput_target: None,
executor: Some(
"/usr/bin/ambient-execute-plan",
),
artifacts_max_size: Byte(
1000000000,
),
cache_max_size: Byte(
30000000000,
),
qemu: QemuConfig {
cpus: 2,
memory: Byte(
12000000000,
),
kvm_binary: "/usr/bin/kvm",
ovmf_vars_file: "/usr/share/ovmf/OVMF.fd",
ovmf_code_file: "/usr/share/ovmf/OVMF.fd",
},
}
[2025-10-07T22:53:44Z DEBUG ambient_ci::project] load project state from /home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/meta.yaml
[2025-10-07T22:53:44Z DEBUG ambient_ci::run] latest commit: "2e77d5ef4df526a8453d38d6d2d735fe9ce7e423"
[2025-10-07T22:53:44Z DEBUG ambient_ci::run] is a git repository
[2025-10-07T22:53:44Z DEBUG ambient_ci::run] git repository is clean
[2025-10-07T22:53:44Z DEBUG ambient_ci::run] current (HEAD) commit: 7fe1584106be32b9f2c5c153bd0d6052016dd4eb
[2025-10-07T22:53:44Z DEBUG ambient_ci::run] no dry run requested
[2025-10-07T22:53:44Z DEBUG ambient_ci::run] forced run requested
[2025-10-07T22:53:44Z DEBUG ambient_ci::run] run? true
[2025-10-07T22:53:44Z INFO ambient_ci::run] project rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5: running CI
[2025-10-07T22:53:44Z DEBUG ambient_ci::run] Executing pre-plan steps
[2025-10-07T22:53:44Z DEBUG ambient_ci::plan] RUN: Action CargoFetch {
sourcedir: "/tmp/.tmpli3Mah/src",
}
[2025-10-07T22:53:44Z DEBUG ambient_ci::action] Plan::execute: plan=CargoFetch {
sourcedir: "/tmp/.tmpli3Mah/src",
}
[2025-10-07T22:53:44Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"CARGO_HOME": "/home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/dependencies",
"CARGO_TARGET_DIR": "/home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/cache",
"PATH": "/root/.cargo/bin:/bin:/home/_rad/.radicle/bin:/home/_rad/.cargo/bin",
},
source_dir: "/tmp/.tmpli3Mah/src",
}
SPAWN: argv=["cargo", "--version"]
cwd=/tmp/.tmpli3Mah/src (exists? true)
cargo 1.88.0 (873a06493 2025-05-10)
SPAWN: argv=["cargo", "clippy", "--version"]
cwd=/tmp/.tmpli3Mah/src (exists? true)
clippy 0.1.88 (6b00bc3880 2025-06-23)
SPAWN: argv=["rustc", "--version"]
cwd=/tmp/.tmpli3Mah/src (exists? true)
rustc 1.88.0 (6b00bc388 2025-06-23)
SPAWN: argv=["cargo", "fetch"]
cwd=/tmp/.tmpli3Mah/src (exists? true)
[2025-10-07T22:53:44Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:53:44Z DEBUG ambient_ci::plan] All actions were performed successfully
[2025-10-07T22:53:44Z DEBUG ambient_ci::run] create virtual drive /home/_rad/tmp/.tmpqo8cQT/src.tar
[2025-10-07T22:53:44Z DEBUG ambient_ci::run] create virtual drive /home/_rad/tmp/.tmpqo8cQT/deps.tar
[2025-10-07T22:53:46Z DEBUG ambient_ci::run] create_executor_vdrive: executor="/usr/bin/ambient-execute-plan"
[2025-10-07T22:53:46Z DEBUG ambient_ci::run] create_executor_vdrive: plan=RunnablePlan {
steps: [
Mkdir {
pathname: "/workspace",
},
Mkdir {
pathname: "/workspace/artifacts",
},
TarExtract {
archive: "/dev/vdc",
directory: "/workspace/src",
},
TarExtract {
archive: "/dev/vdf",
directory: "/workspace/deps",
},
TarExtract {
archive: "/dev/vde",
directory: "/workspace/cache",
},
Spawn {
argv: [
"find",
"/workspace",
"-maxdepth",
"2",
"-ls",
],
},
CargoFmt,
CargoClippy,
CargoBuild,
CargoTest,
Shell {
shell: "# Because of a (temporary) limitation in Ambient, we need to set\n# these variables manually. Once Ambient manages environment\n# variables better, these can be deleted.\nexport CARGO_TARGET_DIR=/workspace/cache\nexport CARGO_HOME=/workspace/deps\nexport HOME=/root\nexport PATH=\"/root/.cargo/bin:$PATH\"\nexport RUSTDOCFLAGS='-D warnings'\n\ncargo doc --workspace --no-deps\n",
},
Shell {
shell: "# Because of a (temporary) limitation in Ambient, we need to set\n# these variables manually. Once Ambient manages environment\n# variables better, these can be deleted.\nexport CARGO_TARGET_DIR=/workspace/cache\nexport CARGO_HOME=/workspace/deps\nexport HOME=/root\nexport PATH=\"/root/.cargo/bin:$PATH\"\n\n# These are based on debian/control.\nexport DEBEMAIL=liw@liw.fi\nexport DEBFULLNAME=\"Lars Wirzenius\"\n\n# Clean up after tests and documentation building. The Debian\n# package building tools do not want changes outside the\n# `debian` directory, compared to what is committed to Git, from\n# which the \"upstream tarball\" is created.\ngit reset --hard\ngit clean -fdx\ngit status --ignored\n\n# Update debian/changelog with a new version so that every run\n# creates a newer version. This avoids us having to update the\n# file manually for every CI run.\nV=\"$(dpkg-parsechangelog -SVersion | sed 's/-[^-]*$//')\"\nT=\"$(date -u \"+%Y%m%dT%H%M%S\")\"\nversion=\"$V.ci$T-1\"\ndch -v \"$version\" \"CI build under Ambient.\"\ndch -r ''\n",
},
Deb,
TarCreate {
archive: "/dev/vde",
directory: "/workspace/cache",
},
TarCreate {
archive: "/dev/vdd",
directory: "/workspace/artifacts",
},
],
executor_drive: Some(
"/dev/vdb",
),
source_drive: Some(
"/dev/vdc",
),
artifact_drive: Some(
"/dev/vdd",
),
cache_drive: Some(
"/dev/vde",
),
deps_drive: Some(
"/dev/vdf",
),
workspace_dir: Some(
"/workspace",
),
source_dir: Some(
"/workspace/src",
),
deps_dir: Some(
"/workspace/deps",
),
cache_dir: Some(
"/workspace/cache",
),
artifacts_dir: Some(
"/workspace/artifacts",
),
}
[2025-10-07T22:53:46Z DEBUG ambient_ci::run] executor bin /usr/bin/ambient-execute-plan
[2025-10-07T22:53:46Z DEBUG ambient_ci::run] copying /usr/bin/ambient-execute-plan to /home/_rad/tmp/.tmpqo8cQT/ambient-execute-plan/run-ci
[2025-10-07T22:53:46Z DEBUG ambient_ci::run] copy OK: true
[2025-10-07T22:53:46Z DEBUG ambient_ci::run] create virtual drive /home/_rad/tmp/.tmpqo8cQT/executor.tar
[2025-10-07T22:53:52Z DEBUG ambient_ci::project] removing run log file /home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log
[2025-10-07T22:53:52Z DEBUG ambient_ci::project] statedir is /home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5, exists? true
[2025-10-07T22:53:52Z DEBUG ambient_ci::project] creating run log file /home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log
[2025-10-07T22:53:52Z DEBUG ambient_ci::project] created run log file /home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log OK
[2025-10-07T22:53:52Z DEBUG ambient_ci::cloud_init] with_hostname called: "ambient"
[2025-10-07T22:53:52Z DEBUG ambient_ci::cloud_init] with_runcmd called: "echo xyzzy > /dev/ttyS1"
[2025-10-07T22:53:52Z DEBUG ambient_ci::cloud_init] with_runcmd called: "\n(set -xeu\nenv\ndir=\"$(mktemp -d)\"\ncd \"$dir\"\ntar -xvf /dev/vdb\nfind -ls || true\nldd ./run-ci || true\necho ================================ BEGIN ================================\nexport RUST_BACKTRACE=1\nif ./run-ci; then\n echo \"EXIT CODE: 0\"\nelse\n echo \"EXIT CODE: $?\"\nfi) > /dev/ttyS1 2>&1\n"
[2025-10-07T22:53:52Z DEBUG ambient_ci::cloud_init] with_runcmd called: "poweroff"
[2025-10-07T22:53:52Z DEBUG ambient_ci::cloud_init] LocalDataStoreBuilder: LocalDataStoreBuilder {
hostname: Some(
"ambient",
),
network: false,
bootcmd: [],
runcmd: [
"echo xyzzy > /dev/ttyS1",
"\n(set -xeu\nenv\ndir=\"$(mktemp -d)\"\ncd \"$dir\"\ntar -xvf /dev/vdb\nfind -ls || true\nldd ./run-ci || true\necho ================================ BEGIN ================================\nexport RUST_BACKTRACE=1\nif ./run-ci; then\n echo \"EXIT CODE: 0\"\nelse\n echo \"EXIT CODE: $?\"\nfi) > /dev/ttyS1 2>&1\n",
"poweroff",
],
}
[2025-10-07T22:53:52Z DEBUG ambient_ci::qemu] run QEMU
[2025-10-07T22:53:52Z DEBUG ambient_ci::qemu] create copy-on-write image and UEFI vars file
[2025-10-07T22:53:52Z DEBUG ambient_ci::qemu_utils] qemu-img create /home/_rad/tmp/.tmpgV2DA9/.tmpYOkQ7f/vm.qcow2 backing on /home/_rad/ambient.qcow2
[2025-10-07T22:53:52Z DEBUG ambient_ci::qemu] create cloud-init ISO file
[2025-10-07T22:53:52Z DEBUG ambient_ci::cloud_init] LocalDataStore: LocalDataStore {
hostname: "ambient",
network: false,
bootcmd: [],
runcmd: [
"echo xyzzy > /dev/ttyS1",
"\n(set -xeu\nenv\ndir=\"$(mktemp -d)\"\ncd \"$dir\"\ntar -xvf /dev/vdb\nfind -ls || true\nldd ./run-ci || true\necho ================================ BEGIN ================================\nexport RUST_BACKTRACE=1\nif ./run-ci; then\n echo \"EXIT CODE: 0\"\nelse\n echo \"EXIT CODE: $?\"\nfi) > /dev/ttyS1 2>&1\n",
"poweroff",
],
}
[2025-10-07T22:53:52Z DEBUG ambient_ci::cloud_init] write /tmp/.tmpahnxg7/meta-data
[2025-10-07T22:53:52Z DEBUG ambient_ci::cloud_init] write /tmp/.tmpahnxg7/user-data
[2025-10-07T22:53:52Z DEBUG ambient_ci::qemu] set console log file to /home/_rad/tmp/.tmpgV2DA9/.tmpYOkQ7f/console.log
[2025-10-07T22:53:52Z DEBUG ambient_ci::util] create file /home/_rad/tmp/.tmpgV2DA9/.tmpYOkQ7f/console.log
[2025-10-07T22:53:52Z DEBUG ambient_ci::qemu] set run file to /home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log
[2025-10-07T22:53:52Z DEBUG ambient_ci::util] create file /home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log
[2025-10-07T22:53:52Z DEBUG ambient_ci::qemu] run QEMU: QemuArgs {
args: [
"-m",
"11444",
"-smp",
"cpus=2",
"-cpu",
"kvm64",
"-machine",
"type=q35,accel=kvm,usb=off",
"-uuid",
"a85c9de7-edc0-4e54-bead-112e5733582c",
"-boot",
"strict=on",
"-name",
"ambient-ci-vm",
"-rtc",
"base=utc,driftfix=slew",
"-display",
"none",
"-device",
"virtio-rng-pci",
"-serial",
"file:/home/_rad/tmp/.tmpgV2DA9/.tmpYOkQ7f/console.log",
"-serial",
"file:/home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log",
"-drive",
"if=pflash,format=raw,unit=0,file=/usr/share/ovmf/OVMF.fd,readonly=on",
"-drive",
"if=pflash,format=raw,unit=1,file=/home/_rad/tmp/.tmpgV2DA9/.tmpYOkQ7f/vars.fd",
"-drive",
"format=qcow2,if=virtio,file=/home/_rad/tmp/.tmpgV2DA9/.tmpYOkQ7f/vm.qcow2",
"-drive",
"format=raw,if=virtio,file=/home/_rad/tmp/.tmpqo8cQT/executor.tar,readonly=on",
"-cdrom",
"/home/_rad/tmp/.tmpgV2DA9/.tmpYOkQ7f/cloud_init.iso",
"-drive",
"format=raw,if=virtio,file=/home/_rad/tmp/.tmpqo8cQT/src.tar,readonly=on",
"-drive",
"format=raw,if=virtio,file=/home/_rad/tmp/.tmpqo8cQT/artifacts.tar",
"-drive",
"format=raw,if=virtio,file=/home/_rad/tmp/.tmpqo8cQT/cache.tar",
"-drive",
"format=raw,if=virtio,file=/home/_rad/tmp/.tmpqo8cQT/deps.tar,readonly=on",
"-nodefaults",
"-no-user-config",
],
}
[2025-10-07T22:54:14Z DEBUG ambient_ci::qemu] QEMU finished OK
[2025-10-07T22:54:14Z DEBUG ambient_ci::qemu] run log:
--------------------==========
[2025-10-07T22:53:55Z TRACE ambient_execute_plan] ambient-execute-plan version 0.8.0@735cb79 starts
[2025-10-07T22:53:55Z DEBUG ambient_execute_plan] ambient-execute-plan version 0.8.0@735cb79 starts
[2025-10-07T22:53:55Z INFO ambient_execute_plan] ambient-execute-plan version 0.8.0@735cb79 starts
[2025-10-07T22:53:55Z WARN ambient_execute_plan] ambient-execute-plan version 0.8.0@735cb79 starts
[2025-10-07T22:53:55Z ERROR ambient_execute_plan] ambient-execute-plan version 0.8.0@735cb79 starts
RunnablePlan::from_file: filename=plan.yaml
steps:
- action: mkdir
pathname: /workspace
- action: mkdir
pathname: /workspace/artifacts
- action: tar_extract
archive: /dev/vdc
directory: /workspace/src
- action: tar_extract
archive: /dev/vdf
directory: /workspace/deps
- action: tar_extract
archive: /dev/vde
directory: /workspace/cache
- action: spawn
argv:
- find
- /workspace
- -maxdepth
- '2'
- -ls
- action: cargo_fmt
- action: cargo_clippy
- action: cargo_build
- action: cargo_test
- action: shell
shell: |
# Because of a (temporary) limitation in Ambient, we need to set
# these variables manually. Once Ambient manages environment
# variables better, these can be deleted.
export CARGO_TARGET_DIR=/workspace/cache
export CARGO_HOME=/workspace/deps
export HOME=/root
export PATH="/root/.cargo/bin:$PATH"
export RUSTDOCFLAGS='-D warnings'
cargo doc --workspace --no-deps
- action: shell
shell: |
# Because of a (temporary) limitation in Ambient, we need to set
# these variables manually. Once Ambient manages environment
# variables better, these can be deleted.
export CARGO_TARGET_DIR=/workspace/cache
export CARGO_HOME=/workspace/deps
export HOME=/root
export PATH="/root/.cargo/bin:$PATH"
# These are based on debian/control.
export DEBEMAIL=liw@liw.fi
export DEBFULLNAME="Lars Wirzenius"
# Clean up after tests and documentation building. The Debian
# package building tools do not want changes outside the
# `debian` directory, compared to what is committed to Git, from
# which the "upstream tarball" is created.
git reset --hard
git clean -fdx
git status --ignored
# Update debian/changelog with a new version so that every run
# creates a newer version. This avoids us having to update the
# file manually for every CI run.
V="$(dpkg-parsechangelog -SVersion | sed 's/-[^-]*$//')"
T="$(date -u "+%Y%m%dT%H%M%S")"
version="$V.ci$T-1"
dch -v "$version" "CI build under Ambient."
dch -r ''
- action: deb
- action: tar_create
archive: /dev/vde
directory: /workspace/cache
- action: tar_create
archive: /dev/vdd
directory: /workspace/artifacts
executor_drive: /dev/vdb
source_drive: /dev/vdc
artifact_drive: /dev/vdd
cache_drive: /dev/vde
deps_drive: /dev/vdf
workspace_dir: /workspace
source_dir: /workspace/src
deps_dir: /workspace/deps
cache_dir: /workspace/cache
artifacts_dir: /workspace/artifacts
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action Mkdir {
pathname: "/workspace",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: plan=Mkdir {
pathname: "/workspace",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action Mkdir {
pathname: "/workspace/artifacts",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: plan=Mkdir {
pathname: "/workspace/artifacts",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
archive: "/dev/vdc",
directory: "/workspace/src",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
archive: "/dev/vdc",
directory: "/workspace/src",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
[2025-10-07T22:53:55Z TRACE ambient_ci::vdrive] extracting /dev/vdc to /workspace/src
[2025-10-07T22:53:55Z TRACE ambient_ci::vdrive] extraction OK
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:53:55Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
archive: "/dev/vdf",
directory: "/workspace/deps",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
archive: "/dev/vdf",
directory: "/workspace/deps",
}
[2025-10-07T22:53:55Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
[2025-10-07T22:53:55Z TRACE ambient_ci::vdrive] extracting /dev/vdf to /workspace/deps
[2025-10-07T22:53:59Z TRACE ambient_ci::vdrive] extraction OK
[2025-10-07T22:53:59Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:53:59Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
archive: "/dev/vde",
directory: "/workspace/cache",
}
[2025-10-07T22:53:59Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
archive: "/dev/vde",
directory: "/workspace/cache",
}
[2025-10-07T22:53:59Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
[2025-10-07T22:53:59Z TRACE ambient_ci::vdrive] extracting /dev/vde to /workspace/cache
[2025-10-07T22:54:11Z TRACE ambient_ci::vdrive] extraction OK
[2025-10-07T22:54:11Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:54:11Z DEBUG ambient_ci::plan] RUN: Action Spawn {
argv: [
"find",
"/workspace",
"-maxdepth",
"2",
"-ls",
],
}
[2025-10-07T22:54:11Z DEBUG ambient_ci::action] Plan::execute: plan=Spawn {
argv: [
"find",
"/workspace",
"-maxdepth",
"2",
"-ls",
],
}
[2025-10-07T22:54:11Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
SPAWN: argv=["find", "/workspace", "-maxdepth", "2", "-ls"]
cwd=/workspace/src (exists? true)
5242881 4 drwxr-xr-x 6 root root 4096 Oct 7 22:53 /workspace
5242882 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/artifacts
5243710 4 drwxr-xr-x 3 root root 4096 Oct 7 22:53 /workspace/deps
5243711 4 drwxr-xr-x 5 root root 4096 Sep 10 13:40 /workspace/deps/registry
5291324 0 -rw-r--r-- 1 root root 0 Sep 10 13:40 /workspace/deps/.package-cache-mutate
5291323 180 -rw-r--r-- 1 root root 184320 Oct 7 22:53 /workspace/deps/.global-cache
5291325 0 -rw-r--r-- 1 root root 0 Sep 10 13:40 /workspace/deps/.package-cache
5374530 4 drwxr-xr-x 6 root root 4096 Oct 7 15:12 /workspace/cache
5384703 4 -rw-r--r-- 1 root root 218 Oct 7 15:11 /workspace/cache/.rustdoc_fingerprint.json
5374531 4 -rw-r--r-- 1 root root 1037 Oct 7 16:42 /workspace/cache/.rustc_info.json
5384704 4 drwxr-xr-x 7 root root 4096 Oct 7 15:07 /workspace/cache/debug
5374532 4 drwxr-xr-x 7 root root 4096 Oct 7 15:17 /workspace/cache/release
5384702 4 drwxr-xr-x 2 root root 4096 Oct 7 15:02 /workspace/cache/tmp
5379246 4 drwxr-xr-x 24 root root 4096 Oct 7 15:11 /workspace/cache/doc
5242883 4 drwxr-xr-x 12 root root 4096 Oct 7 22:53 /workspace/src
5243572 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/src/.cargo
5242925 4 drwxr-xr-x 20 root root 4096 Oct 7 22:53 /workspace/src/crates
5243551 4 -rw-r--r-- 1 root root 1079 Oct 7 22:53 /workspace/src/LICENSE-MIT
5243562 4 -rw-r--r-- 1 root root 101 Oct 7 22:53 /workspace/src/.gitignore
5243552 12 -rw-r--r-- 1 root root 9723 Oct 7 22:53 /workspace/src/LICENSE-APACHE
5242912 4 drwxr-xr-x 3 root root 4096 Oct 7 22:53 /workspace/src/debian
5243574 4 drwxr-xr-x 8 root root 4096 Oct 7 22:53 /workspace/src/.git
5242893 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/src/scripts
5242905 8 -rw-r--r-- 1 root root 8023 Oct 7 22:53 /workspace/src/rad.1.adoc
5243570 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/src/.config
5242909 12 -rw-r--r-- 1 root root 10819 Oct 7 22:53 /workspace/src/flake.nix
5242904 4 -rw-r--r-- 1 root root 426 Oct 7 22:53 /workspace/src/radicle-node.1.adoc
5243558 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/src/.radicle
5242903 4 -rw-r--r-- 1 root root 77 Oct 7 22:53 /workspace/src/rust-toolchain.toml
5242884 4 -rw-r--r-- 1 root root 3376 Oct 7 22:53 /workspace/src/Cargo.toml
5242908 4 -rw-r--r-- 1 root root 571 Oct 7 22:53 /workspace/src/git-remote-rad.1.adoc
5242906 12 -rw-r--r-- 1 root root 10975 Oct 7 22:53 /workspace/src/rad-patch.1.adoc
5242886 4 drwxr-xr-x 5 root root 4096 Oct 7 22:53 /workspace/src/systemd
5243569 4 -rw-r--r-- 1 root root 30 Oct 7 22:53 /workspace/src/.dockerignore
5243550 4 -rw-r--r-- 1 root root 3133 Oct 7 22:53 /workspace/src/README.md
5243556 16 -rw-r--r-- 1 root root 14022 Oct 7 22:53 /workspace/src/CHANGELOG.md
5243554 4 -rw-r--r-- 1 root root 1203 Oct 7 22:53 /workspace/src/DCO
5243561 4 -rw-r--r-- 1 root root 1083 Oct 7 22:53 /workspace/src/.gitsigners
5243535 4 drwxr-xr-x 2 root root 4096 Oct 7 22:53 /workspace/src/build
5243568 4 -rw-r--r-- 1 root root 61 Oct 7 22:53 /workspace/src/.env.seed
5243563 4 drwxr-xr-x 3 root root 4096 Oct 7 22:53 /workspace/src/.github
5243553 8 -rw-r--r-- 1 root root 7645 Oct 7 22:53 /workspace/src/HACKING.md
5243557 4 -rw-r--r-- 1 root root 79 Oct 7 22:53 /workspace/src/ARCHITECTURE.md
5243548 4 -rw-r--r-- 1 root root 1623 Oct 7 22:53 /workspace/src/build.rs
5243567 4 -rw-r--r-- 1 root root 42 Oct 7 22:53 /workspace/src/.envrc
5242911 8 -rw-r--r-- 1 root root 5432 Oct 7 22:53 /workspace/src/deny.toml
5243549 4 -rw-r--r-- 1 root root 2163 Oct 7 22:53 /workspace/src/VERSIONING.md
5242907 8 -rw-r--r-- 1 root root 7144 Oct 7 22:53 /workspace/src/rad-id.1.adoc
5243555 12 -rw-r--r-- 1 root root 9636 Oct 7 22:53 /workspace/src/CONTRIBUTING.md
5242885 124 -rw-r--r-- 1 root root 122964 Oct 7 22:53 /workspace/src/Cargo.lock
5242910 8 -rw-r--r-- 1 root root 5102 Oct 7 22:53 /workspace/src/flake.lock
[2025-10-07T22:54:11Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-10-07T22:54:11Z DEBUG ambient_ci::plan] RUN: Action CargoFmt
[2025-10-07T22:54:11Z DEBUG ambient_ci::action] Plan::execute: plan=CargoFmt
[2025-10-07T22:54:11Z DEBUG ambient_ci::action] Plan::execute: context=Context {
envs: {
"PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"CARGO_TARGET_DIR": "/workspace/cache",
"CARGO_HOME": "/workspace/deps",
},
source_dir: "/workspace/src",
}
SPAWN: argv=["cargo", "--version"]
cwd=/workspace/src (exists? true)
cargo 1.88.0 (873a06493 2025-05-10)
SPAWN: argv=["cargo", "clippy", "--version"]
cwd=/workspace/src (exists? true)
clippy 0.1.88 (6b00bc3880 2025-06-23)
SPAWN: argv=["rustc", "--version"]
cwd=/workspace/src (exists? true)
rustc 1.88.0 (6b00bc388 2025-06-23)
SPAWN: argv=["cargo", "fmt", "--check"]
cwd=/workspace/src (exists? true)
Diff in /workspace/src/crates/radicle/src/cob/common.rs:9:
use serde::{Deserialize, Serialize};
use thiserror::Error;
-use crate::prelude::{Did, PublicKey};
use crate::git::Oid;
+use crate::prelude::{Did, PublicKey};
/// Timestamp used for COB operations.
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
Diff in /workspace/src/crates/radicle/src/cob/external.rs:92:
use crate::cob::object::collaboration::Evaluate;
use crate::cob::op::{Op as CobOp, OpEncodingError};
use crate::cob::store::{Cob, CobAction};
-use crate::storage::ReadRepository;
use crate::git::Oid;
+use crate::storage::ReadRepository;
/// This prefix is used to generate the name of the command,
/// which is executed by the helper to apply operations.
Diff in /workspace/src/crates/radicle/src/cob/identity.rs:7:
use serde::{Deserialize, Serialize};
use thiserror::Error;
+use crate::git::Oid;
use crate::identity::doc::Doc;
use crate::node::device::Device;
use crate::node::NodeId;
Diff in /workspace/src/crates/radicle/src/cob/identity.rs:13:
use crate::storage;
-use crate::git::Oid;
use crate::{
cob,
cob::{
Diff in /workspace/src/crates/radicle/src/cob/issue.rs:982:
use super::*;
use crate::cob::{store::CobWithType, ActorId, Reaction};
+ use crate::git::Oid;
use crate::issue::cache::Issues as _;
use crate::test::arbitrary;
- use crate::git::Oid;
use crate::{assert_matches, test};
#[test]
Diff in /workspace/src/crates/radicle/src/cob/patch.rs:2001:
}
/// Merge a patch revision.
- pub fn merge(&mut self, revision: RevisionId, commit: crate::git::Oid) -> Result<(), store::Error> {
+ pub fn merge(
+ &mut self,
+ revision: RevisionId,
+ commit: crate::git::Oid,
+ ) -> Result<(), store::Error> {
self.push(Action::Merge { revision, commit })
}
Diff in /workspace/src/crates/radicle/src/cob/test.rs:12:
use crate::cob::{patch, Title};
use crate::cob::{Entry, History, Manifest, Timestamp, Version};
use crate::crypto::Signer;
+use crate::git::Oid;
use crate::node::device::Device;
use crate::prelude::Did;
use crate::profile::env;
Diff in /workspace/src/crates/radicle/src/cob/test.rs:18:
use crate::storage::ReadRepository;
use crate::test::arbitrary;
-use crate::git::Oid;
use super::store::{Cob, CobWithType};
use super::thread;
Diff in /workspace/src/crates/radicle/src/cob/test.rs:178:
"nonce": fastrand::u64(..),
}))
.unwrap();
- let oid = crate::git::raw::Oid::hash_object(crate::git::raw::ObjectType::Blob, &data).unwrap();
+ let oid =
+ crate::git::raw::Oid::hash_object(crate::git::raw::ObjectType::Blob, &data).unwrap();
let id = oid.into();
let author = *self.signer.public_key();
let actions = NonEmpty::from_vec(actions).unwrap();
Diff in /workspace/src/crates/radicle/src/cob/test.rs:279:
.to_string();
let hash =
- crate::git::raw::Oid::hash_object(crate::git::raw::ObjectType::Commit, commit.as_bytes()).unwrap();
+ crate::git::raw::Oid::hash_object(crate::git::raw::ObjectType::Commit, commit.as_bytes())
+ .unwrap();
(data, hash.into())
}
Diff in /workspace/src/crates/radicle/src/git/canonical/convergence.rs:1:
use std::{fmt, ops::ControlFlow};
-use crate::prelude::Did;
use crate::git::Oid;
+use crate::prelude::Did;
use super::{effects, error, Object};
Diff in /workspace/src/crates/radicle/src/git/canonical/effects.rs:3:
use crate::git;
use crate::git::fmt::Qualified;
use crate::git::raw::ErrorExt as _;
-use crate::prelude::Did;
use crate::git::Oid;
+use crate::prelude::Did;
use super::{FoundObjects, GraphAheadBehind, MergeBase, Object};
Diff in /workspace/src/crates/radicle/src/git/canonical/rules.rs:22:
use crate::git;
use crate::git::canonical;
use crate::git::canonical::Canonical;
+use crate::git::fmt::refspec::QualifiedPattern;
use crate::git::fmt::Qualified;
use crate::git::fmt::{refname, RefString};
-use crate::git::fmt::refspec::QualifiedPattern;
use crate::identity::{doc, Did};
const ASTERISK: char = '*';
Diff in /workspace/src/crates/radicle/src/git/canonical/rules.rs:781:
doc.delegates().clone()
}
- fn tag(name: RefString, head: crate::git::Oid, repo: &crate::git::raw::Repository) -> crate::git::Oid {
+ fn tag(
+ name: RefString,
+ head: crate::git::Oid,
+ repo: &crate::git::raw::Repository,
+ ) -> crate::git::Oid {
let commit = fixtures::commit(name.as_str(), &[head], repo);
let target = repo.find_object(commit.into(), None).unwrap();
let tagger = repo.signature().unwrap();
Diff in /workspace/src/crates/radicle/src/git/raw.rs:1:
//! This module re-exports selected items from the [`git2`] crate and provides
//! an extension trait for its [`git2::Error`] type to more conveniently handle
//! errors associated with the code [`git2::ErrorCode::NotFound`].
-//!
+//!
// Re-exports created by manually scanning the `heartwood` workspace on 2025-10-04.
// Re-exports that are only used within this crate.
Diff in /workspace/src/crates/radicle/src/git/raw.rs:8:
pub(crate) use git2::{
- message_trailers_strs,
-
- AutotagOption, Blob,
- Config,
- FetchOptions,
- FetchPrune,
- Object,
- RemoteCallbacks,
- Revwalk,
- Sort,
+ message_trailers_strs, AutotagOption, Blob, Config, FetchOptions, FetchPrune, Object,
+ RemoteCallbacks, Revwalk, Sort,
};
// Re-exports that are used by other crates in the workspace, including this crate.
Diff in /workspace/src/crates/radicle/src/git/raw.rs:22:
pub use git2::{
- Repository,
- RepositoryInitOptions,
- Error, ErrorClass, ErrorCode,
- BranchType,
- Commit,
+ Branch, BranchType, Commit, Direction, Error, ErrorClass, ErrorCode, FileMode, ObjectType, Oid,
+ Reference, Remote, Repository, RepositoryInitOptions, RepositoryOpenFlags, Signature, Time,
Tree,
- Oid,
- Direction,
- Reference,
- Signature,
- Remote,
- ObjectType,
- Branch,
- RepositoryOpenFlags,
- Time,
- FileMode,
};
// Re-exports that are used by other crates in the workspace, but *not* this crate.
Diff in /workspace/src/crates/radicle/src/git/raw.rs:42:
pub use git2::{
- MergeAnalysis, MergeOptions,
- AnnotatedCommit,
- Diff, DiffFindOptions, DiffOptions, DiffStats,
+ AnnotatedCommit, Diff, DiffFindOptions, DiffOptions, DiffStats, MergeAnalysis, MergeOptions,
};
// Re-exports for `radicle-cli`.
Diff in /workspace/src/crates/radicle/src/git.rs:181:
use radicle_cob as cob;
- use super::*;
use super::fmt::*;
+ use super::*;
/// Try to get a qualified reference from a generic reference.
- pub fn qualified_from<'a>(
- r: &'a raw::Reference,
- ) -> Result<(Qualified<'a>, Oid), RefError> {
+ pub fn qualified_from<'a>(r: &'a raw::Reference) -> Result<(Qualified<'a>, Oid), RefError> {
let name = r.name().ok_or(RefError::InvalidName)?;
let refstr = RefStr::try_from_str(name)?;
let target = r.resolve()?.target().ok_or(RefError::NoTarget)?;
Diff in /workspace/src/crates/radicle/src/git.rs:380:
///
/// `refs/namespaces/*/refs/drafts/cobs/<typename>/<object_id>`
///
- pub fn cobs(typename: &cob::TypeName, object_id: &cob::ObjectId) -> refspec::PatternString {
+ pub fn cobs(
+ typename: &cob::TypeName,
+ object_id: &cob::ObjectId,
+ ) -> refspec::PatternString {
pattern!("refs/namespaces/*")
.join(refname!("refs/drafts/cobs"))
.join(Component::from(typename))
Diff in /workspace/src/crates/radicle/src/git.rs:742:
Ok(())
}
-pub fn init_default_branch(
- repo: &raw::Repository,
-) -> Result<Option<String>, raw::Error> {
+pub fn init_default_branch(repo: &raw::Repository) -> Result<Option<String>, raw::Error> {
let config = repo.config().and_then(|mut c| c.snapshot())?;
let default_branch = config.get_str("init.defaultbranch")?;
let branch = repo.find_branch(default_branch, raw::BranchType::Local)?;
Diff in /workspace/src/crates/radicle/src/identity/doc.rs:1154:
let remote = arbitrary::gen::<RemoteId>(1);
let proj = arbitrary::gen::<RepoId>(1);
let repo = storage.create(proj).unwrap();
- let oid = crate::git::raw::Oid::from_str("2d52a53ce5e4f141148a5f770cfd3ead2d6a45b8").unwrap();
+ let oid =
+ crate::git::raw::Oid::from_str("2d52a53ce5e4f141148a5f770cfd3ead2d6a45b8").unwrap();
let err = repo.identity_head_of(&remote).unwrap_err();
{
Diff in /workspace/src/crates/radicle/src/identity/project.rs:7:
use thiserror::Error;
use crate::crypto;
+use crate::git::BranchName;
use crate::identity::doc;
use crate::identity::doc::Payload;
-use crate::git::BranchName;
pub use crypto::PublicKey;
Diff in /workspace/src/crates/radicle/src/lib.rs:42:
use super::*;
pub use crypto::{PublicKey, Verified};
+ pub use git::BranchName;
pub use identity::{project::Project, Did, Doc, RawDoc, RepoId};
pub use node::{Alias, NodeId, Timestamp};
pub use profile::Profile;
Diff in /workspace/src/crates/radicle/src/lib.rs:48:
- pub use git::BranchName;
- pub use storage::{
- ReadRepository, ReadStorage, SignRepository, WriteRepository, WriteStorage,
- };
+ pub use storage::{ReadRepository, ReadStorage, SignRepository, WriteRepository, WriteStorage};
}
Diff in /workspace/src/crates/radicle/src/node/events.rs:10:
use crossbeam_channel as chan;
use crate::git::fmt::Qualified;
+use crate::git::Oid;
use crate::node;
use crate::prelude::*;
use crate::storage::{refs, RefUpdate};
Diff in /workspace/src/crates/radicle/src/node/events.rs:16:
-use crate::git::Oid;
/// Maximum unconsumed events allowed per subscription.
pub const MAX_PENDING_EVENTS: usize = 8192;
Diff in /workspace/src/crates/radicle/src/node/notifications/store.rs:11:
use crate::git;
use crate::git::fmt::RefString;
+use crate::git::Oid;
use crate::git::RefError;
use crate::prelude::RepoId;
use crate::sql::transaction;
Diff in /workspace/src/crates/radicle/src/node/notifications/store.rs:17:
use crate::storage::RefUpdate;
-use crate::git::Oid;
use super::{
Notification, NotificationId, NotificationKind, NotificationKindError, NotificationStatus,
Diff in /workspace/src/crates/radicle/src/node/refs/store.rs:7:
use thiserror::Error;
use crate::git::fmt::Qualified;
+use crate::git::Oid;
use crate::node::Database;
use crate::node::NodeId;
use crate::prelude::RepoId;
Diff in /workspace/src/crates/radicle/src/node/refs/store.rs:13:
use crate::storage;
use crate::storage::{ReadRepository, ReadStorage, RemoteRepository, RepositoryError};
-use crate::git::Oid;
#[derive(Error, Debug)]
pub enum Error {
Diff in /workspace/src/crates/radicle/src/node/seed/store.rs:5:
use sqlite as sql;
use thiserror::Error;
+use crate::git::Oid;
use crate::node::address;
use crate::node::address::Store as _;
use crate::node::NodeId;
Diff in /workspace/src/crates/radicle/src/node/seed/store.rs:11:
use crate::node::{seed::SyncedSeed, Database, SyncedAt};
use crate::prelude::{RepoId, Timestamp};
-use crate::git::Oid;
#[derive(Error, Debug)]
pub enum Error {
Diff in /workspace/src/crates/radicle/src/node/seed.rs:25:
impl SyncedAt {
/// Load a new [`SyncedAt`] for the given remote.
- pub fn load<S: ReadRepository>(repo: &S, remote: RemoteId) -> Result<Self, crate::git::raw::Error> {
+ pub fn load<S: ReadRepository>(
+ repo: &S,
+ remote: RemoteId,
+ ) -> Result<Self, crate::git::raw::Error> {
let refs = RefsAt::new(repo, remote)?;
let oid = refs.at;
Diff in /workspace/src/crates/radicle/src/node/seed.rs:33:
}
/// Create a new [`SyncedAt`] given an OID, by looking up the timestamp in the repo.
- pub fn new<S: ReadRepository>(oid: crate::git::Oid, repo: &S) -> Result<Self, crate::git::raw::Error> {
+ pub fn new<S: ReadRepository>(
+ oid: crate::git::Oid,
+ repo: &S,
+ ) -> Result<Self, crate::git::raw::Error> {
let timestamp = repo.commit(oid)?.time();
let timestamp = LocalTime::from_secs(timestamp.seconds() as u64);
Diff in /workspace/src/crates/radicle/src/storage/git/transport/local.rs:30:
&self,
url: &str,
service: crate::git::raw::transport::Service,
- ) -> Result<Box<dyn crate::git::raw::transport::SmartSubtransportStream>, crate::git::raw::Error> {
- let url =
- Url::from_str(url).map_err(|e| crate::git::raw::Error::from_str(e.to_string().as_str()))?;
+ ) -> Result<Box<dyn crate::git::raw::transport::SmartSubtransportStream>, crate::git::raw::Error>
+ {
+ let url = Url::from_str(url)
+ .map_err(|e| crate::git::raw::Error::from_str(e.to_string().as_str()))?;
let service: &str = match service {
crate::git::raw::transport::Service::UploadPack
| crate::git::raw::transport::Service::UploadPackLs => "upload-pack",
Diff in /workspace/src/crates/radicle/src/storage/git/transport/remote/mock.rs:24:
&self,
url: &str,
service: crate::git::raw::transport::Service,
- ) -> Result<Box<dyn crate::git::raw::transport::SmartSubtransportStream>, crate::git::raw::Error> {
- let url =
- Url::from_str(url).map_err(|e| crate::git::raw::Error::from_str(e.to_string().as_str()))?;
+ ) -> Result<Box<dyn crate::git::raw::transport::SmartSubtransportStream>, crate::git::raw::Error>
+ {
+ let url = Url::from_str(url)
+ .map_err(|e| crate::git::raw::Error::from_str(e.to_string().as_str()))?;
let id = thread::current().id();
let nodes = NODES.lock().expect("lock cannot be poisoned");
let storage = if let Some(storage) = nodes.get(&(id, url.node)) {
Diff in /workspace/src/crates/radicle/src/storage/git.rs:27:
ReadRepository, ReadStorage, Remote, Remotes, RepositoryInfo, SetHead, SignRepository,
WriteRepository, WriteStorage,
};
-use crate::{git, node, git::Oid};
+use crate::{git, git::Oid, node};
use crate::git::fmt::{
refname, refspec, refspec::PatternStr, refspec::PatternString, Qualified, RefString,
Diff in /workspace/src/crates/radicle/src/storage/git.rs:542:
pub fn remote_ids(
&self,
- ) -> Result<impl Iterator<Item = Result<RemoteId, refs::Error>> + '_, crate::git::raw::Error> {
+ ) -> Result<impl Iterator<Item = Result<RemoteId, refs::Error>> + '_, crate::git::raw::Error>
+ {
let iter = self.backend.references_glob(SIGREFS_GLOB.as_str())?.map(
|reference| -> Result<RemoteId, refs::Error> {
let r = reference?;
Diff in /workspace/src/crates/radicle/src/storage/git.rs:991:
}
pub fn parse_signatures(msg: &str) -> Result<HashMap<PublicKey, Signature>, Error> {
- let trailers =
- crate::git::raw::message_trailers_strs(msg).map_err(|_| Error::SignatureTrailerFormat)?;
+ let trailers = crate::git::raw::message_trailers_strs(msg)
+ .map_err(|_| Error::SignatureTrailerFormat)?;
let mut signatures = HashMap::with_capacity(trailers.len());
for (key, val) in trailers.iter() {
Diff in /workspace/src/crates/radicle/src/storage/git.rs:1102:
let (rid, _, working, _) =
fixtures::project(tmp.path().join("project"), &storage, &signer).unwrap();
let stored = storage.repository(rid).unwrap();
- let sig = crate::git::raw::Signature::now(&alice.to_string(), "anonymous@radicle.example.com")
- .unwrap();
+ let sig =
+ crate::git::raw::Signature::now(&alice.to_string(), "anonymous@radicle.example.com")
+ .unwrap();
let head = working.head().unwrap().peel_to_commit().unwrap();
git::commit(
Diff in /workspace/src/crates/radicle/src/storage/refs.rs:14:
use crate::git;
use crate::git::raw::ErrorExt as _;
+use crate::git::Oid;
use crate::node::device::Device;
use crate::profile::env;
use crate::storage;
Diff in /workspace/src/crates/radicle/src/storage/refs.rs:20:
use crate::storage::{ReadRepository, RemoteId, RepoId, WriteRepository};
-use crate::git::Oid;
pub use crate::git::refs::storage::*;
Diff in /workspace/src/crates/radicle/src/storage/refs.rs:386:
}
impl RefsAt {
- pub fn new<S: ReadRepository>(repo: &S, remote: RemoteId) -> Result<Self, crate::git::raw::Error> {
+ pub fn new<S: ReadRepository>(
+ repo: &S,
+ remote: RemoteId,
+ ) -> Result<Self, crate::git::raw::Error> {
let at = repo.reference_oid(&remote, &storage::refs::SIGREFS_BRANCH)?;
Ok(RefsAt { remote, at })
}
Diff in /workspace/src/crates/radicle/src/storage.rs:18:
use crate::collections::RandomMap;
use crate::git::canonical;
use crate::git::fmt::{refspec::PatternString, refspec::Refspec, Qualified, RefStr, RefString};
-use crate::git::RefError;
use crate::git::raw::ErrorExt as _;
+use crate::git::RefError;
use crate::identity::{doc, Did, PayloadError};
use crate::identity::{Doc, DocAt, DocError};
use crate::identity::{Identity, RepoId};
Diff in /workspace/src/crates/radicle/src/storage.rs:30:
use self::refs::{RefsAt, SignedRefs};
use crate::git::UserInfo;
-
/// Basic repository information.
#[derive(Debug, Clone, PartialEq, Eq)]
Diff in /workspace/src/crates/radicle/src/test/fixtures.rs:161:
}
/// Create an empty commit on the current branch.
-pub fn commit(msg: &str, parents: &[crate::git::Oid], repo: &crate::git::raw::Repository) -> crate::git::Oid {
+pub fn commit(
+ msg: &str,
+ parents: &[crate::git::Oid],
+ repo: &crate::git::raw::Repository,
+) -> crate::git::Oid {
let head = repo.head().unwrap();
let sig = crate::git::raw::Signature::new(
USER_NAME,
Diff in /workspace/src/crates/radicle/src/test/fixtures.rs:266:
}
/// Creates a regular repository at the given path with a couple of commits.
- pub fn repository<P: AsRef<Path>>(path: P) -> (crate::git::raw::Repository, crate::git::raw::Oid) {
+ pub fn repository<P: AsRef<Path>>(
+ path: P,
+ ) -> (crate::git::raw::Repository, crate::git::raw::Oid) {
let repo = crate::git::raw::Repository::init_opts(
path,
crate::git::raw::RepositoryInitOptions::new().external_template(false),
Diff in /workspace/src/crates/radicle-cli/src/commands/inbox.rs:6:
use localtime::LocalTime;
use radicle::cob::TypedId;
-use radicle::git::BranchName;
use radicle::git::fmt::Qualified;
+use radicle::git::BranchName;
use radicle::identity::Identity;
use radicle::issue::cache::Issues as _;
use radicle::node::notifications;
Diff in /workspace/src/crates/radicle-cli/src/commands/patch/checkout.rs:58:
let mut spinner = term::spinner("Performing checkout...");
let patch_branch = opts.branch(patch_id)?;
- let commit = match working.find_branch(patch_branch.as_str(), radicle::git::raw::BranchType::Local)
- {
- Ok(branch) if opts.force => {
- let commit = find_patch_commit(revision, stored, working)?;
- let mut r = branch.into_reference();
- r.set_target(commit.id(), &format!("force update '{patch_branch}'"))?;
- commit
- }
- Ok(branch) => {
- let head = branch.get().peel_to_commit()?;
- if revision.head() != head.id() {
- anyhow::bail!(
- "branch '{patch_branch}' already exists (use `--force` to overwrite)"
- );
+ let commit =
+ match working.find_branch(patch_branch.as_str(), radicle::git::raw::BranchType::Local) {
+ Ok(branch) if opts.force => {
+ let commit = find_patch_commit(revision, stored, working)?;
+ let mut r = branch.into_reference();
+ r.set_target(commit.id(), &format!("force update '{patch_branch}'"))?;
+ commit
}
- head
- }
- Err(e) if e.is_not_found() => {
- let commit = find_patch_commit(revision, stored, working)?;
- // Create patch branch and switch to it.
- working.branch(patch_branch.as_str(), &commit, true)?;
- commit
- }
- Err(e) => return Err(e.into()),
- };
+ Ok(branch) => {
+ let head = branch.get().peel_to_commit()?;
+ if revision.head() != head.id() {
+ anyhow::bail!(
+ "branch '{patch_branch}' already exists (use `--force` to overwrite)"
+ );
+ }
+ head
+ }
+ Err(e) if e.is_not_found() => {
+ let commit = find_patch_commit(revision, stored, working)?;
+ // Create patch branch and switch to it.
+ working.branch(patch_branch.as_str(), &commit, true)?;
+ commit
+ }
+ Err(e) => return Err(e.into()),
+ };
if opts.force {
let mut builder = radicle::git::raw::build::CheckoutBuilder::new();
Diff in /workspace/src/crates/radicle-cli/src/commands/patch/review/builder.rs:24:
use radicle::crypto;
use radicle::git;
use radicle::git::raw;
+use radicle::git::Oid;
use radicle::node::device::Device;
use radicle::prelude::*;
use radicle::storage::git::{cob::DraftStore, Repository};
Diff in /workspace/src/crates/radicle-cli/src/commands/patch/review/builder.rs:30:
-use radicle::git::Oid;
use radicle_surf::diff::*;
use radicle_term::{Element, VStack};
Diff in /workspace/src/crates/radicle-cli/src/commands/patch/update.rs:1:
use radicle::cob::patch;
use radicle::git::raw;
+use radicle::git::Oid;
use radicle::prelude::*;
use radicle::storage::git::Repository;
-use radicle::git::Oid;
use crate::terminal as term;
use crate::terminal::patch::*;
Diff in /workspace/src/crates/radicle-cli/src/git.rs:20:
use radicle::crypto::ssh;
use radicle::git;
-use radicle::git::{Version, VERSION_REQUIRED};
use radicle::git::raw;
+use radicle::git::{Version, VERSION_REQUIRED};
use radicle::prelude::{NodeId, RepoId};
use radicle::storage::git::transport;
Diff in /workspace/src/crates/radicle-cli/src/terminal/patch/common.rs:2:
use radicle::git;
use radicle::git::raw;
+use radicle::git::Oid;
use radicle::prelude::*;
use radicle::storage::git::Repository;
-use radicle::git::Oid;
use crate::terminal as term;
Diff in /workspace/src/crates/radicle-fetch/src/git/repository/error.rs:1:
+use radicle::git::raw;
use radicle::git::{
fmt::{Namespaced, Qualified},
Oid,
Diff in /workspace/src/crates/radicle-fetch/src/git/repository/error.rs:4:
};
-use radicle::git::raw;
use thiserror::Error;
#[derive(Debug, Error)]
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:1:
pub mod error;
use either::Either;
+use radicle::git::raw;
use radicle::git::{
fmt::{Namespaced, Qualified},
Oid,
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:7:
};
-use radicle::git::raw;
use radicle::storage::git::Repository;
use super::refs::{Applied, Policy, RefUpdate, Update};
[2025-10-07T22:54:12Z ERROR ambient_ci::plan] ERROR: Action failed: failed to execute cargo
[2025-10-07T22:54:12Z ERROR ambient_ci::plan] caused by: command failed: "cargo": exit code 1
ERROR: failed to execute cargo
caused by: command failed: "cargo": exit code 1
EXIT CODE: 1
====================
[2025-10-07T22:54:14Z DEBUG ambient_ci::qemu] QEMU: CI run under exit code 1
[2025-10-07T22:54:15Z DEBUG ambient_ci::run] CI run exit code from QEMU: 1
[2025-10-07T22:54:15Z DEBUG ambient_ci::project] write project state to /home/_rad/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/meta.yaml
ERROR: CI run failed inside QEMU
<empty log>