CI run for rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh

Radicle repository id rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh

Table of Contents

Run log

[2025-09-11T13:01:55Z INFO  ambient] ambient starts
deprecated: the `cpus` field is replaced by `qemu.cpus`
deprecated: the `memory` field is replaced by `qemu.memory`
[=3h[=3hBdsDxe: 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)
Welcome to GRUB!


INFO: 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   2.9M  1 disk 
vdc    254:32   0     2M  1 disk 
vdd    254:48   0 953.7M  0 disk 
vde    254:64   0  27.9G  0 disk 
vdf    254:80   0 848.9M  1 disk 
INFO: Extracting tar archive from /dev/vdb
drwxr-xr-x _rad/_rad         0 2025-09-11 13:01 ./
-rw-r--r-- _rad/_rad       941 2025-09-11 13:01 ./plan.yaml
-rwxr-xr-x _rad/_rad   2994840 2025-09-11 13:01 ./run-ci
INFO: Extracted files:
  4587530      4 drwxr-xr-x   2 1000     1000         4096 Sep 11 13:01 .
  4587531      4 -rw-r--r--   1 1000     1000          941 Sep 11 13:01 ./plan.yaml
  4587532   2928 -rwxr-xr-x   1 1000     1000      2994840 Sep 11 13:01 ./run-ci
INFO: Running run-ci from /dev/vdb
================================ BEGIN ================================
[2025-09-11T13:01:12Z TRACE ambient_execute_plan] ambient-execute-plan starts
[2025-09-11T13:01:12Z DEBUG ambient_execute_plan] ambient-execute-plan starts
[2025-09-11T13:01:12Z INFO  ambient_execute_plan] ambient-execute-plan starts
[2025-09-11T13:01:12Z WARN  ambient_execute_plan] ambient-execute-plan starts
[2025-09-11T13:01:12Z ERROR ambient_execute_plan] ambient-execute-plan 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: |
    git clean -fdx
- 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


RUN: Action Mkdir {
    pathname: "/workspace",
}
[2025-09-11T13:01:12Z DEBUG ambient_ci::action] Plan::execute: Mkdir {
        pathname: "/workspace",
    }
RUN: Action finished OK
RUN: Action Mkdir {
    pathname: "/workspace/artifacts",
}
[2025-09-11T13:01:12Z DEBUG ambient_ci::action] Plan::execute: Mkdir {
        pathname: "/workspace/artifacts",
    }
RUN: Action finished OK
RUN: Action TarExtract {
    archive: "/dev/vdc",
    directory: "/workspace/src",
}
[2025-09-11T13:01:12Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
        archive: "/dev/vdc",
        directory: "/workspace/src",
    }
[2025-09-11T13:01:12Z TRACE ambient_ci::vdrive] extracting /dev/vdc to /workspace/src
[2025-09-11T13:01:12Z TRACE ambient_ci::vdrive] extraction OK
RUN: Action finished OK
RUN: Action TarExtract {
    archive: "/dev/vdf",
    directory: "/workspace/deps",
}
[2025-09-11T13:01:12Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
        archive: "/dev/vdf",
        directory: "/workspace/deps",
    }
[2025-09-11T13:01:12Z TRACE ambient_ci::vdrive] extracting /dev/vdf to /workspace/deps
[2025-09-11T13:01:14Z TRACE ambient_ci::vdrive] extraction OK
RUN: Action finished OK
RUN: Action TarExtract {
    archive: "/dev/vde",
    directory: "/workspace/cache",
}
[2025-09-11T13:01:14Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
        archive: "/dev/vde",
        directory: "/workspace/cache",
    }
[2025-09-11T13:01:14Z TRACE ambient_ci::vdrive] extracting /dev/vde to /workspace/cache
[2025-09-11T13:01:17Z TRACE ambient_ci::vdrive] extraction OK
RUN: Action finished OK
RUN: Action Spawn {
    argv: [
        "find",
        "/workspace",
        "-maxdepth",
        "2",
        "-ls",
    ],
}
[2025-09-11T13:01:17Z DEBUG ambient_ci::action] Plan::execute: Spawn {
        argv: [
            "find",
            "/workspace",
            "-maxdepth",
            "2",
            "-ls",
        ],
    }
SPAWN: argv=["find", "/workspace", "-maxdepth", "2", "-ls"]
       cwd=/workspace/src (exists? true)
       extra_env=[]
  2621441      4 drwxr-xr-x   6 root     root         4096 Sep 11 13:01 /workspace
  2621680      4 drwxr-xr-x   3 root     root         4096 Sep 11 13:01 /workspace/deps
  2653236      0 -rw-r--r--   1 root     root            0 Sep 11 12:54 /workspace/deps/.package-cache-mutate
  2621681      4 drwxr-xr-x   5 root     root         4096 Sep 11 12:54 /workspace/deps/registry
  2653235    124 -rw-r--r--   1 root     root       126976 Sep 11 13:01 /workspace/deps/.global-cache
  2653237      0 -rw-r--r--   1 root     root            0 Sep 11 12:54 /workspace/deps/.package-cache
  2621443      4 drwxr-xr-x   7 root     root         4096 Sep 11 13:01 /workspace/src
  2621450      4 -rw-r--r--   1 root     root         1157 Sep 11 13:01 /workspace/src/Cargo.toml
  2621449      4 -rw-r--r--   1 root     root         2985 Sep 11 13:01 /workspace/src/INSTALL.md
  2621447      4 -rw-r--r--   1 root     root         2547 Sep 11 13:01 /workspace/src/NEWS.md
  2621491     36 -rw-r--r--   1 root     root        34260 Sep 11 13:01 /workspace/src/COPYING.md
  2621444      4 -rw-r--r--   1 root     root          206 Sep 11 13:01 /workspace/src/ambient.yaml
  2621497      4 drwxr-xr-x   8 root     root         4096 Sep 11 13:01 /workspace/src/.git
  2621453      4 drwxr-xr-x   3 root     root         4096 Sep 11 13:01 /workspace/src/src
  2621490      4 -rw-r--r--   1 root     root         1641 Sep 11 13:01 /workspace/src/README.md
  2621495      4 drwxr-xr-x   2 root     root         4096 Sep 11 13:01 /workspace/src/.radicle
  2621479      4 drwxr-xr-x   3 root     root         4096 Sep 11 13:01 /workspace/src/debian
  2621446     12 -rw-r--r--   1 root     root        10220 Sep 11 13:01 /workspace/src/ambient.md
  2621489      4 -rw-r--r--   1 root     root          224 Sep 11 13:01 /workspace/src/ambient.subplot
  2621451     60 -rw-r--r--   1 root     root        61375 Sep 11 13:01 /workspace/src/Cargo.lock
  2621452      4 -rw-r--r--   1 root     root           32 Sep 11 13:01 /workspace/src/.gitignore
  2621445      4 -rw-r--r--   1 root     root         1212 Sep 11 13:01 /workspace/src/ambient.py
  2621492      4 drwxr-xr-x   2 root     root         4096 Sep 11 13:01 /workspace/src/.woodpecker
  2621448      4 -rw-r--r--   1 root     root          668 Sep 11 13:01 /workspace/src/Makefile
  2621442      4 drwxr-xr-x   2 root     root         4096 Sep 11 13:01 /workspace/artifacts
  2653238      4 drwxr-xr-x   5 root     root         4096 Sep 11 12:56 /workspace/cache
  2655722      4 drwxr-xr-x   7 root     root         4096 Sep 11 12:56 /workspace/cache/debug
  2654091      4 -rw-r--r--   1 root     root         1904 Sep 11 12:57 /workspace/cache/.rustc_info.json
  2654092      4 drwxr-xr-x   7 root     root         4096 Sep 11 12:56 /workspace/cache/release
  2653239      4 drwxr-xr-x   3 root     root         4096 Sep 11 12:56 /workspace/cache/x86_64-unknown-linux-musl
RUN: Action finished OK
RUN: Action CargoFmt
[2025-09-11T13:01:17Z DEBUG ambient_ci::action] Plan::execute: CargoFmt
SPAWN: argv=["cargo", "fmt", "--check"]
       cwd=/workspace/src (exists? true)
       extra_env=[("CARGO_TARGET_DIR", "/workspace/cache"), ("CARGO_HOME", "/workspace/deps"), ("PATH", "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")]
RUN: Action finished OK
RUN: Action CargoClippy
[2025-09-11T13:01:17Z DEBUG ambient_ci::action] Plan::execute: CargoClippy
SPAWN: argv=["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
       cwd=/workspace/src (exists? true)
       extra_env=[("CARGO_TARGET_DIR", "/workspace/cache"), ("CARGO_HOME", "/workspace/deps"), ("PATH", "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")]
   Compiling proc-macro2 v1.0.94
   Compiling unicode-ident v1.0.18
   Compiling autocfg v1.4.0
   Compiling memchr v2.7.4
   Compiling quote v1.0.40
   Compiling libc v0.2.171
   Compiling syn v2.0.100
   Compiling anyhow v1.0.97
   Compiling cfg-if v1.0.0
   Compiling aho-corasick v1.1.3
   Compiling serde_derive v1.0.219
   Compiling zerocopy v0.8.24
   Compiling thiserror v2.0.12
   Compiling log v0.4.27
   Compiling regex-syntax v0.8.5
   Compiling serde v1.0.219
   Compiling regex-automata v0.4.9
   Compiling thiserror-impl v2.0.12
   Compiling rustix v1.0.3
   Compiling getrandom v0.3.2
   Compiling bitflags v2.9.0
   Compiling getrandom v0.2.15
   Compiling num-traits v0.2.19
   Compiling time-core v0.1.4
   Compiling serde_json v1.0.140
   Compiling time-macros v0.2.22
   Compiling ppv-lite86 v0.2.21
   Compiling pest v2.8.0
   Compiling rand_core v0.6.4
   Compiling bstr v1.11.3
   Compiling indexmap v1.9.3
   Compiling libm v0.2.11
   Compiling deranged v0.4.1
   Compiling thiserror v1.0.69
   Compiling anstyle-parse v0.2.6
   Compiling cc v1.2.17
   Compiling pest_meta v2.8.0
   Compiling globset v0.4.16
   Compiling rand_chacha v0.3.1
   Compiling thiserror-impl v1.0.69
   Compiling colorchoice v1.0.3
   Compiling linux-raw-sys v0.9.3
   Compiling anstyle v1.0.10
   Compiling anstyle-query v1.1.2
   Compiling anstream v0.6.18
   Compiling clap_derive v4.5.32
   Compiling ordered-float v2.10.1
   Compiling rand v0.8.5
   Compiling ignore v0.4.23
   Compiling pikchr v0.1.4
   Compiling pest_generator v2.8.0
   Compiling time v0.3.41
   Compiling regex v1.11.1
   Compiling clap_lex v0.7.4
   Compiling hashbrown v0.15.2
   Compiling deunicode v1.6.1
   Compiling slug v0.1.6
   Compiling clap_builder v4.5.34
   Compiling indexmap v2.8.0
   Compiling tempfile v3.19.1
   Compiling git-testament-derive v0.2.1
   Compiling humansize v2.1.3
   Compiling pest_derive v2.8.0
   Compiling globwalk v0.9.1
   Compiling serde-value v0.7.0
   Compiling serde_yaml v0.8.26
   Compiling subplot v0.9.0
   Compiling getopts v0.2.21
   Compiling is-terminal v0.4.16
   Compiling percent-encoding v2.3.1
   Compiling env_logger v0.10.2
   Compiling tera v1.20.0
   Compiling pulldown-cmark v0.9.6
   Compiling serde_yaml v0.9.34+deprecated
   Compiling roadmap v0.5.0
   Compiling serde-aux v4.6.0
   Compiling git-testament v0.2.6
   Compiling clap v4.5.34
   Compiling syn v1.0.109
   Compiling tempfile-fast v0.3.4
   Compiling tracing-attributes v0.1.28
   Compiling tracing-core v0.1.33
   Compiling fehler-macros v1.0.0
   Compiling tracing v0.1.41
    Checking nix v0.29.0
   Compiling subplot-build v0.9.0
    Checking cvt v0.1.2
   Compiling glob v0.3.2
   Compiling portable-atomic v1.11.0
   Compiling rust_decimal v1.37.1
   Compiling subplotlib v0.9.0
    Checking fs_at v0.2.1
   Compiling fehler v1.0.0
    Checking normpath v1.3.0
    Checking unicode-width v0.2.0
    Checking console v0.15.11
    Checking env_filter v0.1.3
    Checking dirs-sys v0.4.1
    Checking remove_dir_all v0.8.4
    Checking libyml v0.0.5
   Compiling subplotlib-derive v0.9.0
    Checking filetime v0.2.25
    Checking fs2 v0.4.3
    Checking base64 v0.21.7
    Checking jiff v0.2.5
    Checking state v0.5.3
    Checking unescape v0.1.0
    Checking indicatif v0.17.11
    Checking byte-unit v5.1.6
    Checking sha2 v0.10.8
    Checking serde_yml v0.0.12
    Checking directories v5.0.1
    Checking env_logger v0.11.7
    Checking bytesize v1.3.2
    Checking ambient-ci v0.3.0 (/workspace/src)
error: the `Err`-variant returned from this function is very large
   --> src/action.rs:63:51
    |
63  |     pub fn execute(&self, plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                                   ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    = note: `-D clippy::result-large-err` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::result_large_err)]`

error: variables can be used directly in the `format!` string
  --> src/action.rs:64:9
   |
64 |         debug!("Plan::execute: {:#?}", self);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
   = note: `-D clippy::uninlined-format-args` implied by `-D warnings`
   = help: to override `-D warnings` add `#[allow(clippy::uninlined_format_args)]`
help: change this to
   |
64 -         debug!("Plan::execute: {:#?}", self);
64 +         debug!("Plan::execute: {self:#?}");
   |

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:147:19
    |
147 |     fn dummy() -> Result<(), ActionError> {
    |                   ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:152:33
    |
152 |     fn pwd(sourcedir: &Path) -> Result<(), ActionError> {
    |                                 ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:157:60
    |
157 |     fn rsync(artifactsdir: &Path, target: Option<&str>) -> Result<(), ActionError> {
    |                                                            ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:166:71
    |
166 |     fn dput_action(artifactsdir: &Path, dput_target: Option<&str>) -> Result<(), ActionError> {
    |                                                                       ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:176:67
    |
176 |     fn cargo_fetch(source_dir: &Path, dependencies_dir: &Path) -> Result<(), ActionError> {
    |                                                                   ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:189:34
    |
189 |     fn mkdir(pathname: &Path) -> Result<(), ActionError> {
    |                                  ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:196:54
    |
196 |     fn tar_create(archive: &Path, dirname: &Path) -> Result<(), ActionError> {
    |                                                      ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:205:55
    |
205 |     fn tar_extract(archive: &Path, dirname: &Path) -> Result<(), ActionError> {
    |                                                       ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:221:10
    |
221 |     ) -> Result<(), ActionError> {
    |          ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
   --> src/action.rs:231:24
    |
231 |         let argv_str = format!("{:?}", argv);
    |                        ^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
231 -         let argv_str = format!("{:?}", argv);
231 +         let argv_str = format!("{argv:?}");
    |

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:257:51
    |
257 |     fn spawn_str_in(argv: &[&str], cwd: &Path) -> Result<(), ActionError> {
    |                                                   ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:266:10
    |
266 |     ) -> Result<(), ActionError> {
    |          ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:277:53
    |
277 |     fn shell(plan: &RunnablePlan, snippet: &str) -> Result<(), ActionError> {
    |                                                     ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
   --> src/action.rs:278:23
    |
278 |         let snippet = format!("set -xeuo pipefail\n{}\n", snippet);
    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
278 -         let snippet = format!("set -xeuo pipefail\n{}\n", snippet);
278 +         let snippet = format!("set -xeuo pipefail\n{snippet}\n");
    |

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:286:10
    |
286 |     ) -> Result<(), ActionError> {
    |          ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:299:10
    |
299 |     ) -> Result<Vec<(&'static str, String)>, ActionError> {
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:317:59
    |
317 |     fn spawn_cargo(plan: &RunnablePlan, args: &[&str]) -> Result<(), ActionError> {
    |                                                           ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:322:42
    |
322 |     fn cargo_fmt(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                          ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:326:45
    |
326 |     fn cargo_clippy(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                             ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:344:44
    |
344 |     fn cargo_build(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                            ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:358:43
    |
358 |     fn cargo_test(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                           ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:365:46
    |
365 |     fn cargo_install(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                              ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:382:36
    |
382 |     fn deb(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                    ^^^^^^^^^^^^^^^^^^^^^^^
...
545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
  --> src/checksummer.rs:21:9
   |
21 |         write!(f, "{}", s)
   |         ^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
21 -         write!(f, "{}", s)
21 +         write!(f, "{s}")
   |

error: variables can be used directly in the `format!` string
  --> src/cloud_init.rs:48:12
   |
48 |         Ok(format!("#cloud-config\n{}", userdata))
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
48 -         Ok(format!("#cloud-config\n{}", userdata))
48 +         Ok(format!("#cloud-config\n{userdata}"))
   |

error: variables can be used directly in the `format!` string
  --> src/cloud_init.rs:78:9
   |
78 |         debug!("LocalDataStore: {:#?}", self);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
78 -         debug!("LocalDataStore: {:#?}", self);
78 +         debug!("LocalDataStore: {self:#?}");
   |

error: variables can be used directly in the `format!` string
   --> src/cloud_init.rs:125:9
    |
125 |         debug!("LocalDataStoreBuilder: {:#?}", self);
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
125 -         debug!("LocalDataStoreBuilder: {:#?}", self);
125 +         debug!("LocalDataStoreBuilder: {self:#?}");
    |

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:15:42
    |
15  |     pub fn from_file(filename: &Path) -> Result<Self, PlanError> {
    |                                          ^^^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:22:47
    |
22  |     pub fn to_file(&self, filename: &Path) -> Result<(), PlanError> {
    |                                               ^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:53:37
    |
53  |     pub fn parse_str(yaml: &str) -> Result<Self, PlanError> {
    |                                     ^^^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:57:42
    |
57  |     pub fn from_file(filename: &Path) -> Result<Self, PlanError> {
    |                                          ^^^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:71:32
    |
71  |     pub fn to_string(&self) -> Result<String, PlanError> {
    |                                ^^^^^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:75:47
    |
75  |     pub fn to_file(&self, filename: &Path) -> Result<(), PlanError> {
    |                                               ^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
  --> src/plan.rs:77:9
   |
77 |         trace!("RunnablePlan:to_file:\n{}", plan);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
77 -         trace!("RunnablePlan:to_file:\n{}", plan);
77 +         trace!("RunnablePlan:to_file:\n{plan}");
   |

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:96:30
    |
96  |     pub fn execute(&self) -> Result<(), PlanError> {
    |                              ^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:132:9
    |
132 |         debug!("QEMU exit code {}", exit);
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
132 -         debug!("QEMU exit code {}", exit);
132 +         debug!("QEMU exit code {exit}");
    |

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:165:9
    |
165 |         trace!("{:#?}", self);
    |         ^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
165 -         trace!("{:#?}", self);
165 +         trace!("{self:#?}");
    |

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:246:13
    |
246 | /             error!(
247 | |                 "QEMU failed: exit={}\nstdout: {:?}\nstderr: {:?}\nVM console: {:?}",
248 | |                 exit, out, err, console_log
249 | |             );
    | |_____________^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:276:13
    |
276 |             trace!("log has {:?}", EXIT);
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
276 -             trace!("log has {:?}", EXIT);
276 +             trace!("log has {EXIT:?}");
    |

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:279:17
    |
279 |                 trace!("log has newline after exit: {:?}", exit);
    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
279 -                 trace!("log has newline after exit: {:?}", exit);
279 +                 trace!("log has newline after exit: {exit:?}");
    |

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:281:21
    |
281 |                     trace!("log exit coded parses ok: {}", exit);
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
281 -                     trace!("log exit coded parses ok: {}", exit);
281 +                     trace!("log exit coded parses ok: {exit}");
    |

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:310:9
    |
310 | /         error!(
311 | |             "qemu-img failed: exit={}\nstdout: {:?}\nstderr: {:?}",
312 | |             exit, out, err,
313 | |         );
    | |_________^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:351:19
    |
351 |             .push(format!("format=qcow2,if=virtio,file={}", path));
    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
351 -             .push(format!("format=qcow2,if=virtio,file={}", path));
351 +             .push(format!("format=qcow2,if=virtio,file={path}"));
    |

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:32:6
    |
32  | ) -> Result<(), RunError> {
    |      ^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
  --> src/run.rs:53:13
   |
53 |             info!("project {}: running CI", name);
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
53 -             info!("project {}: running CI", name);
53 +             info!("project {name}: running CI");
   |

error: variables can be used directly in the `format!` string
   --> src/run.rs:125:13
    |
125 |             info!("project {}: NOT running CI", name);
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
125 -             info!("project {}: NOT running CI", name);
125 +             info!("project {name}: NOT running CI");
    |

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:132:35
    |
132 | pub fn create_cloud_init_iso() -> Result<LocalDataStore, RunError> {
    |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:158:66
    |
158 | pub fn create_source_vdrive(tmp: &TempDir, source_dir: &Path) -> Result<VirtualDrive, RunError> {
    |                                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:167:6
    |
167 | ) -> Result<VirtualDrive, RunError> {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:178:64
    |
178 | fn create_dependencies_vdrive(tmp: &TempDir, state: &State) -> Result<VirtualDrive, RunError> {
    |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:192:6
    |
192 | ) -> Result<VirtualDrive, RunError> {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:207:6
    |
207 | ) -> Result<VirtualDrive, RunError> {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:289:57
    |
289 | fn construct_runnable_plan(actions: &[UnsafeAction]) -> Result<RunnablePlan, RunError> {
    |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:332:6
    |
332 | ) -> Result<(bool, State), RunError> {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
   --> src/run.rs:337:9
    |
337 |         debug!("latest commit: {:?}", latest_commit);
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
337 -         debug!("latest commit: {:?}", latest_commit);
337 +         debug!("latest commit: {latest_commit:?}");
    |

error: variables can be used directly in the `format!` string
  --> src/util.rs:85:18
   |
85 |     let target = format!("{}/.", target);
   |                  ^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
85 -     let target = format!("{}/.", target);
85 +     let target = format!("{target}/.");
   |

error: variables can be used directly in the `format!` string
  --> src/vdrive.rs:72:9
   |
72 |         trace!("creating virtual drive (tar archive): {:#?}", self);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
72 -         trace!("creating virtual drive (tar archive): {:#?}", self);
72 +         trace!("creating virtual drive (tar archive): {self:#?}");
   |

error: could not compile `ambient-ci` (lib) due to 59 previous errors
warning: build failed, waiting for other jobs to finish...
error: variables can be used directly in the `format!` string
   --> src/run.rs:523:9
    |
523 |         println!("{}", msg);
    |         ^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
523 -         println!("{}", msg);
523 +         println!("{msg}");
    |

error: variables can be used directly in the `format!` string
   --> src/tildepathbuf.rs:201:13
    |
201 |             assert_eq!(path.display().to_string(), format!("{}/foo", home));
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
201 -             assert_eq!(path.display().to_string(), format!("{}/foo", home));
201 +             assert_eq!(path.display().to_string(), format!("{home}/foo"));
    |

error: variables can be used directly in the `format!` string
   --> src/tildepathbuf.rs:220:40
    |
220 |             let wanted = PathBuf::from(format!("{}/foo", home));
    |                                        ^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
220 -             let wanted = PathBuf::from(format!("{}/foo", home));
220 +             let wanted = PathBuf::from(format!("{home}/foo"));
    |

error: could not compile `ambient-ci` (lib test) due to 62 previous errors
ERROR: Action failed: command failed: ["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
ERROR: command failed: ["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
EXIT CODE: 1
[2025-09-11T13:01:55Z INFO  ambient] ambient ends successfully

Trigger message

{
  "request": "trigger",
  "version": 1,
  "event_type": "patch",
  "repository": {
    "id": "rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh",
    "name": "ambient-ci",
    "description": "Ambient command line tool to run CI projects locally",
    "private": false,
    "default_branch": "main",
    "delegates": [
      "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV"
    ]
  },
  "action": "Created",
  "patch": {
    "id": "45b572052f7f2dfe26047c1dfa6c3bda0db5b47d",
    "author": {
      "id": "did:key:z6MkrnXJWPndzPBxpBUaE3L3BnMeWpaQdT1V1FvkoCPFSFS3",
      "alias": null
    },
    "title": "ci(woodpecker): fixes filename in uploaded binary",
    "state": {
      "status": "merged",
      "conflicts": []
    },
    "before": "bfc84fff52881b91010a6bdf7e6b24f8b437bdd4",
    "after": "2f9e1c7ee3a0a80fdc59659bdd684dde84ae499f",
    "commits": [
      "2f9e1c7ee3a0a80fdc59659bdd684dde84ae499f"
    ],
    "target": "b006b06a31704f9aec4361a948283057161cc410",
    "labels": [],
    "assignees": [],
    "revisions": [
      {
        "id": "45b572052f7f2dfe26047c1dfa6c3bda0db5b47d",
        "author": {
          "id": "did:key:z6MkrnXJWPndzPBxpBUaE3L3BnMeWpaQdT1V1FvkoCPFSFS3",
          "alias": null
        },
        "description": "the problem with the previous expression was that `VERSION_x86_64` was taken as the env var name (because of the underscore).\n\nHowever, when using `${}` in a woodpecker pipeline, we need to escape with `$${}`, as per the docs:\n\n> ${variable} expressions are subject to pre-processing. If you do not want the pre-processor to evaluate your expression it must be escaped:\n\nhttps://woodpecker-ci.org/docs/next/usage/environment#global-environment-variables\n\nSigned-off-by: Yorgos Saslis <yorgos.work@proton.me>",
        "base": "bfc84fff52881b91010a6bdf7e6b24f8b437bdd4",
        "oid": "2f9e1c7ee3a0a80fdc59659bdd684dde84ae499f",
        "timestamp": 1744898028
      }
    ]
  }
}

Ambient stdout

[2025-09-11T13:01:06Z INFO  ambient] ambient starts
[2025-09-11T13:01:06Z 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-09-11T13:01:06Z 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-09-11T13:01:06Z 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-09-11T13:01:06Z DEBUG ambient_ci::project] load project state from /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/meta.yaml
[2025-09-11T13:01:06Z DEBUG ambient_ci::run] latest commit: "b006b06a31704f9aec4361a948283057161cc410"
[2025-09-11T13:01:06Z DEBUG ambient_ci::run] is a git repository
[2025-09-11T13:01:06Z DEBUG ambient_ci::run] git repository is clean
[2025-09-11T13:01:06Z DEBUG ambient_ci::run] current (HEAD) commit: 2f9e1c7ee3a0a80fdc59659bdd684dde84ae499f
[2025-09-11T13:01:06Z DEBUG ambient_ci::run] no dry run requested
[2025-09-11T13:01:06Z DEBUG ambient_ci::run] forced run requested
[2025-09-11T13:01:06Z DEBUG ambient_ci::run] run? true
[2025-09-11T13:01:06Z INFO  ambient_ci::run] project rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh: running CI
[2025-09-11T13:01:06Z DEBUG ambient_ci::run] Executing pre-plan steps
[2025-09-11T13:01:06Z DEBUG ambient_ci::action] Plan::execute: CargoFetch {
        sourcedir: "/tmp/.tmpQIwWU5/src",
        dependenciesdir: "/home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/dependencies",
    }
SPAWN: argv=["env", "CARGO_HOME=/home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/dependencies", "cargo", "fetch", "--locked"]
       cwd=/tmp/.tmpQIwWU5/src (exists? true)
       extra_env=[]
[2025-09-11T13:01:06Z DEBUG ambient_ci::run] create virtual drive /home/_rad/tmp/.tmpl8Mf5v/src.tar
[2025-09-11T13:01:06Z DEBUG ambient_ci::run] create virtual drive /home/_rad/tmp/.tmpl8Mf5v/deps.tar
[2025-09-11T13:01:07Z DEBUG ambient_ci::run] create_executor_vdrive: executor="/usr/bin/ambient-execute-plan"
[2025-09-11T13:01:07Z 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: "git clean -fdx\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-09-11T13:01:07Z DEBUG ambient_ci::run] executor bin /usr/bin/ambient-execute-plan
[2025-09-11T13:01:07Z DEBUG ambient_ci::run] copying /usr/bin/ambient-execute-plan to /home/_rad/tmp/.tmpl8Mf5v/ambient-execute-plan/run-ci
[2025-09-11T13:01:07Z DEBUG ambient_ci::run] copy OK: true
[2025-09-11T13:01:07Z DEBUG ambient_ci::run] create virtual drive /home/_rad/tmp/.tmpl8Mf5v/executor.tar
[2025-09-11T13:01:09Z DEBUG ambient_ci::project] removing run log file /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/run.log
[2025-09-11T13:01:09Z DEBUG ambient_ci::project] statedir is /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh, exists? true
[2025-09-11T13:01:09Z DEBUG ambient_ci::project] creating run log file /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/run.log
[2025-09-11T13:01:09Z DEBUG ambient_ci::project] created run log file /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/run.log OK
[2025-09-11T13:01:09Z DEBUG ambient_ci::cloud_init] with_hostname called: "ambient"
[2025-09-11T13:01:09Z DEBUG ambient_ci::cloud_init] with_runcmd called: "echo xyzzy > /dev/ttyS1"
[2025-09-11T13:01:09Z 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-09-11T13:01:09Z DEBUG ambient_ci::cloud_init] with_runcmd called: "poweroff"
[2025-09-11T13:01:09Z 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-09-11T13:01:09Z DEBUG ambient_ci::qemu] run QEMU
[2025-09-11T13:01:09Z DEBUG ambient_ci::qemu] create copy-on-write image and UEFI vars file
[2025-09-11T13:01:09Z DEBUG ambient_ci::qemu_utils] qemu-img create /home/_rad/tmp/.tmplzY6ig/.tmp3Lx4YX/vm.qcow2 backing on /home/_rad/ambient.qcow2
[2025-09-11T13:01:09Z DEBUG ambient_ci::qemu] create cloud-init ISO file
[2025-09-11T13:01:09Z 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-09-11T13:01:09Z DEBUG ambient_ci::cloud_init] write /tmp/.tmpZsq0hS/meta-data
[2025-09-11T13:01:09Z DEBUG ambient_ci::cloud_init] write /tmp/.tmpZsq0hS/user-data
[2025-09-11T13:01:09Z DEBUG ambient_ci::qemu] set console log file to /home/_rad/tmp/.tmplzY6ig/.tmp3Lx4YX/console.log
[2025-09-11T13:01:09Z DEBUG ambient_ci::util] create file /home/_rad/tmp/.tmplzY6ig/.tmp3Lx4YX/console.log
[2025-09-11T13:01:09Z DEBUG ambient_ci::qemu] set run file to /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/run.log
[2025-09-11T13:01:09Z DEBUG ambient_ci::util] create file /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/run.log
[2025-09-11T13:01:09Z 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/.tmplzY6ig/.tmp3Lx4YX/console.log",
            "-serial",
            "file:/home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/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/.tmplzY6ig/.tmp3Lx4YX/vars.fd",
            "-drive",
            "format=qcow2,if=virtio,file=/home/_rad/tmp/.tmplzY6ig/.tmp3Lx4YX/vm.qcow2",
            "-drive",
            "format=raw,if=virtio,file=/home/_rad/tmp/.tmpl8Mf5v/executor.tar,readonly=on",
            "-cdrom",
            "/home/_rad/tmp/.tmplzY6ig/.tmp3Lx4YX/cloud_init.iso",
            "-drive",
            "format=raw,if=virtio,file=/home/_rad/tmp/.tmpl8Mf5v/src.tar,readonly=on",
            "-drive",
            "format=raw,if=virtio,file=/home/_rad/tmp/.tmpl8Mf5v/artifacts.tar",
            "-drive",
            "format=raw,if=virtio,file=/home/_rad/tmp/.tmpl8Mf5v/cache.tar",
            "-drive",
            "format=raw,if=virtio,file=/home/_rad/tmp/.tmpl8Mf5v/deps.tar,readonly=on",
            "-nodefaults",
            "-no-user-config",
        ],
    }
[2025-09-11T13:01:54Z DEBUG ambient_ci::qemu] QEMU finished OK
[2025-09-11T13:01:54Z DEBUG ambient_ci::qemu] run log:
    --------------------==========
    [2025-09-11T13:01:12Z TRACE ambient_execute_plan] ambient-execute-plan starts
    [2025-09-11T13:01:12Z DEBUG ambient_execute_plan] ambient-execute-plan starts
    [2025-09-11T13:01:12Z INFO  ambient_execute_plan] ambient-execute-plan starts
    [2025-09-11T13:01:12Z WARN  ambient_execute_plan] ambient-execute-plan starts
    [2025-09-11T13:01:12Z ERROR ambient_execute_plan] ambient-execute-plan 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: |
        git clean -fdx
    - 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
    
    
    RUN: Action Mkdir {
        pathname: "/workspace",
    }
    [2025-09-11T13:01:12Z DEBUG ambient_ci::action] Plan::execute: Mkdir {
            pathname: "/workspace",
        }
    RUN: Action finished OK
    RUN: Action Mkdir {
        pathname: "/workspace/artifacts",
    }
    [2025-09-11T13:01:12Z DEBUG ambient_ci::action] Plan::execute: Mkdir {
            pathname: "/workspace/artifacts",
        }
    RUN: Action finished OK
    RUN: Action TarExtract {
        archive: "/dev/vdc",
        directory: "/workspace/src",
    }
    [2025-09-11T13:01:12Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
            archive: "/dev/vdc",
            directory: "/workspace/src",
        }
    [2025-09-11T13:01:12Z TRACE ambient_ci::vdrive] extracting /dev/vdc to /workspace/src
    [2025-09-11T13:01:12Z TRACE ambient_ci::vdrive] extraction OK
    RUN: Action finished OK
    RUN: Action TarExtract {
        archive: "/dev/vdf",
        directory: "/workspace/deps",
    }
    [2025-09-11T13:01:12Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
            archive: "/dev/vdf",
            directory: "/workspace/deps",
        }
    [2025-09-11T13:01:12Z TRACE ambient_ci::vdrive] extracting /dev/vdf to /workspace/deps
    [2025-09-11T13:01:14Z TRACE ambient_ci::vdrive] extraction OK
    RUN: Action finished OK
    RUN: Action TarExtract {
        archive: "/dev/vde",
        directory: "/workspace/cache",
    }
    [2025-09-11T13:01:14Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
            archive: "/dev/vde",
            directory: "/workspace/cache",
        }
    [2025-09-11T13:01:14Z TRACE ambient_ci::vdrive] extracting /dev/vde to /workspace/cache
    [2025-09-11T13:01:17Z TRACE ambient_ci::vdrive] extraction OK
    RUN: Action finished OK
    RUN: Action Spawn {
        argv: [
            "find",
            "/workspace",
            "-maxdepth",
            "2",
            "-ls",
        ],
    }
    [2025-09-11T13:01:17Z DEBUG ambient_ci::action] Plan::execute: Spawn {
            argv: [
                "find",
                "/workspace",
                "-maxdepth",
                "2",
                "-ls",
            ],
        }
    SPAWN: argv=["find", "/workspace", "-maxdepth", "2", "-ls"]
           cwd=/workspace/src (exists? true)
           extra_env=[]
      2621441      4 drwxr-xr-x   6 root     root         4096 Sep 11 13:01 /workspace
      2621680      4 drwxr-xr-x   3 root     root         4096 Sep 11 13:01 /workspace/deps
      2653236      0 -rw-r--r--   1 root     root            0 Sep 11 12:54 /workspace/deps/.package-cache-mutate
      2621681      4 drwxr-xr-x   5 root     root         4096 Sep 11 12:54 /workspace/deps/registry
      2653235    124 -rw-r--r--   1 root     root       126976 Sep 11 13:01 /workspace/deps/.global-cache
      2653237      0 -rw-r--r--   1 root     root            0 Sep 11 12:54 /workspace/deps/.package-cache
      2621443      4 drwxr-xr-x   7 root     root         4096 Sep 11 13:01 /workspace/src
      2621450      4 -rw-r--r--   1 root     root         1157 Sep 11 13:01 /workspace/src/Cargo.toml
      2621449      4 -rw-r--r--   1 root     root         2985 Sep 11 13:01 /workspace/src/INSTALL.md
      2621447      4 -rw-r--r--   1 root     root         2547 Sep 11 13:01 /workspace/src/NEWS.md
      2621491     36 -rw-r--r--   1 root     root        34260 Sep 11 13:01 /workspace/src/COPYING.md
      2621444      4 -rw-r--r--   1 root     root          206 Sep 11 13:01 /workspace/src/ambient.yaml
      2621497      4 drwxr-xr-x   8 root     root         4096 Sep 11 13:01 /workspace/src/.git
      2621453      4 drwxr-xr-x   3 root     root         4096 Sep 11 13:01 /workspace/src/src
      2621490      4 -rw-r--r--   1 root     root         1641 Sep 11 13:01 /workspace/src/README.md
      2621495      4 drwxr-xr-x   2 root     root         4096 Sep 11 13:01 /workspace/src/.radicle
      2621479      4 drwxr-xr-x   3 root     root         4096 Sep 11 13:01 /workspace/src/debian
      2621446     12 -rw-r--r--   1 root     root        10220 Sep 11 13:01 /workspace/src/ambient.md
      2621489      4 -rw-r--r--   1 root     root          224 Sep 11 13:01 /workspace/src/ambient.subplot
      2621451     60 -rw-r--r--   1 root     root        61375 Sep 11 13:01 /workspace/src/Cargo.lock
      2621452      4 -rw-r--r--   1 root     root           32 Sep 11 13:01 /workspace/src/.gitignore
      2621445      4 -rw-r--r--   1 root     root         1212 Sep 11 13:01 /workspace/src/ambient.py
      2621492      4 drwxr-xr-x   2 root     root         4096 Sep 11 13:01 /workspace/src/.woodpecker
      2621448      4 -rw-r--r--   1 root     root          668 Sep 11 13:01 /workspace/src/Makefile
      2621442      4 drwxr-xr-x   2 root     root         4096 Sep 11 13:01 /workspace/artifacts
      2653238      4 drwxr-xr-x   5 root     root         4096 Sep 11 12:56 /workspace/cache
      2655722      4 drwxr-xr-x   7 root     root         4096 Sep 11 12:56 /workspace/cache/debug
      2654091      4 -rw-r--r--   1 root     root         1904 Sep 11 12:57 /workspace/cache/.rustc_info.json
      2654092      4 drwxr-xr-x   7 root     root         4096 Sep 11 12:56 /workspace/cache/release
      2653239      4 drwxr-xr-x   3 root     root         4096 Sep 11 12:56 /workspace/cache/x86_64-unknown-linux-musl
    RUN: Action finished OK
    RUN: Action CargoFmt
    [2025-09-11T13:01:17Z DEBUG ambient_ci::action] Plan::execute: CargoFmt
    SPAWN: argv=["cargo", "fmt", "--check"]
           cwd=/workspace/src (exists? true)
           extra_env=[("CARGO_TARGET_DIR", "/workspace/cache"), ("CARGO_HOME", "/workspace/deps"), ("PATH", "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")]
    RUN: Action finished OK
    RUN: Action CargoClippy
    [2025-09-11T13:01:17Z DEBUG ambient_ci::action] Plan::execute: CargoClippy
    SPAWN: argv=["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
           cwd=/workspace/src (exists? true)
           extra_env=[("CARGO_TARGET_DIR", "/workspace/cache"), ("CARGO_HOME", "/workspace/deps"), ("PATH", "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")]
       Compiling proc-macro2 v1.0.94
       Compiling unicode-ident v1.0.18
       Compiling autocfg v1.4.0
       Compiling memchr v2.7.4
       Compiling quote v1.0.40
       Compiling libc v0.2.171
       Compiling syn v2.0.100
       Compiling anyhow v1.0.97
       Compiling cfg-if v1.0.0
       Compiling aho-corasick v1.1.3
       Compiling serde_derive v1.0.219
       Compiling zerocopy v0.8.24
       Compiling thiserror v2.0.12
       Compiling log v0.4.27
       Compiling regex-syntax v0.8.5
       Compiling serde v1.0.219
       Compiling regex-automata v0.4.9
       Compiling thiserror-impl v2.0.12
       Compiling rustix v1.0.3
       Compiling getrandom v0.3.2
       Compiling bitflags v2.9.0
       Compiling getrandom v0.2.15
       Compiling num-traits v0.2.19
       Compiling time-core v0.1.4
       Compiling serde_json v1.0.140
       Compiling time-macros v0.2.22
       Compiling ppv-lite86 v0.2.21
       Compiling pest v2.8.0
       Compiling rand_core v0.6.4
       Compiling bstr v1.11.3
       Compiling indexmap v1.9.3
       Compiling libm v0.2.11
       Compiling deranged v0.4.1
       Compiling thiserror v1.0.69
       Compiling anstyle-parse v0.2.6
       Compiling cc v1.2.17
       Compiling pest_meta v2.8.0
       Compiling globset v0.4.16
       Compiling rand_chacha v0.3.1
       Compiling thiserror-impl v1.0.69
       Compiling colorchoice v1.0.3
       Compiling linux-raw-sys v0.9.3
       Compiling anstyle v1.0.10
       Compiling anstyle-query v1.1.2
       Compiling anstream v0.6.18
       Compiling clap_derive v4.5.32
       Compiling ordered-float v2.10.1
       Compiling rand v0.8.5
       Compiling ignore v0.4.23
       Compiling pikchr v0.1.4
       Compiling pest_generator v2.8.0
       Compiling time v0.3.41
       Compiling regex v1.11.1
       Compiling clap_lex v0.7.4
       Compiling hashbrown v0.15.2
       Compiling deunicode v1.6.1
       Compiling slug v0.1.6
       Compiling clap_builder v4.5.34
       Compiling indexmap v2.8.0
       Compiling tempfile v3.19.1
       Compiling git-testament-derive v0.2.1
       Compiling humansize v2.1.3
       Compiling pest_derive v2.8.0
       Compiling globwalk v0.9.1
       Compiling serde-value v0.7.0
       Compiling serde_yaml v0.8.26
       Compiling subplot v0.9.0
       Compiling getopts v0.2.21
       Compiling is-terminal v0.4.16
       Compiling percent-encoding v2.3.1
       Compiling env_logger v0.10.2
       Compiling tera v1.20.0
       Compiling pulldown-cmark v0.9.6
       Compiling serde_yaml v0.9.34+deprecated
       Compiling roadmap v0.5.0
       Compiling serde-aux v4.6.0
       Compiling git-testament v0.2.6
       Compiling clap v4.5.34
       Compiling syn v1.0.109
       Compiling tempfile-fast v0.3.4
       Compiling tracing-attributes v0.1.28
       Compiling tracing-core v0.1.33
       Compiling fehler-macros v1.0.0
       Compiling tracing v0.1.41
        Checking nix v0.29.0
       Compiling subplot-build v0.9.0
        Checking cvt v0.1.2
       Compiling glob v0.3.2
       Compiling portable-atomic v1.11.0
       Compiling rust_decimal v1.37.1
       Compiling subplotlib v0.9.0
        Checking fs_at v0.2.1
       Compiling fehler v1.0.0
        Checking normpath v1.3.0
        Checking unicode-width v0.2.0
        Checking console v0.15.11
        Checking env_filter v0.1.3
        Checking dirs-sys v0.4.1
        Checking remove_dir_all v0.8.4
        Checking libyml v0.0.5
       Compiling subplotlib-derive v0.9.0
        Checking filetime v0.2.25
        Checking fs2 v0.4.3
        Checking base64 v0.21.7
        Checking jiff v0.2.5
        Checking state v0.5.3
        Checking unescape v0.1.0
        Checking indicatif v0.17.11
        Checking byte-unit v5.1.6
        Checking sha2 v0.10.8
        Checking serde_yml v0.0.12
        Checking directories v5.0.1
        Checking env_logger v0.11.7
        Checking bytesize v1.3.2
        Checking ambient-ci v0.3.0 (/workspace/src)
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:63:51
        |
    63  |     pub fn execute(&self, plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                                   ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
        = note: `-D clippy::result-large-err` implied by `-D warnings`
        = help: to override `-D warnings` add `#[allow(clippy::result_large_err)]`
    
    error: variables can be used directly in the `format!` string
      --> src/action.rs:64:9
       |
    64 |         debug!("Plan::execute: {:#?}", self);
       |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
       = note: `-D clippy::uninlined-format-args` implied by `-D warnings`
       = help: to override `-D warnings` add `#[allow(clippy::uninlined_format_args)]`
    help: change this to
       |
    64 -         debug!("Plan::execute: {:#?}", self);
    64 +         debug!("Plan::execute: {self:#?}");
       |
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:147:19
        |
    147 |     fn dummy() -> Result<(), ActionError> {
        |                   ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:152:33
        |
    152 |     fn pwd(sourcedir: &Path) -> Result<(), ActionError> {
        |                                 ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:157:60
        |
    157 |     fn rsync(artifactsdir: &Path, target: Option<&str>) -> Result<(), ActionError> {
        |                                                            ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:166:71
        |
    166 |     fn dput_action(artifactsdir: &Path, dput_target: Option<&str>) -> Result<(), ActionError> {
        |                                                                       ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:176:67
        |
    176 |     fn cargo_fetch(source_dir: &Path, dependencies_dir: &Path) -> Result<(), ActionError> {
        |                                                                   ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:189:34
        |
    189 |     fn mkdir(pathname: &Path) -> Result<(), ActionError> {
        |                                  ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:196:54
        |
    196 |     fn tar_create(archive: &Path, dirname: &Path) -> Result<(), ActionError> {
        |                                                      ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:205:55
        |
    205 |     fn tar_extract(archive: &Path, dirname: &Path) -> Result<(), ActionError> {
        |                                                       ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:221:10
        |
    221 |     ) -> Result<(), ActionError> {
        |          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
       --> src/action.rs:231:24
        |
    231 |         let argv_str = format!("{:?}", argv);
        |                        ^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    231 -         let argv_str = format!("{:?}", argv);
    231 +         let argv_str = format!("{argv:?}");
        |
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:257:51
        |
    257 |     fn spawn_str_in(argv: &[&str], cwd: &Path) -> Result<(), ActionError> {
        |                                                   ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:266:10
        |
    266 |     ) -> Result<(), ActionError> {
        |          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:277:53
        |
    277 |     fn shell(plan: &RunnablePlan, snippet: &str) -> Result<(), ActionError> {
        |                                                     ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
       --> src/action.rs:278:23
        |
    278 |         let snippet = format!("set -xeuo pipefail\n{}\n", snippet);
        |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    278 -         let snippet = format!("set -xeuo pipefail\n{}\n", snippet);
    278 +         let snippet = format!("set -xeuo pipefail\n{snippet}\n");
        |
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:286:10
        |
    286 |     ) -> Result<(), ActionError> {
        |          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:299:10
        |
    299 |     ) -> Result<Vec<(&'static str, String)>, ActionError> {
        |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:317:59
        |
    317 |     fn spawn_cargo(plan: &RunnablePlan, args: &[&str]) -> Result<(), ActionError> {
        |                                                           ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:322:42
        |
    322 |     fn cargo_fmt(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:326:45
        |
    326 |     fn cargo_clippy(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                             ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:344:44
        |
    344 |     fn cargo_build(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                            ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:358:43
        |
    358 |     fn cargo_test(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                           ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:365:46
        |
    365 |     fn cargo_install(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                              ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:382:36
        |
    382 |     fn deb(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                    ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    545 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    551 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
      --> src/checksummer.rs:21:9
       |
    21 |         write!(f, "{}", s)
       |         ^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    21 -         write!(f, "{}", s)
    21 +         write!(f, "{s}")
       |
    
    error: variables can be used directly in the `format!` string
      --> src/cloud_init.rs:48:12
       |
    48 |         Ok(format!("#cloud-config\n{}", userdata))
       |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    48 -         Ok(format!("#cloud-config\n{}", userdata))
    48 +         Ok(format!("#cloud-config\n{userdata}"))
       |
    
    error: variables can be used directly in the `format!` string
      --> src/cloud_init.rs:78:9
       |
    78 |         debug!("LocalDataStore: {:#?}", self);
       |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    78 -         debug!("LocalDataStore: {:#?}", self);
    78 +         debug!("LocalDataStore: {self:#?}");
       |
    
    error: variables can be used directly in the `format!` string
       --> src/cloud_init.rs:125:9
        |
    125 |         debug!("LocalDataStoreBuilder: {:#?}", self);
        |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    125 -         debug!("LocalDataStoreBuilder: {:#?}", self);
    125 +         debug!("LocalDataStoreBuilder: {self:#?}");
        |
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:15:42
        |
    15  |     pub fn from_file(filename: &Path) -> Result<Self, PlanError> {
        |                                          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:22:47
        |
    22  |     pub fn to_file(&self, filename: &Path) -> Result<(), PlanError> {
        |                                               ^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:53:37
        |
    53  |     pub fn parse_str(yaml: &str) -> Result<Self, PlanError> {
        |                                     ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:57:42
        |
    57  |     pub fn from_file(filename: &Path) -> Result<Self, PlanError> {
        |                                          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:71:32
        |
    71  |     pub fn to_string(&self) -> Result<String, PlanError> {
        |                                ^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:75:47
        |
    75  |     pub fn to_file(&self, filename: &Path) -> Result<(), PlanError> {
        |                                               ^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
      --> src/plan.rs:77:9
       |
    77 |         trace!("RunnablePlan:to_file:\n{}", plan);
       |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    77 -         trace!("RunnablePlan:to_file:\n{}", plan);
    77 +         trace!("RunnablePlan:to_file:\n{plan}");
       |
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:96:30
        |
    96  |     pub fn execute(&self) -> Result<(), PlanError> {
        |                              ^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:132:9
        |
    132 |         debug!("QEMU exit code {}", exit);
        |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    132 -         debug!("QEMU exit code {}", exit);
    132 +         debug!("QEMU exit code {exit}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:165:9
        |
    165 |         trace!("{:#?}", self);
        |         ^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    165 -         trace!("{:#?}", self);
    165 +         trace!("{self:#?}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:246:13
        |
    246 | /             error!(
    247 | |                 "QEMU failed: exit={}\nstdout: {:?}\nstderr: {:?}\nVM console: {:?}",
    248 | |                 exit, out, err, console_log
    249 | |             );
        | |_____________^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:276:13
        |
    276 |             trace!("log has {:?}", EXIT);
        |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    276 -             trace!("log has {:?}", EXIT);
    276 +             trace!("log has {EXIT:?}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:279:17
        |
    279 |                 trace!("log has newline after exit: {:?}", exit);
        |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    279 -                 trace!("log has newline after exit: {:?}", exit);
    279 +                 trace!("log has newline after exit: {exit:?}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:281:21
        |
    281 |                     trace!("log exit coded parses ok: {}", exit);
        |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    281 -                     trace!("log exit coded parses ok: {}", exit);
    281 +                     trace!("log exit coded parses ok: {exit}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:310:9
        |
    310 | /         error!(
    311 | |             "qemu-img failed: exit={}\nstdout: {:?}\nstderr: {:?}",
    312 | |             exit, out, err,
    313 | |         );
        | |_________^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:351:19
        |
    351 |             .push(format!("format=qcow2,if=virtio,file={}", path));
        |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    351 -             .push(format!("format=qcow2,if=virtio,file={}", path));
    351 +             .push(format!("format=qcow2,if=virtio,file={path}"));
        |
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:32:6
        |
    32  | ) -> Result<(), RunError> {
        |      ^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
      --> src/run.rs:53:13
       |
    53 |             info!("project {}: running CI", name);
       |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    53 -             info!("project {}: running CI", name);
    53 +             info!("project {name}: running CI");
       |
    
    error: variables can be used directly in the `format!` string
       --> src/run.rs:125:13
        |
    125 |             info!("project {}: NOT running CI", name);
        |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    125 -             info!("project {}: NOT running CI", name);
    125 +             info!("project {name}: NOT running CI");
        |
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:132:35
        |
    132 | pub fn create_cloud_init_iso() -> Result<LocalDataStore, RunError> {
        |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:158:66
        |
    158 | pub fn create_source_vdrive(tmp: &TempDir, source_dir: &Path) -> Result<VirtualDrive, RunError> {
        |                                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:167:6
        |
    167 | ) -> Result<VirtualDrive, RunError> {
        |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:178:64
        |
    178 | fn create_dependencies_vdrive(tmp: &TempDir, state: &State) -> Result<VirtualDrive, RunError> {
        |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:192:6
        |
    192 | ) -> Result<VirtualDrive, RunError> {
        |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:207:6
        |
    207 | ) -> Result<VirtualDrive, RunError> {
        |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:289:57
        |
    289 | fn construct_runnable_plan(actions: &[UnsafeAction]) -> Result<RunnablePlan, RunError> {
        |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:332:6
        |
    332 | ) -> Result<(bool, State), RunError> {
        |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
       --> src/run.rs:337:9
        |
    337 |         debug!("latest commit: {:?}", latest_commit);
        |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    337 -         debug!("latest commit: {:?}", latest_commit);
    337 +         debug!("latest commit: {latest_commit:?}");
        |
    
    error: variables can be used directly in the `format!` string
      --> src/util.rs:85:18
       |
    85 |     let target = format!("{}/.", target);
       |                  ^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    85 -     let target = format!("{}/.", target);
    85 +     let target = format!("{target}/.");
       |
    
    error: variables can be used directly in the `format!` string
      --> src/vdrive.rs:72:9
       |
    72 |         trace!("creating virtual drive (tar archive): {:#?}", self);
       |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    72 -         trace!("creating virtual drive (tar archive): {:#?}", self);
    72 +         trace!("creating virtual drive (tar archive): {self:#?}");
       |
    
    error: could not compile `ambient-ci` (lib) due to 59 previous errors
    warning: build failed, waiting for other jobs to finish...
    error: variables can be used directly in the `format!` string
       --> src/run.rs:523:9
        |
    523 |         println!("{}", msg);
        |         ^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    523 -         println!("{}", msg);
    523 +         println!("{msg}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/tildepathbuf.rs:201:13
        |
    201 |             assert_eq!(path.display().to_string(), format!("{}/foo", home));
        |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    201 -             assert_eq!(path.display().to_string(), format!("{}/foo", home));
    201 +             assert_eq!(path.display().to_string(), format!("{home}/foo"));
        |
    
    error: variables can be used directly in the `format!` string
       --> src/tildepathbuf.rs:220:40
        |
    220 |             let wanted = PathBuf::from(format!("{}/foo", home));
        |                                        ^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    220 -             let wanted = PathBuf::from(format!("{}/foo", home));
    220 +             let wanted = PathBuf::from(format!("{home}/foo"));
        |
    
    error: could not compile `ambient-ci` (lib test) due to 62 previous errors
    ERROR: Action failed: command failed: ["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
    ERROR: command failed: ["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
    EXIT CODE: 1
    
    ====================
[2025-09-11T13:01:55Z DEBUG ambient_ci::qemu] QEMU exit code 1
ERROR: failed to run actions in QEMU

Ambient stderr

<empty log>