diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2025-07-11 15:44:40 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-07-14 11:30:46 +0000 |
| commit | ec20f94ff6effe4c2aab4b4a4ecdfb33180e6e77 (patch) | |
| tree | 57058c12e7ab2ca53553afdbd75d632d98c9c9a6 /syz-cluster/workflow/build-step | |
| parent | 76718eb73e3d1e2a43363d80ab15366706b6491f (diff) | |
syz-cluster: upload and share build config and log
Diffstat (limited to 'syz-cluster/workflow/build-step')
| -rw-r--r-- | syz-cluster/workflow/build-step/main.go | 51 |
1 files changed, 32 insertions, 19 deletions
diff --git a/syz-cluster/workflow/build-step/main.go b/syz-cluster/workflow/build-step/main.go index 6c61912e3..3c859dc8c 100644 --- a/syz-cluster/workflow/build-step/main.go +++ b/syz-cluster/workflow/build-step/main.go @@ -86,25 +86,28 @@ func main() { return } } - var finding *api.NewFinding + ret := &BuildResult{} if err != nil { log.Printf("failed to checkout: %v", err) uploadReq.Log = []byte(err.Error()) } else { - finding, err = buildKernel(tracer, req) + ret, err = buildKernel(tracer, req) if err != nil { log.Printf("build process failed: %v", err) uploadReq.Log = []byte(err.Error()) - } else if finding == nil { - uploadReq.BuildSuccess = true } else { - log.Printf("%s", output.Bytes()) - log.Printf("failed: %s\n%s", finding.Title, finding.Report) - uploadReq.Log = finding.Log + uploadReq.Compiler = ret.Compiler + uploadReq.Config = ret.Config + if ret.Finding == nil { + uploadReq.BuildSuccess = true + } else { + log.Printf("%s", output.Bytes()) + log.Printf("failed: %s\n%s", ret.Finding.Title, ret.Finding.Report) + uploadReq.Log = ret.Finding.Log + } } } - reportResults(ctx, client, req.SeriesID != "", - uploadReq, finding, output.Bytes()) + reportResults(ctx, client, req.SeriesID != "", uploadReq, ret.Finding, output.Bytes()) } func reportResults(ctx context.Context, client *api.Client, patched bool, @@ -197,7 +200,13 @@ func checkoutKernel(tracer debugtracer.DebugTracer, req *api.BuildRequest, serie return commit, err } -func buildKernel(tracer debugtracer.DebugTracer, req *api.BuildRequest) (*api.NewFinding, error) { +type BuildResult struct { + Config []byte + Compiler string + Finding *api.NewFinding +} + +func buildKernel(tracer debugtracer.DebugTracer, req *api.BuildRequest) (*BuildResult, error) { kernelConfig, err := os.ReadFile(filepath.Join("/kernel-configs", req.ConfigName)) if err != nil { return nil, fmt.Errorf("failed to read the kernel config: %w", err) @@ -222,8 +231,13 @@ func buildKernel(tracer debugtracer.DebugTracer, req *api.BuildRequest) (*api.Ne info, err := build.Image(params) tracer.Log("compiler: %q", info.CompilerID) tracer.Log("signature: %q", info.Signature) + // We can fill this regardless of whether it succeeded. + ret := &BuildResult{ + Compiler: info.CompilerID, + } + ret.Config, _ = os.ReadFile(filepath.Join(*flagOutput, "kernel.config")) if err != nil { - finding := &api.NewFinding{ + ret.Finding = &api.NewFinding{ SessionID: *flagSession, TestName: *flagTestName, Title: "kernel build error", @@ -233,28 +247,27 @@ func buildKernel(tracer debugtracer.DebugTracer, req *api.BuildRequest) (*api.Ne switch { case errors.As(err, &kernelError): tracer.Log("kernel error: %q / %s", kernelError.Report, kernelError.Output) - finding.Report = kernelError.Report - finding.Log = kernelError.Output - return finding, nil + ret.Finding.Report = kernelError.Report + ret.Finding.Log = kernelError.Output + return ret, nil case errors.As(err, &verboseError): tracer.Log("verbose error: %q / %s", verboseError.Title, verboseError.Output) - finding.Report = []byte(verboseError.Title) - finding.Log = verboseError.Output - return finding, nil + ret.Finding.Report = []byte(verboseError.Title) + ret.Finding.Log = verboseError.Output + return ret, nil default: tracer.Log("other error: %v", err) } return nil, err } tracer.Log("build finished successfully") - // TODO: capture build logs and the compiler identity. // Note: Output directory has the following structure: // |-- image // |-- kernel // |-- kernel.config // `-- obj // `-- vmlinux - return nil, nil + return ret, nil } func ensureFlags(args ...string) { |
