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"]