Steps
successpipeline setup3s
successsetup24s
fetch https://dl-cdn.alpinelinux.org/alpine/v3.22/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.22/community/x86_64/APKINDEX.tar.gz
(1/12) Upgrading musl (1.2.5-r10 -> 1.2.5-r12)
(2/12) Installing binaryen (123-r0)
(3/12) Installing brotli-libs (1.1.0-r2)
(4/12) Installing c-ares (1.34.8-r0)
(5/12) Installing libunistring (1.3-r0)
(6/12) Installing libidn2 (2.3.7-r0)
(7/12) Installing nghttp2-libs (1.69.0-r0)
(8/12) Installing libpsl (0.21.5-r3)
(9/12) Installing libcurl (8.14.1-r3)
(10/12) Installing curl (8.14.1-r3)
(11/12) Installing just (1.40.0-r0)
(12/12) Installing musl-dev (1.2.5-r12)
Executing busybox-1.37.0-r19.trigger
OK: 201 MiB in 40 packages
info: downloading component 'rustfmt'
info: installing component 'rustfmt'
info: downloading component 'clippy'
info: installing component 'clippy'
info: downloading component 'rust-std' for 'wasm32-unknown-unknown'
info: installing component 'rust-std' for 'wasm32-unknown-unknown'
/tmp/trunk.tar.gz: OK
just 1.40.0
1.4.0
trunk 0.21.14
rustfmt 1.8.0-stable (1159e78c47 2025-09-14)
clippy 0.1.90 (1159e78c47 2025-09-14)
successlint10s
cargo fmt --check
cargo clippy --workspace --all-targets -- -D warnings
Updating crates.io index
Downloading crates ...
Downloaded htmlescape v0.3.1
Downloaded xmltree v0.12.0
Downloaded xml v1.4.0
Downloaded sha1 v0.10.7
Downloaded dyn-clone v1.0.20
Downloaded xml-rs v1.0.0
Downloaded headers-core v0.3.0
Downloaded dav-server v0.11.0
Downloaded headers v0.4.1
Checking crypto-common v0.1.7
Checking xml v1.4.0
Checking api-types v0.1.0 (/ci/build/project/api-types)
Checking headers-core v0.3.0
Checking uuid v1.26.0
Checking dyn-clone v1.0.20
Checking htmlescape v0.3.1
Checking digest v0.10.7
Checking sha1 v0.10.7
Checking blake2 v0.10.6
Checking sha2 v0.10.9
Checking headers v0.4.1
Checking argon2 v0.5.3
Checking xml-rs v1.0.0
Checking xmltree v0.12.0
Checking web v0.1.0 (/ci/build/project/web)
Checking dav-server v0.11.0
Checking server v0.1.0 (/ci/build/project/server)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 9.83s
successtest50s
cargo test -p server -p api-types
Compiling syn v3.0.4
Compiling syn v2.0.119
Compiling crypto-common v0.1.7
Compiling xml v1.4.0
Compiling headers-core v0.3.0
Compiling uuid v1.26.0
Compiling dyn-clone v1.0.20
Compiling htmlescape v0.3.1
Compiling digest v0.10.7
Compiling sha1 v0.10.7
Compiling blake2 v0.10.6
Compiling sha2 v0.10.9
Compiling headers v0.4.1
Compiling argon2 v0.5.3
Compiling xml-rs v1.0.0
Compiling xmltree v0.12.0
Compiling zerovec-derive v0.11.6
Compiling displaydoc v0.2.7
Compiling serde_derive v1.0.229
Compiling tokio-macros v2.7.2
Compiling futures-macro v0.3.34
Compiling thiserror-impl v2.0.20
Compiling clap_derive v4.6.4
Compiling synstructure v0.13.2
Compiling tokio v1.53.1
Compiling futures-util v0.3.34
Compiling zerofrom-derive v0.1.7
Compiling yoke-derive v0.8.2
Compiling tracing-attributes v0.1.31
Compiling derive-where v1.6.1
Compiling thiserror v2.0.20
Compiling clap v4.6.6
Compiling zerofrom v0.1.8
Compiling yoke v0.8.3
Compiling tracing v0.1.44
Compiling zerovec v0.11.8
Compiling zerotrie v0.2.5
Compiling axum-core v0.5.6
Compiling tower-http v0.6.11
Compiling tracing-subscriber v0.3.23
Compiling tinystr v0.8.4
Compiling potential_utf v0.1.6
Compiling serde v1.0.229
Compiling icu_collections v2.3.0
Compiling icu_locale_core v2.3.0
Compiling grep-printer v0.3.1
Compiling chrono v0.4.45
Compiling serde_urlencoded v0.7.1
Compiling api-types v0.1.0 (/ci/build/project/api-types)
Compiling icu_provider v2.3.1
Compiling grep v0.4.1
Compiling icu_normalizer v2.3.0
Compiling icu_properties v2.3.0
Compiling hyper v1.11.1
Compiling tokio-util v0.7.19
Compiling tower v0.5.3
Compiling idna_adapter v1.2.2
Compiling idna v1.1.0
Compiling tokio-stream v0.1.19
Compiling multer v3.1.0
Compiling url v2.5.8
Compiling hyper-util v0.1.20
Compiling axum v0.8.9
Compiling dav-server v0.11.0
Compiling server v0.1.0 (/ci/build/project/server)
Finished `test` profile [unoptimized + debuginfo] target(s) in 24.48s
Running unittests src/lib.rs (/ci/cache/target/debug/deps/api_types-9eadb0fba0c2a0c9)
running 6 tests
test tests::mode_wire_format_is_rw_ro ... ok
test tests::mutation_defaults_missing_fields ... ok
test tests::me_round_trip ... ok
test tests::mutation_round_trip_skips_absent_fields ... ok
test tests::op_wire_format ... ok
test tests::root_defaults_mode_to_rw ... ok
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 87 tests
Running unittests src/lib.rs (/ci/cache/target/debug/deps/server-e4c56cfdcce75b0f)
test api::search::tests::join_rel_lifts_a_path_to_the_server_root ... ok
test api::search::tests::name_match_ignores_the_parent_path ... ok
test api::search::tests::excludes_cover_descendants_but_not_name_siblings ... ok
test api::search::tests::name_match_needs_every_word ... ok
test api::search::tests::truncation_caps_length ... ok
test api::search::tests::query_fields_are_the_shared_constants ... ok
test api::files::tests::query_fields_are_the_shared_constants ... ok
test api::search::tests::truncation_keeps_utf8_boundary ... ok
test api::search::tests::truncation_strips_terminator ... ok
test archive::tests::format_metadata ... ok
test archive::tests::format_parsing ... ok
test archive::tests::build_fails_on_missing_dir ... ok
test assets::tests::asset_paths_outside_dist_are_rejected ... ok
test auth::tests::login_delay_grows_after_free_tries ... ok
test auth::tests::session_cookie_shape ... ok
test auth::tests::parse_session_cookie_variants ... ok
test auth::tests::share_cookie_is_per_share_and_session_scoped ... ok
test auth::tests::verify_rejects_garbage_hashes ... ok
test archive::tests::walk_is_sorted_case_insensitively ... ok
test cli::tests::defaults_applied ... ok
test cli::tests::flags_override_defaults ... ok
test db::tests::share_expiry_logic ... ok
test archive::tests::tar_round_trip ... ok
test cli::tests::required_args_enforced ... ok
test error::tests::io_error_maps_to_500 ... ok
test error::tests::extra_object_is_merged_into_body ... ok
test error::tests::non_object_extra_is_ignored ... ok
test error::tests::plain_error_body ... ok
test cli::tests::https_from_env ... ok
test auth::tests::token_shapes_and_uniqueness ... ok
test archive::tests::tar_gz_round_trip ... ok
test fs::tests::magic_numbers_classify_by_content ... ok
test archive::tests::tar_zst_round_trip ... ok
test fs::tests::copy_recursive_missing_source ... ok
test fs::tests::is_within_or_eq_matrix ... ok
test archive::tests::zip_round_trip ... ok
test fs::tests::list_dir_reports_broken_symlink_as_empty_file ... ok
test fs::tests::list_dir_sorts_folders_first_then_case_insensitive ... ok
test db::tests::fresh_db_state ... ok
test fs::tests::rename_moves_file_and_dir ... ok
test fs::tests::rename_validates_new_name ... ok
test fs::tests::resolve_dir_requires_existing_directory ... ok
test fs::tests::resolve_file_targets_files ... ok
test fs::tests::resolve_path_missing_is_not_found ... ok
test fs::tests::resolve_path_rejects_parent_traversal ... ok
test fs::tests::resolve_path_rejects_symlink_escape ... ok
test fs::tests::resolve_path_traverses_inside_root ... ok
test fs::tests::remove_file_and_dir ... ok
test fs::tests::detect_kind_reads_from_disk ... ok
test fs::tests::move_file_and_dir_across_dirs ... ok
test fs::tests::rename_conflicts_and_overwrite ... ok
test fs::tests::list_dir_reports_kinds ... ok
test fs::tests::list_dir_error_cases ... ok
test fs::tests::mkdir_rejects_conflict_and_bad_names ... ok
test fs::tests::svg_is_offered_as_an_image ... ok
test fs::tests::truncated_utf8_at_the_read_boundary_is_still_text ... ok
test fs::tests::unsigned_files_fall_back_to_the_text_heuristic ... ok
test fs::tests::validate_name_accepts_simple_names ... ok
test fs::tests::validate_name_rejects_traversal_and_paths ... ok
test fs::tests::resolve_root_rejects_escape_and_missing ... ok
test fs::tests::mkdir_creates_nested_dirs ... ok
test fs::tests::copy_refuses_into_self_and_handles_conflict ... ok
test fs::tests::resolve_root_whole_root_and_subdir ... ok
test fs::tests::copy_file_and_dir_preserves_mtime ... ok
test fs::tests::resolve_root_rejects_symlink_escape ... ok
test fs::tests::move_refuses_into_self_and_conflicts ... ok
test tests::build_app_root_must_be_directory ... ok
test tests::build_app_missing_root_fails ... ok
test fs::tests::save_file_error_cases ... ok
test tests::build_app_rejects_bad_bind ... ok
test tests::build_app_custom_port_bind ... ok
test tests::build_app_ok ... ok
test fs::tests::parallel_rows_match_serial ... ok
test fs::tests::sniff_permit_never_exceeds_the_budget ... ok
test db::tests::revoking_a_path_takes_its_descendants_only ... ok
test db::tests::sessions_lifecycle ... ok
test db::tests::share_unlocks_are_bound_to_one_share ... ok
test db::tests::setup_is_won_by_exactly_one_caller ... ok
test db::tests::settings_round_trip ... ok
test db::tests::v1_db_migrates_to_v2 ... ok
test db::tests::shares_crud ... ok
test fs::tests::save_file_conflict_on_stale_mtime ... ok
test fs::tests::save_file_updates_content_and_returns_new_mtime ... ok
test db::tests::changing_a_password_drops_that_users_sessions ... ok
test auth::tests::password_hash_round_trip ... ok
test db::tests::user_crud_and_roots ... ok
test db::tests::admin_user_and_passwords ... ok
test result: ok. 87 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.44s
Running unittests src/main.rs (/ci/cache/target/debug/deps/filebrowser_ng-d16ac8682b1cddfc)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running tests/api_admin.rs (/ci/cache/target/debug/deps/api_admin-b8e8009dac1e4a68)
running 6 tests
test settings_round_trip_visible_in_me ... ok
test update_unknown_user_is_404 ... ok
test lockout_guards ... ok
test admins_can_browse_the_server_root_read_only ... ok
test admin_routes_require_admin ... ok
test user_lifecycle ... ok
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.89s
Running tests/api_auth.rs (/ci/cache/target/debug/deps/api_auth-a66372790cf00ffe)
running 8 tests
test first_boot_me_reports_first_boot ... ok
test setup_validates_input ... ok
test setup_creates_admin_and_sets_cookie ... ok
test me_requires_valid_session ... ok
test logout_invalidates_session ... ok
test root_name_is_configurable ... ok
test login_flows ... ok
test disabled_user_loses_session_and_cannot_login ... ok
test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.62s
Running tests/api_dav.rs (/ci/cache/target/debug/deps/api_dav-18ee4aeadb5cf9fe)
running 36 tests
test a_writable_share_can_be_written_and_expiry_ends_it ... ok
test a_session_cookie_works_instead_of_basic ... ok
test an_encoded_slash_does_not_split_the_share_token ... ok
test a_share_mounts_at_its_own_root_without_a_login ... ok
test a_copy_and_a_put_to_one_path_do_not_interleave ... ok
test a_dangling_symlink_is_not_a_writable_destination ... ok
test a_listing_omits_dotfiles ... ok
test a_lock_is_reported_and_its_timeout_is_capped ... ok
test a_dangling_symlink_is_still_listed ... ok
test a_browser_get_of_a_collection_returns_a_listing ... ok
test a_listing_escapes_entry_names ... ok
test a_listing_still_shows_a_symlink_as_its_target ... ok
test a_scriptable_file_is_sandboxed_over_dav ... ok
test concurrent_writers_leave_a_whole_file ... ok
test copy_replaces_a_symlink_instead_of_writing_through_it ... ok
test deleting_a_shared_path_over_webdav_revokes_the_share ... ok
test an_exclusive_lock_blocks_everyone_without_the_token ... ok
test deleting_a_symlink_does_not_revoke_its_targets_share ... ok
test deleting_a_symlinked_directory_does_not_empty_its_target ... ok
test deleting_a_symlink_removes_the_link_not_its_target ... ok
test a_mount_cannot_leave_its_roots ... ok
test a_read_only_root_can_still_be_copied_out_of ... ok
test deleting_the_mount_point_removes_nothing ... ok
test locks_are_scoped_to_their_own_path ... ok
test get_and_put_round_trip_through_the_mount ... ok
test an_abandoned_lock_expires ... ok
test mkcol_move_copy_and_delete ... ok
test a_move_cannot_wipe_a_root_through_its_destination ... ok
test moving_a_symlinked_directory_moves_the_link ... ok
test propfind_lists_the_roots_then_their_contents ... ok
test a_read_only_root_refuses_every_write ... ok
test deleting_a_root_removes_nothing ... ok
test a_protected_share_asks_for_its_password_over_basic ... ok
test unauthenticated_requests_get_a_basic_challenge ... ok
test a_changed_password_locks_the_mount_out_at_once ... ok
test two_users_with_same_named_roots_do_not_share_locks ... ok
test result: ok. 36 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.64s
Running tests/api_embedded.rs (/ci/cache/target/debug/deps/api_embedded-31de6ce6ccbe712d)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running tests/api_files.rs (/ci/cache/target/debug/deps/api_files-9a4a0536d4c2ed7b)
running 32 tests
test deleting_a_symlink_removes_the_link_not_its_target ... ok
test a_symlink_out_of_the_root_still_cannot_be_read_or_written ... ok
test delete_file_and_folder ... ok
test content_is_capped_at_two_mibibytes ... ok
test archive_does_not_follow_symlinks_out_of_the_root ... ok
test download_encodes_non_ascii_and_control_characters_in_filename ... ok
test copying_onto_a_symlink_replaces_it ... ok
test listing_reports_sniffed_kinds ... ok
test content_action_serves_raw_bytes_with_mtime ... ok
test a_dangling_symlink_can_be_deleted ... ok
test download_folder_as_all_archive_formats ... ok
test move_and_copy_across_dirs ... ok
test moving_a_symlink_moves_the_link ... ok
test editor_save_over_two_mibibytes_is_rejected_with_the_localized_error ... ok
test copying_a_symlink_copies_what_it_points_at ... ok
test listing_is_capped_and_reports_truncation ... ok
test mkdir_and_rename ... ok
test download_folder_requires_valid_format ... ok
test download_honours_single_byte_ranges ... ok
test editor_save_round_trip_and_conflict ... ok
test list_root_sorted_folders_first ... ok
test download_revalidates_with_last_modified ... ok
test list_subdir_and_errors ... ok
test download_single_file ... ok
test path_traversal_is_blocked ... ok
test preview_serves_inline_and_rejects_dirs ... ok
test renaming_a_symlink_renames_the_link ... ok
test upload_creates_files_and_folders ... ok
test upload_does_not_follow_symlinked_directories_out_of_the_root ... ok
test scriptable_files_are_served_sandboxed ... ok
test read_only_root_blocks_writes_but_allows_reads ... ok
test user_cannot_touch_foreign_root ... ok
test result: ok. 32 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.27s
Running tests/api_search.rs (/ci/cache/target/debug/deps/api_search-eff50c6e4848a806)
running 8 tests
test exclude_list_is_normalised ... ok
test both_scopes_stream_from_one_walk ... ok
test path_narrows_the_walk_to_a_subfolder ... ok
test hidden_and_gitignored_entries_are_searched ... ok
test search_rejects_bad_input_and_anonymous_callers ... ok
test backslash_paths_are_normalised_before_trimming ... ok
test name_scope_ignores_the_parent_path ... ok
test excluded_folders_never_appear_in_results ... ok
test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.69s
Running tests/api_shares.rs (/ci/cache/target/debug/deps/api_shares-92905ba6b4f14558)
running 18 tests
test share_expiry_must_be_rfc3339 ... ok
test share_folder_browsing_and_download_anonymously ... ok
test share_of_a_single_file ... ok
test share_expiry ... ok
test mutating_a_target_revokes_its_shares ... ok
test a_root_can_be_shared_and_keeps_a_name ... ok
test unlocking_an_open_share_is_rejected ... ok
test create_list_and_delete_shares ... ok
test read_only_share_blocks_writes_writable_share_allows ... ok
test share_target_validation ... ok
test a_share_password_must_be_long_enough ... ok
test share_token_is_not_the_creators_identity ... ok
test share_scopes_a_signed_in_user ... ok
test writable_shares_gated_by_setting ... ok
test unlocking_a_file_share_returns_its_kind ... ok
test a_subfolder_share_by_empty_path_is_unaffected ... ok
test read_only_root_cannot_be_shared_writably ... ok
test a_password_locks_the_share_and_its_files ... ok
test result: ok. 18 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.68s
Running tests/api_spa.rs (/ci/cache/target/debug/deps/api_spa-c14b2d27c8f93658)
running 1 test
test spa_fallback_and_api_guards ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
Doc-tests api_types
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests server
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling api-types v0.1.0 (/ci/build/project/api-types)
Compiling web v0.1.0 (/ci/build/project/web)
Finished `test` profile [unoptimized + debuginfo] target(s) in 5.08s
Running unittests src/main.rs (/ci/cache/target/debug/deps/web-c0caba7ae44f9829)
running 14 tests
test i18n::tests::no_duplicate_keys ... ok
test util::tests::format_date_drops_seconds_and_zone ... ok
test util::tests::sort_keeps_folders_first_in_every_order ... ok
test i18n::tests::tables_are_sorted ... ok
test util::tests::sort_orders_by_the_chosen_key ... ok
test util::tests::sort_spec_round_trips_through_its_stored_form ... ok
test views::search::tests::highlight_empty_words_is_plain ... ok
test views::search::tests::highlight_escapes_markup ... ok
test views::search::tests::highlight_handles_non_ascii ... ok
test views::search::tests::highlight_is_case_insensitive ... ok
test views::search::tests::highlight_marks_all_words ... ok
test views::search::tests::highlight_marks_hits ... ok
test views::search::tests::highlight_no_hit_is_plain ... ok
test i18n::tests::translations_cover_all_keys ... ok
test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
successbuild2m 9s
cd web && bun install --frozen-lockfile && bun run build
bun install v1.4.0 (34cbb9a40)
+ @codemirror/lang-cpp@6.0.3
+ @codemirror/lang-css@6.3.1
+ @codemirror/lang-html@6.4.12
+ @codemirror/lang-java@6.0.2
+ @codemirror/lang-javascript@6.2.5
+ @codemirror/lang-json@6.0.2
+ @codemirror/lang-markdown@6.5.2
+ @codemirror/lang-php@6.0.2
+ @codemirror/lang-python@6.2.1
+ @codemirror/lang-rust@6.0.2
+ @codemirror/lang-sql@6.10.0
+ @codemirror/lang-xml@6.1.0
+ @codemirror/language@6.12.4
+ @codemirror/state@6.7.2
+ @codemirror/theme-one-dark@6.1.3
+ @codemirror/view@6.43.10
+ codemirror@6.0.2
39 packages installed [51.00ms]
$ bun build cm/wrapper.js --format iife --target browser --minify --outfile cm6.js
Bundled 40 modules in 19ms
cm6.js 1.0 MB (entry point)
cd web && trunk build --release
2026-09-14T10:45:09.864411Z INFO Starting trunk 0.21.14
2026-09-14T10:45:10.097026Z INFO starting build
Compiling api-types v0.1.0 (/ci/build/project/api-types)
Compiling web v0.1.0 (/ci/build/project/web)
Finished `release` profile [optimized] target(s) in 37.60s
2026-09-14T10:45:48.159779Z INFO downloading wasm-bindgen version="0.2.127"
2026-09-14T10:45:53.878093Z INFO installing wasm-bindgen
2026-09-14T10:46:02.586035Z INFO applying new distribution
2026-09-14T10:46:02.586450Z INFO success
rm -rf server/dist
cp -r web/dist server/dist
cargo build --locked --release -p server --features embedded
Compiling stable_deref_trait v1.2.1
Compiling writeable v0.6.4
Compiling litemap v0.8.3
Compiling utf8_iter v1.0.4
Compiling icu_properties_data v2.3.0
Compiling icu_normalizer_data v2.3.0
Compiling syn v3.0.4
Compiling syn v2.0.119
Compiling crypto-common v0.1.7
Compiling getrandom v0.4.3
Compiling xml v1.4.0
Compiling headers-core v0.3.0
Compiling base64 v0.22.1
Compiling htmlescape v0.3.1
Compiling dyn-clone v1.0.20
Compiling digest v0.10.7
Compiling uuid v1.26.0
Compiling sha1 v0.10.7
Compiling blake2 v0.10.6
Compiling sha2 v0.10.9
Compiling headers v0.4.1
Compiling argon2 v0.5.3
Compiling xmltree v0.12.0
Compiling xml-rs v1.0.0
Compiling zerovec-derive v0.11.6
Compiling displaydoc v0.2.7
Compiling tokio-macros v2.7.2
Compiling serde_derive v1.0.229
Compiling futures-macro v0.3.34
Compiling clap_derive v4.6.4
Compiling thiserror-impl v2.0.20
Compiling synstructure v0.13.2
Compiling tokio v1.53.1
Compiling futures-util v0.3.34
Compiling zerofrom-derive v0.1.7
Compiling yoke-derive v0.8.2
Compiling tracing-attributes v0.1.31
Compiling rust-embed-impl v8.12.0
Compiling derive-where v1.6.1
Compiling thiserror v2.0.20
Compiling rust-embed v8.12.0
Compiling clap v4.6.6
Compiling zerofrom v0.1.8
Compiling tracing v0.1.44
Compiling yoke v0.8.3
Compiling zerovec v0.11.8
Compiling zerotrie v0.2.5
Compiling axum-core v0.5.6
Compiling tracing-subscriber v0.3.23
Compiling tower-http v0.6.11
Compiling serde v1.0.229
Compiling tinystr v0.8.4
Compiling potential_utf v0.1.6
Compiling icu_collections v2.3.0
Compiling icu_locale_core v2.3.0
Compiling grep-printer v0.3.1
Compiling serde_urlencoded v0.7.1
Compiling chrono v0.4.45
Compiling api-types v0.1.0 (/ci/build/project/api-types)
Compiling grep v0.4.1
Compiling icu_provider v2.3.1
Compiling icu_properties v2.3.0
Compiling icu_normalizer v2.3.0
Compiling idna_adapter v1.2.2
Compiling idna v1.1.0
Compiling tokio-util v0.7.19
Compiling hyper v1.11.1
Compiling tower v0.5.3
Compiling url v2.5.8
Compiling tokio-stream v0.1.19
Compiling multer v3.1.0
Compiling dav-server v0.11.0
Compiling hyper-util v0.1.20
Compiling axum v0.8.9
Compiling server v0.1.0 (/ci/build/project/server)
Finished `release` profile [optimized] target(s) in 1m 15s
successe2e36s
Compiling crypto-common v0.1.7
Compiling rust-embed-impl v8.12.0
Compiling digest v0.10.7
Compiling sha1 v0.10.7
Compiling blake2 v0.10.6
Compiling sha2 v0.10.9
Compiling headers v0.4.1
Compiling argon2 v0.5.3
Compiling rust-embed v8.12.0
Compiling dav-server v0.11.0
Compiling server v0.1.0 (/ci/build/project/server)
Finished `test` profile [unoptimized + debuginfo] target(s) in 14.93s
Running unittests src/lib.rs (/ci/cache/target/debug/deps/server-479a31c152727cb8)
running 86 tests
test api::search::tests::join_rel_lifts_a_path_to_the_server_root ... ok
test api::search::tests::excludes_cover_descendants_but_not_name_siblings ... ok
test api::search::tests::name_match_ignores_the_parent_path ... ok
test api::search::tests::name_match_needs_every_word ... ok
test api::files::tests::query_fields_are_the_shared_constants ... ok
test api::search::tests::query_fields_are_the_shared_constants ... ok
test api::search::tests::truncation_caps_length ... ok
test api::search::tests::truncation_strips_terminator ... ok
test api::search::tests::truncation_keeps_utf8_boundary ... ok
test archive::tests::format_metadata ... ok
test archive::tests::build_fails_on_missing_dir ... ok
test archive::tests::format_parsing ... ok
test auth::tests::login_delay_grows_after_free_tries ... ok
test auth::tests::parse_session_cookie_variants ... ok
test auth::tests::session_cookie_shape ... ok
test auth::tests::share_cookie_is_per_share_and_session_scoped ... ok
test auth::tests::verify_rejects_garbage_hashes ... ok
test cli::tests::defaults_applied ... ok
test cli::tests::flags_override_defaults ... ok
test archive::tests::walk_is_sorted_case_insensitively ... ok
test db::tests::share_expiry_logic ... ok
test archive::tests::tar_round_trip ... ok
test cli::tests::required_args_enforced ... ok
test error::tests::io_error_maps_to_500 ... ok
test error::tests::extra_object_is_merged_into_body ... ok
test cli::tests::https_from_env ... ok
test auth::tests::token_shapes_and_uniqueness ... ok
test error::tests::plain_error_body ... ok
test error::tests::non_object_extra_is_ignored ... ok
test archive::tests::tar_zst_round_trip ... ok
test fs::tests::magic_numbers_classify_by_content ... ok
test fs::tests::detect_kind_reads_from_disk ... ok
test fs::tests::copy_recursive_missing_source ... ok
test archive::tests::zip_round_trip ... ok
test fs::tests::list_dir_reports_kinds ... ok
test fs::tests::list_dir_sorts_folders_first_then_case_insensitive ... ok
test fs::tests::mkdir_creates_nested_dirs ... ok
test fs::tests::mkdir_rejects_conflict_and_bad_names ... ok
test fs::tests::move_file_and_dir_across_dirs ... ok
test fs::tests::remove_file_and_dir ... ok
test fs::tests::rename_conflicts_and_overwrite ... ok
test fs::tests::move_refuses_into_self_and_conflicts ... ok
test fs::tests::resolve_dir_requires_existing_directory ... ok
test fs::tests::resolve_file_targets_files ... ok
test fs::tests::resolve_path_missing_is_not_found ... ok
test fs::tests::resolve_path_rejects_parent_traversal ... ok
test fs::tests::resolve_path_rejects_symlink_escape ... ok
test fs::tests::resolve_path_traverses_inside_root ... ok
test fs::tests::resolve_root_rejects_escape_and_missing ... ok
test fs::tests::resolve_root_whole_root_and_subdir ... ok
test fs::tests::save_file_error_cases ... ok
test db::tests::fresh_db_state ... ok
test archive::tests::tar_gz_round_trip ... ok
test fs::tests::svg_is_offered_as_an_image ... ok
test fs::tests::truncated_utf8_at_the_read_boundary_is_still_text ... ok
test fs::tests::unsigned_files_fall_back_to_the_text_heuristic ... ok
test fs::tests::rename_moves_file_and_dir ... ok
test fs::tests::validate_name_accepts_simple_names ... ok
test fs::tests::validate_name_rejects_traversal_and_paths ... ok
test fs::tests::list_dir_error_cases ... ok
test fs::tests::is_within_or_eq_matrix ... ok
test tests::build_app_missing_root_fails ... ok
test fs::tests::resolve_root_rejects_symlink_escape ... ok
test fs::tests::rename_validates_new_name ... ok
test fs::tests::copy_refuses_into_self_and_handles_conflict ... ok
test fs::tests::list_dir_reports_broken_symlink_as_empty_file ... ok
test fs::tests::copy_file_and_dir_preserves_mtime ... ok
test tests::build_app_root_must_be_directory ... ok
test fs::tests::parallel_rows_match_serial ... ok
test fs::tests::sniff_permit_never_exceeds_the_budget ... ok
test tests::build_app_custom_port_bind ... ok
test tests::build_app_rejects_bad_bind ... ok
test tests::build_app_ok ... ok
test db::tests::v1_db_migrates_to_v2 ... ok
test db::tests::settings_round_trip ... ok
test db::tests::revoking_a_path_takes_its_descendants_only ... ok
test db::tests::share_unlocks_are_bound_to_one_share ... ok
test db::tests::sessions_lifecycle ... ok
test db::tests::setup_is_won_by_exactly_one_caller ... ok
test db::tests::shares_crud ... ok
test fs::tests::save_file_conflict_on_stale_mtime ... ok
test fs::tests::save_file_updates_content_and_returns_new_mtime ... ok
test db::tests::changing_a_password_drops_that_users_sessions ... ok
test auth::tests::password_hash_round_trip ... ok
test db::tests::user_crud_and_roots ... ok
test db::tests::admin_user_and_passwords ... ok
test result: ok. 86 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.28s
Running unittests src/main.rs (/ci/cache/target/debug/deps/filebrowser_ng-8a65c1c2ef85c3a4)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running tests/api_admin.rs (/ci/cache/target/debug/deps/api_admin-499c722728b8a401)
running 6 tests
test update_unknown_user_is_404 ... ok
test settings_round_trip_visible_in_me ... ok
test lockout_guards ... ok
test admin_routes_require_admin ... ok
test admins_can_browse_the_server_root_read_only ... ok
test user_lifecycle ... ok
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.03s
Running tests/api_auth.rs (/ci/cache/target/debug/deps/api_auth-99f7f91dcb2af230)
running 8 tests
test setup_validates_input ... ok
test first_boot_me_reports_first_boot ... ok
test setup_creates_admin_and_sets_cookie ... ok
test me_requires_valid_session ... ok
test logout_invalidates_session ... ok
test disabled_user_loses_session_and_cannot_login ... ok
test root_name_is_configurable ... ok
test login_flows ... ok
test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.64s
Running tests/api_dav.rs (/ci/cache/target/debug/deps/api_dav-97a43e45a8496579)
running 36 tests
test a_share_mounts_at_its_own_root_without_a_login ... ok
test a_session_cookie_works_instead_of_basic ... ok
test a_writable_share_can_be_written_and_expiry_ends_it ... ok
test an_encoded_slash_does_not_split_the_share_token ... ok
test a_dangling_symlink_is_still_listed ... ok
test a_listing_escapes_entry_names ... ok
test a_listing_omits_dotfiles ... ok
test a_listing_still_shows_a_symlink_as_its_target ... ok
test a_lock_is_reported_and_its_timeout_is_capped ... ok
test a_copy_and_a_put_to_one_path_do_not_interleave ... ok
test an_exclusive_lock_blocks_everyone_without_the_token ... ok
test a_dangling_symlink_is_not_a_writable_destination ... ok
test deleting_a_shared_path_over_webdav_revokes_the_share ... ok
test concurrent_writers_leave_a_whole_file ... ok
test a_browser_get_of_a_collection_returns_a_listing ... ok
test deleting_a_symlink_removes_the_link_not_its_target ... ok
test deleting_a_symlink_does_not_revoke_its_targets_share ... ok
test deleting_a_symlinked_directory_does_not_empty_its_target ... ok
test copy_replaces_a_symlink_instead_of_writing_through_it ... ok
test a_scriptable_file_is_sandboxed_over_dav ... ok
test deleting_the_mount_point_removes_nothing ... ok
test get_and_put_round_trip_through_the_mount ... ok
test locks_are_scoped_to_their_own_path ... ok
test mkcol_move_copy_and_delete ... ok
test a_move_cannot_wipe_a_root_through_its_destination ... ok
test moving_a_symlinked_directory_moves_the_link ... ok
test an_abandoned_lock_expires ... ok
test a_read_only_root_can_still_be_copied_out_of ... ok
test propfind_lists_the_roots_then_their_contents ... ok
test a_read_only_root_refuses_every_write ... ok
test a_mount_cannot_leave_its_roots ... ok
test deleting_a_root_removes_nothing ... ok
test a_protected_share_asks_for_its_password_over_basic ... ok
test unauthenticated_requests_get_a_basic_challenge ... ok
test a_changed_password_locks_the_mount_out_at_once ... ok
test two_users_with_same_named_roots_do_not_share_locks ... ok
test result: ok. 36 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.76s
Running tests/api_embedded.rs (/ci/cache/target/debug/deps/api_embedded-609d676631adac32)
running 1 test
test embedded_frontend_is_complete ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s
Running tests/api_files.rs (/ci/cache/target/debug/deps/api_files-410e77ea913e3da9)
running 32 tests
test content_is_capped_at_two_mibibytes ... ok
test archive_does_not_follow_symlinks_out_of_the_root ... ok
test list_root_sorted_folders_first ... ok
test delete_file_and_folder ... ok
test download_encodes_non_ascii_and_control_characters_in_filename ... ok
test a_symlink_out_of_the_root_still_cannot_be_read_or_written ... ok
test download_honours_single_byte_ranges ... ok
test copying_onto_a_symlink_replaces_it ... ok
test content_action_serves_raw_bytes_with_mtime ... ok
test editor_save_round_trip_and_conflict ... ok
test a_dangling_symlink_can_be_deleted ... ok
test editor_save_over_two_mibibytes_is_rejected_with_the_localized_error ... ok
test copying_a_symlink_copies_what_it_points_at ... ok
test mkdir_and_rename ... ok
test download_revalidates_with_last_modified ... ok
test listing_is_capped_and_reports_truncation ... ok
test deleting_a_symlink_removes_the_link_not_its_target ... ok
test moving_a_symlink_moves_the_link ... ok
test download_folder_as_all_archive_formats ... ok
test download_folder_requires_valid_format ... ok
test listing_reports_sniffed_kinds ... ok
test move_and_copy_across_dirs ... ok
test download_single_file ... ok
test list_subdir_and_errors ... ok
test path_traversal_is_blocked ... ok
test preview_serves_inline_and_rejects_dirs ... ok
test renaming_a_symlink_renames_the_link ... ok
test scriptable_files_are_served_sandboxed ... ok
test upload_creates_files_and_folders ... ok
test upload_does_not_follow_symlinked_directories_out_of_the_root ... ok
test read_only_root_blocks_writes_but_allows_reads ... ok
test user_cannot_touch_foreign_root ... ok
test result: ok. 32 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.28s
Running tests/api_search.rs (/ci/cache/target/debug/deps/api_search-a7859f820a78c688)
running 8 tests
test exclude_list_is_normalised ... ok
test name_scope_ignores_the_parent_path ... ok
test backslash_paths_are_normalised_before_trimming ... ok
test hidden_and_gitignored_entries_are_searched ... ok
test search_rejects_bad_input_and_anonymous_callers ... ok
test both_scopes_stream_from_one_walk ... ok
test path_narrows_the_walk_to_a_subfolder ... ok
test excluded_folders_never_appear_in_results ... ok
test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.70s
Running tests/api_shares.rs (/ci/cache/target/debug/deps/api_shares-1b3618fdbc9664e5)
running 18 tests
test share_expiry ... ok
test share_expiry_must_be_rfc3339 ... ok
test share_target_validation ... ok
test a_share_password_must_be_long_enough ... ok
test share_token_is_not_the_creators_identity ... ok
test a_root_can_be_shared_and_keeps_a_name ... ok
test share_scopes_a_signed_in_user ... ok
test create_list_and_delete_shares ... ok
test share_of_a_single_file ... ok
test unlocking_an_open_share_is_rejected ... ok
test writable_shares_gated_by_setting ... ok
test share_folder_browsing_and_download_anonymously ... ok
test mutating_a_target_revokes_its_shares ... ok
test read_only_share_blocks_writes_writable_share_allows ... ok
test a_subfolder_share_by_empty_path_is_unaffected ... ok
test unlocking_a_file_share_returns_its_kind ... ok
test read_only_root_cannot_be_shared_writably ... ok
test a_password_locks_the_share_and_its_files ... ok
test result: ok. 18 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.94s
Running tests/api_spa.rs (/ci/cache/target/debug/deps/api_spa-05724db207489331)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests server
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
skippedrelease0s
Skipped: condition not met