CI run for rad:zjxyd2A1A7FnxtC69qDfoAajfTHo

Radicle repository id rad:zjxyd2A1A7FnxtC69qDfoAajfTHo

Table of Contents

Run log

At: 2026-02-05 16:24:52Z
After: 0.00 seconds
Program: ambient
Version: 0.12.0
Ambient starts
At: 2026-02-05 16:24:52Z
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:24:52Z
After: 0.07 seconds
Hoping for the best
Will run CI for project rad:zjxyd2A1A7FnxtC69qDfoAajfTHo
At: 2026-02-05 16:24:52Z
After: 0.07 seconds
CargoFetch(
    CargoFetch,
)
Start action cargo_fetch
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • cargo
  • --version
exit: 0
Stdout:
cargo 1.93.0 (083ac5135 2025-12-15)
OK: cargo --version
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • cargo
  • clippy
  • --version
exit: 0
Stdout:
clippy 0.1.93 (254b59607d 2026-01-19)
OK: cargo clippy --version
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • rustc
  • --version
exit: 0
Stdout:
rustc 1.93.0 (254b59607 2026-01-19)
OK: rustc --version
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • cargo
  • fetch
  • --locked
exit: 0
OK: cargo fetch --locked
At: 2026-02-05 16:24:53Z
After: 0.94 seconds
End action cargo_fetch
At: 2026-02-05 16:24:53Z
After: 0.94 seconds
Hopefully all is good.
Plan succeeded
At: 2026-02-05 16:26:11Z
After: 79.70 seconds
Program: ambient-execute-plan
Version: 0.12.0@626957c
Executor starts
At: 2026-02-05 16:26:11Z
After: 79.70 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_fmt
- action: cargo_clippy
- action: shell
  shell: |
    make OFFLINE="--offline"
    cp -a doc/* /workspace/artifacts/.

    # Clean up after tests and documentation building.
    git reset --hard
    git clean -fdx
    git status --ignored
- action: custom
  name: dch
  args:
    debemail: liw@liw.fi
    debfullname: Lars Wirzenius
- action: deb
  packages: .
- action: shell
  shell: |
    find /workspace/artifacts
- 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:26:11Z
After: 79.73 seconds
Mkdir(
    Mkdir {
        pathname: "/ci",
    },
)
Start action mkdir
At: 2026-02-05 16:26:11Z
After: 79.73 seconds
End action mkdir
At: 2026-02-05 16:26:11Z
After: 79.74 seconds
Mkdir(
    Mkdir {
        pathname: "/ci/artifacts",
    },
)
Start action mkdir
At: 2026-02-05 16:26:11Z
After: 79.74 seconds
End action mkdir
At: 2026-02-05 16:26:11Z
After: 79.75 seconds
TarExtract(
    TarExtract {
        archive: "/dev/vdc",
        directory: "/ci/src",
    },
)
Start action tar_extract
At: 2026-02-05 16:26:11Z
After: 79.82 seconds
End action tar_extract
At: 2026-02-05 16:26:11Z
After: 79.83 seconds
TarExtract(
    TarExtract {
        archive: "/dev/vdf",
        directory: "/ci/deps",
    },
)
Start action tar_extract
At: 2026-02-05 16:26:21Z
After: 89.05 seconds
End action tar_extract
At: 2026-02-05 16:26:21Z
After: 89.05 seconds
TarExtract(
    TarExtract {
        archive: "/dev/vde",
        directory: "/ci/cache",
    },
)
Start action tar_extract
At: 2026-02-05 16:28:44Z
After: 232.57 seconds
End action tar_extract
At: 2026-02-05 16:28:44Z
After: 232.58 seconds
Shell(
    Shell {
        shell: "ln -sf /ci /workspace",
    },
)
Start action shell
At: 2026-02-05 16:32:42Z
After: 470.21 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:28:44Z
After: 232.62 seconds
End action shell
At: 2026-02-05 16:28:44Z
After: 232.62 seconds
Shell(
    Shell {
        shell: "git config --global user.name 'Ambient CI'",
    },
)
Start action shell
At: 2026-02-05 16:32:42Z
After: 470.21 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:28:44Z
After: 232.67 seconds
End action shell
At: 2026-02-05 16:28:44Z
After: 232.68 seconds
Shell(
    Shell {
        shell: "git config --global user.email ambient@example.com",
    },
)
Start action shell
At: 2026-02-05 16:32:42Z
After: 470.21 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:28:44Z
After: 232.72 seconds
End action shell
At: 2026-02-05 16:28:44Z
After: 232.72 seconds
CargoFmt(
    CargoFmt,
)
Start action cargo_fmt
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • cargo
  • --version
exit: 0
Stdout:
cargo 1.93.0 (083ac5135 2025-12-15)
OK: cargo --version
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • cargo
  • clippy
  • --version
exit: 0
Stdout:
clippy 0.1.93 (254b59607d 2026-01-19)
OK: cargo clippy --version
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • rustc
  • --version
exit: 0
Stdout:
rustc 1.93.0 (254b59607 2026-01-19)
OK: rustc --version
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • cargo
  • fmt
  • --check
exit: 0
OK: cargo fmt --check
At: 2026-02-05 16:28:46Z
After: 234.00 seconds
End action cargo_fmt
At: 2026-02-05 16:28:46Z
After: 234.00 seconds
CargoClippy(
    CargoClippy,
)
Start action cargo_clippy
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • cargo
  • --version
exit: 0
Stdout:
cargo 1.93.0 (083ac5135 2025-12-15)
OK: cargo --version
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • cargo
  • clippy
  • --version
exit: 0
Stdout:
clippy 0.1.93 (254b59607d 2026-01-19)
OK: cargo clippy --version
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • rustc
  • --version
exit: 0
Stdout:
rustc 1.93.0 (254b59607 2026-01-19)
OK: rustc --version
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • cargo
  • clippy
  • --offline
  • --locked
  • --workspace
  • --all-targets
  • --no-deps
  • --
  • --deny
  • warnings
exit: 0
Stderr:
   Compiling subplot v0.14.0 (/ci/src)
   Compiling subplotlib v0.14.0 (/ci/src/subplotlib)
   Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)
    Checking subplot-bin v0.14.0 (/ci/src/bin)
    Checking subplot-seq-example v0.1.0 (/ci/src/examples/seq)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 16.05s
OK: cargo clippy --offline --locked --workspace --all-targets --no-deps -- --deny warnings
At: 2026-02-05 16:29:02Z
After: 250.82 seconds
End action cargo_clippy
At: 2026-02-05 16:29:02Z
After: 250.82 seconds
Shell(
    Shell {
        shell: "make OFFLINE=\"--offline\"\ncp -a doc/* /workspace/artifacts/.\n\n# Clean up after tests and documentation building.\ngit reset --hard\ngit clean -fdx\ngit status --ignored\n",
    },
)
Start action shell
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • bash
  • -c
  • set -xeuo pipefail make OFFLINE="--offline" cp -a doc/* /workspace/artifacts/. # Clean up after tests and documentation building. git reset --hard git clean -fdx git status --ignored
exit: 0
Stdout:
which cargo
/root/.cargo/bin/cargo
which dot
/usr/bin/dot
which plantuml
/usr/bin/plantuml
which python3
/usr/bin/python3
which rustc
/root/.cargo/bin/rustc
which rustfmt
/root/.cargo/bin/rustfmt
which tidy
/usr/bin/tidy
if which shellcheck; then shellcheck *.sh; fi
/usr/bin/shellcheck
if cargo clippy --version; then \
    cargo clippy --locked --offline --workspace --all-targets -- -Dwarnings && \
	cd examples/seq && cargo clippy --workspace --all-targets -- -Dwarnings; \
fi
clippy 0.1.93 (254b59607d 2026-01-19)
rm -rf "/ci/src/inst"
cargo install --target x86_64-unknown-linux-musl --locked --offline --path=bin --root="/ci/src/inst" --debug
mv "/ci/src/inst"/bin/* "/ci/src/inst"
rm -rf "/ci/src/inst"/.crate*  "/ci/src/inst"/bin
cd share/python/template && python3 context_tests.py
cd share/python/template && python3 encoding_tests.py
env SUBPLOT_DIR="/ci/src/inst" cargo test --target x86_64-unknown-linux-musl --workspace -- 

running 108 tests
test bindings::test_binding::creates_new ... ok
test bindings::test_binding::does_not_match_with_wrong_kind ... ok
test bindings::test_binding::case_sensitive_mismatch ... ok
test bindings::test_binding::does_not_match_with_wrong_text ... ok
test bindings::test_binding::match_with_fixed_pattern ... ok
test bindings::test_binding::equal ... ok
test bindings::test_binding::not_equal ... ok
test bindings::test_bindings::add_from_yaml_notices_multiple_keywords ... ok
test bindings::test_bindings::adds_binding ... ok
test bindings::test_binding::match_with_regex ... ok
test bindings::test_bindings::does_not_find_match_for_unmatching_kind ... ok
test bindings::test_bindings::does_not_find_match_for_unmatching_pattern ... ok
test bindings::test_bindings::finds_match_for_fixed_string_pattern ... ok
test bindings::test_bindings::finds_match_for_regexp_pattern ... ok
test bindings::test_bindings::has_no_bindings_initially ... ok
test bindings::test_bindings::two_matching_bindings ... ok
test bindings::test_bindings::adds_from_yaml ... ok
test bindings::test_bindings::typemap_must_match_pattern ... ok
test bindings::test_regex_from_simple_pattern::returns_boring_pattern_as_is ... ok
test bindings::test_regex_from_simple_pattern::kindless_simple_pattern ... ok
test bindings::test_regex_from_simple_pattern::returns_empty_string_as_is ... ok
test bindings::test_regex_from_simple_pattern::returns_error_for_stray_closing_brace ... ok
test bindings::test_regex_from_simple_pattern::returns_error_for_stray_closing_brace_before_capture ... ok
test bindings::test_regex_from_simple_pattern::returns_error_for_stray_opening_brace ... ok
test bindings::test_regex_from_simple_pattern::returns_error_for_stray_opening_brace_before_capture ... ok
test bindings::test_regex_from_simple_pattern::returns_pattern_with_regexp_chars_escaped ... ok
test bindings::test_regex_from_simple_pattern::simple_int_pattern ... ok
test bindings::test_regex_from_simple_pattern::simple_text_pattern ... ok
test bindings::test_regex_from_simple_pattern::simple_number_pattern ... ok
test bindings::test_regex_from_simple_pattern::simple_word_pattern ... ok
test bindings::test_regex_from_simple_pattern::typemap_and_pattern_kind_must_match ... ok
test bindings::test_regex_from_simple_pattern::typemap_checked_on_pattern_parse_and_default_agrees ... ok
test bindings::test_regex_from_simple_pattern::typemap_updated_on_pattern_parse_default ... ok
test bindings::test_regex_from_simple_pattern::typemap_updated_on_pattern_parse_explicit ... ok
test bindings::test_regex_from_simple_pattern::typemap_used_when_kind_not_present ... ok
test blockattr::test::empty_braces ... ok
test blockattr::test::empty_string ... ok
test blockattr::test::just_word ... ok
test blockattr::test::open_brace_without_close ... ok
test blockattr::test::parse_one_dotted_word ... ok
test blockattr::test::parse_one_id ... ok
test blockattr::test::parse_one_kv ... ok
test blockattr::test::parse_one_kv_with_double_quotes ... ok
test blockattr::test::parse_one_kv_with_single_quotes ... ok
test blockattr::test::parse_one_word ... ok
test blockattr::test::two_ids ... ok
test blockattr::test::two_words ... ok
test codegen::test::verify_commentsafe_filter ... ok
test codegen::test::verify_name_slugification ... ok
test html::test_tag::can_self_close ... ok
test html::test_tag::cannot_self_close ... ok
test matches::test::returns_text ... ok
test matches::test::returns_uncaptured ... ok
test matches::test_partial_steps::different_captured_texts_dont_match ... ok
test matches::test_partial_steps::different_uncaptured_texts_dont_match ... ok
test matches::test_partial_steps::differently_captured_texts_dont_match ... ok
test matches::test_partial_steps::differently_named_captured_texts_dont_match ... ok
test matches::test_partial_steps::identical_captured_texts_match ... ok
test matches::test_partial_steps::identical_uncaptured_texts_match ... ok
test md::test::finds_block_classes ... ok
test md::test::finds_embedded_files ... ok
test md::test::finds_images ... ok
test md::test::finds_no_blocks_in_empty_doc ... ok
test md::test::finds_no_classes_when_no_blocks_have_them ... ok
test md::test::finds_no_embedded_files_in_empty_doc ... ok
test md::test::finds_no_images_in_empty_doc ... ok
test md::test::finds_no_scenarios_in_empty_doc ... ok
test md::test::finds_scenarios ... ok
test md::test::loads_empty_doc ... ok
test md::test::parses_auto_as_auto ... ok
test md::test::parses_empty_as_error ... ok
test bindings::test_regex_from_simple_pattern::simple_uint_pattern ... ok
test md::test::parses_garbage_as_error ... ok
test md::test::parses_no_as_no ... ok
test md::test::parses_no_auto_newline_as_auto ... ok
test md::test::parses_yes_as_yes ... ok
test md::test_extract::returns_error_if_scenario_has_no_title ... ok
test md::test_extract::returns_parent_section_with_scenario_snippet ... ok
test md::test_extract::returns_scenario_if_there_is_one ... ok
test md::test_extract::returns_nothing_if_there_is_no_scenario ... ok
test md::test_extract::skips_scenarioless_deeper_headings ... ok
test md::test_extract::skips_scenarioless_parent_heading ... ok
test md::test_extract::skips_scenarioless_section_in_favour_of_same_level ... ok
test scenarios::filtertest::exclude_slow ... ok
test scenarios::filtertest::exclude_unimportant_slow ... ok
test scenarios::filtertest::include_all ... ok
test metadata::test::full_meta ... ok
test scenarios::filtertest::include_none ... ok
test scenarios::test::adds_step ... ok
test scenarios::test::has_no_steps_initially ... ok
test scenarios::test::has_title ... ok
test scenarios::filtertest::include_fast ... ok
test steps::test::parses_and ... ok
test steps::test::fails_to_parse_and ... ok
test steps::test::parses_given_with_extra_spaces ... ok
test steps::test::parses_then ... ok
test steps::test::parses_when ... ok
test steps::test_steps_parser::empty_string ... ok
test steps::test_steps_parser::preserve_nonascii_whitespace ... ok
test steps::test_steps_parser::simple ... ok
test steps::test_steps_parser::two_simple ... ok
test templatespec::test::new_from_yaml ... ok
test toc::test_numberer::numbering ... ok
test toc::test_slugs::short_and_simple ... ok
test toc::test_slugs::unique_for_identical_simple_headings ... ok
test toc::test_toc::iterate ... ok
test toc::test_toc::uses_given_slug ... ok
test steps::test::parses_given ... ok

test result: ok. 108 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.90s


running 1 test
test bindings_microbenchmark ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.09s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s


running 4 tests
test no_arguments ... ok
test more_than_one_number ... ok
test one_number ... ok
test not_a_number ... ok

test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s


running 7 tests
test directories ... ok
test file_and_directory_removal ... ok
test create_on_disk_files_from_embedded_files ... ok
test file_equality ... ok
test file_metadata ... ok
test file_modification_time ... ok
test file_contents ... ok

test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s


running 21 tests
test check_stderr_doesn_t_match_regular_expressions ... ok
test check_stderr_doesn_t_contain_sub_string ... ok
test check_stderr_is_exactly_as_wanted ... ok
test check_stderr_is_not_exactly_something ... ok
test check_stderr_using_regular_expressions ... ok
test check_stdout_doesn_t_contain_sub_string ... ok
test check_stderr_using_sub_string_search ... ok
test check_stdout_is_exactly_as_wanted ... ok
test check_stdout_doesn_t_match_regular_expression ... ok
test check_stdout_is_not_exactly_something ... ok
test check_stdout_using_sub_string_search ... ok
test check_stdout_using_regular_expressions ... ok
test check_we_can_prepend_to__path ... ok
test execution_in_a_sub_directory_does_not_affect_home ... ok
test failed_execution ... ok
test failed_execution_in_a_sub_directory ... ok
test stdin_comes_from_a_named_file ... ok
test stdin_contains_exactly ... ok
test setting_and_clearing_of_environment_variables ... ok
test successful_execution ... ok
test successful_execution_in_a_sub_directory ... ok

test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s


running 28 tests
test capture_using_regular_expressions ... ok
test all_the_keywords ... ok
test capture_using_simple_patterns ... ok
test cleanup_functions_get_called_on_failure__python_ ... ok
test code_generator_gives_an_error_if_input_document_lacks_title ... ok
test cleanup_functions_gets_called_on_success__python_ ... ok
test examples_are_not_files ... ok
test empty_lines_in_scenarios ... ok
test files_not_in_current_working_directory ... ok
test lowest_level_heading_is_name_of_scenario ... ok
test missing_functions_file ... ok
test misuse_of_continuation_keywords ... ok
test next_heading_at_higher_level_starts_new_scenario ... ok
test no_scenarios_means_codegen_fails ... ok
test no_template_means_you_can_docgen_but_not_codegen ... ok
test next_heading_at_same_level_starts_new_scenario ... ok
test recall_values_for_use_in_later_steps ... ok
test running_only_chosen_scenarios_with_python ... ok
test simple_patterns_with_regex_metacharacters__allowed_case ... ok
test simple_patterns_with_regex_metacharacters__forbidden_case ... ok
test set_environment_variables_in_generated_test_programs ... ok
test steps_which_do_not_case_sensitively_match_sensitive_bindings_do_not_work ... ok
test steps_which_do_not_match_bindings_do_not_work ... ok
test steps_which_match_more_than_one_binding_do_not_work ... ok
test smoke_test ... ok
test subheadings_don_t_start_new_scenario ... ok
test subplot_accepts_title_and_headings_with_inline_markup ... ok
test temporary_files_in_scenarios_in_python ... ok

test result: ok. 28 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.64s


running 4 tests
test pikchr ... ok
test dot ... ok
test roadmap ... ok
test plantuml ... ok

test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.84s


running 28 tests
test attempt_to_use_definition_list ... ok
test bad__add_newline__value ... ok
test class_name_validation ... ok
test date_given_in_metadata ... ok
test date_given_on_command_line ... ok
test document_generator_gives_an_error_if_input_document_lacks_title ... ok
test dot ... ok
test css_urls ... ok
test embedded_css ... ok
test examples_may_be_unused ... ok
test extract_embedded_file ... ok
test fail_if_embedded_file_isn_t_used ... ok
test fail_if_two_filenames_only_differ_in_case ... ok
test empty_lines_in_scenarios ... ok
test indented_scenario_steps_are_not_allowed ... ok
test missing_bindings_file ... ok
test files_not_in_current_working_directory ... ok
test multiple_markdown_files ... ok
test no_date_anywhere ... ok
test no_template_means_you_can_docgen_but_not_codegen ... ok
test pikchr ... ok
test named_code_blocks_must_have_an_appropriate_class ... ok
test roadmap ... ok
test scenario_before_the_first_heading ... ok
test smoke_test ... ok
test subplot_accepts_title_and_headings_with_inline_markup ... ok
test title_markup ... ok
test plantuml ... ok

test result: ok. 28 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.12s


running 1 test
test extract_embedded_files ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s


running 5 tests
test duplicate_scenario_titles ... ok
test extracting_metadata_from_a_document ... ok
test list_embedded_files ... ok
test scenario_titles ... ok
test files_not_in_current_working_directory ... ok

test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.62s


running 64 tests
test attempt_to_use_definition_list ... ok
test bad__add_newline__value ... ok
test capture_using_regular_expressions ... ok
test all_the_keywords ... ok
test class_name_validation ... ok
test capture_using_simple_patterns ... ok
test cleanup_functions_get_called_on_failure__python_ ... ok
test code_generator_gives_an_error_if_input_document_lacks_title ... ok
test cleanup_functions_gets_called_on_success__python_ ... ok
test date_given_in_metadata ... ok
test date_given_on_command_line ... ok
test document_generator_gives_an_error_if_input_document_lacks_title ... ok
test dot ... ok
test css_urls ... ok
test duplicate_scenario_titles ... ok
test embedded_css ... ok
test examples_are_not_files ... ok
test examples_may_be_unused ... ok
test extract_embedded_file ... ok
test extract_embedded_file__automatically_add_missing_newline ... ok
test extract_embedded_file__by_default_add_missing_newline ... ok
test extract_embedded_file__by_default_do_not_add_a_second_newline ... ok
test extract_embedded_file__do_not_add_missing_newline ... ok
test extract_embedded_file__do_not_automatically_add_second_newline ... ok
test extract_embedded_file__explicitly_add_missing_newline ... ok
test extract_embedded_file__explicitly_add_second_newline ... ok
test extract_embedded_files ... ok
test empty_lines_in_scenarios ... ok
test fail_if_embedded_file_isn_t_used ... ok
test fail_if_the_same_filename_is_used_twice ... ok
test fail_if_two_filenames_only_differ_in_case ... ok
test extracting_metadata_from_a_document ... ok
test indented_scenario_steps_are_not_allowed ... ok
test list_embedded_files ... ok
test lowest_level_heading_is_name_of_scenario ... ok
test missing_bindings_file ... ok
test files_not_in_current_working_directory ... ok
test missing_functions_file ... ok
test multiple_markdown_files ... ok
test misuse_of_continuation_keywords ... ok
test named_code_blocks_must_have_an_appropriate_class ... ok
test next_heading_at_higher_level_starts_new_scenario ... ok
test no_date_anywhere ... ok
test no_scenarios_means_codegen_fails ... ok
test no_template_means_you_can_docgen_but_not_codegen ... ok
test pikchr ... ok
test next_heading_at_same_level_starts_new_scenario ... ok
test recall_values_for_use_in_later_steps ... ok
test roadmap ... ok
test running_only_chosen_scenarios_with_python ... ok
test scenario_before_the_first_heading ... ok
test scenario_titles ... ok
test set_environment_variables_in_generated_test_programs ... ok
test simple_patterns_with_regex_metacharacters__allowed_case ... ok
test simple_patterns_with_regex_metacharacters__forbidden_case ... ok
test plantuml ... ok
test steps_which_do_not_case_sensitively_match_sensitive_bindings_do_not_work ... ok
test steps_which_do_not_match_bindings_do_not_work ... ok
test steps_which_match_more_than_one_binding_do_not_work ... ok
test smoke_test ... ok
test subheadings_don_t_start_new_scenario ... ok
test temporary_files_in_scenarios_in_python ... ok
test title_markup ... ok
test subplot_accepts_title_and_headings_with_inline_markup ... ok

test result: ok. 64 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.55s


running 3 tests
test embedded_files ... ok
test data_directory ... ok
test fundamentals ... ok

test result: ok. 3 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 6 tests
test src/bindings.rs - bindings::BindingImpl::cleanup (line 163) ... ignored
test src/bindings.rs - bindings::BindingImpl::function (line 151) ... ignored
test src/bindings.rs - bindings::BindingImpl::new (line 137) ... ignored
test src/diagrams.rs - diagrams::DotMarkup (line 149) ... ok
test src/diagrams.rs - diagrams::PikchrMarkup (line 116) ... ok
test src/diagrams.rs - diagrams::PlantumlMarkup (line 198) ... ok

test result: ok. 3 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 6.52s


running 73 tests
test subplotlib/src/file.rs - file::SubplotDataFile (line 20) ... ok
test subplotlib/src/file.rs - file::SubplotDataFile::data (line 120) ... ok
test subplotlib/src/file.rs - file::SubplotDataFile::name (line 105) ... ok
test subplotlib/src/prelude.rs - prelude (line 6) ... ok
test subplotlib/src/prelude.rs - prelude::step (line 100) ... ok
test subplotlib/src/file.rs - file::SubplotDataFile::new (line 76) ... ok
test subplotlib/src/prelude.rs - prelude::step (line 73) ... ok
test subplotlib/src/prelude.rs - prelude::throws (line 26) ... ok
test subplotlib/src/prelude.rs - prelude::throws (line 39) ... ok
test subplotlib/src/scenario.rs - scenario::Scenario (line 305) ... ok
test subplotlib/src/step.rs - step::ScenarioStep (line 24) ... ok
test subplotlib/src/steplibrary/datadir.rs - steplibrary::datadir::datadir_has_enough_space::call (line 160) ... ignored
test subplotlib/src/steplibrary/datadir.rs - steplibrary::datadir::datadir_has_enough_space_megabytes::call (line 171) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::_create_from_embedded_with_other_name_executable::call (line 129) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::create_executable_from_embedded::call (line 93) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::create_executable_from_embedded_with_other_name::call (line 111) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::create_from_embedded::call (line 56) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::create_from_embedded_with_other_name::call (line 70) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::create_from_text::call (line 220) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_and_embedded_file_do_not_match::call (line 469) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_and_embedded_file_match::call (line 443) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_contains::call (line 341) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_do_not_match::call (line 417) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_does_not_exist::call (line 296) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_doesnt_contain::call (line 357) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_exists::call (line 276) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_match::call (line 390) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::file_matches_regex::call (line 374) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::has_different_metadata::call (line 544) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::has_remembered_metadata::call (line 505) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::make_directory::call (line 609) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::mtime_is_ancient::call (line 593) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::mtime_is_recent::call (line 577) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::only_these_exist::call (line 322) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::path_does_not_exist::call (line 659) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::path_exists::call (line 642) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::path_is_empty::call (line 678) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::path_is_not_empty::call (line 696) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::remember_metadata::call (line 231) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::remove_directory::call (line 619) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::remove_empty_directory::call (line 630) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::remove_file::call (line 181) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::touch::call (line 255) ... ignored
test subplotlib/src/steplibrary/files.rs - steplibrary::files::touch_with_timestamp::call (line 193) ... ignored
test subplotlib/src/steplibrary.rs - steplibrary (line 10) ... ok
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is::call (line 403) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is_nonzero::call (line 442) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is_not::call (line 419) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::exit_code_is_zero::call (line 431) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::helper_script::call (line 227) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::helper_srcdir_path::call (line 241) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::run::call (line 254) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::run_in::call (line 271) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::set_environment_variable::call (line 677) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_contains::call (line 594) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_doesnt_contain::call (line 607) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_doesnt_match_regex::call (line 663) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_is::call (line 542) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_isnt::call (line 555) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stderr_matches_regex::call (line 649) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdin_from_file::call (line 480) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdin_is::call (line 502) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_contains::call (line 568) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_doesnt_contain::call (line 581) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_doesnt_match_regex::call (line 635) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_is::call (line 516) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_isnt::call (line 529) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::stdout_matches_regex::call (line 621) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::try_to_run::call (line 285) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::try_to_run_in::call (line 298) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::unset_environment_variable::call (line 691) ... ignored
test subplotlib/src/steplibrary/runcmd.rs - steplibrary::runcmd::Runcmd::join_paths (line 155) ... ok
test subplotlib/src/utils.rs - utils::base64_decode (line 9) ... ok

test result: ok. 14 passed; 0 failed; 59 ignored; 0 measured; 0 filtered out; finished in 5.44s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

/ci/src/inst/subplot --resources /ci/src/share codegen subplot.subplot -o test.py --template python
rm -f test.log
python3 test.py --log test.log --env SUBPLOT_DIR=/ci/src/inst 
srcdir /ci/src
datadir /tmp/tmpwy8dgqgt
scenario: CSS URLs
  step 1: given file css-urls.subplot
  step 2: given file css-urls.md
  step 3: given file b.yaml
  step 4: given an installed subplot
  step 5: when I run subplot docgen css-urls.subplot -o foo.html
  step 6: then file foo.html contains "https://example.com/flushing.css"
  cleanup 4: given an installed subplot
scenario: Duplicate scenario titles
  step 1: given file duplicate-scenario-titles.subplot
  step 2: given file duplicate-scenario-titles.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I try to run subplot metadata duplicate-scenario-titles.subplot
  step 7: then command fails
  step 8: then stderr contains "duplicate"
  cleanup 5: given an installed subplot
scenario: Lowest level heading is name of scenario
  step 1: given file scenarioislowest.subplot
  step 2: given file scenarioislowest.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen --run scenarioislowest.subplot -o test.py
  step 7: then scenario "heading 1.1.1" was run
  step 8: then command is successful
  cleanup 5: given an installed subplot
scenario: Steps which match more than one binding do not work
  step 1: given file twobindings.subplot
  step 2: given file twobindings.md
  step 3: given file twobindings.yaml
  step 4: given file a_function.py
  step 5: given an installed subplot
  step 6: when I try to run subplot codegen --run twobindings.subplot -o test.py
  step 7: then command fails
  step 8: then stderr contains "xyzzy"
  step 9: then stderr contains "plugh"
  cleanup 5: given an installed subplot
scenario: No scenarios means codegen fails
  step 1: given file noscenarios.subplot
  step 2: given file noscenarios.md
  step 3: given an installed subplot
  step 4: when I try to run subplot codegen noscenarios.subplot -o test.py
  step 5: then command fails
  step 6: then stderr contains "no scenarios were found"
  cleanup 3: given an installed subplot
scenario: Extract embedded files
  step 1: given file embedded-file.subplot
  step 2: given file embedded-file.md
  step 3: given file expected.txt
  step 4: given an installed subplot
  step 5: when I run subplot extract --merciful embedded-file.subplot foo.txt -d .
  step 6: then files foo.txt and expected.txt match
  cleanup 4: given an installed subplot
scenario: Missing functions file
  step 1: given file missing-functions.subplot
  step 2: given file missing-functions.md
  step 3: given file b.yaml
  step 4: given an installed subplot
  step 5: when I try to run subplot codegen --run missing-functions.subplot -o foo.py
  step 6: then command fails
  step 7: then stderr contains "could not be found"
  step 8: then stderr contains "missing-functions.py"
  cleanup 4: given an installed subplot
scenario: Fail if embedded file isn't used
  step 1: given file unusedfile.subplot
  step 2: given file unusedfile.md
  step 3: given an installed subplot
  step 4: when I try to run subplot docgen --merciful unusedfile.subplot -o unusedfile.html
  step 5: then command is successful
  step 6: then file unusedfile.html exists
  step 7: then stderr contains "thisisnotused.txt"
  cleanup 3: given an installed subplot
scenario: Examples may be unused
  step 1: given file unusedexample.subplot
  step 2: given file unusedexample.md
  step 3: given an installed subplot
  step 4: when I try to run subplot docgen --merciful unusedexample.subplot -o unusedexample.html
  step 5: then command is successful
  step 6: then file unusedexample.html exists
  step 7: then stderr doesn't contain "thisisnotused.txt"
  cleanup 3: given an installed subplot
scenario: Missing bindings file
  step 1: given file missing-binding.subplot
  step 2: given file missing-binding.md
  step 3: given an installed subplot
  step 4: when I try to run subplot docgen missing-binding.subplot -o foo.html
  step 5: then command fails
  step 6: then stderr contains "could not be found"
  step 7: then stderr contains "missing-binding.yaml"
  cleanup 3: given an installed subplot
scenario: Multiple markdown files
  step 1: given file multimd.subplot
  step 2: given file md1.md
  step 3: given file md2.md
  step 4: given an installed subplot
  step 5: when I run subplot docgen multimd.subplot -o multimd.html
  step 6: when I run cat multimd.html
  step 7: then file multimd.html exists
  step 8: then file multimd.html contains "<title>The Fabulous Title</title>"
  step 9: then file multimd.html contains "First markdown file."
  step 10: then file multimd.html contains "Second markdown file."
  cleanup 4: given an installed subplot
scenario: Extract embedded file, automatically add missing newline
  step 1: given file auto-without-newline.txt
  step 2: then auto-without-newline.txt ends in one newline
scenario: List embedded files
  step 1: given file two-embedded.subplot
  step 2: given file two-embedded.md
  step 3: given an installed subplot
  step 4: when I run subplot metadata --merciful two-embedded.subplot
  step 5: then stdout contains "foo.txt"
  step 6: then stdout contains "bar.yaml"
  cleanup 3: given an installed subplot
scenario: Simple patterns with regex metacharacters: allowed case
  step 1: given file confusedbutok.subplot
  step 2: given file confusedbutok.md
  step 3: given file confusedbutok.yaml
  step 4: given file capture.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen --run confusedbutok.subplot -o test.py
  step 7: then command is successful
  cleanup 5: given an installed subplot
scenario: Fail if two filenames only differ in case
  step 1: given file casediff.md
  step 2: given an installed subplot
  step 3: when I try to run subplot docgen casediff.md -o casediff.html
  step 4: then command fails
  step 5: then file casediff.html does not exist
  cleanup 2: given an installed subplot
scenario: Named code blocks must have an appropriate class
  step 1: given file named-code-blocks-appropriate.subplot
  step 2: given file named-code-blocks-appropriate.md
  step 3: given file b.yaml
  step 4: given an installed subplot
  step 5: when I try to run subplot docgen named-code-blocks-appropriate.subplot -o foo.html
  step 6: then command fails
  step 7: then stderr contains "#example-1 at named-code-blocks-appropriate.md:7:1"
  step 8: then stderr doesn't contain "example-2"
  step 9: then stderr doesn't contain "example-3"
  cleanup 4: given an installed subplot
scenario: Smoke test
  step 1: given file simple.subplot
  step 2: given file simple.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I run subplot docgen simple.subplot -o simple.html
  step 7: then file simple.html exists
  step 8: when I run subplot codegen --run simple.subplot -o test.py
  step 9: then scenario "Simple" was run
  step 10: then step "given precondition foo" was run
  step 11: then step "when I do bar" was run
  step 12: then step "then bar was done" was run
  step 13: then command is successful
  cleanup 5: given an installed subplot
scenario: Extract embedded file, explicitly add missing newline
  step 1: given file add-without-newline.txt
  step 2: then add-without-newline.txt ends in one newline
scenario: Cleanup functions get called on failure (Python)
  step 1: given file cleanup-fail-python.subplot
  step 2: given file cleanup-fail-python.md
  step 3: given file cleanup.yaml
  step 4: given file cleanup.py
  step 5: given an installed subplot
  step 6: when I try to run subplot codegen --run cleanup-fail-python.subplot -o test.py
  step 7: then scenario "Cleanup" was run
  step 8: then step "given foo" was run, and then step "given bar"
  step 9: then cleanup for "given bar" was run, and then for "given foo"
  step 10: then cleanup for "given failure" was not run
  step 11: then command fails
  cleanup 5: given an installed subplot
scenario: Steps which do not match bindings do not work
  step 1: given file nobinding.subplot
  step 2: given file nobinding.md
  step 3: given file badbindings.yaml
  step 4: given an installed subplot
  step 5: when I try to run subplot codegen --run nobinding.subplot -o test.py
  step 6: then command fails
  cleanup 4: given an installed subplot
scenario: Misuse of continuation keywords
  step 1: given file continuationmisuse.subplot
  step 2: given file continuationmisuse.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I try to run subplot codegen --run continuationmisuse.subplot -o test.py
  step 7: then command fails
  cleanup 5: given an installed subplot
scenario: Scenario before the first heading
  step 1: given an installed subplot
  step 2: given file scenario-before-heading.subplot
  step 3: given file scenario-before-heading.md
  step 4: when I try to run subplot docgen scenario-before-heading.subplot -o /dev/null
  step 5: then command fails
  step 6: then stderr contains "ERROR scenario-before-heading.md:1:1: first scenario is before first heading"
  cleanup 1: given an installed subplot
scenario: No template means you can docgen but not codegen
  step 1: given file notemplate.subplot
  step 2: given file notemplate.md
  step 3: given an installed subplot
  step 4: when I run subplot docgen notemplate.subplot -o notemplate.html
  step 5: then file notemplate.html exists
  step 6: when I try to run subplot codegen notemplate.subplot -o test.py
  step 7: then command fails
  step 8: then stderr contains "document has no template"
  cleanup 3: given an installed subplot
scenario: Extract embedded file, do not add missing newline
  step 1: given file no-adding-without-newline.txt
  step 2: then no-adding-without-newline.txt does not end in a newline
scenario: Fail if the same filename is used twice
  step 1: given file onefiletwice.md
  step 2: given an installed subplot
  step 3: when I try to run subplot docgen onefiletwice.md -o onefiletwice.html
  step 4: then command fails
  step 5: then file onefiletwice.html does not exist
  cleanup 2: given an installed subplot
scenario: Subheadings don't start new scenario
  step 1: given file subisnotnewscenario.subplot
  step 2: given file subisnotnewscenario.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen --run subisnotnewscenario.subplot -o test.py
  step 7: then scenario "heading 1.1a" was run
  step 8: then command is successful
  cleanup 5: given an installed subplot
scenario: Subplot accepts title and headings with inline markup
  step 1: given file fancytitle.subplot
  step 2: given file fancytitle.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I try to run subplot docgen fancytitle.subplot -o foo.md
  step 7: then command is successful
  step 8: when I try to run subplot codegen fancytitle.subplot -o foo.md
  step 9: then command is successful
  cleanup 5: given an installed subplot
scenario: Attempt to use definition list
  step 1: given an installed subplot
  step 2: given file dl.subplot
  step 3: given file dl.md
  step 4: when I try to run subplot docgen dl.subplot -o /dev/null
  step 5: then command fails
  step 6: then stderr contains "ERROR dl.md:3:1: attempt to use definition lists in Markdown"
  cleanup 1: given an installed subplot
scenario: Class name validation
  step 1: given file unknown-class-name.subplot
  step 2: given file unknown-class-name.md
  step 3: given file known-class-name.subplot
  step 4: given file known-class-name.md
  step 5: given file b.yaml
  step 6: given an installed subplot
  step 7: when I try to run subplot docgen unknown-class-name.subplot -o unknown-class-name.html
  step 8: then command fails
  step 9: then file unknown-class-name.html does not exist
  step 10: then stderr contains "Unknown classes found in the document: foobar"
  step 11: when I run subplot docgen known-class-name.subplot -o known-class-name.html
  step 12: then file known-class-name.html exists
  cleanup 6: given an installed subplot
scenario: All the keywords
  step 1: given file allkeywords.subplot
  step 2: given file allkeywords.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen --run allkeywords.subplot -o test.py
  step 7: then scenario "All keywords" was run
  step 8: then step "given precondition foo" was run
  step 9: then step "when I do bar" was run
  step 10: then step "then bar was done" was run
  step 11: then command is successful
  cleanup 5: given an installed subplot
scenario: Examples are not files
  step 1: given file examplesnotfiles.subplot
  step 2: given file examplesnotfiles.md
  step 3: given an installed subplot
  step 4: when I try to run subplot codegen examplesnotfiles.subplot -t python -o examplesnotfiles.html
  step 5: then command fails
  step 6: then file examplesnotfiles.html does not exist
  step 7: then stderr contains "thisisanexample.txt"
  cleanup 3: given an installed subplot
scenario: Pikchr
  step 1: given file pikchr.subplot
  step 2: given file pikchr.md
  step 3: given an installed subplot
  step 4: when I run subplot docgen pikchr.subplot -o pikchr.html
  step 5: then file pikchr.html matches regex /src="data:image/svg\\+xml;base64,/
  cleanup 3: given an installed subplot
scenario: Running only chosen scenarios with Python
  step 1: given file twoscenarios-python.subplot
  step 2: given file twoscenarios-python.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen twoscenarios-python.subplot -o test.py
  step 7: when I run python3 test.py on
  step 8: then scenario "One" was run
  step 9: then scenario "Two" was not run
  step 10: then command is successful
  cleanup 5: given an installed subplot
scenario: Temporary files in scenarios in Python
  step 1: given file tmpdir.subplot
  step 2: given file tmpdir.md
  step 3: given file tmpdir.yaml
  step 4: given file tmpdir.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen --run tmpdir.subplot -o test.py
  step 7: then command is successful
  step 8: then scenario "TMPDIR" was run
  step 9: then step "then TMPDIR is set" was run
  cleanup 5: given an installed subplot
scenario: Date given on command line
  step 1: given file dateless.subplot
  step 2: given file dateless.md
  step 3: given an installed subplot
  step 4: when I run subplot docgen dateless.subplot -o dateoption.html --date=FANCYDATE
  step 5: then file dateoption.html exists
  step 6: then file dateoption.html contains "<title>The Fabulous Title</title>"
  step 7: then file dateoption.html contains "Alfred Pennyworth"
  step 8: then file dateoption.html contains "Geoffrey Butler"
  step 9: then file dateoption.html contains "FANCYDATE"
  cleanup 3: given an installed subplot
scenario: Set environment variables in generated test programs
  step 1: given file env.subplot
  step 2: given file env.md
  step 3: given file env.yaml
  step 4: given file env.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen env.subplot -o test.py
  step 7: when I try to run python3 test.py
  step 8: then command fails
  step 9: when I try to run python3 test.py --env FOO=foo
  step 10: then command fails
  step 11: when I try to run python3 test.py --env FOO=bar
  step 12: then command is successful
  cleanup 5: given an installed subplot
scenario: Code generator gives an error if input document lacks title
  step 1: given file notitle.subplot
  step 2: given file notitle.md
  step 3: given an installed subplot
  step 4: when I try to run subplot codegen --run notitle.subplot -o test.py
  step 5: then command fails
  cleanup 3: given an installed subplot
scenario: Date given in metadata
  step 1: given file metadate.subplot
  step 2: given file metadate.md
  step 3: given an installed subplot
  step 4: when I run subplot docgen metadate.subplot -o metadate.html
  step 5: when I run cat metadate.html
  step 6: then file metadate.html exists
  step 7: then file metadate.html contains "<title>The Fabulous Title</title>"
  step 8: then file metadate.html contains "Alfred Pennyworth"
  step 9: then file metadate.html contains "Geoffrey Butler"
  step 10: then file metadate.html contains "WIP"
  cleanup 3: given an installed subplot
scenario: Embedded CSS
  step 1: given file embedded-css.subplot
  step 2: given file embedded-css.md
  step 3: given file embedded-css.css
  step 4: given file b.yaml
  step 5: given an installed subplot
  step 6: when I run subplot docgen embedded-css.subplot -o foo.html
  step 7: then file foo.html contains "silly: property;"
  cleanup 5: given an installed subplot
scenario: Extracting metadata from a document
  step 1: given file images.subplot
  step 2: given file images.md
  step 3: given file b.yaml
  step 4: given file other.yaml
  step 5: given file f.py
  step 6: given file other.py
  step 7: given file expected.json
  step 8: given an installed subplot
  step 9: when I run subplot metadata images.subplot
  step 10: then stdout contains "source: images.md"
  step 11: then stdout contains "source: b.yaml"
  step 12: then stdout contains "source: other.yaml"
  step 13: then stdout contains "source: f.py"
  step 14: then stdout contains "source: other.py"
  step 15: then stdout contains "source: image.gif"
  step 16: then stdout contains "bindings: b.yaml"
  step 17: then stdout contains "bindings: other.yaml"
  step 18: then stdout contains "functions[python]: f.py"
  step 19: when I run subplot metadata images.subplot -o json
  step 20: then JSON output matches expected.json
  cleanup 8: given an installed subplot
scenario: Bad "add-newline" value
  step 1: given an installed subplot
  step 2: given file add-newline.subplot
  step 3: given file add-newline.md
  step 4: when I try to run subplot docgen add-newline.subplot -o /dev/null
  step 5: then command fails
  step 6: then stderr contains "ERROR add-newline.md:1:1: value of add-newline attribute is not understood: xyzzy"
  cleanup 1: given an installed subplot
scenario: Extract embedded file, by default do not add a second newline
  step 1: given file default-has-newline.txt
  step 2: then default-has-newline.txt ends in one newline
scenario: Capture using regular expressions
  step 1: given file regex.subplot
  step 2: given file regex.md
  step 3: given file regex.yaml
  step 4: given file capture.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen --run regex.subplot -o test.py
  step 7: then scenario "Regex" was run
  step 8: then step "given I am Tomjon" was run
  step 9: then stdout contains "function got argument name as Tomjon"
  step 10: then command is successful
  cleanup 5: given an installed subplot
scenario: Cleanup functions gets called on success (Python)
  step 1: given file cleanup-success-python.subplot
  step 2: given file cleanup-success-python.md
  step 3: given file cleanup.yaml
  step 4: given file cleanup.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen --run cleanup-success-python.subplot -o test.py
  step 7: then scenario "Cleanup" was run
  step 8: then step "given foo" was run, and then step "given bar"
  step 9: then cleanup for "given bar" was run, and then for "given foo"
  step 10: then command is successful
  cleanup 5: given an installed subplot
scenario: Indented scenario steps are not allowed
  step 1: given file indented-step.subplot
  step 2: given file indented-step.md
  step 3: given file b.yaml
  step 4: given an installed subplot
  step 5: when I try to run subplot docgen indented-step.subplot -o foo.html
  step 6: then command fails
  step 7: then stderr contains "indented"
  cleanup 4: given an installed subplot
scenario: Dot
  step 1: given file dot.subplot
  step 2: given file dot.md
  step 3: given file b.yaml
  step 4: given an installed subplot
  step 5: when I run subplot docgen dot.subplot -o dot.html
  step 6: then file dot.html matches regex /src="data:image/svg\\+xml;base64,/
  cleanup 4: given an installed subplot
scenario: Extract embedded file
  step 1: given file embedded.subplot
  step 2: given file embedded.md
  step 3: given an installed subplot
  step 4: when I run subplot docgen --merciful embedded.subplot -o foo.html
  step 5: then file foo.html exists
  step 6: then file foo.html matches regex /embedded\\.txt/
  cleanup 3: given an installed subplot
scenario: Title markup
  step 1: given file title-markup.subplot
  step 2: given file title-markup.md
  step 3: given an installed subplot
  step 4: when I run subplot docgen title-markup.subplot -o foo.html
  step 5: then file foo.html exists
  cleanup 3: given an installed subplot
scenario: Extract embedded file, explicitly add second newline
  step 1: given file add-has-newline.txt
  step 2: then add-has-newline.txt ends in two newlines
scenario: Scenario titles
  step 1: given file scenario-titles.subplot
  step 2: given file scenario-titles.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I run subplot metadata scenario-titles.subplot
  step 7: then stdout contains "My fun scenario title"
  cleanup 5: given an installed subplot
scenario: No date anywhere
  step 1: given file dateless.subplot
  step 2: given file dateless.md
  step 3: given file dateless.md has modification time 2020-02-26 07:53:17
  step 4: given an installed subplot
  step 5: when I run subplot docgen dateless.subplot -o mtime.html
  step 6: then file mtime.html exists
  step 7: then file mtime.html contains "<title>The Fabulous Title</title>"
  step 8: then file mtime.html contains "Alfred Pennyworth"
  step 9: then file mtime.html contains "Geoffrey Butler"
  step 10: then file mtime.html contains "2020-02-26 07:53"
  cleanup 4: given an installed subplot
scenario: Extract embedded file, do not automatically add second newline
  step 1: given file auto-has-newline.txt
  step 2: then auto-has-newline.txt ends in one newline
scenario: Recall values for use in later steps
  step 1: given file values.subplot
  step 2: given file values.md
  step 3: given file values.yaml
  step 4: given file values.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen values.subplot -o test.py
  step 7: when I run python3 test.py
  step 8: then command is successful
  cleanup 5: given an installed subplot
scenario: Roadmap
  step 1: given file roadmap.subplot
  step 2: given file roadmap.md
  step 3: given file b.yaml
  step 4: given an installed subplot
  step 5: when I run subplot docgen roadmap.subplot -o roadmap.html
  step 6: then file roadmap.html matches regex /src="data:image/svg\\+xml;base64,/
  cleanup 4: given an installed subplot
scenario: Simple patterns with regex metacharacters: forbidden case
  step 1: given file confusedpattern.subplot
  step 2: given file confusedpattern.md
  step 3: given file confusedpattern.yaml
  step 4: given file capture.py
  step 5: given an installed subplot
  step 6: when I try to run subplot codegen --run confusedpattern.subplot -o test.py
  step 7: then command fails
  step 8: then stderr contains "simple pattern contains regex"
  cleanup 5: given an installed subplot
scenario: Next heading at same level starts new scenario
  step 1: given file samelevelisnewscenario.subplot
  step 2: given file samelevelisnewscenario.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen --run samelevelisnewscenario.subplot -o test.py
  step 7: then scenario "heading 1.1.1" was run
  step 8: then scenario "heading 1.1.2" was run
  step 9: then command is successful
  cleanup 5: given an installed subplot
scenario: Extract embedded file, by default add missing newline
  step 1: given file default-without-newline.txt
  step 2: then default-without-newline.txt ends in one newline
scenario: PlantUML
  step 1: given file plantuml.subplot
  step 2: given file plantuml.md
  step 3: given file b.yaml
  step 4: given an installed subplot
  step 5: when I run subplot docgen plantuml.subplot -o plantuml.html
  step 6: then file plantuml.html matches regex /src="data:image/svg\\+xml;base64,/
  cleanup 4: given an installed subplot
scenario: Document generator gives an error if input document lacks title
  step 1: given file notitle.subplot
  step 2: given file notitle.md
  step 3: given an installed subplot
  step 4: when I try to run subplot docgen notitle.subplot -o foo.md
  step 5: then command fails
  cleanup 3: given an installed subplot
scenario: Empty lines in scenarios
  step 1: given file emptylines.subplot
  step 2: given file emptylines.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I run subplot docgen emptylines.subplot -o emptylines.html
  step 7: then file emptylines.html exists
  step 8: when I run subplot codegen --run emptylines.subplot -o test.py
  step 9: then scenario "Simple" was run
  step 10: then step "given precondition foo" was run
  step 11: then step "when I do bar" was run
  step 12: then step "then bar was done" was run
  step 13: then command is successful
  cleanup 5: given an installed subplot
scenario: Next heading at higher level starts new scenario
  step 1: given file higherisnewscenario.subplot
  step 2: given file higherisnewscenario.md
  step 3: given file b.yaml
  step 4: given file f.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen --run higherisnewscenario.subplot -o test.py
  step 7: then scenario "heading 1.1.1" was run
  step 8: then scenario "heading 1.2" was run
  step 9: then command is successful
  cleanup 5: given an installed subplot
scenario: Steps which do not case-sensitively match sensitive bindings do not work
  step 1: given file casemismatch.subplot
  step 2: given file casemismatch.md
  step 3: given file badbindings.yaml
  step 4: given an installed subplot
  step 5: when I try to run subplot codegen --run casemismatch.subplot -o test.py
  step 6: then command fails
  cleanup 4: given an installed subplot
scenario: Files not in current working directory
  step 1: given file x/simple.subplot from simple.subplot
  step 2: given file x/simple.md from simple.md
  step 3: given file x/b.yaml from b.yaml
  step 4: given file x/f.py from f.py
  step 5: given an installed subplot
  step 6: when I run subplot metadata x/simple.subplot
  step 7: then command is successful
  step 8: when I run subplot codegen x/simple.subplot -o test.py
  step 9: then file test.py exists
  step 10: when I run subplot docgen x/simple.subplot -o simple.html
  step 11: then file simple.html exists
  cleanup 5: given an installed subplot
scenario: Capture using simple patterns
  step 1: given file simplepattern.subplot
  step 2: given file simplepattern.md
  step 3: given file simplepattern.yaml
  step 4: given file capture.py
  step 5: given an installed subplot
  step 6: when I run subplot codegen --run simplepattern.subplot -o test.py
  step 7: then scenario "Simple pattern" was run
  step 8: then step "given I am Tomjon" was run
  step 9: then stdout contains "function got argument name as Tomjon"
  step 10: then command is successful
  cleanup 5: given an installed subplot
OK, all scenarios finished successfully
cd examples/muck && /ci/src/inst/subplot --resources /ci/src/share codegen muck.subplot --run --output test.py
srcdir /ci/src/examples/muck
datadir /tmp/tmpivvmi3iq
scenario: Basic object handling
  step 1: given a fresh Muck server
  step 2: given I am Tomjon
  step 3: when I do POST /res with {"foo": "bar"}
  step 4: then response code is 201
  step 5: then header Muck-Id is ID
  step 6: then header Muck-Revision is REV1
  step 7: when I do GET /res with Muck-Id: {ID}
  step 8: then response code is 200
  step 9: then header Muck-Revision matches {REV1}
  step 10: then body matches {"foo": "bar"}
  step 11: when I do PUT /res with Muck-Id: {ID}, Muck-Revision: {REV1}, and body {"foo":"yo"}
  step 12: then response code is 200
  step 13: then header Muck-Revision is {REV2}
  step 14: then revisions {REV1} and {REV2} are different
  step 15: when I do PUT /res with Muck-Id: {ID}, Muck-Revision: {REV1}, and body {"foo":"yo"}
  step 16: then response code is 409
  step 17: when I do GET /res with Muck-Id: {ID}
  step 18: then response code is 200
  step 19: then header Muck-Revision matches {REV2}
  step 20: then body matches {"foo": "yo"}
  step 21: when I do DELETE /res with Muck-Id: {ID}
  step 22: then response code is 200
  step 23: when I do GET /res with Muck-Id: {ID}
  step 24: then response code is 404
scenario: Restarting Muck
  step 1: given a fresh Muck server
  step 2: given I am Tomjon, with super capability
  step 3: when I do POST /res with {"foo": "bar"}
  step 4: then header Muck-Id is ID
  step 5: then header Muck-Revision is REV1
  step 6: when I restart Muck
  step 7: when I do GET /res with Muck-Id: {ID}
  step 8: then response code is 200
  step 9: then header Muck-Revision matches {REV1}
  step 10: then body matches {"foo": "bar"}
scenario: Accessing someone else's data
  step 1: given a fresh Muck server
  step 2: given I am Tomjon
  step 3: when I do POST /res with {"foo": "bar"}
  step 4: then header Muck-Id is ID
  step 5: then header Muck-Revision is REV1
  step 6: when I do GET /res with Muck-Id: {ID}
  step 7: then response code is 200
  step 8: then header Muck-Revision matches {REV1}
  step 9: then body matches {"foo": "bar"}
  step 10: given I am Verence
  step 11: when I do GET /res with Muck-Id: {ID}
  step 12: then response code is 404
scenario: Deleting someone else's data
  step 1: given a fresh Muck server
  step 2: given I am Tomjon
  step 3: when I do POST /res with {"foo": "bar"}
  step 4: then header Muck-Id is ID
  step 5: then header Muck-Revision is REV1
  step 6: given I am Verence
  step 7: when I do DELETE /res with Muck-Id: {ID}
  step 8: then response code is 404
scenario: Updating someone else's data
  step 1: given a fresh Muck server
  step 2: given I am Tomjon
  step 3: when I do POST /res with {"foo": "bar"}
  step 4: then header Muck-Id is ID
  step 5: then header Muck-Revision is REV1
  step 6: given I am Verence
  step 7: when I do PUT /res with Muck-Id: {ID}, Muck-Revision: {REV1}, and body {"foo":"yo"}
  step 8: then response code is 404
OK, all scenarios finished successfully
if [ "--offline" = "" ] ; then \
	cd examples/website && \
	/ci/src/inst/subplot --resources /ci/src/share codegen website.subplot --run --output test.py; \
fi
cd examples/seq && cargo test -- 

running 4 tests
test more_than_one_number ... ok
test no_arguments ... ok
test not_a_number ... ok
test one_number ... ok

test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

/ci/src/inst/subplot --resources /ci/src/share docgen subplot.subplot -o subplot.html
/ci/src/inst/subplot --resources /ci/src/share docgen tests/subplots/common/files.subplot -o tests/subplots/common/files.html
/ci/src/inst/subplot --resources /ci/src/share docgen tests/subplots/common/runcmd.subplot -o tests/subplots/common/runcmd.html
cd examples/muck && /ci/src/inst/subplot --resources /ci/src/share/subplot docgen muck.subplot -o muck.html
cd examples/website && /ci/src/inst/subplot --resources /ci/src/share docgen website.subplot -o website.html
cd examples/seq && /ci/src/inst/subplot --resources /ci/src/share docgen seq.subplot -o seq.html
/ci/src/inst/subplot --resources /ci/src/share libdocgen lib/runcmd.yaml --output /ci/src/inst/runcmd.md
if which pandoc>/dev/null; then pandoc --toc --standalone --self-contained --metadata "title=lib/runcmd"  --output /ci/src/inst/runcmd.html /ci/src/inst/runcmd.md; fi
/ci/src/inst/subplot --resources /ci/src/share libdocgen lib/files.yaml --output /ci/src/inst/files.md
if which pandoc>/dev/null; then pandoc --toc --standalone --self-contained --metadata "title=lib/files"  --output /ci/src/inst/files.html /ci/src/inst/files.md; fi
/ci/src/inst/subplot --resources /ci/src/share libdocgen python/lib/daemon.yaml --output /ci/src/inst/daemon.md
if which pandoc>/dev/null; then pandoc --toc --standalone --self-contained --metadata "title=lib/daemon"  --output /ci/src/inst/daemon.html /ci/src/inst/daemon.md; fi
/ci/src/inst/subplot --resources /ci/src/share docgen book/user-guide.subplot --output book/user-guide.html
mkdir -p doc/libdocs
for x in subplot.html tests/subplots/common/*.html examples/*/*.html book/*.html; do if [ -e "$x" ]; then mv "$x" doc; fi; done
for x in /ci/src/inst/*.html; do if [ -e "$x" ]; then mv "$x" doc/libdocs/; fi; done
HEAD is now at 4e5a942 Merge branch 'musl-default' into 'main'
Removing doc/
Removing examples/muck/test.py
Removing inst/
Removing share/python/template/__pycache__/
Removing test.log
Removing test.py
HEAD detached at 4e5a942
nothing to commit, working tree clean
Stderr:
+ make OFFLINE=--offline
   Compiling subplot v0.14.0 (/ci/src)
   Compiling subplotlib v0.14.0 (/ci/src/subplotlib)
   Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)
    Checking subplot-bin v0.14.0 (/ci/src/bin)
    Checking subplot-seq-example v0.1.0 (/ci/src/examples/seq)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 10.47s
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.19s
  Installing subplot-bin v0.14.0 (/ci/src/bin)
   Compiling subplot v0.14.0 (/ci/src)
   Compiling subplot-bin v0.14.0 (/ci/src/bin)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 7.92s
  Installing /ci/src/inst/bin/subplot
   Installed package `subplot-bin v0.14.0 (/ci/src/bin)` (executable `subplot`)
warning: be sure to add `/ci/src/inst/bin` to your PATH to be able to run the installed binaries
............................
----------------------------------------------------------------------
Ran 28 tests in 0.002s

OK
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
   Compiling subplot v0.14.0 (/ci/src)
   Compiling subplotlib v0.14.0 (/ci/src/subplotlib)
   Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)
   Compiling subplot-bin v0.14.0 (/ci/src/bin)
   Compiling subplot-seq-example v0.1.0 (/ci/src/examples/seq)
    Finished `test` profile [unoptimized + debuginfo] target(s) in 25.19s
     Running unittests src/lib.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot-6b12939a47f409ec)
     Running tests/bindings-ubm.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/bindings_ubm-c9f0d84f56b2a82e)
     Running unittests src/subplot.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot-61a3da467d922739)
     Running tests/seq.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/seq-cd25a41db69a7fea)
     Running unittests src/lib.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplotlib-6f4deb8ad1d45f2c)
     Running tests/files.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/files-6bb4091f184ca490)
     Running tests/runcmd.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/runcmd-da9980c98ff45be7)
     Running tests/subplot-codegen.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_codegen-fc02b7e7a7aaa8f3)
     Running tests/subplot-diagrams.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_diagrams-2286e0875b8e69f2)
     Running tests/subplot-docgen.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_docgen-c6586b8ec1f13c36)
     Running tests/subplot-extract.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_extract-434e0812b0aec0fe)
     Running tests/subplot-metadata.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_metadata-e35671685b1c91ad)
     Running tests/subplot-others.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplot_others-8fe421fb4304edd9)
     Running tests/subplotlib.rs (/ci/cache/cargo-target/x86_64-unknown-linux-musl/debug/deps/subplotlib-49a58d96d1ffe4bf)
     Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/subplotlib_derive-cc11f893891fdd3d)
   Doc-tests subplot
   Doc-tests subplotlib
   Doc-tests subplotlib_derive
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
   Compiling subplot v0.14.0 (/ci/src)
   Compiling subplotlib v0.14.0 (/ci/src/subplotlib)
   Compiling subplotlib-derive v0.14.0 (/ci/src/subplotlib-derive)
   Compiling subplot-seq-example v0.1.0 (/ci/src/examples/seq)
    Finished `test` profile [unoptimized + debuginfo] target(s) in 3.43s
     Running tests/seq.rs (/ci/cache/cargo-target/debug/deps/seq-06b2eb9a1fbea462)
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
 INFO Starting Subplot
 INFO Subplot finished successfully
+ cp -a doc/files.html doc/libdocs doc/muck.html doc/runcmd.html doc/seq.html doc/subplot.html doc/user-guide.html doc/website.html /workspace/artifacts/.
+ git reset --hard
+ git clean -fdx
+ git status --ignored
OK: bash -c set -xeuo pipefail make OFFLINE="--offline" cp -a doc/* /workspace/artifacts/. # Clean up after tests and documentation building. git reset --hard git clean -fdx git status --ignored
At: 2026-02-05 16:30:44Z
After: 352.00 seconds
End action shell
At: 2026-02-05 16:30:44Z
After: 352.00 seconds
Custom(
    Custom {
        name: "dch",
        args: {
            "debemail": String("liw@liw.fi"),
            "debfullname": String("Lars Wirzenius"),
        },
    },
)
Start action custom
At: 2026-02-05 16:30:44Z
After: 352.40 seconds
End action custom
At: 2026-02-05 16:30:44Z
After: 352.40 seconds
Deb(
    Deb {
        packages: Some(
            ".",
        ),
    },
)
Start action deb
At: 2026-02-05 16:32:42Z
After: 470.21 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=277
HOME=/root
LANG=C.UTF-8
CARGO_HOME=/workspace/deps
DEBEMAIL=liw@liw.fi
INVOCATION_ID=1cd6b56fa2144224976aacaa9228c8b3
SHLVL=2
JOURNAL_STREAM=8:14774
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 subplot
dpkg-buildpackage: info: source version 0.14.0.ci20260205T163044-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 subplot using existing ./subplot_0.14.0.ci20260205T163044.orig.tar.xz
dpkg-source: info: building subplot in subplot_0.14.0.ci20260205T163044-1.debian.tar.xz
dpkg-source: info: building subplot in subplot_0.14.0.ci20260205T163044-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 disabled
disabled
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 --path=bin --root=debian/subplot --offline --locked --target x86_64-unknown-linux-musl
rm -f debian/subplot/.crates.toml
rm -f debian/subplot/.crates2.json
dh_lintian
make[1]: Leaving directory '/ci/src'
   dh_install
   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 'subplot-dbgsym' in '../subplot-dbgsym_0.14.0.ci20260205T163044-1_amd64.deb'.
dpkg-deb: building package 'subplot' in '../subplot_0.14.0.ci20260205T163044-1_amd64.deb'.
dpkg-genchanges: info: including full source code in upload
dpkg-buildpackage: info: full upload (original source is included)
total 2300
drwxr-xr-x  3 root root    4096 Feb  5 16:30 artifacts
drwxr-xr-x  7 root root    4096 Jan 15 06:26 cache
drwxr-xr-x  3 root root    4096 Feb  5 16:30 deps
drwxr-xr-x 15 root root    4096 Feb  5 16:30 src
-rw-r--r--  1 root root  240860 Feb  5 16:31 subplot-dbgsym_0.14.0.ci20260205T163044-1_amd64.deb
-rw-r--r--  1 root root    2432 Feb  5 16:30 subplot_0.14.0.ci20260205T163044-1.debian.tar.xz
-rw-r--r--  1 root root    1018 Feb  5 16:30 subplot_0.14.0.ci20260205T163044-1.dsc
-rw-r--r--  1 root root   10199 Feb  5 16:31 subplot_0.14.0.ci20260205T163044-1_amd64.buildinfo
-rw-r--r--  1 root root    2392 Feb  5 16:31 subplot_0.14.0.ci20260205T163044-1_amd64.changes
-rw-r--r--  1 root root 1916936 Feb  5 16:31 subplot_0.14.0.ci20260205T163044-1_amd64.deb
-rw-r--r--  1 root root  148920 Feb  5 16:30 subplot_0.14.0.ci20260205T163044.orig.tar.xz
drwxr-xr-x root/root         0 2026-02-05 16:30 ./
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/lib/
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/lib/debug/
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/lib/debug/.build-id/
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/lib/debug/.build-id/99/
-rw-r--r-- root/root   1458352 2026-02-05 16:30 ./usr/lib/debug/.build-id/99/c9a2a5bd5968a5cca599336f5fc60eef94f4fb.debug
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/share/
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/share/doc/
lrwxrwxrwx root/root         0 2026-02-05 16:30 ./usr/share/doc/subplot-dbgsym -> subplot
drwxr-xr-x root/root         0 2026-02-05 16:30 ./
drwxr-xr-x root/root         0 2026-02-05 16:30 ./bin/
-rwxr-xr-x root/root   7184184 2026-02-05 16:30 ./bin/subplot
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/share/
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/share/doc/
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/share/doc/subplot/
-rw-r--r-- root/root      3623 2026-02-05 16:24 ./usr/share/doc/subplot/README.md
-rw-r--r-- root/root       673 2026-02-05 16:30 ./usr/share/doc/subplot/changelog.Debian.gz
-rw-r--r-- root/root      1394 2026-02-05 16:24 ./usr/share/doc/subplot/copyright
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/share/lintian/
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/share/lintian/overrides/
-rw-r--r-- root/root       103 2026-02-05 16:24 ./usr/share/lintian/overrides/subplot
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/share/subplot/
drwxr-xr-x root/root         0 2026-02-05 16:24 ./usr/share/subplot/common/
drwxr-xr-x root/root         0 2026-02-05 16:24 ./usr/share/subplot/common/lib/
-rw-r--r-- root/root     10532 2026-02-05 16:24 ./usr/share/subplot/common/lib/files.yaml
-rw-r--r-- root/root      8784 2026-02-05 16:24 ./usr/share/subplot/common/lib/runcmd.yaml
drwxr-xr-x root/root         0 2026-02-05 16:24 ./usr/share/subplot/python/
drwxr-xr-x root/root         0 2026-02-05 16:24 ./usr/share/subplot/python/lib/
-rw-r--r-- root/root     10415 2026-02-05 16:24 ./usr/share/subplot/python/lib/daemon.py
-rw-r--r-- root/root      4434 2026-02-05 16:24 ./usr/share/subplot/python/lib/daemon.yaml
-rw-r--r-- root/root      8048 2026-02-05 16:24 ./usr/share/subplot/python/lib/files.py
-rw-r--r-- root/root      8657 2026-02-05 16:24 ./usr/share/subplot/python/lib/runcmd.py
drwxr-xr-x root/root         0 2026-02-05 16:30 ./usr/share/subplot/python/template/
-rw-r--r-- root/root      1275 2026-02-05 16:24 ./usr/share/subplot/python/template/asserts.py
-rw-r--r-- root/root      2457 2026-02-05 16:24 ./usr/share/subplot/python/template/context.py
-rw-r--r-- root/root      4611 2026-02-05 16:24 ./usr/share/subplot/python/template/context_tests.py
-rw-r--r-- root/root       201 2026-02-05 16:24 ./usr/share/subplot/python/template/encoding.py
-rw-r--r-- root/root       474 2026-02-05 16:24 ./usr/share/subplot/python/template/encoding_tests.py
-rw-r--r-- root/root       412 2026-02-05 16:24 ./usr/share/subplot/python/template/files.py
-rw-r--r-- root/root      4821 2026-02-05 16:24 ./usr/share/subplot/python/template/main.py
-rw-r--r-- root/root      2785 2026-02-05 16:24 ./usr/share/subplot/python/template/scenarios.py
-rw-r--r-- root/root      2565 2026-02-05 16:24 ./usr/share/subplot/python/template/template.py.tera
-rw-r--r-- root/root       137 2026-02-05 16:24 ./usr/share/subplot/python/template/template.yaml
drwxr-xr-x root/root         0 2026-02-05 16:24 ./usr/share/subplot/rust/
drwxr-xr-x root/root         0 2026-02-05 16:24 ./usr/share/subplot/rust/lib/
-rw-r--r-- root/root       788 2026-02-05 16:24 ./usr/share/subplot/rust/lib/datadir.yaml
drwxr-xr-x root/root         0 2026-02-05 16:24 ./usr/share/subplot/rust/template/
-rw-r--r-- root/root      1449 2026-02-05 16:24 ./usr/share/subplot/rust/template/macros.rs.tera
-rw-r--r-- root/root      1213 2026-02-05 16:24 ./usr/share/subplot/rust/template/template.rs.tera
-rw-r--r-- root/root        71 2026-02-05 16:24 ./usr/share/subplot/rust/template/template.yaml
-rw-r--r-- root/root      2103 2026-02-05 16:24 ./usr/share/subplot/subplot.css
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=subplot
++ dpkg-parsechangelog -SVersion
+ version=0.14.0.ci20260205T163044-1
++ echo 0.14.0.ci20260205T163044-1
++ sed 's/-[^-]*$//'
+ uv=0.14.0.ci20260205T163044
++ dpkg --print-architecture
+ arch=amd64
+ orig=../subplot_0.14.0.ci20260205T163044.orig.tar.xz
+ deb=../subplot_0.14.0.ci20260205T163044-1_amd64.deb
+ changes=../subplot_0.14.0.ci20260205T163044-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 subplot-bin v0.14.0 (/ci/src/bin)
   Compiling subplot v0.14.0 (/ci/src)
   Compiling subplot-bin v0.14.0 (/ci/src/bin)
    Finished `release` profile [optimized] target(s) in 21.94s
  Installing /ci/src/debian/subplot/bin/subplot
   Installed package `subplot-bin v0.14.0 (/ci/src/bin)` (executable `subplot`)
warning: be sure to add `/ci/src/debian/subplot/bin` to your PATH to be able to run the installed binaries
dh_installchangelogs: warning: Could not parse timestamp '15 April 2022 15:00:00 +0100'. debian/changelog will not be trimmed.
dh_installchangelogs: warning: debian/changelog could not be trimmed. The full changelog will be installed.
dpkg-shlibdeps: warning: couldn't parse dynamic symbol definition: no symbols
dpkg-gencontrol: warning: Depends field of package subplot: substitution variable ${shlibs:Depends} used, but is not defined
dpkg-gencontrol: warning: Built-Using field of package subplot: substitution variable ${cargo:Built-Using} used, but is not defined
dpkg-gencontrol: warning: Depends field of package subplot: substitution variable ${shlibs:Depends} used, but is not defined
dpkg-gencontrol: warning: Built-Using field of package subplot: substitution variable ${cargo:Built-Using} used, but is not defined
 dpkg-genbuildinfo -O../subplot_0.14.0.ci20260205T163044-1_amd64.buildinfo
 dpkg-genchanges -O../subplot_0.14.0.ci20260205T163044-1_amd64.changes
 dpkg-source --after-build .
+ ls -l ..
+ for x in ../*.deb
+ dpkg -c ../subplot-dbgsym_0.14.0.ci20260205T163044-1_amd64.deb
+ for x in ../*.deb
+ dpkg -c ../subplot_0.14.0.ci20260205T163044-1_amd64.deb
+ mv ../subplot-dbgsym_0.14.0.ci20260205T163044-1_amd64.deb ../subplot_0.14.0.ci20260205T163044-1.debian.tar.xz ../subplot_0.14.0.ci20260205T163044-1.dsc ../subplot_0.14.0.ci20260205T163044-1_amd64.buildinfo ../subplot_0.14.0.ci20260205T163044-1_amd64.changes ../subplot_0.14.0.ci20260205T163044-1_amd64.deb ../subplot_0.14.0.ci20260205T163044.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:31:15Z
After: 383.36 seconds
End action deb
At: 2026-02-05 16:31:15Z
After: 383.36 seconds
Shell(
    Shell {
        shell: "find /workspace/artifacts\n",
    },
)
Start action shell
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
  • bash
  • -c
  • set -xeuo pipefail find /workspace/artifacts
exit: 0
Stdout:
/workspace/artifacts
/workspace/artifacts/subplot_0.14.0.ci20260205T163044-1_amd64.buildinfo
/workspace/artifacts/subplot.html
/workspace/artifacts/subplot-dbgsym_0.14.0.ci20260205T163044-1_amd64.deb
/workspace/artifacts/runcmd.html
/workspace/artifacts/muck.html
/workspace/artifacts/files.html
/workspace/artifacts/subplot_0.14.0.ci20260205T163044-1_amd64.changes
/workspace/artifacts/seq.html
/workspace/artifacts/libdocs
/workspace/artifacts/libdocs/runcmd.html
/workspace/artifacts/libdocs/files.html
/workspace/artifacts/libdocs/daemon.html
/workspace/artifacts/subplot_0.14.0.ci20260205T163044.orig.tar.xz
/workspace/artifacts/subplot_0.14.0.ci20260205T163044-1.debian.tar.xz
/workspace/artifacts/user-guide.html
/workspace/artifacts/subplot_0.14.0.ci20260205T163044-1.dsc
/workspace/artifacts/subplot_0.14.0.ci20260205T163044-1_amd64.deb
/workspace/artifacts/website.html
Stderr:
+ find /workspace/artifacts
OK: bash -c set -xeuo pipefail find /workspace/artifacts
At: 2026-02-05 16:31:15Z
After: 383.39 seconds
End action shell
At: 2026-02-05 16:31:15Z
After: 383.39 seconds
TarCreate(
    TarCreate {
        archive: "/dev/vde",
        directory: "/ci/cache",
    },
)
Start action tar_create
At: 2026-02-05 16:32:08Z
After: 436.55 seconds
End action tar_create
At: 2026-02-05 16:32:08Z
After: 436.55 seconds
TarCreate(
    TarCreate {
        archive: "/dev/vdd",
        directory: "/ci/artifacts",
    },
)
Start action tar_create
At: 2026-02-05 16:32:08Z
After: 436.57 seconds
End action tar_create
At: 2026-02-05 16:32:08Z
After: 436.57 seconds
Hopefully all is good.
Plan succeeded
At: 2026-02-05 16:32:08Z
After: 436.58 seconds
Everything is fine.
Executor ends, success
At: 2026-02-05 16:32:42Z
After: 470.21 seconds
    exit: 0
    QEMU OK
    At: 2026-02-05 16:32:39Z
    After: 467.27 seconds
    Hopefully all is good.
    Plan succeeded
    At: 2026-02-05 16:32:42Z
    After: 470.21 seconds
    Everything is fine.
    Ambient ends, success

    Trigger message

    {
      "request": "trigger",
      "version": 1,
      "event_type": "push",
      "repository": {
        "id": "rad:zjxyd2A1A7FnxtC69qDfoAajfTHo",
        "name": "subplot",
        "description": "Capture and communicate acceptance criteria and their verification",
        "private": false,
        "default_branch": "main",
        "delegates": [
          "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "did:key:z6MkkMqyfkMdn8p1LF7LbjjEPJmZGksr3cdpsvFdxKWUVfNZ"
        ]
      },
      "pusher": {
        "id": "did:key:z6Mki2ago1X2A5UWgKpoSxyCRLLhyZMwpam4T3EKvRmFTyuy",
        "alias": "callisto.liw.fi"
      },
      "before": "4e5a942cf9dc19f285c606dc6dd7f28d3a97f9ab",
      "after": "4e5a942cf9dc19f285c606dc6dd7f28d3a97f9ab",
      "branch": "main",
      "commits": [
        "4e5a942cf9dc19f285c606dc6dd7f28d3a97f9ab",
        "f306163d887c0b4fb24c94ac56fb5d34df1d45ea"
      ]
    }

    Ambient stdout

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

    Ambient stderr

    <empty log>