From ccb127cc797ba4a829ee409d95a9db42e0760249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Jim=C3=A9nez=20S=C3=A1nchez?= Date: Mon, 31 Mar 2025 20:13:04 +0200 Subject: [PATCH] Remote provisioning: preview only one in pull requests (#103119) * Limit number of previews to 10 * Use variable to check too many * Single resource preview --- .../provisioning/jobs/pullrequest/preview.go | 26 +++--- .../provisioning/jobs/pullrequest/worker.go | 83 +++++++------------ 2 files changed, 48 insertions(+), 61 deletions(-) diff --git a/pkg/registry/apis/provisioning/jobs/pullrequest/preview.go b/pkg/registry/apis/provisioning/jobs/pullrequest/preview.go index 0521d85d79f..88d876ec1ee 100644 --- a/pkg/registry/apis/provisioning/jobs/pullrequest/preview.go +++ b/pkg/registry/apis/provisioning/jobs/pullrequest/preview.go @@ -25,21 +25,27 @@ type resourcePreview struct { } const previewsCommentTemplate = `Hey there! 🎉 -Grafana spotted some changes for your resources in this pull request: +Grafana spotted some changes for a single resource in this pull request: + ## Summary -| File Name | Kind | Path | Action | Links | -|-----------|------|------|--------|-------| -{{- range .}} -| {{.Filename}} | {{.Kind}} | {{.Path}} | {{.Action}} | {{- if .OriginalURL}}[Original]({{.OriginalURL}}){{- end}}{{- if and .OriginalURL .PreviewURL}}, {{end}}{{- if .PreviewURL}}[Preview]({{.PreviewURL}}){{- end}} | +File Name: {{.Filename}} +Kind: {{.Kind}} +Path: {{.Path}} +Action: {{.Action}} +Links: +{{- if .OriginalURL}} +- [Original]({{.OriginalURL}}) +{{- end}} +{{- if .PreviewURL}} +- [Preview]({{.PreviewURL}}) {{- end}} -Click the preview links above to view how your changes will look and compare them with the original and current versions. +Click the preview link above to view how your changes will look and compare them with the original and current versions. -{{- range .}} {{- if .PreviewScreenshotURL}} ### Preview of {{.Filename}} ![Preview]({{.PreviewScreenshotURL}}) -{{- end}}{{- end}}` +{{- end}}` // PreviewRenderer is an interface for rendering a preview of a file type PreviewRenderer interface { @@ -62,9 +68,9 @@ func NewPreviewer(renderer PreviewRenderer, urlProvider func(namespace string) s } // GenerateComment creates a formatted comment for dashboard previews -func (p *Previewer) GenerateComment(previews []resourcePreview) (string, error) { +func (p *Previewer) GenerateComment(preview *resourcePreview) (string, error) { var buf bytes.Buffer - if err := p.template.Execute(&buf, previews); err != nil { + if err := p.template.Execute(&buf, preview); err != nil { return "", fmt.Errorf("execute previews comment template: %w", err) } return buf.String(), nil diff --git a/pkg/registry/apis/provisioning/jobs/pullrequest/worker.go b/pkg/registry/apis/provisioning/jobs/pullrequest/worker.go index 9ae20efad2e..c910b5315ba 100644 --- a/pkg/registry/apis/provisioning/jobs/pullrequest/worker.go +++ b/pkg/registry/apis/provisioning/jobs/pullrequest/worker.go @@ -91,60 +91,41 @@ func (c *PullRequestWorker) Process(ctx context.Context, return nil } - progress.SetMessage(ctx, "processing pull request files") - previews := make([]resourcePreview, 0, len(files)) - for _, f := range files { - result := jobs.JobResourceResult{ - Path: f.Path, - } - - if err := resources.IsPathSupported(f.Path); err != nil { - result.Action = repository.FileActionIgnored - progress.Record(ctx, result) - continue - } - result.Action = f.Action - - fileInfo, err := prRepo.Read(ctx, f.Path, ref) - if err != nil { - return fmt.Errorf("read file: %w", err) - } - - parsed, err := parser.Parse(ctx, fileInfo, true) - if err != nil { - if errors.Is(err, resources.ErrUnableToReadResourceBytes) { - logger.Debug("file is not a resource", "path", f.Path) - result.Action = repository.FileActionIgnored - progress.Record(ctx, result) - } else { - result.Error = fmt.Errorf("failed to parse resource: %w", err) - progress.Record(ctx, result) - } - continue - } - - result.Resource = parsed.GVR.Resource - result.Group = parsed.GVR.Group - result.Name = parsed.Obj.GetName() - - preview, err := c.previewer.Preview(ctx, f, job.Namespace, repo.Config().Name, cfg.GitHub.Branch, ref, options.URL, cfg.GitHub.GenerateDashboardPreviews) - if err != nil { - result.Error = fmt.Errorf("create preview: %w", err) - progress.Record(ctx, result) - continue - } - - previews = append(previews, *preview) - progress.Record(ctx, result) - } - - if len(previews) == 0 { - progress.SetFinalMessage(ctx, "no previews to add") + if len(files) > 1 { + progress.SetFinalMessage(ctx, "too many files to preview") return nil } + f := files[0] + progress.SetMessage(ctx, "processing file preview") + + if err := resources.IsPathSupported(f.Path); err != nil { + progress.SetFinalMessage(ctx, "file path is not supported") + return nil + } + + fileInfo, err := prRepo.Read(ctx, f.Path, ref) + if err != nil { + return fmt.Errorf("read file: %w", err) + } + + _, err = parser.Parse(ctx, fileInfo, true) + if err != nil { + if errors.Is(err, resources.ErrUnableToReadResourceBytes) { + progress.SetFinalMessage(ctx, "file changes is not valid resource") + return nil + } else { + return fmt.Errorf("parse resource: %w", err) + } + } + + preview, err := c.previewer.Preview(ctx, f, job.Namespace, repo.Config().Name, cfg.GitHub.Branch, ref, options.URL, cfg.GitHub.GenerateDashboardPreviews) + if err != nil { + return fmt.Errorf("generate preview: %w", err) + } + progress.SetMessage(ctx, "generating previews comment") - comment, err := c.previewer.GenerateComment(previews) + comment, err := c.previewer.GenerateComment(preview) if err != nil { return fmt.Errorf("generate comment: %w", err) } @@ -152,7 +133,7 @@ func (c *PullRequestWorker) Process(ctx context.Context, if err := prRepo.CommentPullRequest(ctx, options.PR, comment); err != nil { return fmt.Errorf("comment pull request: %w", err) } - logger.Info("previews comment added", "number", len(previews)) + logger.Info("preview comment added") return nil }