dev/testsreporter/packageerror.go (94 lines of code) (raw):

// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one // or more contributor license agreements. Licensed under the Elastic License; // you may not use this file except in compliance with the Elastic License. package testsreporter import ( "fmt" "strings" "github.com/elastic/integrations/dev/codeowners" ) type packageError struct { testCase dataError teams []string packageName string dataStream string } type packageErrorOptions struct { Serverless bool ServerlessProject string LogsDB bool StackVersion string Subscription string BuildURL string TestCase testCase CodeownersPath string ClosedIssueURL string PreviousBuilds []string Teams []string } // Ensures that packageError implements failureObserver interface var _ failureObserver = new(packageError) func newPackageError(options packageErrorOptions) (*packageError, error) { p := packageError{ dataError: dataError{ serverless: options.Serverless, serverlessProject: options.ServerlessProject, logsDB: options.LogsDB, stackVersion: options.StackVersion, subscription: options.Subscription, errorLinks: errorLinks{ firstBuild: options.BuildURL, closedIssueURL: options.ClosedIssueURL, previousBuilds: options.PreviousBuilds, }, }, testCase: options.TestCase, teams: options.Teams, } p.packageName = p.testCase.PackageName() p.dataStream = p.testCase.DataStream() if len(options.Teams) == 0 { owners, err := codeowners.PackageOwners(p.packageName, p.dataStream, options.CodeownersPath) if err != nil { return nil, fmt.Errorf("failed to find owners for package %s: %w", p.packageName, err) } p.teams = owners } return &p, nil } func (p *packageError) FirstBuild() string { return p.errorLinks.firstBuild } func (p *packageError) UpdateLinks(links errorLinks) { p.errorLinks = links } func (p *packageError) Teams() []string { return p.teams } func (p *packageError) String() string { var sb strings.Builder sb.WriteString(p.dataError.String()) sb.WriteString("[") sb.WriteString(p.packageName) sb.WriteString("] ") sb.WriteString("Failing test daily: ") sb.WriteString(p.testCase.String()) return sb.String() } func (p *packageError) SummaryData() map[string]any { data := p.dataError.Data() data["packageName"] = p.packageName data["testName"] = p.Name data["dataStream"] = p.dataStream data["owners"] = p.teams return data } func (p *packageError) DescriptionData() map[string]any { data := p.SummaryData() for key, value := range p.errorLinks.Data() { data[key] = value } data["failure"] = truncateText(p.Failure, defaultMaxLengthMessages) data["error"] = truncateText(p.Error, defaultMaxLengthMessages) return data } func (p *packageError) Labels() []string { return nil }