CI run for rad:zbWNQYkQ4QKgdSQcd1tjaemv6d6x

Radicle repository id rad:zbWNQYkQ4QKgdSQcd1tjaemv6d6x

Table of Contents

Run log

At: 2026-02-05 16:19:18Z
After: 0.00 seconds
Program: ambient
Version: 0.12.0
Ambient starts
At: 2026-02-05 16:19:18Z
After: 0.00 seconds
tmpdir: /home/_rad/tmp
image_store: /home/_rad/ambient-images
projects: /dev/null
state: /home/_rad/ambient-state
rsync_target: null
rsync_target_base: null
rsync_target_map: null
dput_target: null
executor: /usr/bin/ambient-execute-plan
artifacts_max_size: 1 GB
cache_max_size: 30 GB
qemu:
  cpus: 2
  memory: 12 GB
  kvm_binary: /usr/bin/kvm
  ovmf_vars_file: /usr/share/ovmf/OVMF.fd
  ovmf_code_file: /usr/share/ovmf/OVMF.fd
uefi: false
lint: true
Ambient configuration
At: 2026-02-05 16:19:18Z
After: 0.03 seconds
Hoping for the best
Will run CI for project rad:zbWNQYkQ4QKgdSQcd1tjaemv6d6x
At: 2026-02-05 16:19:18Z
After: 0.03 seconds
CargoFetch(
    CargoFetch,
)
Start action cargo_fetch
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • --version
exit: 0
Stdout:
cargo 1.93.0 (083ac5135 2025-12-15)
OK: cargo --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • clippy
  • --version
exit: 0
Stdout:
clippy 0.1.93 (254b59607d 2026-01-19)
OK: cargo clippy --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • rustc
  • --version
exit: 0
Stdout:
rustc 1.93.0 (254b59607 2026-01-19)
OK: rustc --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • fetch
  • --locked
exit: 0
OK: cargo fetch --locked
At: 2026-02-05 16:19:19Z
After: 0.81 seconds
End action cargo_fetch
At: 2026-02-05 16:19:19Z
After: 0.81 seconds
Hopefully all is good.
Plan succeeded
At: 2026-02-05 16:19:57Z
After: 39.33 seconds
Program: ambient-execute-plan
Version: 0.12.0@626957c
Executor starts
At: 2026-02-05 16:19:57Z
After: 39.33 seconds
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 doc/*.html /workspace/artifacts
- action: custom
  name: dch
  args:
    debfullname: Lars Wirzenius
    debemail: liw@liw.fi
- 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
Runnable plan
At: 2026-02-05 16:19:57Z
After: 39.33 seconds
Mkdir(
    Mkdir {
        pathname: "/ci",
    },
)
Start action mkdir
At: 2026-02-05 16:19:57Z
After: 39.33 seconds
End action mkdir
At: 2026-02-05 16:19:57Z
After: 39.33 seconds
Mkdir(
    Mkdir {
        pathname: "/ci/artifacts",
    },
)
Start action mkdir
At: 2026-02-05 16:19:57Z
After: 39.33 seconds
End action mkdir
At: 2026-02-05 16:19:57Z
After: 39.33 seconds
TarExtract(
    TarExtract {
        archive: "/dev/vdc",
        directory: "/ci/src",
    },
)
Start action tar_extract
At: 2026-02-05 16:19:57Z
After: 39.41 seconds
End action tar_extract
At: 2026-02-05 16:19:57Z
After: 39.41 seconds
TarExtract(
    TarExtract {
        archive: "/dev/vdf",
        directory: "/ci/deps",
    },
)
Start action tar_extract
At: 2026-02-05 16:20:02Z
After: 44.05 seconds
End action tar_extract
At: 2026-02-05 16:20:02Z
After: 44.05 seconds
TarExtract(
    TarExtract {
        archive: "/dev/vde",
        directory: "/ci/cache",
    },
)
Start action tar_extract
At: 2026-02-05 16:21:15Z
After: 116.73 seconds
End action tar_extract
At: 2026-02-05 16:21:15Z
After: 116.73 seconds
Shell(
    Shell {
        shell: "ln -sf /ci /workspace",
    },
)
Start action shell
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • bash
  • -c
  • set -xeuo pipefail ln -sf /ci /workspace
exit: 0
Stderr:
+ ln -sf /ci /workspace
OK: bash -c set -xeuo pipefail ln -sf /ci /workspace
At: 2026-02-05 16:21:15Z
After: 116.77 seconds
End action shell
At: 2026-02-05 16:21:15Z
After: 116.78 seconds
Shell(
    Shell {
        shell: "git config --global user.name 'Ambient CI'",
    },
)
Start action shell
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • bash
  • -c
  • set -xeuo pipefail git config --global user.name 'Ambient CI'
exit: 0
Stderr:
+ git config --global user.name 'Ambient CI'
OK: bash -c set -xeuo pipefail git config --global user.name 'Ambient CI'
At: 2026-02-05 16:21:15Z
After: 116.81 seconds
End action shell
At: 2026-02-05 16:21:15Z
After: 116.81 seconds
Shell(
    Shell {
        shell: "git config --global user.email ambient@example.com",
    },
)
Start action shell
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • bash
  • -c
  • set -xeuo pipefail git config --global user.email ambient@example.com
exit: 0
Stderr:
+ git config --global user.email ambient@example.com
OK: bash -c set -xeuo pipefail git config --global user.email ambient@example.com
At: 2026-02-05 16:21:15Z
After: 116.84 seconds
End action shell
At: 2026-02-05 16:21:15Z
After: 116.85 seconds
CargoClippy(
    CargoClippy,
)
Start action cargo_clippy
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • --version
exit: 0
Stdout:
cargo 1.93.0 (083ac5135 2025-12-15)
OK: cargo --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • clippy
  • --version
exit: 0
Stdout:
clippy 0.1.93 (254b59607d 2026-01-19)
OK: cargo clippy --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • rustc
  • --version
exit: 0
Stdout:
rustc 1.93.0 (254b59607 2026-01-19)
OK: rustc --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • clippy
  • --offline
  • --locked
  • --workspace
  • --all-targets
  • --no-deps
  • --
  • --deny
  • warnings
exit: 0
Stderr:
    Checking obnam v0.10.0 (/ci/src)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.75s
OK: cargo clippy --offline --locked --workspace --all-targets --no-deps -- --deny warnings
At: 2026-02-05 16:21:20Z
After: 121.74 seconds
End action cargo_clippy
At: 2026-02-05 16:21:20Z
After: 121.74 seconds
CargoBuild(
    CargoBuild,
)
Start action cargo_build
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • --version
exit: 0
Stdout:
cargo 1.93.0 (083ac5135 2025-12-15)
OK: cargo --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • clippy
  • --version
exit: 0
Stdout:
clippy 0.1.93 (254b59607d 2026-01-19)
OK: cargo clippy --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • rustc
  • --version
exit: 0
Stdout:
rustc 1.93.0 (254b59607 2026-01-19)
OK: rustc --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • build
  • --offline
  • --locked
  • --workspace
  • --all-targets
exit: 0
Stderr:
   Compiling obnam v0.10.0 (/ci/src)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.21s
OK: cargo build --offline --locked --workspace --all-targets
At: 2026-02-05 16:21:23Z
After: 125.46 seconds
End action cargo_build
At: 2026-02-05 16:21:23Z
After: 125.46 seconds
CargoTest(
    CargoTest,
)
Start action cargo_test
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • --version
exit: 0
Stdout:
cargo 1.93.0 (083ac5135 2025-12-15)
OK: cargo --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • clippy
  • --version
exit: 0
Stdout:
clippy 0.1.93 (254b59607d 2026-01-19)
OK: cargo clippy --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • rustc
  • --version
exit: 0
Stdout:
rustc 1.93.0 (254b59607 2026-01-19)
OK: rustc --version
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • cargo
  • test
  • --offline
  • --locked
  • --workspace
exit: 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::label_display ... ok
test chunk::test::id_is_comparable_with_itself ... ok
test chunk::test::label_round_trip ... ok
test chunk::test::metadata ... ok
test chunk::test::two_new_chunk_ids_differ ... ok
test chunk::test::metadata_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 cipher::test::aead_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 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 credential::test::roundtrip_sop_credential ... 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_clients_when_there_are_none ... ok
test store::test::finds_no_chunk_when_none_match_label ... 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 1.71s


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 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.67s; merged doctests compilation took 0.66s
Stderr:
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.17s
     Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/obnam-51ac7de36d0b8028)
     Running unittests src/bin/obnam.rs (/ci/cache/cargo-target/debug/deps/obnam-73b2efc777140cde)
   Doc-tests obnam
OK: cargo test --offline --locked --workspace
At: 2026-02-05 16:21:27Z
After: 128.79 seconds
End action cargo_test
At: 2026-02-05 16:21:27Z
After: 128.79 seconds
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 doc/*.html /workspace/artifacts\n",
    },
)
Start action shell
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • 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 doc/*.html /workspace/artifacts
exit: 0
Stdout:
total 16
-rw-r--r-- 1 root root  177 Jan 15 06:14 CACHEDIR.TAG
drwxr-xr-x 7 root root 4096 Feb  5 16:21 debug
drwxr-xr-x 7 root root 4096 Jan 25 06:00 doc
drwxr-xr-x 7 root root 4096 Jan 25 06:02 release
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/tmp2cswhdll
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: 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: 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: 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: 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: 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: 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 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: 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: 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: 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: 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: 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: 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: 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: 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"
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: 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: 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: 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: 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: 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: 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: 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
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'
  1441821      4 drwxr-xr-x   2 root     root         4096 Feb  5 16:21 doc
  1441825     16 -rw-r--r--   1 root     root        13627 Feb  5 16:19 doc/arch.md
  1481639     24 -rw-r--r--   1 root     root        24568 Feb  5 16:21 doc/arch.html
  1441824      4 -rw-r--r--   1 root     root          517 Feb  5 16:19 doc/glossary.md
  1441826      4 -rw-r--r--   1 root     root          327 Feb  5 16:19 doc/Makefile
  1441822      4 -rw-r--r--   1 root     root         3885 Feb  5 16:19 doc/keys.svg
  1441823      4 -rw-r--r--   1 root     root          540 Feb  5 16:19 doc/keys.pik
  1481640      8 -rw-r--r--   1 root     root         4303 Feb  5 16:21 doc/glossary.html
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 v0.10.0 (/ci/src)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.63s
   Generated /ci/cache/cargo-target/doc/obnam/index.html
[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 doc/arch.html doc/glossary.html /workspace/artifacts
OK: 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 doc/*.html /workspace/artifacts
At: 2026-02-05 16:21:35Z
After: 136.73 seconds
End action shell
At: 2026-02-05 16:21:35Z
After: 136.74 seconds
Custom(
    Custom {
        name: "dch",
        args: {
            "debfullname": String("Lars Wirzenius"),
            "debemail": String("liw@liw.fi"),
        },
    },
)
Start action custom
At: 2026-02-05 16:21:35Z
After: 137.42 seconds
End action custom
At: 2026-02-05 16:21:35Z
After: 137.43 seconds
Deb(
    Deb {
        packages: Some(
            ".",
        ),
    },
)
Start action deb
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
  • /bin/bash
  • -c
  • #!/usr/bin/env bash set -xeuo pipefail echo "PATH at start: $PATH" export PATH="/root/.cargo/bin:$PATH" export CARGO_HOME=/workspace/deps export DEBEMAIL=liw@liw.fi export DEBFULLNAME="Lars Wirzenius" /bin/env command -v cargo command -v rustc cargo --version rustc --version # Get name and version of source package. name="$(dpkg-parsechangelog -SSource)" version="$(dpkg-parsechangelog -SVersion)" # Get upstream version: everything before the last dash. uv="$(echo "$version" | sed 's/-[^-]*$//')" # Files that will be created. arch="$(dpkg --print-architecture)" orig="../${name}_${uv}.orig.tar.xz" deb="../${name}_${version}_${arch}.deb" changes="../${name}_${version}_${arch}.changes" # Create "upstream tarball". git archive HEAD | xz >"$orig" # Build package. dpkg-buildpackage -us -uc # Dump some information to make it easier to visually verify # everything looks OK. Also, test the package with the lintian tool. ls -l .. for x in ../*.deb; do dpkg -c "$x"; done # FIXME: disabled while this prevents radicle-native-ci deb from being built. # lintian -i --allow-root --fail-on warning ../*.changes # Move files to artifacts directory. mv ../*_* /ci/artifacts/.
exit: 0
Stdout:
PATH at start: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DEBFULLNAME=Lars Wirzenius
CARGO_TARGET_DIR=/ci/cache/cargo-target
PWD=/ci/src
SYSTEMD_EXEC_PID=281
HOME=/root
LANG=C.UTF-8
CARGO_HOME=/workspace/deps
DEBEMAIL=liw@liw.fi
INVOCATION_ID=fe8360b2858c4a958bbbb20be92e24de
SHLVL=2
JOURNAL_STREAM=8:12875
PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
OLDPWD=/
_=/bin/env
/root/.cargo/bin/cargo
/root/.cargo/bin/rustc
cargo 1.93.0 (083ac5135 2025-12-15)
rustc 1.93.0 (254b59607 2026-01-19)
dpkg-buildpackage: info: source package obnam
dpkg-buildpackage: info: source version 0.9.9.ci20260205T162135-1
dpkg-buildpackage: info: source distribution unstable
dpkg-buildpackage: info: source changed by "Lars Wirzenius" <"liw@liw.fi">
dpkg-buildpackage: info: host architecture amd64
dh clean
   dh_auto_clean
   dh_clean
dpkg-source: info: using source format '3.0 (quilt)'
dpkg-source: info: building obnam using existing ./obnam_0.9.9.ci20260205T162135.orig.tar.xz
dpkg-source: info: building obnam in obnam_0.9.9.ci20260205T162135-1.debian.tar.xz
dpkg-source: info: building obnam in obnam_0.9.9.ci20260205T162135-1.dsc
dh build
   dh_update_autotools_config
   dh_autoreconf
   dh_auto_configure
   debian/rules override_dh_auto_build
make[1]: Entering directory '/ci/src'
true
make[1]: Leaving directory '/ci/src'
   debian/rules override_dh_auto_test
make[1]: Entering directory '/ci/src'
echo tests are disabled, for now
tests are disabled, for now
make[1]: Leaving directory '/ci/src'
   create-stamp debian/debhelper-build-stamp
dh binary
   dh_testroot
   dh_prep
   debian/rules override_dh_auto_install
make[1]: Entering directory '/ci/src'
cargo install --offline --locked --path=. --root=debian/obnam/usr
find debian -name '.crates*.*' -delete
make[1]: Leaving directory '/ci/src'
   dh_installdocs
   dh_installchangelogs
   dh_lintian
   dh_perl
   dh_link
   dh_strip_nondeterminism
   dh_compress
   dh_fixperms
   dh_missing
   dh_strip
   dh_makeshlibs
   dh_shlibdeps
   dh_installdeb
   dh_gencontrol
   dh_md5sums
   dh_builddeb
dpkg-deb: building package 'obnam-dbgsym' in '../obnam-dbgsym_0.9.9.ci20260205T162135-1_amd64.deb'.
dpkg-deb: building package 'obnam' in '../obnam_0.9.9.ci20260205T162135-1_amd64.deb'.
dpkg-genchanges: info: including full source code in upload
dpkg-buildpackage: info: full upload (original source is included)
total 1256
drwxr-xr-x 2 root root    4096 Feb  5 16:21 artifacts
drwxr-xr-x 6 root root    4096 Jan 15 06:14 cache
drwxr-xr-x 3 root root    4096 Feb  5 16:19 deps
-rw-r--r-- 1 root root  134884 Feb  5 16:21 obnam-dbgsym_0.9.9.ci20260205T162135-1_amd64.deb
-rw-r--r-- 1 root root    1720 Feb  5 16:21 obnam_0.9.9.ci20260205T162135-1.debian.tar.xz
-rw-r--r-- 1 root root     900 Feb  5 16:21 obnam_0.9.9.ci20260205T162135-1.dsc
-rw-r--r-- 1 root root    5655 Feb  5 16:21 obnam_0.9.9.ci20260205T162135-1_amd64.buildinfo
-rw-r--r-- 1 root root    2296 Feb  5 16:21 obnam_0.9.9.ci20260205T162135-1_amd64.changes
-rw-r--r-- 1 root root 1052032 Feb  5 16:21 obnam_0.9.9.ci20260205T162135-1_amd64.deb
-rw-r--r-- 1 root root   59788 Feb  5 16:21 obnam_0.9.9.ci20260205T162135.orig.tar.xz
drwxr-xr-x 8 root root    4096 Feb  5 16:21 src
drwxr-xr-x root/root         0 2026-02-05 16:21 ./
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/lib/
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/lib/debug/
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/lib/debug/.build-id/
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/lib/debug/.build-id/34/
-rw-r--r-- root/root    738568 2026-02-05 16:21 ./usr/lib/debug/.build-id/34/3189ad48f7daa13abd769173ba7582e17b17e5.debug
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/share/
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/share/doc/
lrwxrwxrwx root/root         0 2026-02-05 16:21 ./usr/share/doc/obnam-dbgsym -> obnam
drwxr-xr-x root/root         0 2026-02-05 16:21 ./
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/bin/
-rwxr-xr-x root/root   3342480 2026-02-05 16:21 ./usr/bin/obnam
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/share/
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/share/doc/
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/share/doc/obnam/
-rw-r--r-- root/root       211 2026-02-05 16:21 ./usr/share/doc/obnam/changelog.Debian.gz
-rw-r--r-- root/root       371 2026-02-05 16:19 ./usr/share/doc/obnam/copyright
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/share/lintian/
drwxr-xr-x root/root         0 2026-02-05 16:21 ./usr/share/lintian/overrides/
-rw-r--r-- root/root        48 2026-02-05 16:19 ./usr/share/lintian/overrides/obnam
Stderr:
+ echo 'PATH at start: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
+ export PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+ PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+ export CARGO_HOME=/workspace/deps
+ CARGO_HOME=/workspace/deps
+ export DEBEMAIL=liw@liw.fi
+ DEBEMAIL=liw@liw.fi
+ export 'DEBFULLNAME=Lars Wirzenius'
+ DEBFULLNAME='Lars Wirzenius'
+ /bin/env
+ command -v cargo
+ command -v rustc
+ cargo --version
+ rustc --version
++ dpkg-parsechangelog -SSource
+ name=obnam
++ dpkg-parsechangelog -SVersion
+ version=0.9.9.ci20260205T162135-1
++ echo 0.9.9.ci20260205T162135-1
++ sed 's/-[^-]*$//'
+ uv=0.9.9.ci20260205T162135
++ dpkg --print-architecture
+ arch=amd64
+ orig=../obnam_0.9.9.ci20260205T162135.orig.tar.xz
+ deb=../obnam_0.9.9.ci20260205T162135-1_amd64.deb
+ changes=../obnam_0.9.9.ci20260205T162135-1_amd64.changes
+ git archive HEAD
+ xz
+ dpkg-buildpackage -us -uc
 dpkg-source --before-build .
 debian/rules clean
 dpkg-source -b .
 debian/rules build
 debian/rules binary
  Installing obnam v0.10.0 (/ci/src)
   Compiling obnam v0.10.0 (/ci/src)
    Finished `release` profile [optimized] target(s) in 12.14s
  Installing /ci/src/debian/obnam/usr/bin/obnam
   Installed package `obnam v0.10.0 (/ci/src)` (executable `obnam`)
warning: be sure to add `/ci/src/debian/obnam/usr/bin` to your PATH to be able to run the installed binaries
 dpkg-genbuildinfo -O../obnam_0.9.9.ci20260205T162135-1_amd64.buildinfo
 dpkg-genchanges -O../obnam_0.9.9.ci20260205T162135-1_amd64.changes
 dpkg-source --after-build .
+ ls -l ..
+ for x in ../*.deb
+ dpkg -c ../obnam-dbgsym_0.9.9.ci20260205T162135-1_amd64.deb
+ for x in ../*.deb
+ dpkg -c ../obnam_0.9.9.ci20260205T162135-1_amd64.deb
+ mv ../obnam-dbgsym_0.9.9.ci20260205T162135-1_amd64.deb ../obnam_0.9.9.ci20260205T162135-1.debian.tar.xz ../obnam_0.9.9.ci20260205T162135-1.dsc ../obnam_0.9.9.ci20260205T162135-1_amd64.buildinfo ../obnam_0.9.9.ci20260205T162135-1_amd64.changes ../obnam_0.9.9.ci20260205T162135-1_amd64.deb ../obnam_0.9.9.ci20260205T162135.orig.tar.xz /ci/artifacts/.
OK: /bin/bash -c #!/usr/bin/env bash set -xeuo pipefail echo "PATH at start: $PATH" export PATH="/root/.cargo/bin:$PATH" export CARGO_HOME=/workspace/deps export DEBEMAIL=liw@liw.fi export DEBFULLNAME="Lars Wirzenius" /bin/env command -v cargo command -v rustc cargo --version rustc --version # Get name and version of source package. name="$(dpkg-parsechangelog -SSource)" version="$(dpkg-parsechangelog -SVersion)" # Get upstream version: everything before the last dash. uv="$(echo "$version" | sed 's/-[^-]*$//')" # Files that will be created. arch="$(dpkg --print-architecture)" orig="../${name}_${uv}.orig.tar.xz" deb="../${name}_${version}_${arch}.deb" changes="../${name}_${version}_${arch}.changes" # Create "upstream tarball". git archive HEAD | xz >"$orig" # Build package. dpkg-buildpackage -us -uc # Dump some information to make it easier to visually verify # everything looks OK. Also, test the package with the lintian tool. ls -l .. for x in ../*.deb; do dpkg -c "$x"; done # FIXME: disabled while this prevents radicle-native-ci deb from being built. # lintian -i --allow-root --fail-on warning ../*.changes # Move files to artifacts directory. mv ../*_* /ci/artifacts/.
At: 2026-02-05 16:21:56Z
After: 157.88 seconds
End action deb
At: 2026-02-05 16:21:56Z
After: 157.88 seconds
TarCreate(
    TarCreate {
        archive: "/dev/vde",
        directory: "/ci/cache",
    },
)
Start action tar_create
At: 2026-02-05 16:22:29Z
After: 190.92 seconds
End action tar_create
At: 2026-02-05 16:22:29Z
After: 190.93 seconds
TarCreate(
    TarCreate {
        archive: "/dev/vdd",
        directory: "/ci/artifacts",
    },
)
Start action tar_create
At: 2026-02-05 16:22:29Z
After: 190.94 seconds
End action tar_create
At: 2026-02-05 16:22:29Z
After: 190.95 seconds
Hopefully all is good.
Plan succeeded
At: 2026-02-05 16:22:29Z
After: 190.95 seconds
Everything is fine.
Executor ends, success
At: 2026-02-05 16:22:48Z
After: 209.89 seconds
    exit: 0
    QEMU OK
    At: 2026-02-05 16:22:47Z
    After: 208.83 seconds
    Hopefully all is good.
    Plan succeeded
    At: 2026-02-05 16:22:48Z
    After: 209.88 seconds
    Everything is fine.
    Ambient ends, success

    Trigger message

    {
      "request": "trigger",
      "version": 1,
      "event_type": "push",
      "repository": {
        "id": "rad:zbWNQYkQ4QKgdSQcd1tjaemv6d6x",
        "name": "obnam",
        "description": "Explore implementation of backup fundamentals",
        "private": false,
        "default_branch": "main",
        "delegates": [
          "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV"
        ]
      },
      "pusher": {
        "id": "did:key:z6Mki2ago1X2A5UWgKpoSxyCRLLhyZMwpam4T3EKvRmFTyuy",
        "alias": "callisto.liw.fi"
      },
      "before": "866275d5f9ed3392dd322207aae304f5c2095cf4",
      "after": "866275d5f9ed3392dd322207aae304f5c2095cf4",
      "branch": "main",
      "commits": [
        "866275d5f9ed3392dd322207aae304f5c2095cf4"
      ]
    }

    Ambient stdout

    deprecated: the `cpus` field is replaced by `qemu.cpus`
    deprecated: the `memory` field is replaced by `qemu.memory`
    run CI for rad:zbWNQYkQ4QKgdSQcd1tjaemv6d6x
    

    Ambient stderr

    <empty log>