Skip to content

Commit

Permalink
Next build: use exported handle_issues from turbopack
Browse files Browse the repository at this point in the history
Note: depends on next Turbopack publish

vercel/turborepo#5487 exports a reusable `handle_issues` function for reporting issues and erroring when failing issues are encountered.

This uses it for `next build` with a failing severity level of error.
  • Loading branch information
wbinnssmith committed Jul 20, 2023
1 parent 55eebef commit bd6e7e3
Showing 1 changed file with 43 additions and 25 deletions.
68 changes: 43 additions & 25 deletions packages/next-swc/crates/next-build/src/next_build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ use turbopack_binding::{
asset::Asset,
chunk::ChunkingContext,
environment::ServerAddr,
issue::{IssueContextExt, IssueReporter, IssueSeverity},
issue::{handle_issues, IssueContextExt, IssueReporter, IssueSeverity},
output::{OutputAsset, OutputAssets},
virtual_fs::VirtualFileSystem,
},
Expand All @@ -53,6 +53,8 @@ use crate::{
next_pages::page_entries::{compute_page_entries_chunks, get_page_entries},
};

static MIN_FAILING_SEVERITY: IssueSeverity = IssueSeverity::Error;

#[turbo_tasks::function]
pub(crate) async fn next_build(options: TransientInstance<BuildOptions>) -> Result<Vc<Completion>> {
let project_root = options
Expand Down Expand Up @@ -149,8 +151,22 @@ pub(crate) async fn next_build(options: TransientInstance<BuildOptions>) -> Resu
next_config,
);

handle_issues(page_entries, issue_reporter).await?;
handle_issues(app_entries, issue_reporter).await?;
handle_issues(
page_entries,
issue_reporter,
MIN_FAILING_SEVERITY.cell(),
None,
None,
)
.await?;
handle_issues(
app_entries,
issue_reporter,
MIN_FAILING_SEVERITY.cell(),
None,
None,
)
.await?;

let page_entries = page_entries.await?;
let app_entries = app_entries.await?;
Expand Down Expand Up @@ -436,7 +452,14 @@ async fn workspace_fs(
issue_reporter: Vc<Box<dyn IssueReporter>>,
) -> Result<Vc<Box<dyn FileSystem>>> {
let disk_fs = DiskFileSystem::new("workspace".to_string(), workspace_root.to_string());
handle_issues(disk_fs, issue_reporter).await?;
handle_issues(
disk_fs,
issue_reporter,
MIN_FAILING_SEVERITY.cell(),
None,
None,
)
.await?;
Ok(Vc::upcast(disk_fs))
}

Expand All @@ -446,7 +469,14 @@ async fn node_fs(
issue_reporter: Vc<Box<dyn IssueReporter>>,
) -> Result<Vc<Box<dyn FileSystem>>> {
let disk_fs = DiskFileSystem::new("node".to_string(), node_root.to_string());
handle_issues(disk_fs, issue_reporter).await?;
handle_issues(
disk_fs,
issue_reporter,
MIN_FAILING_SEVERITY.cell(),
None,
None,
)
.await?;
Ok(Vc::upcast(disk_fs))
}

Expand All @@ -456,29 +486,17 @@ async fn client_fs(
issue_reporter: Vc<Box<dyn IssueReporter>>,
) -> Result<Vc<Box<dyn FileSystem>>> {
let disk_fs = DiskFileSystem::new("client".to_string(), client_root.to_string());
handle_issues(disk_fs, issue_reporter).await?;
handle_issues(
disk_fs,
issue_reporter,
MIN_FAILING_SEVERITY.cell(),
None,
None,
)
.await?;
Ok(Vc::upcast(disk_fs))
}

async fn handle_issues<T>(source: Vc<T>, issue_reporter: Vc<Box<dyn IssueReporter>>) -> Result<()> {
let issues = source
.peek_issues_with_path()
.await?
.strongly_consistent()
.await?;

let has_fatal = issue_reporter.report_issues(
TransientInstance::new(issues.clone()),
TransientValue::new(source.node),
);

if *has_fatal.await? {
Err(anyhow!("Fatal issue(s) occurred"))
} else {
Ok(())
}
}

/// Emits all assets transitively reachable from the given chunks, that are
/// inside the node root or the client root.
async fn emit_all_assets(
Expand Down

0 comments on commit bd6e7e3

Please sign in to comment.