aboutsummaryrefslogtreecommitdiffstats
path: root/syz-cluster/workflow/build-step
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-07-11 15:44:40 +0200
committerAleksandr Nogikh <nogikh@google.com>2025-07-14 11:30:46 +0000
commitec20f94ff6effe4c2aab4b4a4ecdfb33180e6e77 (patch)
tree57058c12e7ab2ca53553afdbd75d632d98c9c9a6 /syz-cluster/workflow/build-step
parent76718eb73e3d1e2a43363d80ab15366706b6491f (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.go51
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) {