[INFO] cloning repository https://github.com/nakajima/psht [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/nakajima/psht" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnakajima%2Fpsht", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnakajima%2Fpsht'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 0ab17679c4951a394fe23e04a38611130cd3c151 [INFO] testing nakajima/psht against master#d933cf483edf1605142ac6899ff32536c0ad8b22 for pr-150933 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnakajima%2Fpsht" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/nakajima/psht [INFO] finished tweaking git repo https://github.com/nakajima/psht [INFO] tweaked toml for git repo https://github.com/nakajima/psht written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/nakajima/psht on toolchain d933cf483edf1605142ac6899ff32536c0ad8b22 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/nakajima/psht already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded exec v0.3.1 [INFO] [stderr] Downloaded shell-words v1.1.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 0eba1850f4ef02de2b8af428247b9d6b65cdc50d51cdb5ef501ccd695565aaa1 [INFO] running `Command { std: "docker" "start" "-a" "0eba1850f4ef02de2b8af428247b9d6b65cdc50d51cdb5ef501ccd695565aaa1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "0eba1850f4ef02de2b8af428247b9d6b65cdc50d51cdb5ef501ccd695565aaa1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0eba1850f4ef02de2b8af428247b9d6b65cdc50d51cdb5ef501ccd695565aaa1", kill_on_drop: false }` [INFO] [stdout] 0eba1850f4ef02de2b8af428247b9d6b65cdc50d51cdb5ef501ccd695565aaa1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 7697bbd322e318f365130000e3df218027f1096a23b604106421c0622ce14779 [INFO] running `Command { std: "docker" "start" "-a" "7697bbd322e318f365130000e3df218027f1096a23b604106421c0622ce14779", kill_on_drop: false }` [INFO] [stderr] Compiling cc v1.2.55 [INFO] [stderr] Compiling zmij v1.0.19 [INFO] [stderr] Compiling clap_lex v0.7.7 [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling errno v0.2.8 [INFO] [stderr] Compiling shell-words v1.1.1 [INFO] [stderr] Compiling exec v0.3.1 [INFO] [stderr] Compiling clap_builder v4.5.57 [INFO] [stderr] Compiling hashbrown v0.14.5 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling hashlink v0.9.1 [INFO] [stderr] Compiling libsqlite3-sys v0.28.0 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Compiling clap v4.5.57 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling rusqlite v0.31.0 [INFO] [stderr] Compiling psht v0.2.55 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused variable: `url` [INFO] [stdout] --> src/bin/psht.rs:985:26 [INFO] [stdout] | [INFO] [stdout] 985 | (Some(app), Some(url)) if is_https_url(&app) => Err( [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_url` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 28.57s [INFO] running `Command { std: "docker" "inspect" "7697bbd322e318f365130000e3df218027f1096a23b604106421c0622ce14779", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "7697bbd322e318f365130000e3df218027f1096a23b604106421c0622ce14779", kill_on_drop: false }` [INFO] [stdout] 7697bbd322e318f365130000e3df218027f1096a23b604106421c0622ce14779 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] ad26216543365e02fc7f411173adcf256539361830f21331dad16d6d6a4cfb04 [INFO] running `Command { std: "docker" "start" "-a" "ad26216543365e02fc7f411173adcf256539361830f21331dad16d6d6a4cfb04", kill_on_drop: false }` [INFO] [stderr] Compiling once_cell v1.21.3 [INFO] [stderr] Compiling bitflags v2.10.0 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Compiling linux-raw-sys v0.11.0 [INFO] [stderr] Compiling fastrand v2.3.0 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling hashbrown v0.14.5 [INFO] [stderr] Compiling hashlink v0.9.1 [INFO] [stderr] Compiling rusqlite v0.31.0 [INFO] [stderr] Compiling tempfile v3.24.0 [INFO] [stderr] Compiling psht v0.2.55 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused variable: `url` [INFO] [stdout] --> src/bin/psht.rs:985:26 [INFO] [stdout] | [INFO] [stdout] 985 | (Some(app), Some(url)) if is_https_url(&app) => Err( [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_url` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `url` [INFO] [stdout] --> src/bin/psht.rs:985:26 [INFO] [stdout] | [INFO] [stdout] 985 | (Some(app), Some(url)) if is_https_url(&app) => Err( [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_url` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 11.93s [INFO] running `Command { std: "docker" "inspect" "ad26216543365e02fc7f411173adcf256539361830f21331dad16d6d6a4cfb04", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "ad26216543365e02fc7f411173adcf256539361830f21331dad16d6d6a4cfb04", kill_on_drop: false }` [INFO] [stdout] ad26216543365e02fc7f411173adcf256539361830f21331dad16d6d6a4cfb04 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 825d70f594551a209b7e9e2c1adb97b7835ca139318ddfce14db0767986ce87a [INFO] running `Command { std: "docker" "start" "-a" "825d70f594551a209b7e9e2c1adb97b7835ca139318ddfce14db0767986ce87a", kill_on_drop: false }` [INFO] [stderr] warning: unused variable: `url` [INFO] [stderr] --> src/bin/psht.rs:985:26 [INFO] [stderr] | [INFO] [stderr] 985 | (Some(app), Some(url)) if is_https_url(&app) => Err( [INFO] [stderr] | ^^^ help: if this is intentional, prefix it with an underscore: `_url` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: `psht` (bin "psht") generated 1 warning (run `cargo fix --bin "psht" -p psht` to apply 1 suggestion) [INFO] [stderr] warning: `psht` (bin "psht" test) generated 1 warning (1 duplicate) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.09s [INFO] [stderr] Running unittests src/bin/psht.rs (/opt/rustwide/target/debug/deps/psht-98d46e88ff7cf332) [INFO] [stdout] [INFO] [stdout] running 72 tests [INFO] [stdout] test app_name::tests::validate_allows_safe_names ... ok [INFO] [stdout] test app_name::tests::validate_rejects_disallowed_prefix_or_segments ... ok [INFO] [stdout] test app_name::tests::validate_rejects_invalid_characters ... ok [INFO] [stdout] test tests::app_name_explicit ... ok [INFO] [stdout] test tests::app_name_from_cwd ... ok [INFO] [stdout] test tests::config_path_at_uses_home ... ok [INFO] [stdout] test tests::deploy_force_short_flag_parse ... ok [INFO] [stdout] test tests::deploy_force_flag_parse ... ok [INFO] [stdout] test tests::deploy_ssh_args_with_force ... ok [INFO] [stdout] test tests::deploy_release_flags_parse ... ok [INFO] [stdout] test tests::deploy_release_positional_https_url_conflicts_with_url_flag ... ok [INFO] [stdout] test tests::deploy_ssh_args_without_force ... ok [INFO] [stdout] test app_name::tests::validate_rejects_empty_name ... ok [INFO] [stdout] test tests::deploy_release_positional_https_url_maps_to_url ... ok [INFO] [stdout] test tests::derive_app_name_from_url_sanitizes ... ok [INFO] [stdout] test tests::derive_app_name_from_url_strips_version_and_go_style_target ... ok [INFO] [stdout] test tests::detect_release_target_supported_in_tests ... ok [INFO] [stdout] test tests::detect_archive_format_accepts_tar_and_zip ... ok [INFO] [stdout] test tests::ensure_no_release_conflicts_detects_non_url_mismatch ... ok [INFO] [stdout] test tests::derive_app_name_from_url_strips_version_and_target_triple ... ok [INFO] [stdout] test tests::detect_archive_format_rejects_other_extensions ... ok [INFO] [stdout] test tests::is_same_project_release_url_rejects_repo_change ... ok [INFO] [stdout] test tests::env_command_parses_assignments ... ok [INFO] [stdout] test tests::derive_app_name_from_url_strips_archive_suffix ... ok [INFO] [stdout] test tests::env_unset_command_parses_names ... ok [INFO] [stdout] test tests::has_release_settings_ignores_hook_only_config ... ok [INFO] [stdout] test tests::is_same_project_release_url_rejects_non_release_download_shape ... ok [INFO] [stdout] test tests::is_same_project_release_url_accepts_version_bump ... ok [INFO] [stdout] test tests::is_same_project_release_url_rejects_asset_name_change ... ok [INFO] [stdout] test tests::parse_push_updated_reports_changed_refs ... ok [INFO] [stdout] test tests::parse_update_manifest_stdout_errors_without_manifest ... ok [INFO] [stdout] test tests::is_cli_probe_command_parses ... ok [INFO] [stdout] test tests::project_config_path_uses_cwd ... ok [INFO] [stdout] test tests::looks_like_path_distinguishes_paths_from_app_names ... ok [INFO] [stdout] test tests::parse_push_updated_ignores_non_ref_lines ... ok [INFO] [stdout] test tests::parse_push_updated_reports_up_to_date ... ok [INFO] [stdout] test tests::deploy_with_explicit_app_rejects_psht_toml_mismatch ... ok [INFO] [stdout] test tests::parse_update_manifest_stdout_reads_embedded_json_line ... ok [INFO] [stdout] test tests::deploy_with_path_errors_when_binary_missing ... ok [INFO] [stdout] test tests::load_config_missing_file_returns_default ... ok [INFO] [stdout] test tests::parse_update_manifest_stdout_reads_legacy_script_assignments ... ok [INFO] [stdout] test tests::resolve_host_errors_when_no_host ... ok [INFO] [stdout] test tests::load_project_config_missing_returns_none ... ok [INFO] [stdout] test tests::load_config_parses_host ... ok [INFO] [stdout] test tests::resolve_command_app_errors_without_explicit_or_project_app ... ok [INFO] [stdout] test tests::resolve_binary_from_archive_falls_back_to_single_file ... ok [INFO] [stdout] test tests::resolve_binary_from_archive_errors_on_many_executables ... ok [INFO] [stdout] test tests::resolve_host_falls_back_to_default ... ok [INFO] [stdout] test tests::resolve_host_from_projects ... ok [INFO] [stdout] test tests::resolve_binary_from_archive_prefers_single_executable ... ok [INFO] [stdout] test tests::resolve_command_app_uses_project_config_when_present ... ok [INFO] [stdout] test tests::load_project_config_parses_flat_keys ... ok [INFO] [stdout] test tests::safe_join_relative_rejects_parent ... ok [INFO] [stdout] test tests::resolve_binary_from_archive_uses_bin_override ... ok [INFO] [stdout] test tests::stage_binary_dir_with_start_rejects_empty ... ok [INFO] [stdout] test tests::stage_binary_dir_writes_start_command_marker ... ok [INFO] [stdout] test tests::tailscale_down_command_parses ... ok [INFO] [stdout] test tests::tailscale_status_command_parses ... ok [INFO] [stdout] test tests::tailscale_status_with_explicit_app_parses ... ok [INFO] [stdout] test tests::tailscale_up_command_parses ... ok [INFO] [stdout] test tests::stage_binary_dir_with_start_writes_custom_marker ... ok [INFO] [stdout] test tests::save_config_creates_parent_dirs ... ok [INFO] [stdout] test tests::save_project_config_round_trip ... ok [INFO] [stdout] test tests::save_config_preserves_existing_host ... ok [INFO] [stdout] test tests::setup_skips_existing_project ... ok [INFO] [stdout] test tests::setup_writes_psht_toml_template ... ok [INFO] [stdout] test tests::setup_writes_project_to_config ... ok [INFO] [stdout] test tests::is_git_worktree_detects_repo_and_non_repo ... ok [INFO] [stdout] test tests::setup_git_also_writes_project_config ... ok [INFO] [stdout] test tests::setup_adds_git_remote ... ok [INFO] [stdout] test tests::ensure_psht_git_remote_adds_and_updates_remote ... ok [INFO] [stdout] test tests::setup_is_idempotent_for_git ... ok [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/psht_server-f6f5990173d765ef) [INFO] [stdout] test result: ok. 72 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 261 tests [INFO] [stdout] test app_name::tests::validate_allows_safe_names ... ok [INFO] [stdout] test app_name::tests::validate_rejects_disallowed_prefix_or_segments ... ok [INFO] [stdout] test app_name::tests::validate_rejects_empty_name ... ok [INFO] [stdout] test caddy::tests::config_errors_when_api_set_but_domain_missing ... ok [INFO] [stdout] test app_name::tests::validate_rejects_invalid_characters ... ok [INFO] [stdout] test caddy::tests::config_skips_when_no_api_url ... ok [INFO] [stdout] test caddy::tests::config_returns_both_when_set ... ok [INFO] [stdout] test caddy::tests::remove_config_uses_api_without_domain ... ok [INFO] [stdout] test caddy::tests::route_hostname_format ... ok [INFO] [stdout] test caddy::tests::route_id_format ... ok [INFO] [stdout] test caddy::tests::route_json_dials_correct_upstream ... ok [INFO] [stdout] test caddy::tests::route_json_has_correct_id ... ok [INFO] [stdout] test caddy::tests::route_json_matches_host ... ok [INFO] [stdout] test caddy::tests::remove_config_none_when_api_missing ... ok [INFO] [stdout] test caddy::tests::route_json_uses_app_not_container_name ... ok [INFO] [stdout] test caddy::tests::route_json_has_reverse_proxy_handler ... ok [INFO] [stdout] test caddy::tests::routes_url_targets_server_routes_collection ... ok [INFO] [stdout] test caddy::tests::upsert_route_list_prepends_and_replaces_id ... ok [INFO] [stdout] test caddy::tests::validate_route_app_label_accepts_dns_label ... ok [INFO] [stdout] test caddy::tests::validate_route_app_label_rejects_underscore_and_dot ... ok [INFO] [stdout] test commands::tests::acquire_exact_tailscale_hostname_falls_back_to_auth_key_when_state_fails ... ok [INFO] [stdout] test commands::tests::acquire_exact_tailscale_hostname_retries_until_exact ... ok [INFO] [stdout] test commands::tests::allocate_port_different_apps_likely_differ ... ok [INFO] [stdout] test commands::tests::allocate_port_is_deterministic ... ok [INFO] [stdout] test commands::tests::app_process_probe_checks_pid_liveness ... ok [INFO] [stdout] test commands::tests::app_ref_from_instance_name_handles_prefixed_and_unprefixed_values ... ok [INFO] [stdout] test commands::tests::app_storage_volume_name_formats_correctly ... ok [INFO] [stdout] test commands::tests::app_tailscale_volume_name_formats_correctly ... ok [INFO] [stdout] test commands::tests::app_workdir_command_wraps_nonempty_command ... ok [INFO] [stdout] test commands::tests::apt_install_command_builds_noninteractive_install ... ok [INFO] [stdout] test commands::tests::apt_install_command_skips_empty_packages ... ok [INFO] [stdout] test commands::tests::allocate_port_in_valid_range ... ok [INFO] [stdout] test commands::tests::apt_packages_fingerprint_ignores_blanks_and_duplicates ... ok [INFO] [stdout] test commands::tests::apt_packages_fingerprint_is_order_insensitive ... ok [INFO] [stdout] test commands::tests::apt_packages_fingerprint_none_when_empty ... ok [INFO] [stdout] test commands::tests::canonical_app_name_filters_transient_containers ... ok [INFO] [stdout] test commands::tests::app_workdir_command_skips_blank_command ... ok [INFO] [stdout] test commands::tests::builds_dir_under_home ... ok [INFO] [stdout] test commands::tests::busy_op_policy_from_raw_parses_supported_values ... ok [INFO] [stdout] test commands::tests::command_entrypoints_reject_invalid_app_name ... ok [INFO] [stdout] test commands::tests::deploy_app_family_is_derived_from_transient_refs ... ok [INFO] [stdout] test commands::tests::deploy_interrupted_error_prefix_is_detected ... ok [INFO] [stdout] test commands::tests::default_forge_url_points_to_github ... ok [INFO] [stdout] test commands::tests::deploy_lock_is_exclusive_until_guard_drops ... ok [INFO] [stdout] test commands::tests::env_vars_round_trip ... ok [INFO] [stdout] test commands::tests::git_target_already_succeeded_checks_success_and_sha ... ok [INFO] [stdout] test commands::tests::binary_hash_cache_round_trip ... ok [INFO] [stdout] test commands::tests::cleanup_lock_is_exclusive_until_guard_drops ... ok [INFO] [stdout] test commands::tests::binary_payload_hash_none_without_marker ... ok [INFO] [stdout] test commands::tests::has_deploy_suffix_requires_numeric_suffix ... ok [INFO] [stdout] test commands::tests::health_delegation_triggers_only_for_root_without_recursion ... ok [INFO] [stdout] test commands::tests::home_dir_under_home ... ok [INFO] [stdout] test commands::tests::binary_payload_hash_changes_with_binary_content ... ok [INFO] [stdout] test commands::tests::ensure_line_in_file_appends_once ... ok [INFO] [stdout] test commands::tests::instance_membership_detects_full_app_family ... ok [INFO] [stdout] test commands::tests::parse_deploy_lock_metadata_ignores_invalid_values ... ok [INFO] [stdout] test commands::tests::parse_deploy_lock_metadata_parses_fields ... ok [INFO] [stdout] test commands::tests::parse_env_assignment_accepts_empty_value ... ok [INFO] [stdout] test commands::tests::parse_env_assignment_rejects_invalid_name ... ok [INFO] [stdout] test commands::tests::parse_git_checkout_target_rejects_empty_fields ... ok [INFO] [stdout] test commands::tests::parse_git_checkout_target_requires_ref_and_sha_pair ... ok [INFO] [stdout] test commands::tests::parse_latest_release_version_url_parses_tag_url ... ok [INFO] [stdout] test commands::tests::parse_latest_release_version_url_rejects_latest_path ... ok [INFO] [stdout] test commands::tests::parse_tailscale_dns_name_trims_trailing_dot ... ok [INFO] [stdout] test commands::tests::parse_version_codename_from_os_release ... ok [INFO] [stdout] test commands::tests::parse_version_codename_handles_quotes ... ok [INFO] [stdout] test commands::tests::parse_version_components_handles_prefix_and_suffixes ... ok [INFO] [stdout] test commands::tests::parse_version_components_rejects_invalid ... ok [INFO] [stdout] test commands::tests::increment_build_number_is_monotonic ... ok [INFO] [stdout] test commands::tests::pending_force_request_is_ours_supports_legacy_force_without_request_id ... ok [INFO] [stdout] test commands::tests::install_binary_atomically_creates_destination ... ok [INFO] [stdout] test commands::tests::init_stacks_creates_dir_if_missing ... ok [INFO] [stdout] test commands::tests::path_is_world_executable_checks_parent_directories ... ok [INFO] [stdout] test commands::tests::binary_payload_hash_changes_with_start_command ... ok [INFO] [stdout] test commands::tests::profile_has_nic_detects_nic_device ... ok [INFO] [stdout] test commands::tests::init_stacks_writes_all_scripts ... ok [INFO] [stdout] test commands::tests::install_binary_atomically_overwrites_existing_destination ... ok [INFO] [stdout] test commands::tests::init_stacks_overwrites_existing ... ok [INFO] [stdout] test commands::tests::binary_version_parses_cli_output ... ok [INFO] [stdout] test commands::tests::init_stacks_content_matches_embedded ... ok [INFO] [stdout] test commands::tests::profile_has_nic_returns_false_without_nic ... ok [INFO] [stdout] test commands::tests::profile_has_root_disk_detects_non_root_named_device ... ok [INFO] [stdout] test commands::tests::profile_has_root_disk_detects_root_device ... ok [INFO] [stdout] test commands::tests::profile_has_root_disk_returns_false_without_root_path_disk ... ok [INFO] [stdout] test commands::tests::read_build_number_defaults_to_zero ... ok [INFO] [stdout] test commands::tests::read_build_number_invalid_defaults_to_zero ... ok [INFO] [stdout] test commands::tests::repos_dir_under_home ... ok [INFO] [stdout] test commands::tests::required_env_check_reports_missing ... ok [INFO] [stdout] test commands::tests::refresh_deploy_lock_heartbeat_updates_updated_timestamp ... ok [INFO] [stdout] test commands::tests::resolve_stack_falls_back_to_builtin ... ok [INFO] [stdout] test commands::tests::resolve_stack_saves_custom_to_stacks_dir ... ok [INFO] [stdout] test commands::tests::resolve_stack_uses_custom_when_present ... ok [INFO] [stdout] test commands::tests::run_hook_skips_missing_or_blank_commands ... ok [INFO] [stdout] test commands::tests::setup_hash_includes_apt_fingerprint_when_present ... ok [INFO] [stdout] test commands::tests::stack_hash_errors_on_missing_file ... ok [INFO] [stdout] test commands::tests::stacks_dir_under_home ... ok [INFO] [stdout] test commands::tests::setup_script_bootstraps_cli_then_runs_setup ... ok [INFO] [stdout] test commands::tests::start_cmd_backgrounds_with_pid_file ... ok [INFO] [stdout] test commands::tests::shell_quote_escapes_single_quotes ... ok [INFO] [stdout] test commands::tests::stack_hash_is_hex_string ... ok [INFO] [stdout] test commands::tests::stop_app_process_cmd_targets_process_group_and_waits ... ok [INFO] [stdout] test commands::tests::stack_hash_is_deterministic ... ok [INFO] [stdout] test commands::tests::stop_port_listeners_cmd_uses_ss_and_process_group_signals ... ok [INFO] [stdout] test commands::tests::should_process_pending_request_honors_force_for_same_sha ... ok [INFO] [stdout] test commands::tests::stack_hash_changes_with_content ... ok [INFO] [stdout] test commands::tests::stopped_container_is_unhealthy ... ok [INFO] [stdout] test commands::tests::tailscale_hostname_is_exact_matches_label_only ... ok [INFO] [stdout] test commands::tests::git_deploy_state_round_trip ... ok [INFO] [stdout] test commands::tests::tailscale_self_status_summary_includes_repair_hint_when_unhealthy ... ok [INFO] [stdout] test commands::tests::tailscale_self_status_summary_outputs_self_only_fields ... ok [INFO] [stdout] test commands::tests::app_runtime_state_round_trip ... ok [INFO] [stdout] test commands::tests::transient_deploy_app_for_detected ... ok [INFO] [stdout] test commands::tests::cleanup_job_state_round_trip ... ok [INFO] [stdout] test commands::tests::transient_deploy_app_names_are_detected ... ok [INFO] [stdout] test commands::tests::update_script_contains_json_manifest_for_rust_native_cli ... ok [INFO] [stdout] test commands::tests::pending_git_request_round_trip_preserves_force_metadata ... ok [INFO] [stdout] test commands::tests::upgrade_check_state_round_trip ... ok [INFO] [stdout] test commands::tests::deploy_interrupt_state_round_trip ... ok [INFO] [stdout] test commands::tests::version_is_newer_compares_numeric_segments ... ok [INFO] [stdout] test commands::tests::write_start_command_cmd_rejects_empty ... ok [INFO] [stdout] test commands::tests::write_oauth_config_writes_expected_contents ... ok [INFO] [stdout] test commands::tests::write_start_command_cmd_targets_metadata_path ... ok [INFO] [stdout] test container::tests::blocking_operations_in_extracts_id_from_url ... ok [INFO] [stdout] test container::tests::container_name_format ... ok [INFO] [stdout] test container::tests::create_from_image_command_builds_correctly ... ok [INFO] [stdout] test container::tests::create_from_setup_image_command_builds_correctly ... ok [INFO] [stdout] test container::tests::exec_rolling_command_builds_correctly ... ok [INFO] [stdout] test container::tests::has_running_operation_in_detects_busy_container ... ok [INFO] [stdout] test container::tests::has_running_operation_in_ignores_non_running_operations ... ok [INFO] [stdout] test container::tests::image_exists_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_command_builds_correct_args ... ok [INFO] [stdout] test container::tests::incus_exec_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_exec_output_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_proxy_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_logs_cat_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_push_file_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_rename_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_start_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_push_code_exec_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_tailscale_seed_remove_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_proxy_remove_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_tailscale_state_add_command_builds_correctly ... ok [INFO] [stdout] test container::tests::instance_name_from_resource_extracts_instances_and_containers ... ok [INFO] [stdout] test container::tests::operation_resource_matches_container_handles_instance_paths ... ok [INFO] [stdout] test container::tests::parse_container_list ... ok [INFO] [stdout] test container::tests::incus_tailscale_state_remove_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_logs_follow_command_builds_correctly ... ok [INFO] [stdout] test container::tests::publish_image_stop_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_tailscale_seed_add_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_storage_remove_command_builds_correctly ... ok [INFO] [stdout] test container::tests::incus_storage_add_command_builds_correctly ... ok [INFO] [stdout] test container::tests::ring_buffer_zero_capacity_noop ... ok [INFO] [stdout] test container::tests::stack_image_alias_format ... ok [INFO] [stdout] test container::tests::setup_image_alias_format ... ok [INFO] [stdout] test container::tests::proxy_port_owners_from_list_json_finds_proxy_listeners ... ok [INFO] [stdout] test container::tests::truncate_line_long_truncated ... ok [INFO] [stdout] test container::tests::publish_image_publish_command_builds_correctly ... ok [INFO] [stdout] test container::tests::publish_image_start_command_builds_correctly ... ok [INFO] [stdout] test container::tests::ring_buffer_fills_up ... ok [INFO] [stdout] test container::tests::ring_buffer_rotates_when_full ... ok [INFO] [stdout] test container::tests::truncate_line_short_unchanged ... ok [INFO] [stdout] test detect::tests::detect_binary_app_rejects_empty_start_command_file ... ok [INFO] [stdout] test detect::tests::bun_installs_with_package_json ... ok [INFO] [stdout] test detect::tests::detect_go_app ... ok [INFO] [stdout] test detect::tests::bun_skips_install_without_package_json ... ok [INFO] [stdout] test detect::tests::detect_binary_app_from_start_command_file ... ok [INFO] [stdout] test deploy_log::tests::recent_entries_reads_newest_files_and_lines ... ok [INFO] [stdout] test detect::tests::detect_rust_app ... ok [INFO] [stdout] test detect::tests::detect_unknown_app ... ok [INFO] [stdout] test detect::tests::detect_static_site ... ok [INFO] [stdout] test detect::tests::install_command_for_each_type ... ok [INFO] [stdout] test detect::tests::detect_errors_on_invalid_psht_toml ... ok [INFO] [stdout] test detect::tests::node_typescript_project_prefers_node ... ok [INFO] [stdout] test detect::tests::detect_node_app ... ok [INFO] [stdout] test detect::tests::detect_reads_apt_alias_from_psht_toml ... ok [INFO] [stdout] test detect::tests::procfile_overrides_start_command ... ok [INFO] [stdout] test detect::tests::detect_python_app_requirements ... ok [INFO] [stdout] test detect::tests::detect_python_app_pipfile ... ok [INFO] [stdout] test detect::tests::detect_bun_app ... ok [INFO] [stdout] test deploy_log::tests::trim_file_to_limit_keeps_tail ... ok [INFO] [stdout] test detect::tests::psht_toml_start_overrides_procfile ... ok [INFO] [stdout] test deploy_log::tests::prune_old_logs_removes_stale_files ... ok [INFO] [stdout] test detect::tests::psht_toml_empty_start_is_error ... ok [INFO] [stdout] test detect::tests::detect_reads_hooks_from_psht_toml ... ok [INFO] [stdout] test detect::tests::rust_start_errors_for_ambiguous_bins ... ok [INFO] [stdout] test detect::tests::stack_returns_correct_name ... ok [INFO] [stdout] test detect::tests::psht_toml_start_overrides_start_marker ... ok [INFO] [stdout] test detect::tests::rust_start_prefers_default_run ... ok [INFO] [stdout] test detect::tests::rust_start_uses_single_bin_when_package_name_missing ... ok [INFO] [stdout] test commands::tests::pending_git_target_round_trip ... ok [INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name [INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all [INFO] [stderr] hint: of your new repositories, which will suppress this warning, call: [INFO] [stderr] hint: [INFO] [stderr] hint: git config --global init.defaultBranch [INFO] [stderr] hint: [INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and [INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command: [INFO] [stderr] hint: [INFO] [stderr] hint: git branch -m [INFO] [stdout] Initialized empty Git repository in /tmp/.tmp08Omzs/repos/testapp.git/ [INFO] [stdout] test tailscale::tests::oauth_token_request_uses_urlencoding ... ok [INFO] [stdout] test detect::tests::procfile_ignores_non_web_lines ... ok [INFO] [stdout] test git::tests::ensure_repo_rejects_invalid_name ... ok [INFO] [stdout] test tailscale::tests::parse_backend_state_from_status ... ok [INFO] [stdout] test tailscale::tests::parse_backend_state_missing_returns_none ... ok [INFO] [stdout] test tailscale::tests::parse_auth_key_missing_field ... ok [INFO] [stdout] test tailscale::tests::parse_oauth_token_error_response ... ok [INFO] [stdout] test git::tests::ensure_repo_creates_bare_repo ... ok [INFO] [stdout] test tailscale::tests::parse_oauth_token_response ... ok [INFO] [stdout] test tailscale::tests::parse_self_dns_name_missing_self ... ok [INFO] [stdout] test tailscale::tests::parse_self_dns_name_from_status ... ok [INFO] [stdout] test tailscale::tests::parse_self_dns_name_with_suffix ... ok [INFO] [stdout] test tailscale::tests::parse_auth_key_response ... ok [INFO] [stdout] test tailscale::tests::read_credentials_empty_var_errors ... ok [INFO] [stdout] test tailscale::tests::read_credentials_missing_file_errors ... ok [INFO] [stdout] test tailscale::tests::read_credentials_ignores_comments_and_blanks ... ok [INFO] [stdout] test tailscale::tests::read_credentials_missing_var_errors ... ok [INFO] [stdout] test tailscale::tests::serve_http_command_includes_expected_port_and_fallbacks ... ok [INFO] [stdout] test tailscale::tests::read_credentials_parses_file ... ok [INFO] [stdout] test tailscale::tests::tailscale_up_command_uses_requested_machine_name ... ok [INFO] [stdout] test tests::parse_cleanup_previous ... ok [INFO] [stdout] test tests::parse_deploy ... ok [INFO] [stdout] test tests::parse_bootstrap ... ok [INFO] [stdout] test tailscale::tests::parse_oauth_token_invalid_json ... ok [INFO] [stdout] test tests::parse_deploy_with_force ... ok [INFO] [stdout] test tests::parse_deploy_with_ref_and_sha ... ok [INFO] [stdout] test tests::parse_doctor ... ok [INFO] [stdout] test tests::parse_deploy_with_short_force ... ok [INFO] [stdout] test tests::parse_destroy ... ok [INFO] [stdout] test tests::parse_env ... ok [INFO] [stdout] test tests::parse_env_unset ... ok [INFO] [stdout] test tests::parse_git_receive_pack ... ok [INFO] [stdout] test tests::parse_git_upload_pack ... ok [INFO] [stdout] test tests::parse_health ... ok [INFO] [stdout] test tests::parse_init_stacks ... ok [INFO] [stdout] test tests::parse_logs_follow ... ok [INFO] [stdout] test tests::parse_logs ... ok [INFO] [stdout] Initialized empty Git repository in /tmp/.tmpfrDEbl/repos/hooktest.git/ [INFO] [stdout] test tests::parse_no_subcommand_is_error ... ok [INFO] [stdout] test tests::parse_print_cli ... ok [INFO] [stdout] test tests::parse_ps ... ok [INFO] [stdout] test tests::parse_push ... ok [INFO] [stdout] test tests::parse_push_force ... ok [INFO] [stdout] test sqlite_store::tests::app_spec_and_status_round_trip ... ok [INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name [INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all [INFO] [stderr] hint: of your new repositories, which will suppress this warning, call: [INFO] [stderr] hint: [INFO] [stderr] hint: git config --global init.defaultBranch [INFO] [stderr] hint: [INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and [INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command: [INFO] [stderr] hint: [INFO] [stderr] hint: git branch -m [INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name [INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all [INFO] [stderr] hint: of your new repositories, which will suppress this warning, call: [INFO] [stderr] hint: [INFO] [stderr] hint: git config --global init.defaultBranch [INFO] [stderr] hint: [INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and [INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command: [INFO] [stderr] hint: [INFO] [stderr] hint: git branch -m [INFO] [stdout] test sqlite_store::tests::reconcile_attempt_append_succeeds ... ok [INFO] [stdout] test sqlite_store::tests::app_lease_blocks_other_owner_until_expired ... ok [INFO] [stdout] test tests::parse_setup ... ok [INFO] [stdout] test tests::parse_push_short_force ... ok [INFO] [stdout] test tests::parse_shell_dash_c_git_receive ... ok [INFO] [stdout] test sqlite_store::tests::runtime_state_round_trip ... ok [INFO] [stdout] test detect::tests::bun_marker_overrides_package_json ... ok [INFO] [stdout] test detect::tests::detect_treats_blank_hooks_as_unset ... ok [INFO] [stdout] test git::tests::install_hook_writes_executable_script ... ok [INFO] [stdout] test sqlite_store::tests::app_lease_acquire_heartbeat_release_round_trip ... ok [INFO] [stdout] test tests::parse_shell_dash_c_update_cli ... ok [INFO] [stdout] test tests::parse_tailscale_up ... ok [INFO] [stdout] test tests::parse_start ... ok [INFO] [stdout] test tests::parse_tailscale_status ... ok [INFO] [stdout] test tests::parse_tailscale_down ... ok [INFO] [stdout] test tests::parse_git_receive_pack_with_git_suffix ... ok [INFO] [stdout] test tests::parse_shell_dash_c_ps ... ok [INFO] [stdout] test tests::parse_upgrade ... ok [INFO] [stdout] test tests::parse_update_cli ... ok [INFO] [stdout] test tests::parse_shell_dash_c_setup ... ok [INFO] [stdout] Initialized empty Git repository in /tmp/.tmpILjtDm/repos/testapp2.git/ [INFO] [stdout] test tests::strip_git_suffix_works ... ok [INFO] [stdout] test git::tests::ensure_repo_is_idempotent ... ok [INFO] [stdout] test tests::parse_stop ... ok [INFO] [stdout] test tests::parse_unknown_command ... ok [INFO] [stdout] test tests::parse_shell_dash_c_with_arg ... ok [INFO] [stdout] test sqlite_store::tests::deploy_related_state_round_trip ... ok [INFO] [stderr] Cloning into '/tmp/.tmpurukCY/build'... [INFO] [stderr] done. [INFO] [stderr] HEAD is now at a97f9ab init [INFO] [stdout] test commands::tests::checkout_code_in_uses_branch_ref_without_bare_head_update ... ok [INFO] [stderr] Cloning into '/tmp/.tmpTRzSQf/build-tag'... [INFO] [stderr] done. [INFO] [stderr] HEAD is now at a97f9ab init [INFO] [stdout] test commands::tests::checkout_code_in_supports_annotated_tag_refs ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 261 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.31s [INFO] [stdout] [INFO] [stderr] Running tests/psht_cli_integration.rs (/opt/rustwide/target/debug/deps/psht_cli_integration-2199abfcf6012438) [INFO] [stdout] [INFO] [stdout] running 8 tests [INFO] [stdout] test deploy_release_from_file_requires_start_key ... ok [INFO] [stdout] test deploy_release_with_positional_https_url_without_psht_toml_in_non_tty_errors_with_guidance ... ok [INFO] [stdout] test deploy_release_url_override_rejected_when_project_changes ... ok [INFO] [stdout] test deploy_release_without_psht_toml_in_non_tty_errors_with_guidance ... ok [INFO] [stdout] test deploy_with_positional_target_rejected_when_release_url_exists_in_psht_toml ... ok [INFO] [stdout] test deploy_release_flags_rejected_when_psht_toml_has_no_release_settings ... ok [INFO] [stdout] test deploy_release_positional_same_project_url_override_persists ... ok [INFO] [stdout] test deploy_release_same_project_url_override_persists_before_deploy ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "825d70f594551a209b7e9e2c1adb97b7835ca139318ddfce14db0767986ce87a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "825d70f594551a209b7e9e2c1adb97b7835ca139318ddfce14db0767986ce87a", kill_on_drop: false }` [INFO] [stdout] 825d70f594551a209b7e9e2c1adb97b7835ca139318ddfce14db0767986ce87a