CI: FAILURE obnam

Table of Contents

Run log

Plan, inside VM without network

plan: Executor starts
After 0.00 seconds at 2026-03-15 05:58:14ZProgram: ambient-execute-plan
Version: 0.13.1@52633e5
plan: Runnable plan
After 0.00 seconds at 2026-03-15 05:58:14Z
steps:
- action: mkdir
  pathname: /ci
- action: mkdir
  pathname: /ci/artifacts
- action: tar_extract
  archive: /dev/vdc
  directory: /ci/src
- action: tar_extract
  archive: /dev/vdf
  directory: /ci/deps
- action: tar_extract
  archive: /dev/vde
  directory: /ci/cache
- action: shell
  shell: ln -sf /ci /workspace
- action: shell
  shell: git config --global user.name 'Ambient CI'
- action: shell
  shell: git config --global user.email ambient@example.com
- action: cargo_clippy
- action: cargo_build
- action: cargo_test
- action: shell
  shell: |
    export PATH=/root/.cargo/bin:/bin:/sbin
    ls -l "$CARGO_TARGET_DIR"
    make TARGET= subplot doc
    find doc -ls
    cp obnam.html obnam-server.html doc/*.html /ci/artifacts
- action: custom
  name: dch
  args:
    debemail: liw@liw.fi
    debfullname: Lars Wirzenius
- action: deb
  packages: .
- action: tar_create
  archive: /dev/vde
  directory: /ci/cache
- action: tar_create
  archive: /dev/vdd
  directory: /ci/artifacts
executor_drive: /dev/vdb
source_drive: /dev/vdc
artifact_drive: /dev/vdd
cache_drive: /dev/vde
deps_drive: /dev/vdf
workspace_dir: /ci
source_dir: /ci/src
deps_dir: /ci/deps
cache_dir: /ci/cache
artifacts_dir: /ci/artifacts
plan: Successful action mkdir: /ci
After 0.02 seconds at 2026-03-15 05:58:14Z
  • plan: Start action mkdir: /ci
    After 0.00 seconds at 2026-03-15 05:58:14Z
    Mkdir(
        Mkdir {
            pathname: "/ci",
        },
    )
  • plan: Action succeeded mkdir: /ci
    After 0.00 seconds at 2026-03-15 05:58:14Z
    Mkdir(
        Mkdir {
            pathname: "/ci",
        },
    )
plan: Successful action mkdir: /ci/artifacts
After 0.03 seconds at 2026-03-15 05:58:14Z
  • plan: Start action mkdir: /ci/artifacts
    After 0.00 seconds at 2026-03-15 05:58:14Z
    Mkdir(
        Mkdir {
            pathname: "/ci/artifacts",
        },
    )
  • plan: Action succeeded mkdir: /ci/artifacts
    After 0.00 seconds at 2026-03-15 05:58:14Z
    Mkdir(
        Mkdir {
            pathname: "/ci/artifacts",
        },
    )
plan: Successful action tar_extract
After 0.03 seconds at 2026-03-15 05:58:14Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-03-15 05:58:14Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdc",
            directory: "/ci/src",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-03-15 05:58:14Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdc",
            directory: "/ci/src",
        },
    )
plan: Successful action tar_extract
After 0.05 seconds at 2026-03-15 05:58:14Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-03-15 05:58:14Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdf",
            directory: "/ci/deps",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-03-15 05:58:15Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdf",
            directory: "/ci/deps",
        },
    )
plan: Successful action tar_extract
After 0.98 seconds at 2026-03-15 05:58:15Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-03-15 05:58:15Z
    TarExtract(
        TarExtract {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-03-15 05:58:15Z
    TarExtract(
        TarExtract {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
plan: Successful action shell: ln -sf /ci /workspace
After 0.99 seconds at 2026-03-15 05:58:15Z
  • plan: Start action shell: ln -sf /ci /workspace
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Shell(
        Shell {
            shell: "ln -sf /ci /workspace",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-03-15 05:58:15Z
    • bash
    • -c
    • set -xeuo pipefail ln -sf /ci /workspace
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Exit code: 0
    Stderr:
    + ln -sf /ci /workspace
    
  • plan: Action succeeded shell: ln -sf /ci /workspace
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Shell(
        Shell {
            shell: "ln -sf /ci /workspace",
        },
    )
plan: Successful action shell: git config --global user.name 'Ambient CI'
After 1.00 seconds at 2026-03-15 05:58:15Z
  • plan: Start action shell: git config --global user.name 'Ambient CI'
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Shell(
        Shell {
            shell: "git config --global user.name 'Ambient CI'",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-03-15 05:58:15Z
    • bash
    • -c
    • set -xeuo pipefail git config --global user.name 'Ambient CI'
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Exit code: 0
    Stderr:
    + git config --global user.name 'Ambient CI'
    
  • plan: Action succeeded shell: git config --global user.name 'Ambient CI'
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Shell(
        Shell {
            shell: "git config --global user.name 'Ambient CI'",
        },
    )
plan: Successful action shell: git config --global user.email ambient@example.com
After 1.02 seconds at 2026-03-15 05:58:15Z
  • plan: Start action shell: git config --global user.email ambient@example.com
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Shell(
        Shell {
            shell: "git config --global user.email ambient@example.com",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-03-15 05:58:15Z
    • bash
    • -c
    • set -xeuo pipefail git config --global user.email ambient@example.com
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Exit code: 0
    Stderr:
    + git config --global user.email ambient@example.com
    
  • plan: Action succeeded shell: git config --global user.email ambient@example.com
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Shell(
        Shell {
            shell: "git config --global user.email ambient@example.com",
        },
    )
plan: Successful action cargo_clippy
After 1.04 seconds at 2026-03-15 05:58:15Z
  • plan: Start action cargo_clippy
    After 0.00 seconds at 2026-03-15 05:58:15Z
    CargoClippy(
        CargoClippy,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-15 05:58:15Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Exit code: 0
    Stdout:
    cargo 1.94.0 (85eff7c80 2026-01-15)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-15 05:58:15Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Exit code: 0
    Stdout:
    clippy 0.1.94 (4a4ef493e3 2026-03-02)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-03-15 05:58:15Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:58:15Z
    Exit code: 0
    Stdout:
    rustc 1.94.0 (4a4ef493e 2026-03-02)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-15 05:58:15Z
    • cargo
    • clippy
    • --offline
    • --locked
    • --workspace
    • --all-targets
    • --no-deps
    • --
    • --deny
    • warnings
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:58:40Z
    Exit code: 0
    Stderr:
       Compiling libc v0.2.177
       Compiling proc-macro2 v1.0.103
       Compiling quote v1.0.42
       Compiling unicode-ident v1.0.22
        Checking cfg-if v1.0.4
       Compiling syn v2.0.110
       Compiling serde_core v1.0.228
        Checking itoa v1.0.15
        Checking memchr v2.7.6
       Compiling serde v1.0.228
       Compiling typenum v1.19.0
       Compiling version_check v0.9.5
       Compiling generic-array v0.14.7
       Compiling getrandom v0.3.4
       Compiling rustix v1.1.2
        Checking once_cell v1.21.3
        Checking bitflags v2.10.0
       Compiling serde_derive v1.0.228
       Compiling zmij v1.0.18
        Checking linux-raw-sys v0.11.0
        Checking log v0.4.28
        Checking aho-corasick v1.1.4
        Checking getrandom v0.2.16
        Checking regex-syntax v0.8.8
        Checking utf8parse v0.2.2
       Compiling thiserror v2.0.17
       Compiling serde_json v1.0.149
        Checking pin-project-lite v0.2.16
        Checking subtle v2.6.1
        Checking anstyle-parse v0.2.7
        Checking rand_core v0.6.4
       Compiling thiserror-impl v2.0.17
        Checking regex-automata v0.4.13
       Compiling powerfmt v0.2.0
        Checking is_terminal_polyfill v1.70.2
        Checking anstyle-query v1.1.5
        Checking anstyle v1.0.13
        Checking futures-core v0.3.31
       Compiling num-conv v0.1.0
        Checking smallvec v1.15.1
        Checking colorchoice v1.0.4
        Checking ryu v1.0.20
       Compiling time-core v0.1.6
        Checking regex v1.12.2
       Compiling time-macros v0.2.24
        Checking anstream v0.6.21
       Compiling deranged v0.5.5
        Checking crypto-common v0.1.7
        Checking winnow v0.7.13
        Checking equivalent v1.0.2
        Checking bytes v1.11.1
        Checking hashbrown v0.16.0
        Checking zeroize v1.8.2
        Checking indexmap v2.12.0
        Checking toml_parser v1.0.4
       Compiling time v0.3.44
        Checking http v1.4.0
        Checking terminal_size v0.4.3
        Checking serde_spanned v1.0.3
        Checking toml_datetime v0.7.3
        Checking dirs-sys-next v0.1.2
        Checking toml_writer v1.0.4
        Checking strsim v0.11.1
        Checking unsafe-libyaml-norway v0.2.15
       Compiling heck v0.5.0
        Checking clap_lex v0.7.6
        Checking fastrand v2.3.0
        Checking tempfile v3.23.0
        Checking serde_norway v0.9.42
        Checking clap_builder v4.5.51
       Compiling clap_derive v4.5.49
       Compiling git-testament-derive v0.2.1
        Checking toml v0.9.8
        Checking directories-next v2.0.0
        Checking http-body v1.0.1
        Checking env_filter v0.1.4
       Compiling tokio-macros v2.6.0
        Checking mio v1.1.0
        Checking socket2 v0.6.2
       Compiling semver v1.0.27
       Compiling mutants v0.0.3
        Checking jiff v0.2.16
        Checking pin-utils v0.1.0
       Compiling httparse v1.10.1
        Checking clingwrap v0.6.0
       Compiling rustc_version v0.4.1
        Checking tokio v1.49.0
        Checking env_logger v0.11.8
        Checking clap v4.5.51
        Checking git-testament v0.2.6
        Checking inout v0.1.4
        Checking tracing-core v0.1.36
       Compiling vcpkg v0.2.15
        Checking tower-service v0.3.3
       Compiling pkg-config v0.3.32
        Checking scopeguard v1.2.0
        Checking lock_api v0.4.14
       Compiling libsqlite3-sys v0.35.0
        Checking tracing v0.1.44
        Checking cipher v0.4.4
       Compiling heapless v0.7.17
        Checking futures-channel v0.3.31
        Checking futures-task v0.3.31
        Checking atomic-waker v1.1.2
        Checking foldhash v0.1.5
        Checking tower-layer v0.3.3
        Checking cpufeatures v0.2.17
        Checking byteorder v1.5.0
       Compiling crc32fast v1.5.0
        Checking sync_wrapper v1.0.2
        Checking httpdate v1.0.3
        Checking percent-encoding v2.3.2
        Checking hyper v1.8.1
        Checking form_urlencoded v1.2.2
        Checking hash32 v0.2.1
        Checking hashbrown v0.15.5
        Checking futures-util v0.3.31
        Checking spin v0.9.8
        Checking http-body-util v0.1.3
        Checking universal-hash v0.5.1
        Checking simd-adler32 v0.3.8
        Checking mime v0.3.17
        Checking adler2 v2.0.1
        Checking opaque-debug v0.3.1
        Checking stable_deref_trait v1.2.1
        Checking fiat-crypto v0.3.0
        Checking tower v0.5.3
        Checking polyval v0.6.2
        Checking miniz_oxide v0.8.9
        Checking axum-core v0.5.6
        Checking hashlink v0.10.0
        Checking hyper-util v0.1.20
        Checking serde_urlencoded v0.7.1
        Checking aes v0.8.4
        Checking ctr v0.9.2
        Checking orion v0.17.12
        Checking aead v0.5.2
        Checking cobs v0.3.0
        Checking ed25519-compact v2.2.0
       Compiling axum-macros v0.5.0
        Checking serde_path_to_error v0.1.20
        Checking fallible-streaming-iterator v0.1.9
        Checking matchit v0.8.4
        Checking fallible-iterator v0.3.0
        Checking ct-codecs v1.1.6
        Checking pasetors v0.7.7
        Checking rusqlite v0.37.0
        Checking axum v0.8.8
        Checking postcard v1.1.3
        Checking aes-gcm-siv v0.11.1
        Checking flate2 v1.1.8
        Checking uuid v1.20.0
        Checking hostname v0.4.2
        Checking obnam v0.10.0 (/ci/src/obnam)
        Checking obnam-server v0.1.0 (/ci/src/obnam-server)
        Finished `dev` profile [unoptimized + debuginfo] target(s) in 24.59s
    
  • plan: Action succeeded cargo_clippy
    After 0.00 seconds at 2026-03-15 05:58:40Z
    CargoClippy(
        CargoClippy,
    )
plan: Successful action cargo_build
After 26.02 seconds at 2026-03-15 05:58:40Z
  • plan: Start action cargo_build
    After 0.00 seconds at 2026-03-15 05:58:40Z
    CargoBuild(
        CargoBuild,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-15 05:58:40Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:58:40Z
    Exit code: 0
    Stdout:
    cargo 1.94.0 (85eff7c80 2026-01-15)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-15 05:58:40Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:58:40Z
    Exit code: 0
    Stdout:
    clippy 0.1.94 (4a4ef493e3 2026-03-02)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-03-15 05:58:40Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:58:40Z
    Exit code: 0
    Stdout:
    rustc 1.94.0 (4a4ef493e 2026-03-02)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-15 05:58:40Z
    • cargo
    • build
    • --offline
    • --locked
    • --workspace
    • --all-targets
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:59:12Z
    Exit code: 0
    Stderr:
       Compiling libc v0.2.177
       Compiling cfg-if v1.0.4
       Compiling itoa v1.0.15
       Compiling serde_core v1.0.228
       Compiling memchr v2.7.6
       Compiling bitflags v2.10.0
       Compiling once_cell v1.21.3
       Compiling typenum v1.19.0
       Compiling serde v1.0.228
       Compiling log v0.4.28
       Compiling num-conv v0.1.0
       Compiling time-core v0.1.6
       Compiling linux-raw-sys v0.11.0
       Compiling powerfmt v0.2.0
       Compiling deranged v0.5.5
       Compiling rustix v1.1.2
       Compiling generic-array v0.14.7
       Compiling getrandom v0.3.4
       Compiling aho-corasick v1.1.4
       Compiling getrandom v0.2.16
       Compiling pin-project-lite v0.2.16
       Compiling utf8parse v0.2.2
       Compiling subtle v2.6.1
       Compiling regex-syntax v0.8.8
       Compiling anstyle-parse v0.2.7
       Compiling regex-automata v0.4.13
       Compiling rand_core v0.6.4
       Compiling zmij v1.0.18
       Compiling colorchoice v1.0.4
       Compiling anstyle-query v1.1.5
       Compiling smallvec v1.15.1
       Compiling ryu v1.0.20
       Compiling is_terminal_polyfill v1.70.2
       Compiling futures-core v0.3.31
       Compiling anstyle v1.0.13
       Compiling anstream v0.6.21
       Compiling regex v1.12.2
       Compiling thiserror v2.0.17
       Compiling serde_json v1.0.149
       Compiling crypto-common v0.1.7
       Compiling time-macros v0.2.24
       Compiling bytes v1.11.1
       Compiling equivalent v1.0.2
       Compiling winnow v0.7.13
       Compiling hashbrown v0.16.0
       Compiling zeroize v1.8.2
       Compiling indexmap v2.12.0
       Compiling time v0.3.44
       Compiling toml_parser v1.0.4
       Compiling http v1.4.0
       Compiling terminal_size v0.4.3
       Compiling serde_spanned v1.0.3
       Compiling toml_datetime v0.7.3
       Compiling dirs-sys-next v0.1.2
       Compiling strsim v0.11.1
       Compiling clap_lex v0.7.6
       Compiling fastrand v2.3.0
       Compiling toml_writer v1.0.4
       Compiling unsafe-libyaml-norway v0.2.15
       Compiling toml v0.9.8
       Compiling serde_norway v0.9.42
       Compiling tempfile v3.23.0
       Compiling clap_builder v4.5.51
       Compiling git-testament-derive v0.2.1
       Compiling http-body v1.0.1
       Compiling directories-next v2.0.0
       Compiling env_filter v0.1.4
       Compiling mio v1.1.0
       Compiling socket2 v0.6.2
       Compiling pin-utils v0.1.0
       Compiling jiff v0.2.16
       Compiling clingwrap v0.6.0
       Compiling tokio v1.49.0
       Compiling env_logger v0.11.8
       Compiling clap v4.5.51
       Compiling git-testament v0.2.6
       Compiling inout v0.1.4
       Compiling tracing-core v0.1.36
       Compiling scopeguard v1.2.0
       Compiling tower-service v0.3.3
       Compiling lock_api v0.4.14
       Compiling tracing v0.1.44
       Compiling cipher v0.4.4
       Compiling httparse v1.10.1
       Compiling futures-channel v0.3.31
       Compiling httpdate v1.0.3
       Compiling sync_wrapper v1.0.2
       Compiling futures-task v0.3.31
       Compiling cpufeatures v0.2.17
       Compiling atomic-waker v1.1.2
       Compiling foldhash v0.1.5
       Compiling tower-layer v0.3.3
       Compiling percent-encoding v2.3.2
       Compiling byteorder v1.5.0
       Compiling form_urlencoded v1.2.2
       Compiling hash32 v0.2.1
       Compiling hashbrown v0.15.5
       Compiling hyper v1.8.1
       Compiling futures-util v0.3.31
       Compiling spin v0.9.8
       Compiling http-body-util v0.1.3
       Compiling universal-hash v0.5.1
       Compiling opaque-debug v0.3.1
       Compiling mime v0.3.17
       Compiling adler2 v2.0.1
       Compiling simd-adler32 v0.3.8
       Compiling stable_deref_trait v1.2.1
       Compiling fiat-crypto v0.3.0
       Compiling miniz_oxide v0.8.9
       Compiling heapless v0.7.17
       Compiling tower v0.5.3
       Compiling axum-core v0.5.6
       Compiling polyval v0.6.2
       Compiling libsqlite3-sys v0.35.0
       Compiling hyper-util v0.1.20
       Compiling hashlink v0.10.0
       Compiling crc32fast v1.5.0
       Compiling serde_urlencoded v0.7.1
       Compiling aes v0.8.4
       Compiling ctr v0.9.2
       Compiling aead v0.5.2
       Compiling cobs v0.3.0
       Compiling ed25519-compact v2.2.0
       Compiling orion v0.17.12
       Compiling serde_path_to_error v0.1.20
       Compiling fallible-streaming-iterator v0.1.9
       Compiling fallible-iterator v0.3.0
       Compiling matchit v0.8.4
       Compiling ct-codecs v1.1.6
       Compiling pasetors v0.7.7
       Compiling axum v0.8.8
       Compiling rusqlite v0.37.0
       Compiling postcard v1.1.3
       Compiling aes-gcm-siv v0.11.1
       Compiling flate2 v1.1.8
       Compiling uuid v1.20.0
       Compiling hostname v0.4.2
       Compiling obnam v0.10.0 (/ci/src/obnam)
       Compiling obnam-server v0.1.0 (/ci/src/obnam-server)
        Finished `dev` profile [unoptimized + debuginfo] target(s) in 31.55s
    
  • plan: Action succeeded cargo_build
    After 0.00 seconds at 2026-03-15 05:59:12Z
    CargoBuild(
        CargoBuild,
    )
plan: Successful action cargo_test
After 57.86 seconds at 2026-03-15 05:59:12Z
  • plan: Start action cargo_test
    After 0.00 seconds at 2026-03-15 05:59:12Z
    CargoTest(
        CargoTest,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-15 05:59:12Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:59:12Z
    Exit code: 0
    Stdout:
    cargo 1.94.0 (85eff7c80 2026-01-15)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-15 05:59:12Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:59:12Z
    Exit code: 0
    Stdout:
    clippy 0.1.94 (4a4ef493e3 2026-03-02)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-03-15 05:59:12Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:59:12Z
    Exit code: 0
    Stdout:
    rustc 1.94.0 (4a4ef493e 2026-03-02)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-03-15 05:59:12Z
    • cargo
    • test
    • --offline
    • --locked
    • --workspace
  • plan: Program succeeded
    After 0.00 seconds at 2026-03-15 05:59:13Z
    Exit code: 0
    Stdout:
    running 42 tests
    test chunk::test::ciphertext_does_not_contain_plaintext ... ok
    test chunk::test::chunk_round_trip ... ok
    test chunk::test::id ... ok
    test chunk::test::id_is_comparable_with_itself ... ok
    test chunk::test::label_display ... ok
    test chunk::test::label_round_trip ... ok
    test chunk::test::metadata ... ok
    test chunk::test::metadata_round_trip ... ok
    test chunk::test::two_new_chunk_ids_differ ... ok
    test cipher::test::aead_round_trip ... ok
    test cipher::test::key ... ok
    test cipher::test::key_from_string ... ok
    test client::test::generates_key ... ok
    test client::test::gets_correct_key ... ok
    test client::test::has_name ... ok
    test client::test::has_no_keys_initially ... ok
    test client::test::serialiazion_round_trip ... ok
    test client::test::sets_old_versions ... ok
    test config::test::merge_files ... ok
    test config::test::valideted_config ... ok
    test credential::test::roundtrip_sop_method ... ok
    test credential::test::roundtrip_sop_credential ... ok
    test plaintext::test::compressed ... ok
    test plaintext::test::compression_round_trip ... ok
    test plaintext::test::uncompressed ... ok
    test sop::tests::cert_display ... ok
    test sop::tests::key_display ... ok
    test store::test::cant_init_nonexistent_dir ... ok
    test store::test::empty_dir_is_not_init ... ok
    test store::test::adds_chunk ... ok
    test store::test::finds_chunk_when_labels_match ... ok
    test store::test::finds_client_chunk ... ok
    test store::test::finds_no_chunk_in_empty_store ... ok
    test store::test::finds_credential_chunk ... ok
    test store::test::finds_no_chunk_when_none_match_label ... ok
    test store::test::finds_no_clients_when_there_are_none ... ok
    test store::test::has_no_chunks_initially ... ok
    test store::test::nonexistent_dir_is_not_init ... ok
    test store::test::inits_empty_dir ... ok
    test store::test::opens_client_chunk ... ok
    test store::test::root_dir_is_not_init ... ok
    test store::test::removes_chunk ... ok
    
    test result: ok. 42 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.78s
    
    
    running 0 tests
    
    test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    running 1 test
    test config::test::merges ... ok
    
    test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    running 0 tests
    
    test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    running 1 test
    test obnam/src/lib.rs - (line 12) ... ok
    
    test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    all doctests ran in 0.23s; merged doctests compilation took 0.22s
    
    running 0 tests
    
    test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    Stderr:
        Finished `test` profile [unoptimized + debuginfo] target(s) in 0.09s
         Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/obnam-672abc85c43c438c)
         Running unittests src/bin/obnam.rs (/ci/cache/cargo-target/debug/deps/obnam-7b0c81f510d767f4)
         Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/obnam_server-df92be7c5bdc0a7a)
         Running unittests src/main.rs (/ci/cache/cargo-target/debug/deps/obnam_server-6cda6653b6b25a14)
       Doc-tests obnam
       Doc-tests obnam_server
    
  • plan: Action succeeded cargo_test
    After 0.00 seconds at 2026-03-15 05:59:13Z
    CargoTest(
        CargoTest,
    )
plan: Start action shell: export PATH=/root/.cargo/bin:/bin:/sbin ls -l "$CARGO_TARGET_DIR" make TARGET= subplot doc find doc -ls cp obnam.html obnam-server.html doc/*.html /ci/artifacts
After 59.35 seconds at 2026-03-15 05:59:13Z
Shell(
    Shell {
        shell: "export PATH=/root/.cargo/bin:/bin:/sbin\nls -l \"$CARGO_TARGET_DIR\"\nmake TARGET= subplot doc\nfind doc -ls\ncp obnam.html obnam-server.html doc/*.html /ci/artifacts\n",
    },
)
plan: Start program bash
After 59.35 seconds at 2026-03-15 05:59:13Z
  • bash
  • -c
  • set -xeuo pipefail export PATH=/root/.cargo/bin:/bin:/sbin ls -l "$CARGO_TARGET_DIR" make TARGET= subplot doc find doc -ls cp obnam.html obnam-server.html doc/*.html /ci/artifacts
plan: ERROR: Program failed
After 63.60 seconds at 2026-03-15 05:59:18Z
Exit code: 1
Stdout:
total 8
-rw-r--r-- 1 root root  177 Mar 15 05:58 CACHEDIR.TAG
drwxr-xr-x 7 root root 4096 Mar 15 05:59 debug
subplot docgen obnam.subplot --output obnam.html
subplot codegen obnam.subplot --output test.py
rm -f test.log
python3 test.py --log test.log 
srcdir /ci/src
datadir /tmp/tmp6ndlzib2
scenario: Create an OpenPGP software key credential
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: given file sop-generate
  step 4: when I run bash sop-generate alice.tsk
  step 5: when I create directory mychunks
  step 6: when I run obnam store init
  step 7: when I run obnam credential list
  step 8: then stdout is exactly ""
  step 9: when I run obnam --client-key my.secret credential openpgp-soft alice.tsk
  step 10: when I run obnam credential list --all
  step 11: then stdout isn't exactly ""
scenario: Manages chunks via API
  step 1: given an installed obnam
  step 2: given file server-config.yaml
  step 3: given file request.sh
  step 4: when I run obnam-server --config server-config.yaml init
  step 5: when I run obnam-server --config server-config.yaml token --output token.txt --allow append
  step 6: when I run, as a daemon, obnam-server --config server-config.yaml serve
  step 7: when I run bash request.sh GET /chunks/1
  step 8: then stderr contains "HTTP/1.1 404"
  step 9: when I run bash request.sh PUT /chunks/1?label=first hello
  step 10: then stderr contains "HTTP/1.1 201"
  step 11: when I run bash request.sh GET /chunks/1
  step 12: then stderr contains "HTTP/1.1 200"
  step 13: then stdout is exactly "hello"
  step 14: when I run bash request.sh GET /chunks?label=first
  step 15: then stdout is exactly "{"chunk_ids":["1"]}"
  step 16: when I run bash request.sh DELETE /chunks/1
  step 17: then stderr contains "HTTP/1.1 401"
  step 18: when I run obnam-server --config server-config.yaml token --output token.txt --allow delete
  step 19: when I run bash request.sh DELETE /chunks/1
  step 20: then stderr contains "HTTP/1.1 204"
  step 21: when I run bash request.sh GET /chunks?label=first
  step 22: then stdout is exactly "{"chunk_ids":[]}"
  cleanup 6: when I run, as a daemon, obnam-server --config server-config.yaml serve
scenario: Generates and validates API tokens
  step 1: given an installed obnam
  step 2: given file server-config.yaml
  step 3: when I run obnam-server --config server-config.yaml init
  step 4: then file keypair.json exists
  step 5: when I try to run obnam-server --config server-config.yaml init
  step 6: then command fails
  step 7: then stderr contains "keypair.json"
  step 8: when I run obnam-server --config server-config.yaml token --output token.txt --allow append
  step 9: then file token.txt contains "v4.public."
  step 10: when I run obnam-server --config server-config.yaml validate --file token.txt
  step 11: then stdout contains "read_chunks_allowed: true"
  step 12: then stdout contains "find_chunks_allowed: true"
  step 13: then stdout contains "create_chunk_allowed: true"
  step 14: then stdout contains "delete_chunk_allowed: false"
  step 15: when I run obnam-server --config server-config.yaml token --output token.txt --allow delete
  step 16: then file token.txt contains "v4.public."
  step 17: when I run obnam-server --config server-config.yaml validate --file token.txt
  step 18: then stdout contains "read_chunks_allowed: true"
  step 19: then stdout contains "find_chunks_allowed: true"
  step 20: then stdout contains "create_chunk_allowed: true"
  step 21: then stdout contains "delete_chunk_allowed: true"
scenario: Chunk encrypt/decrypt with compression round trip via file
  step 1: given an installed obnam
  step 2: given file greeting.txt
  step 3: when I run obnam chunk encrypt --compress --key secret --label sticky.tape greeting.txt --output chunk.file
  step 4: when I run obnam chunk decrypt --key secret chunk.file
  step 5: then stdout is exactly "Hello, world.\n"
scenario: Chunk encrypt/decrypt round trip via repository
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: given file greeting.txt
  step 4: when I create directory mychunks
  step 5: when I try to run obnam store init
  step 6: when I run obnam chunk encrypt --key secret --label sticky.tape greeting.txt --id=chunk0
  step 7: when I run obnam store list
  step 8: when I run obnam chunk decrypt --key secret --id chunk0
  step 9: then stdout is exactly "Hello, world.\n"
scenario: Generate new key
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: when I create directory mychunks
  step 4: when I run obnam store init
  step 5: when I run obnam --client-key my.secret client init --client-name my.host
  step 6: when I run obnam --client-key my.secret client generate my.host my.key
  step 7: when I run obnam --client-key my.secret client show --client-name my.host
  step 8: then stdout contains "my.key"
scenario: Chunk encrypt/decrypt with compression round trip via repository
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: given file greeting.txt
  step 4: when I create directory mychunks
  step 5: when I try to run obnam store init
  step 6: when I run obnam chunk encrypt --compress --key secret --label sticky.tape greeting.txt --id=chunk0
  step 7: when I run obnam store list
  step 8: when I run obnam chunk decrypt --key secret --id chunk0
  step 9: then stdout is exactly "Hello, world.\n"
scenario: Validates token via HTTP API
  step 1: given an installed obnam
  step 2: given file server-config.yaml
  step 3: given file request.sh
  step 4: when I run obnam-server --config server-config.yaml init
  step 5: when I run obnam-server --config server-config.yaml token --output token.txt --allow append
  step 6: when I run, as a daemon, obnam-server --config server-config.yaml serve
  step 7: when I run bash request.sh GET /validate
  step 8: then stdout contains ""read_chunks_allowed":true"
  step 9: then stdout contains ""find_chunks_allowed":true"
  step 10: then stdout contains ""create_chunk_allowed":true"
  step 11: then stdout contains ""delete_chunk_allowed":false"
  cleanup 6: when I run, as a daemon, obnam-server --config server-config.yaml serve
scenario: Get path to chunk in store
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: given file greeting.txt
  step 4: given a directory mychunks
  step 5: when I run obnam store init
  step 6: when I run obnam chunk encrypt --key secret --label data-chunk --id xyzzy greeting.txt
  step 7: when I run obnam store path xyzzy -o chunk.filename
  step 8: then a file exists whose name is in chunk.filename
scenario: Chunk encrypt/decrypt round trip via file
  step 1: given an installed obnam
  step 2: given file greeting.txt
  step 3: when I run obnam chunk encrypt --key secret --label sticky.tape greeting.txt --output chunk.file
  step 4: when I run obnam chunk decrypt --key secret chunk.file
  step 5: then stdout is exactly "Hello, world.\n"
scenario: Conveniently encrypt and decrypt chunk in a store
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from comfy.yaml
  step 3: given file message.txt
  step 4: when I create directory chunk.store
  step 5: when I run obnam store init
  step 6: when I run obnam client init --credential softy
  step 7: when I run obnam chunk encrypt --label data --key-name default --id test.chunk message.txt
  step 8: when I run obnam chunk decrypt --key-name default --id test.chunk --output out.dat
  step 9: then files message.txt and out.dat match
scenario: Find chunks using labels
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: given file greeting.txt
  step 4: given a directory mychunks
  step 5: when I run obnam store init
  step 6: when I run obnam chunk encrypt --key secret --label data-chunk --id xyzzy greeting.txt
  step 7: when I run obnam chunk encrypt --key secret --label data-chunk --id plugh greeting.txt
  step 8: when I run obnam chunk encrypt --key secret --label client-chunk --id advent greeting.txt
  step 9: when I run obnam store find missing
  step 10: then stdout is exactly ""
  step 11: when I run obnam store find data-chunk
  step 12: then stdout contains "xyzzy"
  step 13: then stdout contains "plugh"
  step 14: then stdout doesn't contain "advent"
  step 15: when I run obnam store find client-chunk
  step 16: then stdout doesn't contain "xyzzy"
  step 17: then stdout doesn't contain "plugh"
  step 18: then stdout contains "advent"
scenario: Inspect an encoded chunk in repository
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: given file greeting.txt
  step 4: when I create directory mychunks
  step 5: when I try to run obnam store init
  step 6: when I run obnam chunk encrypt --label sticky.tape --key secret greeting.txt --id=chunk0
  step 7: when I run obnam chunk inspect --id chunk0
  step 8: then stdout is valid JSON
  step 9: then stdout contains ""id":"
  step 10: then stdout contains ""label":"
  step 11: then stdout contains ""data": null"
  step 12: when I run obnam chunk inspect --key secret --id chunk0
  step 13: then stdout is valid JSON
  step 14: then stdout contains ""id":"
  step 15: then stdout contains ""label":"
  step 16: then stdout contains ""data": ""
scenario: Conveniently create a client with an OpenPGP software key credential
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from comfy.yaml
  step 3: when I create directory chunk.store
  step 4: when I run obnam store init
  step 5: when I run obnam client init --credential softy
  step 6: when I run obnam client list
  step 7: then stdout isn't exactly ""
scenario: Show client
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: when I create directory mychunks
  step 4: when I run obnam store init
  step 5: when I run obnam --client-key my.secret client init --client-name my.host
  step 6: when I run obnam --client-key my.secret client show --client-name my.host
  step 7: then stdout is valid JSON
scenario: Initialize a client chunk
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config-with-credential.yaml
  step 3: when I create directory mychunks
  step 4: when I run obnam store init
  step 5: when I run obnam client init --client-name my.host
  step 6: then command is successful
scenario: Round trip chunk encryption using key from client chunk
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: given file greeting.txt
  step 4: when I create directory mychunks
  step 5: when I run obnam store init
  step 6: when I run obnam --client-key my.secret client init --client-name my.host
  step 7: when I run obnam --client-key my.secret client generate my.host my.key
  step 8: when I run obnam --client-key my.secret chunk encrypt --client-name my.host --key-name my.key --label sticky.tape greeting.txt --output chunk.file
  step 9: when I run obnam --client-key my.secret chunk decrypt --client-name my.host --key-name my.key chunk.file
  step 10: then stdout is exactly "Hello, world.\n"
scenario: Initialize a store
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: then directory mychunks does not exist
  step 4: when I try to run obnam store is
  step 5: then command fails
  step 6: when I create directory mychunks
  step 7: when I try to run obnam store is
  step 8: then command fails
  step 9: when I run obnam store init
  step 10: when I run obnam store is
  step 11: then exit code is 0
scenario: Logging level can be set
  step 1: given an installed obnam
  step 2: when I run obnam config
  step 3: then stderr doesn't contain "TRACE"
  step 4: then stderr doesn't contain "DEBUG"
  step 5: then stderr contains "INFO"
  step 6: then stderr contains "WARN"
  step 7: then stderr contains "ERROR"
  step 8: when I run env OBNAM_LOG=error obnam config
  step 9: then stderr doesn't contain "TRACE"
  step 10: then stderr doesn't contain "DEBUG"
  step 11: then stderr doesn't contain "INFO"
  step 12: then stderr doesn't contain "WARN"
  step 13: then stderr contains "ERROR"
  step 14: when I run obnam --log-level=error config
  step 15: then stderr doesn't contain "TRACE"
  step 16: then stderr doesn't contain "DEBUG"
  step 17: then stderr doesn't contain "INFO"
  step 18: then stderr doesn't contain "WARN"
  step 19: then stderr contains "ERROR"
  step 20: when I run env OBNAM_LOG=error obnam --log-level=trace config
  step 21: then stderr contains "TRACE"
  step 22: then stderr contains "DEBUG"
  step 23: then stderr contains "INFO"
  step 24: then stderr contains "WARN"
  step 25: then stderr contains "ERROR"
scenario: Avoid client chunks with the same name
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: when I create directory mychunks
  step 4: when I run obnam store init
  step 5: when I run obnam --client-key my.secret client init --client-name my.host
  step 6: then command is successful
  step 7: when I try to run obnam --client-key my.secret client init --client-name my.host
  step 8: then command fails
scenario: Encryption round trip
  step 1: given an installed obnam
  step 2: given file alice.key
  step 3: given file hello.txt
  step 4: when I run obnam sop encrypt rsop alice.key hello.txt -o encrypted
  step 5: when I run ls -l encrypted
  step 6: when I run cat encrypted
  step 7: when I run obnam sop decrypt rsop alice.key encrypted
  step 8: then stdout is exactly "hello, world\n"
scenario: Refuses API token made for another server instance
  step 1: given an installed obnam
  step 2: given file server-config.yaml
  step 3: when I run obnam-server --config server-config.yaml init
  step 4: when I run obnam-server --config server-config.yaml token --output token.txt --allow append
  step 5: when I remove file keypair.json
  step 6: when I run obnam-server --config server-config.yaml init
  step 7: when I try to run obnam-server --config server-config.yaml validate --file token.txt
  step 8: then command fails
scenario: Remove a chunk from store
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: given file greeting.txt
  step 4: given a directory mychunks
  step 5: when I run obnam store init
  step 6: when I run obnam chunk encrypt --key secret --label data-chunk --id xyzzy greeting.txt
  step 7: when I run obnam store remove xyzzy
  step 8: when I run obnam store list
  step 9: then stdout doesn't contain "xyzzy"
scenario: Inspect an encrypted chunk using key from client chunk
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: given file greeting.txt
  step 4: when I create directory mychunks
  step 5: when I run obnam store init
  step 6: when I run obnam --client-key my.secret client init --client-name my.host
  step 7: when I run obnam --client-key my.secret client generate my.host my.key
  step 8: when I run obnam --client-key my.secret chunk encrypt --client-name my.host --key-name my.key --label sticky.tape greeting.txt --output chunk.file
  step 9: when I run obnam --client-key my.secret chunk inspect --filename chunk.file --client-name my.host --key-name my.key
  step 10: then stdout is valid JSON
  step 11: then stdout contains ""id":"
  step 12: then stdout contains ""label":"
  step 13: then stdout contains ""data": ""
scenario: List clients
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: when I create directory mychunks
  step 4: when I run obnam store init
  step 5: when I run obnam --client-key my.secret client init --client-name my.host
  step 6: when I run obnam --client-key my.secret client list
  step 7: then stdout is exactly "my.host\n"
scenario: Extracting a certificate from a key
  step 1: given an installed obnam
  step 2: given file alice.key
  step 3: when I run obnam sop extract-cert rsop alice.key
  step 4: then stdout isn't exactly ""
scenario: Inspect an encoded chunk in file
  step 1: given an installed obnam
  step 2: given file greeting.txt
  step 3: when I run obnam chunk encrypt --label sticky.tape --key secret greeting.txt --output chunk.file
  step 4: when I run obnam chunk inspect --filename chunk.file
  step 5: then stdout is valid JSON
  step 6: then stdout contains ""id":"
  step 7: then stdout contains ""label":"
  step 8: then stdout contains ""data": null"
  step 9: when I run obnam chunk inspect --filename chunk.file --key secret
  step 10: then stdout is valid JSON
  step 11: then stdout contains ""id":"
  step 12: then stdout contains ""label":"
  step 13: then stdout contains ""data": ""
scenario: Add a chunk to the store.
  step 1: given an installed obnam
  step 2: given file .config/obnam/config.yaml from config.yaml
  step 3: given file greeting.txt
  step 4: given a directory mychunks
  step 5: when I run obnam store init
  step 6: when I run obnam chunk encrypt --key secret --label data --id xyzzy greeting.txt
  step 7: when I run obnam store list
  step 8: then stdout is exactly "xyzzy\n"
OK, all scenarios finished successfully
env 'RUSTDOCFLAGS=-D warnings' cargo doc --no-deps
make -C doc
make[1]: Entering directory '/ci/src/doc'
pandoc -N --toc --standalone --self-contained -o "arch.html" "arch.md"
pandoc -N --toc --standalone --self-contained -o "glossary.html" "glossary.md"
make[1]: Leaving directory '/ci/src/doc'
  1179692      4 drwxr-xr-x   2 root     root         4096 Mar 15 05:59 doc
  1197969      8 -rw-r--r--   1 root     root         4303 Mar 15 05:59 doc/glossary.html
  1179695      4 -rw-r--r--   1 root     root          517 Mar 15 05:58 doc/glossary.md
  1179696     16 -rw-r--r--   1 root     root        13627 Mar 15 05:58 doc/arch.md
  1179694      4 -rw-r--r--   1 root     root          540 Mar 15 05:58 doc/keys.pik
  1179697      4 -rw-r--r--   1 root     root          327 Mar 15 05:58 doc/Makefile
  1197968     24 -rw-r--r--   1 root     root        24568 Mar 15 05:59 doc/arch.html
  1179693      4 -rw-r--r--   1 root     root         3885 Mar 15 05:58 doc/keys.svg
Stderr:
+ export PATH=/root/.cargo/bin:/bin:/sbin
+ PATH=/root/.cargo/bin:/bin:/sbin
+ ls -l /ci/cache/cargo-target
+ make TARGET= subplot doc
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
 Documenting obnam-server v0.1.0 (/ci/src/obnam-server)
 Documenting obnam v0.10.0 (/ci/src/obnam)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.59s
   Generated /ci/cache/cargo-target/doc/obnam/index.html and 1 other file
[WARNING] This document format requires a nonempty <title> element.
  Defaulting to 'glossary' as the title.
  To specify a title, use 'title' in metadata or --metadata title="...".
+ find doc -ls
+ cp obnam.html obnam-server.html doc/arch.html doc/glossary.html /ci/artifacts
cp: cannot stat 'obnam-server.html': No such file or directory
plan: Action failed: shell: export PATH=/root/.cargo/bin:/bin:/sbin ls -l "$CARGO_TARGET_DIR" make TARGET= subplot doc find doc -ls cp obnam.html obnam-server.html doc/*.html /ci/artifacts
After 63.86 seconds at 2026-03-15 05:59:18Z
Shell(
    Shell {
        shell: "export PATH=/root/.cargo/bin:/bin:/sbin\nls -l \"$CARGO_TARGET_DIR\"\nmake TARGET= subplot doc\nfind doc -ls\ncp obnam.html obnam-server.html doc/*.html /ci/artifacts\n",
    },
)

Raw log messages for Ambient troubleshooting

Raw log messages

These raw log messages are meant to help Ambient developers figure out problems. You can ignore them.

  1. {
      "type": "executor_starts",
      "name": "ambient-execute-plan",
      "version": "0.13.1@52633e5",
      "timestamp": {
        "secs_since_epoch": 1773554294,
        "nanos_since_epoch": 542460563
      },
      "log_source": "Plan"
    }
  2. {
      "type": "runnable_plan",
      "steps": [
        {
          "action": "mkdir",
          "pathname": "/ci"
        },
        {
          "action": "mkdir",
          "pathname": "/ci/artifacts"
        },
        {
          "action": "tar_extract",
          "archive": "/dev/vdc",
          "directory": "/ci/src"
        },
        {
          "action": "tar_extract",
          "archive": "/dev/vdf",
          "directory": "/ci/deps"
        },
        {
          "action": "tar_extract",
          "archive": "/dev/vde",
          "directory": "/ci/cache"
        },
        {
          "action": "shell",
          "shell": "ln -sf /ci /workspace"
        },
        {
          "action": "shell",
          "shell": "git config --global user.name 'Ambient CI'"
        },
        {
          "action": "shell",
          "shell": "git config --global user.email ambient@example.com"
        },
        {
          "action": "cargo_clippy"
        },
        {
          "action": "cargo_build"
        },
        {
          "action": "cargo_test"
        },
        {
          "action": "shell",
          "shell": "export PATH=/root/.cargo/bin:/bin:/sbin\nls -l \"$CARGO_TARGET_DIR\"\nmake TARGET= subplot doc\nfind doc -ls\ncp obnam.html obnam-server.html doc/*.html /ci/artifacts\n"
        },
        {
          "action": "custom",
          "name": "dch",
          "args": {
            "debemail": "liw@liw.fi",
            "debfullname": "Lars Wirzenius"
          }
        },
        {
          "action": "deb",
          "packages": "."
        },
        {
          "action": "tar_create",
          "archive": "/dev/vde",
          "directory": "/ci/cache"
        },
        {
          "action": "tar_create",
          "archive": "/dev/vdd",
          "directory": "/ci/artifacts"
        }
      ],
      "executor_drive": "/dev/vdb",
      "source_drive": "/dev/vdc",
      "artifact_drive": "/dev/vdd",
      "cache_drive": "/dev/vde",
      "deps_drive": "/dev/vdf",
      "workspace_dir": "/ci",
      "source_dir": "/ci/src",
      "deps_dir": "/ci/deps",
      "cache_dir": "/ci/cache",
      "artifacts_dir": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1773554294,
        "nanos_since_epoch": 545804847
      },
      "log_source": "Plan"
    }
  3. {
      "type": "execute_action",
      "action": "mkdir",
      "pathname": "/ci",
      "timestamp": {
        "secs_since_epoch": 1773554294,
        "nanos_since_epoch": 565054805
      },
      "log_source": "Plan"
    }
  4. {
      "type": "action_succeeded",
      "action": "mkdir",
      "pathname": "/ci",
      "timestamp": {
        "secs_since_epoch": 1773554294,
        "nanos_since_epoch": 568509584
      },
      "log_source": "Plan"
    }
  5. {
      "type": "execute_action",
      "action": "mkdir",
      "pathname": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1773554294,
        "nanos_since_epoch": 570701467
      },
      "log_source": "Plan"
    }
  6. {
      "type": "action_succeeded",
      "action": "mkdir",
      "pathname": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1773554294,
        "nanos_since_epoch": 573026880
      },
      "log_source": "Plan"
    }
  7. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vdc",
      "directory": "/ci/src",
      "timestamp": {
        "secs_since_epoch": 1773554294,
        "nanos_since_epoch": 575357818
      },
      "log_source": "Plan"
    }
  8. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vdc",
      "directory": "/ci/src",
      "timestamp": {
        "secs_since_epoch": 1773554294,
        "nanos_since_epoch": 588007891
      },
      "log_source": "Plan"
    }
  9. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vdf",
      "directory": "/ci/deps",
      "timestamp": {
        "secs_since_epoch": 1773554294,
        "nanos_since_epoch": 590648773
      },
      "log_source": "Plan"
    }
  10. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vdf",
      "directory": "/ci/deps",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 518128071
      },
      "log_source": "Plan"
    }
  11. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 520791730
      },
      "log_source": "Plan"
    }
  12. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 524996205
      },
      "log_source": "Plan"
    }
  13. {
      "type": "execute_action",
      "action": "shell",
      "shell": "ln -sf /ci /workspace",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 527641403
      },
      "log_source": "Plan"
    }
  14. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            108,
            110,
            32,
            45,
            115,
            102,
            32,
            47,
            99,
            105,
            32,
            47,
            119,
            111,
            114,
            107,
            115,
            112,
            97,
            99,
            101,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 530015188
      },
      "log_source": "Plan"
    }
  15. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ ln -sf /ci /workspace\n",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 537138960
      },
      "log_source": "Plan"
    }
  16. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "ln -sf /ci /workspace",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 539732305
      },
      "log_source": "Plan"
    }
  17. {
      "type": "execute_action",
      "action": "shell",
      "shell": "git config --global user.name 'Ambient CI'",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 542142666
      },
      "log_source": "Plan"
    }
  18. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            103,
            105,
            116,
            32,
            99,
            111,
            110,
            102,
            105,
            103,
            32,
            45,
            45,
            103,
            108,
            111,
            98,
            97,
            108,
            32,
            117,
            115,
            101,
            114,
            46,
            110,
            97,
            109,
            101,
            32,
            39,
            65,
            109,
            98,
            105,
            101,
            110,
            116,
            32,
            67,
            73,
            39,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 544785092
      },
      "log_source": "Plan"
    }
  19. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ git config --global user.name 'Ambient CI'\n",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 555156298
      },
      "log_source": "Plan"
    }
  20. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "git config --global user.name 'Ambient CI'",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 558080594
      },
      "log_source": "Plan"
    }
  21. {
      "type": "execute_action",
      "action": "shell",
      "shell": "git config --global user.email ambient@example.com",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 560736911
      },
      "log_source": "Plan"
    }
  22. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            103,
            105,
            116,
            32,
            99,
            111,
            110,
            102,
            105,
            103,
            32,
            45,
            45,
            103,
            108,
            111,
            98,
            97,
            108,
            32,
            117,
            115,
            101,
            114,
            46,
            101,
            109,
            97,
            105,
            108,
            32,
            97,
            109,
            98,
            105,
            101,
            110,
            116,
            64,
            101,
            120,
            97,
            109,
            112,
            108,
            101,
            46,
            99,
            111,
            109,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 563524454
      },
      "log_source": "Plan"
    }
  23. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ git config --global user.email ambient@example.com\n",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 571867797
      },
      "log_source": "Plan"
    }
  24. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "git config --global user.email ambient@example.com",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 574899032
      },
      "log_source": "Plan"
    }
  25. {
      "type": "execute_action",
      "action": "cargo_clippy",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 577722161
      },
      "log_source": "Plan"
    }
  26. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 579745716
      },
      "log_source": "Plan"
    }
  27. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.94.0 (85eff7c80 2026-01-15)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 635712486
      },
      "log_source": "Plan"
    }
  28. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 638555446
      },
      "log_source": "Plan"
    }
  29. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.94 (4a4ef493e3 2026-03-02)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 746331282
      },
      "log_source": "Plan"
    }
  30. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 746371576
      },
      "log_source": "Plan"
    }
  31. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.94.0 (4a4ef493e 2026-03-02)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 794081530
      },
      "log_source": "Plan"
    }
  32. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            111,
            102,
            102,
            108,
            105,
            110,
            101
          ]
        },
        {
          "Unix": [
            45,
            45,
            108,
            111,
            99,
            107,
            101,
            100
          ]
        },
        {
          "Unix": [
            45,
            45,
            119,
            111,
            114,
            107,
            115,
            112,
            97,
            99,
            101
          ]
        },
        {
          "Unix": [
            45,
            45,
            97,
            108,
            108,
            45,
            116,
            97,
            114,
            103,
            101,
            116,
            115
          ]
        },
        {
          "Unix": [
            45,
            45,
            110,
            111,
            45,
            100,
            101,
            112,
            115
          ]
        },
        {
          "Unix": [
            45,
            45
          ]
        },
        {
          "Unix": [
            45,
            45,
            100,
            101,
            110,
            121
          ]
        },
        {
          "Unix": [
            119,
            97,
            114,
            110,
            105,
            110,
            103,
            115
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554295,
        "nanos_since_epoch": 794126104
      },
      "log_source": "Plan"
    }
  33. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "   Compiling libc v0.2.177\n   Compiling proc-macro2 v1.0.103\n   Compiling quote v1.0.42\n   Compiling unicode-ident v1.0.22\n    Checking cfg-if v1.0.4\n   Compiling syn v2.0.110\n   Compiling serde_core v1.0.228\n    Checking itoa v1.0.15\n    Checking memchr v2.7.6\n   Compiling serde v1.0.228\n   Compiling typenum v1.19.0\n   Compiling version_check v0.9.5\n   Compiling generic-array v0.14.7\n   Compiling getrandom v0.3.4\n   Compiling rustix v1.1.2\n    Checking once_cell v1.21.3\n    Checking bitflags v2.10.0\n   Compiling serde_derive v1.0.228\n   Compiling zmij v1.0.18\n    Checking linux-raw-sys v0.11.0\n    Checking log v0.4.28\n    Checking aho-corasick v1.1.4\n    Checking getrandom v0.2.16\n    Checking regex-syntax v0.8.8\n    Checking utf8parse v0.2.2\n   Compiling thiserror v2.0.17\n   Compiling serde_json v1.0.149\n    Checking pin-project-lite v0.2.16\n    Checking subtle v2.6.1\n    Checking anstyle-parse v0.2.7\n    Checking rand_core v0.6.4\n   Compiling thiserror-impl v2.0.17\n    Checking regex-automata v0.4.13\n   Compiling powerfmt v0.2.0\n    Checking is_terminal_polyfill v1.70.2\n    Checking anstyle-query v1.1.5\n    Checking anstyle v1.0.13\n    Checking futures-core v0.3.31\n   Compiling num-conv v0.1.0\n    Checking smallvec v1.15.1\n    Checking colorchoice v1.0.4\n    Checking ryu v1.0.20\n   Compiling time-core v0.1.6\n    Checking regex v1.12.2\n   Compiling time-macros v0.2.24\n    Checking anstream v0.6.21\n   Compiling deranged v0.5.5\n    Checking crypto-common v0.1.7\n    Checking winnow v0.7.13\n    Checking equivalent v1.0.2\n    Checking bytes v1.11.1\n    Checking hashbrown v0.16.0\n    Checking zeroize v1.8.2\n    Checking indexmap v2.12.0\n    Checking toml_parser v1.0.4\n   Compiling time v0.3.44\n    Checking http v1.4.0\n    Checking terminal_size v0.4.3\n    Checking serde_spanned v1.0.3\n    Checking toml_datetime v0.7.3\n    Checking dirs-sys-next v0.1.2\n    Checking toml_writer v1.0.4\n    Checking strsim v0.11.1\n    Checking unsafe-libyaml-norway v0.2.15\n   Compiling heck v0.5.0\n    Checking clap_lex v0.7.6\n    Checking fastrand v2.3.0\n    Checking tempfile v3.23.0\n    Checking serde_norway v0.9.42\n    Checking clap_builder v4.5.51\n   Compiling clap_derive v4.5.49\n   Compiling git-testament-derive v0.2.1\n    Checking toml v0.9.8\n    Checking directories-next v2.0.0\n    Checking http-body v1.0.1\n    Checking env_filter v0.1.4\n   Compiling tokio-macros v2.6.0\n    Checking mio v1.1.0\n    Checking socket2 v0.6.2\n   Compiling semver v1.0.27\n   Compiling mutants v0.0.3\n    Checking jiff v0.2.16\n    Checking pin-utils v0.1.0\n   Compiling httparse v1.10.1\n    Checking clingwrap v0.6.0\n   Compiling rustc_version v0.4.1\n    Checking tokio v1.49.0\n    Checking env_logger v0.11.8\n    Checking clap v4.5.51\n    Checking git-testament v0.2.6\n    Checking inout v0.1.4\n    Checking tracing-core v0.1.36\n   Compiling vcpkg v0.2.15\n    Checking tower-service v0.3.3\n   Compiling pkg-config v0.3.32\n    Checking scopeguard v1.2.0\n    Checking lock_api v0.4.14\n   Compiling libsqlite3-sys v0.35.0\n    Checking tracing v0.1.44\n    Checking cipher v0.4.4\n   Compiling heapless v0.7.17\n    Checking futures-channel v0.3.31\n    Checking futures-task v0.3.31\n    Checking atomic-waker v1.1.2\n    Checking foldhash v0.1.5\n    Checking tower-layer v0.3.3\n    Checking cpufeatures v0.2.17\n    Checking byteorder v1.5.0\n   Compiling crc32fast v1.5.0\n    Checking sync_wrapper v1.0.2\n    Checking httpdate v1.0.3\n    Checking percent-encoding v2.3.2\n    Checking hyper v1.8.1\n    Checking form_urlencoded v1.2.2\n    Checking hash32 v0.2.1\n    Checking hashbrown v0.15.5\n    Checking futures-util v0.3.31\n    Checking spin v0.9.8\n    Checking http-body-util v0.1.3\n    Checking universal-hash v0.5.1\n    Checking simd-adler32 v0.3.8\n    Checking mime v0.3.17\n    Checking adler2 v2.0.1\n    Checking opaque-debug v0.3.1\n    Checking stable_deref_trait v1.2.1\n    Checking fiat-crypto v0.3.0\n    Checking tower v0.5.3\n    Checking polyval v0.6.2\n    Checking miniz_oxide v0.8.9\n    Checking axum-core v0.5.6\n    Checking hashlink v0.10.0\n    Checking hyper-util v0.1.20\n    Checking serde_urlencoded v0.7.1\n    Checking aes v0.8.4\n    Checking ctr v0.9.2\n    Checking orion v0.17.12\n    Checking aead v0.5.2\n    Checking cobs v0.3.0\n    Checking ed25519-compact v2.2.0\n   Compiling axum-macros v0.5.0\n    Checking serde_path_to_error v0.1.20\n    Checking fallible-streaming-iterator v0.1.9\n    Checking matchit v0.8.4\n    Checking fallible-iterator v0.3.0\n    Checking ct-codecs v1.1.6\n    Checking pasetors v0.7.7\n    Checking rusqlite v0.37.0\n    Checking axum v0.8.8\n    Checking postcard v1.1.3\n    Checking aes-gcm-siv v0.11.1\n    Checking flate2 v1.1.8\n    Checking uuid v1.20.0\n    Checking hostname v0.4.2\n    Checking obnam v0.10.0 (/ci/src/obnam)\n    Checking obnam-server v0.1.0 (/ci/src/obnam-server)\n    Finished `dev` profile [unoptimized + debuginfo] target(s) in 24.59s\n",
      "timestamp": {
        "secs_since_epoch": 1773554320,
        "nanos_since_epoch": 494185938
      },
      "log_source": "Plan"
    }
  34. {
      "type": "action_succeeded",
      "action": "cargo_clippy",
      "timestamp": {
        "secs_since_epoch": 1773554320,
        "nanos_since_epoch": 561644182
      },
      "log_source": "Plan"
    }
  35. {
      "type": "execute_action",
      "action": "cargo_build",
      "timestamp": {
        "secs_since_epoch": 1773554320,
        "nanos_since_epoch": 563670641
      },
      "log_source": "Plan"
    }
  36. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554320,
        "nanos_since_epoch": 565680318
      },
      "log_source": "Plan"
    }
  37. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.94.0 (85eff7c80 2026-01-15)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773554320,
        "nanos_since_epoch": 602560576
      },
      "log_source": "Plan"
    }
  38. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554320,
        "nanos_since_epoch": 605249008
      },
      "log_source": "Plan"
    }
  39. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.94 (4a4ef493e3 2026-03-02)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773554320,
        "nanos_since_epoch": 685417273
      },
      "log_source": "Plan"
    }
  40. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554320,
        "nanos_since_epoch": 688152932
      },
      "log_source": "Plan"
    }
  41. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.94.0 (4a4ef493e 2026-03-02)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773554320,
        "nanos_since_epoch": 729145644
      },
      "log_source": "Plan"
    }
  42. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            98,
            117,
            105,
            108,
            100
          ]
        },
        {
          "Unix": [
            45,
            45,
            111,
            102,
            102,
            108,
            105,
            110,
            101
          ]
        },
        {
          "Unix": [
            45,
            45,
            108,
            111,
            99,
            107,
            101,
            100
          ]
        },
        {
          "Unix": [
            45,
            45,
            119,
            111,
            114,
            107,
            115,
            112,
            97,
            99,
            101
          ]
        },
        {
          "Unix": [
            45,
            45,
            97,
            108,
            108,
            45,
            116,
            97,
            114,
            103,
            101,
            116,
            115
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554320,
        "nanos_since_epoch": 729188063
      },
      "log_source": "Plan"
    }
  43. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "   Compiling libc v0.2.177\n   Compiling cfg-if v1.0.4\n   Compiling itoa v1.0.15\n   Compiling serde_core v1.0.228\n   Compiling memchr v2.7.6\n   Compiling bitflags v2.10.0\n   Compiling once_cell v1.21.3\n   Compiling typenum v1.19.0\n   Compiling serde v1.0.228\n   Compiling log v0.4.28\n   Compiling num-conv v0.1.0\n   Compiling time-core v0.1.6\n   Compiling linux-raw-sys v0.11.0\n   Compiling powerfmt v0.2.0\n   Compiling deranged v0.5.5\n   Compiling rustix v1.1.2\n   Compiling generic-array v0.14.7\n   Compiling getrandom v0.3.4\n   Compiling aho-corasick v1.1.4\n   Compiling getrandom v0.2.16\n   Compiling pin-project-lite v0.2.16\n   Compiling utf8parse v0.2.2\n   Compiling subtle v2.6.1\n   Compiling regex-syntax v0.8.8\n   Compiling anstyle-parse v0.2.7\n   Compiling regex-automata v0.4.13\n   Compiling rand_core v0.6.4\n   Compiling zmij v1.0.18\n   Compiling colorchoice v1.0.4\n   Compiling anstyle-query v1.1.5\n   Compiling smallvec v1.15.1\n   Compiling ryu v1.0.20\n   Compiling is_terminal_polyfill v1.70.2\n   Compiling futures-core v0.3.31\n   Compiling anstyle v1.0.13\n   Compiling anstream v0.6.21\n   Compiling regex v1.12.2\n   Compiling thiserror v2.0.17\n   Compiling serde_json v1.0.149\n   Compiling crypto-common v0.1.7\n   Compiling time-macros v0.2.24\n   Compiling bytes v1.11.1\n   Compiling equivalent v1.0.2\n   Compiling winnow v0.7.13\n   Compiling hashbrown v0.16.0\n   Compiling zeroize v1.8.2\n   Compiling indexmap v2.12.0\n   Compiling time v0.3.44\n   Compiling toml_parser v1.0.4\n   Compiling http v1.4.0\n   Compiling terminal_size v0.4.3\n   Compiling serde_spanned v1.0.3\n   Compiling toml_datetime v0.7.3\n   Compiling dirs-sys-next v0.1.2\n   Compiling strsim v0.11.1\n   Compiling clap_lex v0.7.6\n   Compiling fastrand v2.3.0\n   Compiling toml_writer v1.0.4\n   Compiling unsafe-libyaml-norway v0.2.15\n   Compiling toml v0.9.8\n   Compiling serde_norway v0.9.42\n   Compiling tempfile v3.23.0\n   Compiling clap_builder v4.5.51\n   Compiling git-testament-derive v0.2.1\n   Compiling http-body v1.0.1\n   Compiling directories-next v2.0.0\n   Compiling env_filter v0.1.4\n   Compiling mio v1.1.0\n   Compiling socket2 v0.6.2\n   Compiling pin-utils v0.1.0\n   Compiling jiff v0.2.16\n   Compiling clingwrap v0.6.0\n   Compiling tokio v1.49.0\n   Compiling env_logger v0.11.8\n   Compiling clap v4.5.51\n   Compiling git-testament v0.2.6\n   Compiling inout v0.1.4\n   Compiling tracing-core v0.1.36\n   Compiling scopeguard v1.2.0\n   Compiling tower-service v0.3.3\n   Compiling lock_api v0.4.14\n   Compiling tracing v0.1.44\n   Compiling cipher v0.4.4\n   Compiling httparse v1.10.1\n   Compiling futures-channel v0.3.31\n   Compiling httpdate v1.0.3\n   Compiling sync_wrapper v1.0.2\n   Compiling futures-task v0.3.31\n   Compiling cpufeatures v0.2.17\n   Compiling atomic-waker v1.1.2\n   Compiling foldhash v0.1.5\n   Compiling tower-layer v0.3.3\n   Compiling percent-encoding v2.3.2\n   Compiling byteorder v1.5.0\n   Compiling form_urlencoded v1.2.2\n   Compiling hash32 v0.2.1\n   Compiling hashbrown v0.15.5\n   Compiling hyper v1.8.1\n   Compiling futures-util v0.3.31\n   Compiling spin v0.9.8\n   Compiling http-body-util v0.1.3\n   Compiling universal-hash v0.5.1\n   Compiling opaque-debug v0.3.1\n   Compiling mime v0.3.17\n   Compiling adler2 v2.0.1\n   Compiling simd-adler32 v0.3.8\n   Compiling stable_deref_trait v1.2.1\n   Compiling fiat-crypto v0.3.0\n   Compiling miniz_oxide v0.8.9\n   Compiling heapless v0.7.17\n   Compiling tower v0.5.3\n   Compiling axum-core v0.5.6\n   Compiling polyval v0.6.2\n   Compiling libsqlite3-sys v0.35.0\n   Compiling hyper-util v0.1.20\n   Compiling hashlink v0.10.0\n   Compiling crc32fast v1.5.0\n   Compiling serde_urlencoded v0.7.1\n   Compiling aes v0.8.4\n   Compiling ctr v0.9.2\n   Compiling aead v0.5.2\n   Compiling cobs v0.3.0\n   Compiling ed25519-compact v2.2.0\n   Compiling orion v0.17.12\n   Compiling serde_path_to_error v0.1.20\n   Compiling fallible-streaming-iterator v0.1.9\n   Compiling fallible-iterator v0.3.0\n   Compiling matchit v0.8.4\n   Compiling ct-codecs v1.1.6\n   Compiling pasetors v0.7.7\n   Compiling axum v0.8.8\n   Compiling rusqlite v0.37.0\n   Compiling postcard v1.1.3\n   Compiling aes-gcm-siv v0.11.1\n   Compiling flate2 v1.1.8\n   Compiling uuid v1.20.0\n   Compiling hostname v0.4.2\n   Compiling obnam v0.10.0 (/ci/src/obnam)\n   Compiling obnam-server v0.1.0 (/ci/src/obnam-server)\n    Finished `dev` profile [unoptimized + debuginfo] target(s) in 31.55s\n",
      "timestamp": {
        "secs_since_epoch": 1773554352,
        "nanos_since_epoch": 333111239
      },
      "log_source": "Plan"
    }
  44. {
      "type": "action_succeeded",
      "action": "cargo_build",
      "timestamp": {
        "secs_since_epoch": 1773554352,
        "nanos_since_epoch": 399510721
      },
      "log_source": "Plan"
    }
  45. {
      "type": "execute_action",
      "action": "cargo_test",
      "timestamp": {
        "secs_since_epoch": 1773554352,
        "nanos_since_epoch": 401449417
      },
      "log_source": "Plan"
    }
  46. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554352,
        "nanos_since_epoch": 403458449
      },
      "log_source": "Plan"
    }
  47. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.94.0 (85eff7c80 2026-01-15)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773554352,
        "nanos_since_epoch": 440973896
      },
      "log_source": "Plan"
    }
  48. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554352,
        "nanos_since_epoch": 443732013
      },
      "log_source": "Plan"
    }
  49. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.94 (4a4ef493e3 2026-03-02)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773554352,
        "nanos_since_epoch": 525921933
      },
      "log_source": "Plan"
    }
  50. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554352,
        "nanos_since_epoch": 528704480
      },
      "log_source": "Plan"
    }
  51. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.94.0 (4a4ef493e 2026-03-02)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1773554352,
        "nanos_since_epoch": 570492056
      },
      "log_source": "Plan"
    }
  52. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            116,
            101,
            115,
            116
          ]
        },
        {
          "Unix": [
            45,
            45,
            111,
            102,
            102,
            108,
            105,
            110,
            101
          ]
        },
        {
          "Unix": [
            45,
            45,
            108,
            111,
            99,
            107,
            101,
            100
          ]
        },
        {
          "Unix": [
            45,
            45,
            119,
            111,
            114,
            107,
            115,
            112,
            97,
            99,
            101
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554352,
        "nanos_since_epoch": 570531804
      },
      "log_source": "Plan"
    }
  53. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "\nrunning 42 tests\ntest chunk::test::ciphertext_does_not_contain_plaintext ... ok\ntest chunk::test::chunk_round_trip ... ok\ntest chunk::test::id ... ok\ntest chunk::test::id_is_comparable_with_itself ... ok\ntest chunk::test::label_display ... ok\ntest chunk::test::label_round_trip ... ok\ntest chunk::test::metadata ... ok\ntest chunk::test::metadata_round_trip ... ok\ntest chunk::test::two_new_chunk_ids_differ ... ok\ntest cipher::test::aead_round_trip ... ok\ntest cipher::test::key ... ok\ntest cipher::test::key_from_string ... ok\ntest client::test::generates_key ... ok\ntest client::test::gets_correct_key ... ok\ntest client::test::has_name ... ok\ntest client::test::has_no_keys_initially ... ok\ntest client::test::serialiazion_round_trip ... ok\ntest client::test::sets_old_versions ... ok\ntest config::test::merge_files ... ok\ntest config::test::valideted_config ... ok\ntest credential::test::roundtrip_sop_method ... ok\ntest credential::test::roundtrip_sop_credential ... ok\ntest plaintext::test::compressed ... ok\ntest plaintext::test::compression_round_trip ... ok\ntest plaintext::test::uncompressed ... ok\ntest sop::tests::cert_display ... ok\ntest sop::tests::key_display ... ok\ntest store::test::cant_init_nonexistent_dir ... ok\ntest store::test::empty_dir_is_not_init ... ok\ntest store::test::adds_chunk ... ok\ntest store::test::finds_chunk_when_labels_match ... ok\ntest store::test::finds_client_chunk ... ok\ntest store::test::finds_no_chunk_in_empty_store ... ok\ntest store::test::finds_credential_chunk ... ok\ntest store::test::finds_no_chunk_when_none_match_label ... ok\ntest store::test::finds_no_clients_when_there_are_none ... ok\ntest store::test::has_no_chunks_initially ... ok\ntest store::test::nonexistent_dir_is_not_init ... ok\ntest store::test::inits_empty_dir ... ok\ntest store::test::opens_client_chunk ... ok\ntest store::test::root_dir_is_not_init ... ok\ntest store::test::removes_chunk ... ok\n\ntest result: ok. 42 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.78s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 1 test\ntest config::test::merges ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 1 test\ntest obnam/src/lib.rs - (line 12) ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\nall doctests ran in 0.23s; merged doctests compilation took 0.22s\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n",
      "stderr": "    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.09s\n     Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/obnam-672abc85c43c438c)\n     Running unittests src/bin/obnam.rs (/ci/cache/cargo-target/debug/deps/obnam-7b0c81f510d767f4)\n     Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/obnam_server-df92be7c5bdc0a7a)\n     Running unittests src/main.rs (/ci/cache/cargo-target/debug/deps/obnam_server-6cda6653b6b25a14)\n   Doc-tests obnam\n   Doc-tests obnam_server\n",
      "timestamp": {
        "secs_since_epoch": 1773554353,
        "nanos_since_epoch": 896278163
      },
      "log_source": "Plan"
    }
  54. {
      "type": "action_succeeded",
      "action": "cargo_test",
      "timestamp": {
        "secs_since_epoch": 1773554353,
        "nanos_since_epoch": 896369809
      },
      "log_source": "Plan"
    }
  55. {
      "type": "execute_action",
      "action": "shell",
      "shell": "export PATH=/root/.cargo/bin:/bin:/sbin\nls -l \"$CARGO_TARGET_DIR\"\nmake TARGET= subplot doc\nfind doc -ls\ncp obnam.html obnam-server.html doc/*.html /ci/artifacts\n",
      "timestamp": {
        "secs_since_epoch": 1773554353,
        "nanos_since_epoch": 896375813
      },
      "log_source": "Plan"
    }
  56. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            101,
            120,
            112,
            111,
            114,
            116,
            32,
            80,
            65,
            84,
            72,
            61,
            47,
            114,
            111,
            111,
            116,
            47,
            46,
            99,
            97,
            114,
            103,
            111,
            47,
            98,
            105,
            110,
            58,
            47,
            98,
            105,
            110,
            58,
            47,
            115,
            98,
            105,
            110,
            10,
            108,
            115,
            32,
            45,
            108,
            32,
            34,
            36,
            67,
            65,
            82,
            71,
            79,
            95,
            84,
            65,
            82,
            71,
            69,
            84,
            95,
            68,
            73,
            82,
            34,
            10,
            109,
            97,
            107,
            101,
            32,
            84,
            65,
            82,
            71,
            69,
            84,
            61,
            32,
            115,
            117,
            98,
            112,
            108,
            111,
            116,
            32,
            100,
            111,
            99,
            10,
            102,
            105,
            110,
            100,
            32,
            100,
            111,
            99,
            32,
            45,
            108,
            115,
            10,
            99,
            112,
            32,
            111,
            98,
            110,
            97,
            109,
            46,
            104,
            116,
            109,
            108,
            32,
            111,
            98,
            110,
            97,
            109,
            45,
            115,
            101,
            114,
            118,
            101,
            114,
            46,
            104,
            116,
            109,
            108,
            32,
            100,
            111,
            99,
            47,
            42,
            46,
            104,
            116,
            109,
            108,
            32,
            47,
            99,
            105,
            47,
            97,
            114,
            116,
            105,
            102,
            97,
            99,
            116,
            115,
            10,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1773554353,
        "nanos_since_epoch": 896385941
      },
      "log_source": "Plan"
    }
  57. {
      "type": "program_failed",
      "exit_code": 1,
      "stdout": "total 8\n-rw-r--r-- 1 root root  177 Mar 15 05:58 CACHEDIR.TAG\ndrwxr-xr-x 7 root root 4096 Mar 15 05:59 debug\nsubplot docgen obnam.subplot --output obnam.html\nsubplot codegen obnam.subplot --output test.py\nrm -f test.log\npython3 test.py --log test.log \nsrcdir /ci/src\ndatadir /tmp/tmp6ndlzib2\nscenario: Create an OpenPGP software key credential\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: given file sop-generate\n  step 4: when I run bash sop-generate alice.tsk\n  step 5: when I create directory mychunks\n  step 6: when I run obnam store init\n  step 7: when I run obnam credential list\n  step 8: then stdout is exactly \"\"\n  step 9: when I run obnam --client-key my.secret credential openpgp-soft alice.tsk\n  step 10: when I run obnam credential list --all\n  step 11: then stdout isn't exactly \"\"\nscenario: Manages chunks via API\n  step 1: given an installed obnam\n  step 2: given file server-config.yaml\n  step 3: given file request.sh\n  step 4: when I run obnam-server --config server-config.yaml init\n  step 5: when I run obnam-server --config server-config.yaml token --output token.txt --allow append\n  step 6: when I run, as a daemon, obnam-server --config server-config.yaml serve\n  step 7: when I run bash request.sh GET /chunks/1\n  step 8: then stderr contains \"HTTP/1.1 404\"\n  step 9: when I run bash request.sh PUT /chunks/1?label=first hello\n  step 10: then stderr contains \"HTTP/1.1 201\"\n  step 11: when I run bash request.sh GET /chunks/1\n  step 12: then stderr contains \"HTTP/1.1 200\"\n  step 13: then stdout is exactly \"hello\"\n  step 14: when I run bash request.sh GET /chunks?label=first\n  step 15: then stdout is exactly \"{\"chunk_ids\":[\"1\"]}\"\n  step 16: when I run bash request.sh DELETE /chunks/1\n  step 17: then stderr contains \"HTTP/1.1 401\"\n  step 18: when I run obnam-server --config server-config.yaml token --output token.txt --allow delete\n  step 19: when I run bash request.sh DELETE /chunks/1\n  step 20: then stderr contains \"HTTP/1.1 204\"\n  step 21: when I run bash request.sh GET /chunks?label=first\n  step 22: then stdout is exactly \"{\"chunk_ids\":[]}\"\n  cleanup 6: when I run, as a daemon, obnam-server --config server-config.yaml serve\nscenario: Generates and validates API tokens\n  step 1: given an installed obnam\n  step 2: given file server-config.yaml\n  step 3: when I run obnam-server --config server-config.yaml init\n  step 4: then file keypair.json exists\n  step 5: when I try to run obnam-server --config server-config.yaml init\n  step 6: then command fails\n  step 7: then stderr contains \"keypair.json\"\n  step 8: when I run obnam-server --config server-config.yaml token --output token.txt --allow append\n  step 9: then file token.txt contains \"v4.public.\"\n  step 10: when I run obnam-server --config server-config.yaml validate --file token.txt\n  step 11: then stdout contains \"read_chunks_allowed: true\"\n  step 12: then stdout contains \"find_chunks_allowed: true\"\n  step 13: then stdout contains \"create_chunk_allowed: true\"\n  step 14: then stdout contains \"delete_chunk_allowed: false\"\n  step 15: when I run obnam-server --config server-config.yaml token --output token.txt --allow delete\n  step 16: then file token.txt contains \"v4.public.\"\n  step 17: when I run obnam-server --config server-config.yaml validate --file token.txt\n  step 18: then stdout contains \"read_chunks_allowed: true\"\n  step 19: then stdout contains \"find_chunks_allowed: true\"\n  step 20: then stdout contains \"create_chunk_allowed: true\"\n  step 21: then stdout contains \"delete_chunk_allowed: true\"\nscenario: Chunk encrypt/decrypt with compression round trip via file\n  step 1: given an installed obnam\n  step 2: given file greeting.txt\n  step 3: when I run obnam chunk encrypt --compress --key secret --label sticky.tape greeting.txt --output chunk.file\n  step 4: when I run obnam chunk decrypt --key secret chunk.file\n  step 5: then stdout is exactly \"Hello, world.\\n\"\nscenario: Chunk encrypt/decrypt round trip via repository\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: given file greeting.txt\n  step 4: when I create directory mychunks\n  step 5: when I try to run obnam store init\n  step 6: when I run obnam chunk encrypt --key secret --label sticky.tape greeting.txt --id=chunk0\n  step 7: when I run obnam store list\n  step 8: when I run obnam chunk decrypt --key secret --id chunk0\n  step 9: then stdout is exactly \"Hello, world.\\n\"\nscenario: Generate new key\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: when I create directory mychunks\n  step 4: when I run obnam store init\n  step 5: when I run obnam --client-key my.secret client init --client-name my.host\n  step 6: when I run obnam --client-key my.secret client generate my.host my.key\n  step 7: when I run obnam --client-key my.secret client show --client-name my.host\n  step 8: then stdout contains \"my.key\"\nscenario: Chunk encrypt/decrypt with compression round trip via repository\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: given file greeting.txt\n  step 4: when I create directory mychunks\n  step 5: when I try to run obnam store init\n  step 6: when I run obnam chunk encrypt --compress --key secret --label sticky.tape greeting.txt --id=chunk0\n  step 7: when I run obnam store list\n  step 8: when I run obnam chunk decrypt --key secret --id chunk0\n  step 9: then stdout is exactly \"Hello, world.\\n\"\nscenario: Validates token via HTTP API\n  step 1: given an installed obnam\n  step 2: given file server-config.yaml\n  step 3: given file request.sh\n  step 4: when I run obnam-server --config server-config.yaml init\n  step 5: when I run obnam-server --config server-config.yaml token --output token.txt --allow append\n  step 6: when I run, as a daemon, obnam-server --config server-config.yaml serve\n  step 7: when I run bash request.sh GET /validate\n  step 8: then stdout contains \"\"read_chunks_allowed\":true\"\n  step 9: then stdout contains \"\"find_chunks_allowed\":true\"\n  step 10: then stdout contains \"\"create_chunk_allowed\":true\"\n  step 11: then stdout contains \"\"delete_chunk_allowed\":false\"\n  cleanup 6: when I run, as a daemon, obnam-server --config server-config.yaml serve\nscenario: Get path to chunk in store\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: given file greeting.txt\n  step 4: given a directory mychunks\n  step 5: when I run obnam store init\n  step 6: when I run obnam chunk encrypt --key secret --label data-chunk --id xyzzy greeting.txt\n  step 7: when I run obnam store path xyzzy -o chunk.filename\n  step 8: then a file exists whose name is in chunk.filename\nscenario: Chunk encrypt/decrypt round trip via file\n  step 1: given an installed obnam\n  step 2: given file greeting.txt\n  step 3: when I run obnam chunk encrypt --key secret --label sticky.tape greeting.txt --output chunk.file\n  step 4: when I run obnam chunk decrypt --key secret chunk.file\n  step 5: then stdout is exactly \"Hello, world.\\n\"\nscenario: Conveniently encrypt and decrypt chunk in a store\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from comfy.yaml\n  step 3: given file message.txt\n  step 4: when I create directory chunk.store\n  step 5: when I run obnam store init\n  step 6: when I run obnam client init --credential softy\n  step 7: when I run obnam chunk encrypt --label data --key-name default --id test.chunk message.txt\n  step 8: when I run obnam chunk decrypt --key-name default --id test.chunk --output out.dat\n  step 9: then files message.txt and out.dat match\nscenario: Find chunks using labels\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: given file greeting.txt\n  step 4: given a directory mychunks\n  step 5: when I run obnam store init\n  step 6: when I run obnam chunk encrypt --key secret --label data-chunk --id xyzzy greeting.txt\n  step 7: when I run obnam chunk encrypt --key secret --label data-chunk --id plugh greeting.txt\n  step 8: when I run obnam chunk encrypt --key secret --label client-chunk --id advent greeting.txt\n  step 9: when I run obnam store find missing\n  step 10: then stdout is exactly \"\"\n  step 11: when I run obnam store find data-chunk\n  step 12: then stdout contains \"xyzzy\"\n  step 13: then stdout contains \"plugh\"\n  step 14: then stdout doesn't contain \"advent\"\n  step 15: when I run obnam store find client-chunk\n  step 16: then stdout doesn't contain \"xyzzy\"\n  step 17: then stdout doesn't contain \"plugh\"\n  step 18: then stdout contains \"advent\"\nscenario: Inspect an encoded chunk in repository\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: given file greeting.txt\n  step 4: when I create directory mychunks\n  step 5: when I try to run obnam store init\n  step 6: when I run obnam chunk encrypt --label sticky.tape --key secret greeting.txt --id=chunk0\n  step 7: when I run obnam chunk inspect --id chunk0\n  step 8: then stdout is valid JSON\n  step 9: then stdout contains \"\"id\":\"\n  step 10: then stdout contains \"\"label\":\"\n  step 11: then stdout contains \"\"data\": null\"\n  step 12: when I run obnam chunk inspect --key secret --id chunk0\n  step 13: then stdout is valid JSON\n  step 14: then stdout contains \"\"id\":\"\n  step 15: then stdout contains \"\"label\":\"\n  step 16: then stdout contains \"\"data\": \"\"\nscenario: Conveniently create a client with an OpenPGP software key credential\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from comfy.yaml\n  step 3: when I create directory chunk.store\n  step 4: when I run obnam store init\n  step 5: when I run obnam client init --credential softy\n  step 6: when I run obnam client list\n  step 7: then stdout isn't exactly \"\"\nscenario: Show client\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: when I create directory mychunks\n  step 4: when I run obnam store init\n  step 5: when I run obnam --client-key my.secret client init --client-name my.host\n  step 6: when I run obnam --client-key my.secret client show --client-name my.host\n  step 7: then stdout is valid JSON\nscenario: Initialize a client chunk\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config-with-credential.yaml\n  step 3: when I create directory mychunks\n  step 4: when I run obnam store init\n  step 5: when I run obnam client init --client-name my.host\n  step 6: then command is successful\nscenario: Round trip chunk encryption using key from client chunk\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: given file greeting.txt\n  step 4: when I create directory mychunks\n  step 5: when I run obnam store init\n  step 6: when I run obnam --client-key my.secret client init --client-name my.host\n  step 7: when I run obnam --client-key my.secret client generate my.host my.key\n  step 8: when I run obnam --client-key my.secret chunk encrypt --client-name my.host --key-name my.key --label sticky.tape greeting.txt --output chunk.file\n  step 9: when I run obnam --client-key my.secret chunk decrypt --client-name my.host --key-name my.key chunk.file\n  step 10: then stdout is exactly \"Hello, world.\\n\"\nscenario: Initialize a store\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: then directory mychunks does not exist\n  step 4: when I try to run obnam store is\n  step 5: then command fails\n  step 6: when I create directory mychunks\n  step 7: when I try to run obnam store is\n  step 8: then command fails\n  step 9: when I run obnam store init\n  step 10: when I run obnam store is\n  step 11: then exit code is 0\nscenario: Logging level can be set\n  step 1: given an installed obnam\n  step 2: when I run obnam config\n  step 3: then stderr doesn't contain \"TRACE\"\n  step 4: then stderr doesn't contain \"DEBUG\"\n  step 5: then stderr contains \"INFO\"\n  step 6: then stderr contains \"WARN\"\n  step 7: then stderr contains \"ERROR\"\n  step 8: when I run env OBNAM_LOG=error obnam config\n  step 9: then stderr doesn't contain \"TRACE\"\n  step 10: then stderr doesn't contain \"DEBUG\"\n  step 11: then stderr doesn't contain \"INFO\"\n  step 12: then stderr doesn't contain \"WARN\"\n  step 13: then stderr contains \"ERROR\"\n  step 14: when I run obnam --log-level=error config\n  step 15: then stderr doesn't contain \"TRACE\"\n  step 16: then stderr doesn't contain \"DEBUG\"\n  step 17: then stderr doesn't contain \"INFO\"\n  step 18: then stderr doesn't contain \"WARN\"\n  step 19: then stderr contains \"ERROR\"\n  step 20: when I run env OBNAM_LOG=error obnam --log-level=trace config\n  step 21: then stderr contains \"TRACE\"\n  step 22: then stderr contains \"DEBUG\"\n  step 23: then stderr contains \"INFO\"\n  step 24: then stderr contains \"WARN\"\n  step 25: then stderr contains \"ERROR\"\nscenario: Avoid client chunks with the same name\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: when I create directory mychunks\n  step 4: when I run obnam store init\n  step 5: when I run obnam --client-key my.secret client init --client-name my.host\n  step 6: then command is successful\n  step 7: when I try to run obnam --client-key my.secret client init --client-name my.host\n  step 8: then command fails\nscenario: Encryption round trip\n  step 1: given an installed obnam\n  step 2: given file alice.key\n  step 3: given file hello.txt\n  step 4: when I run obnam sop encrypt rsop alice.key hello.txt -o encrypted\n  step 5: when I run ls -l encrypted\n  step 6: when I run cat encrypted\n  step 7: when I run obnam sop decrypt rsop alice.key encrypted\n  step 8: then stdout is exactly \"hello, world\\n\"\nscenario: Refuses API token made for another server instance\n  step 1: given an installed obnam\n  step 2: given file server-config.yaml\n  step 3: when I run obnam-server --config server-config.yaml init\n  step 4: when I run obnam-server --config server-config.yaml token --output token.txt --allow append\n  step 5: when I remove file keypair.json\n  step 6: when I run obnam-server --config server-config.yaml init\n  step 7: when I try to run obnam-server --config server-config.yaml validate --file token.txt\n  step 8: then command fails\nscenario: Remove a chunk from store\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: given file greeting.txt\n  step 4: given a directory mychunks\n  step 5: when I run obnam store init\n  step 6: when I run obnam chunk encrypt --key secret --label data-chunk --id xyzzy greeting.txt\n  step 7: when I run obnam store remove xyzzy\n  step 8: when I run obnam store list\n  step 9: then stdout doesn't contain \"xyzzy\"\nscenario: Inspect an encrypted chunk using key from client chunk\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: given file greeting.txt\n  step 4: when I create directory mychunks\n  step 5: when I run obnam store init\n  step 6: when I run obnam --client-key my.secret client init --client-name my.host\n  step 7: when I run obnam --client-key my.secret client generate my.host my.key\n  step 8: when I run obnam --client-key my.secret chunk encrypt --client-name my.host --key-name my.key --label sticky.tape greeting.txt --output chunk.file\n  step 9: when I run obnam --client-key my.secret chunk inspect --filename chunk.file --client-name my.host --key-name my.key\n  step 10: then stdout is valid JSON\n  step 11: then stdout contains \"\"id\":\"\n  step 12: then stdout contains \"\"label\":\"\n  step 13: then stdout contains \"\"data\": \"\"\nscenario: List clients\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: when I create directory mychunks\n  step 4: when I run obnam store init\n  step 5: when I run obnam --client-key my.secret client init --client-name my.host\n  step 6: when I run obnam --client-key my.secret client list\n  step 7: then stdout is exactly \"my.host\\n\"\nscenario: Extracting a certificate from a key\n  step 1: given an installed obnam\n  step 2: given file alice.key\n  step 3: when I run obnam sop extract-cert rsop alice.key\n  step 4: then stdout isn't exactly \"\"\nscenario: Inspect an encoded chunk in file\n  step 1: given an installed obnam\n  step 2: given file greeting.txt\n  step 3: when I run obnam chunk encrypt --label sticky.tape --key secret greeting.txt --output chunk.file\n  step 4: when I run obnam chunk inspect --filename chunk.file\n  step 5: then stdout is valid JSON\n  step 6: then stdout contains \"\"id\":\"\n  step 7: then stdout contains \"\"label\":\"\n  step 8: then stdout contains \"\"data\": null\"\n  step 9: when I run obnam chunk inspect --filename chunk.file --key secret\n  step 10: then stdout is valid JSON\n  step 11: then stdout contains \"\"id\":\"\n  step 12: then stdout contains \"\"label\":\"\n  step 13: then stdout contains \"\"data\": \"\"\nscenario: Add a chunk to the store.\n  step 1: given an installed obnam\n  step 2: given file .config/obnam/config.yaml from config.yaml\n  step 3: given file greeting.txt\n  step 4: given a directory mychunks\n  step 5: when I run obnam store init\n  step 6: when I run obnam chunk encrypt --key secret --label data --id xyzzy greeting.txt\n  step 7: when I run obnam store list\n  step 8: then stdout is exactly \"xyzzy\\n\"\nOK, all scenarios finished successfully\nenv 'RUSTDOCFLAGS=-D warnings' cargo doc --no-deps\nmake -C doc\nmake[1]: Entering directory '/ci/src/doc'\npandoc -N --toc --standalone --self-contained -o \"arch.html\" \"arch.md\"\npandoc -N --toc --standalone --self-contained -o \"glossary.html\" \"glossary.md\"\nmake[1]: Leaving directory '/ci/src/doc'\n  1179692      4 drwxr-xr-x   2 root     root         4096 Mar 15 05:59 doc\n  1197969      8 -rw-r--r--   1 root     root         4303 Mar 15 05:59 doc/glossary.html\n  1179695      4 -rw-r--r--   1 root     root          517 Mar 15 05:58 doc/glossary.md\n  1179696     16 -rw-r--r--   1 root     root        13627 Mar 15 05:58 doc/arch.md\n  1179694      4 -rw-r--r--   1 root     root          540 Mar 15 05:58 doc/keys.pik\n  1179697      4 -rw-r--r--   1 root     root          327 Mar 15 05:58 doc/Makefile\n  1197968     24 -rw-r--r--   1 root     root        24568 Mar 15 05:59 doc/arch.html\n  1179693      4 -rw-r--r--   1 root     root         3885 Mar 15 05:58 doc/keys.svg\n",
      "stderr": "+ export PATH=/root/.cargo/bin:/bin:/sbin\n+ PATH=/root/.cargo/bin:/bin:/sbin\n+ ls -l /ci/cache/cargo-target\n+ make TARGET= subplot doc\n INFO Starting Subplot\n INFO Subplot finished successfully\n INFO Starting Subplot\n INFO Subplot finished successfully\n Documenting obnam-server v0.1.0 (/ci/src/obnam-server)\n Documenting obnam v0.10.0 (/ci/src/obnam)\n    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.59s\n   Generated /ci/cache/cargo-target/doc/obnam/index.html and 1 other file\n[WARNING] This document format requires a nonempty <title> element.\n  Defaulting to 'glossary' as the title.\n  To specify a title, use 'title' in metadata or --metadata title=\"...\".\n+ find doc -ls\n+ cp obnam.html obnam-server.html doc/arch.html doc/glossary.html /ci/artifacts\ncp: cannot stat 'obnam-server.html': No such file or directory\n",
      "timestamp": {
        "secs_since_epoch": 1773554358,
        "nanos_since_epoch": 140599321
      },
      "log_source": "Plan"
    }
  58. {
      "type": "action_failed",
      "action": "shell",
      "shell": "export PATH=/root/.cargo/bin:/bin:/sbin\nls -l \"$CARGO_TARGET_DIR\"\nmake TARGET= subplot doc\nfind doc -ls\ncp obnam.html obnam-server.html doc/*.html /ci/artifacts\n",
      "timestamp": {
        "secs_since_epoch": 1773554358,
        "nanos_since_epoch": 401016805
      },
      "log_source": "Plan"
    }
  59. {
      "type": "executor_ends_in_failure",
      "exit_code": 1,
      "timestamp": {
        "secs_since_epoch": 1773554358,
        "nanos_since_epoch": 406805768
      },
      "log_source": "Plan"
    }

Trigger message

{
  "request": "trigger",
  "version": 1,
  "event_type": "patch",
  "repository": {
    "id": "rad:zbWNQYkQ4QKgdSQcd1tjaemv6d6x",
    "name": "obnam",
    "description": "Explore implementation of backup fundamentals",
    "private": false,
    "default_branch": "main",
    "delegates": [
      "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV"
    ]
  },
  "action": "Created",
  "patch": {
    "id": "9ef28237ed505cac95032221dd2a085f585eba29",
    "author": {
      "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
      "alias": "liw"
    },
    "title": "doc: combine client and server subplots into one",
    "state": {
      "status": "open",
      "conflicts": []
    },
    "before": "4b44d2f1882eef395e4d49b623115bcc352ba0d9",
    "after": "657fb5e5ead89a2ae8dbd7fab99f568b7f0102c4",
    "commits": [
      "657fb5e5ead89a2ae8dbd7fab99f568b7f0102c4"
    ],
    "target": "4b44d2f1882eef395e4d49b623115bcc352ba0d9",
    "labels": [],
    "assignees": [],
    "revisions": [
      {
        "id": "9ef28237ed505cac95032221dd2a085f585eba29",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "",
        "base": "4b44d2f1882eef395e4d49b623115bcc352ba0d9",
        "oid": "657fb5e5ead89a2ae8dbd7fab99f568b7f0102c4",
        "timestamp": 1773554285
      }
    ]
  }
}

Ambient stdout

run CI for rad:zbWNQYkQ4QKgdSQcd1tjaemv6d6x
ERROR: CI run failed inside QEMU

Ambient stderr

<empty log>