Archive Audita reports as polish diagnostics

This commit is contained in:
2026-09-25 15:51:18 +00:00
parent 77d9d57937
commit 569f467393
9 changed files with 212 additions and 14 deletions

View File

@@ -17,7 +17,7 @@ func (n *NoopRunner) Run(ctx context.Context, req PolishRequest) (PolishResult,
if err := ctx.Err(); err != nil {
return PolishResult{}, err
}
if err := materializePlaceholders(req); err != nil {
if err := materializePlaceholders(req, false); err != nil {
return PolishResult{}, err
}
return PolishResult{
@@ -45,13 +45,21 @@ func (f *FakeRunner) Run(ctx context.Context, req PolishRequest) (PolishResult,
if f.Err != nil {
return PolishResult{}, f.Err
}
if err := materializePlaceholders(req); err != nil {
if err := materializePlaceholders(req, true); err != nil {
return PolishResult{}, err
}
res := f.Result
if res.ProcessedTranscriptPath == "" {
res.ProcessedTranscriptPath = req.OutputProcessedPath
}
if res.Reports == (ReportBundle{}) {
dir := filepath.Dir(req.OutputProcessedPath)
res.Reports = ReportBundle{
ErrorsPath: filepath.Join(dir, "errors.yml"),
RecoveriesPath: filepath.Join(dir, "recoveries.yml"),
OverviewPath: filepath.Join(dir, "report.md"),
}
}
if res.StdoutLogPath == "" {
res.StdoutLogPath = req.StdoutLogPath
}
@@ -67,7 +75,7 @@ func (f *FakeRunner) Run(ctx context.Context, req PolishRequest) (PolishResult,
return res, nil
}
func materializePlaceholders(req PolishRequest) error {
func materializePlaceholders(req PolishRequest, reports bool) error {
if req.GeneratedConfigPath != "" {
payload := map[string]any{
"schema": "audita.generated.v2",
@@ -95,6 +103,19 @@ func materializePlaceholders(req PolishRequest) error {
}); err != nil {
return err
}
if !reports {
return nil
}
for _, report := range []struct{ name, contents string }{
{"errors.yml", "schema: audita-errors\nversion: 1\nstatus: completed\nerrors: []\n"},
{"recoveries.yml", "schema: audita-recoveries\nversion: 1\nstatus: completed\nrecoveries: []\n"},
{"report.md", "# Audita report\n"},
} {
path := filepath.Join(filepath.Dir(req.OutputProcessedPath), report.name)
if err := fileops.WriteFileAtomic(path, []byte(report.contents), fileops.WorkspaceFileMode); err != nil {
return fmt.Errorf("write report %q: %w", path, err)
}
}
return nil
}