diff --git a/app/buck2_build_api/src/build/build_report.rs b/app/buck2_build_api/src/build/build_report.rs index 88f37ef2582cb..821d60f80be99 100644 --- a/app/buck2_build_api/src/build/build_report.rs +++ b/app/buck2_build_api/src/build/build_report.rs @@ -563,13 +563,15 @@ pub fn generate_build_report( let mut serialized_build_report = None; if !opts.unstable_build_report_filename.is_empty() { - let file = fs_util::create_file( - project_root - .resolve(cwd) - .as_abs_path() - .join(opts.unstable_build_report_filename), - ) - .buck_error_context("Error writing build report")?; + let path = project_root + .resolve(cwd) + .as_abs_path() + .join(opts.unstable_build_report_filename); + if let Some(parent) = path.parent() { + fs_util::create_dir_all(parent)?; + } + let file = + fs_util::create_file(path.clone()).buck_error_context("Error writing build report")?; let mut file = BufWriter::new(file); serde_json::to_writer_pretty(&mut file, &build_report)? } else { diff --git a/tests/core/build/test_build_report.py b/tests/core/build/test_build_report.py index 356b5c433132c..b51e4555fed5a 100644 --- a/tests/core/build/test_build_report.py +++ b/tests/core/build/test_build_report.py @@ -10,10 +10,7 @@ import json -import pytest - from buck2.tests.e2e_util.api.buck import Buck -from buck2.tests.e2e_util.api.buck_result import BuckException from buck2.tests.e2e_util.buck_workspace import buck_test from buck2.tests.e2e_util.helper.utils import replace_hashes @@ -138,10 +135,12 @@ async def test_build_report_package_project_relative_path(buck: Buck) -> None: async def test_build_report_non_existent_directory(buck: Buck) -> None: build_report = "non_existent_dir/report" - # FIXME(diegomontemayor): This should not fail - with pytest.raises(BuckException): - await buck.build( - "//:rule1", - "--build-report", - build_report, - ) + await buck.build( + "//:rule1", + "--build-report", + build_report, + ) + + with open(buck.cwd / build_report) as file: + report = json.load(file) + assert report["success"]