diff --git a/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs b/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs index 6156abd63..2abc36767 100644 --- a/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs +++ b/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs @@ -620,23 +620,31 @@ impl RustwideBuilder { fs::create_dir_all(&self.config.temp_dir)?; let local_storage = tempfile::tempdir_in(&self.config.temp_dir)?; + let mut algs = HashSet::new(); + let (source_files_list, source_size) = { + debug!("adding sources into database"); + let temp_dir = tempfile::tempdir_in(&self.config.temp_dir)?; + + krate.copy_source_to(&self.workspace, temp_dir.path())?; + + let (files_list, new_alg) = self.runtime.block_on( + self.storage + .store_all_in_archive(&source_archive_path(name, version), &temp_dir), + )?; + + fs::remove_dir_all(temp_dir.path())?; + + algs.insert(new_alg); + let source_size: u64 = files_list.iter().map(|info| info.size).sum(); + (files_list, source_size) + }; + let successful = build_dir .build(&self.toolchain, &krate, self.prepare_sandbox(&limits)) .run(|build| { - let mut algs = HashSet::new(); - - debug!("adding sources into database"); - let files_list = { - let (files_list, new_alg) = - self.runtime.block_on( - self.storage.store_all_in_archive( - &source_archive_path(name, version), - build.host_source_dir(), - ))?; - algs.insert(new_alg); - files_list - }; - let source_size: u64 = files_list.iter().map(|info| info.size).sum(); + // NOTE: rustwide will run `copy_source_to` again when preparing the call to this + // closure. + // This could be optimized, but only with more rustwide changes. let metadata = Metadata::from_crate_root(build.host_source_dir())?; let BuildTargets { default_target, @@ -816,7 +824,7 @@ impl RustwideBuilder { cargo_metadata, &build.host_source_dir(), &res.target, - file_list_to_json(files_list), + file_list_to_json(source_files_list), successful_targets, &release_data, has_docs, @@ -1342,7 +1350,9 @@ mod tests { use docs_rs_utils::block_on_async_with_conn; // use crate::test::{AxumRouterTestExt, TestEnvironment}; use docs_rs_registry_api::ReleaseData; - use docs_rs_types::{BuildStatus, CompressionAlgorithm, Feature, ReleaseId, Version}; + use docs_rs_types::{ + BuildStatus, CompressionAlgorithm, Feature, ReleaseId, Version, testing::V0_1, + }; use pretty_assertions::assert_eq; use std::{collections::BTreeMap, io, iter}; use test_case::test_case; @@ -1929,24 +1939,29 @@ mod tests { // package with invalid cargo metadata. // Will succeed in the crate fetch step, so sources are // added. Will fail when we try to build. - let crate_ = "simconnect-sys"; - let version = Version::new(0, 23, 1); + let crate_ = "simple-build-failure"; + let version = V0_1; + let test_crate = Path::new("tests/crates/simple-build-failure/"); + let mut builder = env.build_builder()?; builder.update_toolchain()?; // `Result` is `Ok`, but the build-result is `false` - assert!( - !builder - .build_package(crate_, &version, PackageKind::CratesIo, false)? - .successful - ); + assert!(!builder.build_local_package(test_crate)?.successful); // source archive exists let source_archive = source_archive_path(crate_, &version); + let storage = env.blocking_storage()?; + assert!( - env.blocking_storage()?.exists(&source_archive)?, + storage.exists(&source_archive)?, "archive doesnt exist: {source_archive}" ); + assert!( + storage + .fetch_source_file(crate_, &version, None, "src/main.rs", true) + .is_ok() + ); Ok(()) } diff --git a/crates/bin/docs_rs_builder/tests/crates/simple-build-failure/Cargo.lock b/crates/bin/docs_rs_builder/tests/crates/simple-build-failure/Cargo.lock new file mode 100644 index 000000000..b3a2b505c --- /dev/null +++ b/crates/bin/docs_rs_builder/tests/crates/simple-build-failure/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "simple-build-failure" +version = "0.1.0" diff --git a/crates/bin/docs_rs_builder/tests/crates/simple-build-failure/Cargo.toml b/crates/bin/docs_rs_builder/tests/crates/simple-build-failure/Cargo.toml new file mode 100644 index 000000000..168f3b17b --- /dev/null +++ b/crates/bin/docs_rs_builder/tests/crates/simple-build-failure/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "simple-build-failure" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/crates/bin/docs_rs_builder/tests/crates/simple-build-failure/src/main.rs b/crates/bin/docs_rs_builder/tests/crates/simple-build-failure/src/main.rs new file mode 100644 index 000000000..e776e92cd --- /dev/null +++ b/crates/bin/docs_rs_builder/tests/crates/simple-build-failure/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + this fails; +}