Skip to content

Commit 0ae9d59

Browse files
committed
Adds an execution error code to Flakeguard
1 parent 32d2999 commit 0ae9d59

File tree

7 files changed

+118
-57
lines changed

7 files changed

+118
-57
lines changed

tools/flakeguard/cmd/aggregate_results.go

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cmd
33
import (
44
"encoding/json"
55
"fmt"
6+
"os"
67
"path/filepath"
78
"time"
89

@@ -15,7 +16,7 @@ import (
1516
var AggregateResultsCmd = &cobra.Command{
1617
Use: "aggregate-results",
1718
Short: "Aggregate test results into a single JSON report",
18-
RunE: func(cmd *cobra.Command, args []string) error {
19+
Run: func(cmd *cobra.Command, args []string) {
1920
fs := reports.OSFileSystem{}
2021

2122
// Get flag values
@@ -37,7 +38,8 @@ var AggregateResultsCmd = &cobra.Command{
3738

3839
// Ensure the output directory exists
3940
if err := fs.MkdirAll(outputDir, 0755); err != nil {
40-
return fmt.Errorf("error creating output directory: %w", err)
41+
log.Error().Err(err).Str("path", outputDir).Msg("Error creating output directory")
42+
os.Exit(ErrorExitCode)
4143
}
4244

4345
// Start spinner for loading test reports
@@ -59,16 +61,11 @@ var AggregateResultsCmd = &cobra.Command{
5961
if err != nil {
6062
s.Stop()
6163
fmt.Println()
62-
return fmt.Errorf("error loading test reports: %w", err)
64+
log.Error().Err(err).Msg("Error aggregating test reports")
65+
os.Exit(ErrorExitCode)
6366
}
6467
s.Stop()
6568
fmt.Println()
66-
67-
if err != nil {
68-
s.Stop()
69-
return fmt.Errorf("error aggregating test reports: %w", err)
70-
}
71-
s.Stop()
7269
log.Debug().Msg("Successfully loaded and aggregated test reports")
7370

7471
// Start spinner for mapping test results to paths
@@ -80,9 +77,12 @@ var AggregateResultsCmd = &cobra.Command{
8077
err = reports.MapTestResultsToPaths(aggregatedReport, repoPath)
8178
if err != nil {
8279
s.Stop()
83-
return fmt.Errorf("error mapping test results to paths: %w", err)
80+
fmt.Println()
81+
log.Error().Err(err).Msg("Error mapping test results to paths")
82+
os.Exit(ErrorExitCode)
8483
}
8584
s.Stop()
85+
fmt.Println()
8686
log.Debug().Msg("Successfully mapped paths to test results")
8787

8888
// Map test results to code owners if codeOwnersPath is provided
@@ -94,16 +94,20 @@ var AggregateResultsCmd = &cobra.Command{
9494
err = reports.MapTestResultsToOwners(aggregatedReport, codeOwnersPath)
9595
if err != nil {
9696
s.Stop()
97-
return fmt.Errorf("error mapping test results to code owners: %w", err)
97+
fmt.Println()
98+
log.Error().Err(err).Msg("Error mapping test results to code owners")
99+
os.Exit(ErrorExitCode)
98100
}
99101
s.Stop()
102+
fmt.Println()
100103
log.Debug().Msg("Successfully mapped code owners to test results")
101104
}
102105

103106
failedTests := reports.FilterTests(aggregatedReport.Results, func(tr reports.TestResult) bool {
104107
return !tr.Skipped && tr.PassRatio < maxPassRatio
105108
})
106109
s.Stop()
110+
fmt.Println()
107111

108112
// Check if there are any failed tests
109113
if len(failedTests) > 0 {
@@ -125,7 +129,8 @@ var AggregateResultsCmd = &cobra.Command{
125129
// Save the failed tests report with logs
126130
failedTestsReportWithLogsPath := filepath.Join(outputDir, "failed-test-results-with-logs.json")
127131
if err := reports.SaveReport(fs, failedTestsReportWithLogsPath, *failedReportWithLogs); err != nil {
128-
return fmt.Errorf("error saving failed tests report with logs: %w", err)
132+
log.Error().Err(err).Msg("Error saving failed tests report with logs")
133+
os.Exit(ErrorExitCode)
129134
}
130135
log.Debug().Str("path", failedTestsReportWithLogsPath).Msg("Failed tests report with logs saved")
131136

@@ -139,7 +144,8 @@ var AggregateResultsCmd = &cobra.Command{
139144
// Save the failed tests report without logs
140145
failedTestsReportNoLogsPath := filepath.Join(outputDir, "failed-test-results.json")
141146
if err := reports.SaveReport(fs, failedTestsReportNoLogsPath, *failedReportWithLogs); err != nil {
142-
return fmt.Errorf("error saving failed tests report without logs: %w", err)
147+
log.Error().Err(err).Msg("Error saving failed tests report without logs")
148+
os.Exit(ErrorExitCode)
143149
}
144150
log.Debug().Str("path", failedTestsReportNoLogsPath).Msg("Failed tests report without logs saved")
145151
} else {
@@ -156,7 +162,8 @@ var AggregateResultsCmd = &cobra.Command{
156162
// Save the aggregated report to the output directory
157163
aggregatedReportPath := filepath.Join(outputDir, "all-test-results.json")
158164
if err := reports.SaveReport(fs, aggregatedReportPath, *aggregatedReport); err != nil {
159-
return fmt.Errorf("error saving aggregated test report: %w", err)
165+
log.Error().Err(err).Msg("Error saving aggregated test report")
166+
os.Exit(ErrorExitCode)
160167
}
161168
log.Debug().Str("path", aggregatedReportPath).Msg("Aggregated test report saved")
162169

@@ -171,14 +178,16 @@ var AggregateResultsCmd = &cobra.Command{
171178
err = generateAllTestsSummaryJSON(aggregatedReport, summaryFilePath, maxPassRatio)
172179
if err != nil {
173180
s.Stop()
174-
return fmt.Errorf("error generating summary json: %w", err)
181+
fmt.Println()
182+
log.Error().Err(err).Msg("Error generating summary json")
183+
os.Exit(ErrorExitCode)
175184
}
176185
s.Stop()
186+
fmt.Println()
177187
log.Debug().Str("path", summaryFilePath).Msg("Summary generated")
178188
}
179189

180190
log.Info().Str("summary", summaryFilePath).Str("report", aggregatedReportPath).Msg("Aggregation complete")
181-
return nil
182191
},
183192
}
184193

tools/flakeguard/cmd/check_test_owners.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cmd
22

33
import (
4+
"os"
45
"path/filepath"
56

67
"github.com/rs/zerolog/log"
@@ -18,19 +19,21 @@ var (
1819
var CheckTestOwnersCmd = &cobra.Command{
1920
Use: "check-test-owners",
2021
Short: "Check which tests in the project do not have code owners",
21-
RunE: func(cmd *cobra.Command, args []string) error {
22+
Run: func(cmd *cobra.Command, args []string) {
2223
projectPath, _ := cmd.Flags().GetString("project-path")
2324

2425
// Scan project for test functions
2526
testFileMap, err := reports.ScanTestFiles(projectPath)
2627
if err != nil {
27-
log.Fatal().Err(err).Msg("Error scanning test files")
28+
log.Error().Err(err).Msg("Error scanning test files")
29+
os.Exit(ErrorExitCode)
2830
}
2931

3032
// Parse CODEOWNERS file
3133
codeOwnerPatterns, err := codeowners.Parse(codeownersPath)
3234
if err != nil {
33-
log.Fatal().Err(err).Msg("Error parsing CODEOWNERS file")
35+
log.Error().Err(err).Msg("Error parsing CODEOWNERS file")
36+
os.Exit(ErrorExitCode)
3437
}
3538

3639
// Check for tests without code owners
@@ -73,8 +76,6 @@ var CheckTestOwnersCmd = &cobra.Command{
7376
log.Debug().Msg("All Test functions have code owners!")
7477
}
7578
}
76-
77-
return nil
7879
},
7980
}
8081

tools/flakeguard/cmd/find.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cmd
33
import (
44
"encoding/json"
55
"fmt"
6+
"os"
67

78
"github.com/rs/zerolog/log"
89
"github.com/smartcontractkit/chainlink-testing-framework/tools/flakeguard/git"
@@ -32,7 +33,8 @@ var FindTestsCmd = &cobra.Command{
3233
if findByTestFilesDiff {
3334
changedTestFiles, err := git.FindChangedFiles(projectPath, baseRef, "grep '_test\\.go$'")
3435
if err != nil {
35-
log.Fatal().Err(err).Msg("Error finding changed test files")
36+
log.Error().Err(err).Msg("Error finding changed test files")
37+
os.Exit(ErrorExitCode)
3638
}
3739
if onlyShowChangedTestFiles {
3840
outputResults(changedTestFiles, jsonOutput)
@@ -43,7 +45,8 @@ var FindTestsCmd = &cobra.Command{
4345
}
4446
changedTestPkgs, err = golang.GetFilePackages(changedTestFiles)
4547
if err != nil {
46-
log.Fatal().Err(err).Msg("Error getting package names for test files")
48+
log.Error().Err(err).Msg("Error getting package names for test files")
49+
os.Exit(ErrorExitCode)
4750
}
4851
}
4952

@@ -85,40 +88,47 @@ func init() {
8588
FindTestsCmd.Flags().Bool("only-show-changed-test-files", false, "Only show the changed test files and exit")
8689

8790
if err := FindTestsCmd.MarkFlagRequired("base-ref"); err != nil {
88-
log.Fatal().Err(err).Msg("Error marking base-ref as required")
91+
log.Error().Err(err).Msg("Error marking base-ref as required")
92+
os.Exit(ErrorExitCode)
8993
}
9094
}
9195

9296
func findAffectedPackages(baseRef, projectPath string, excludes []string, levels int) []string {
9397
goList, err := golang.GoList()
9498
if err != nil {
95-
log.Fatal().Err(err).Msg("Error getting go list")
99+
log.Error().Err(err).Msg("Error getting go list")
100+
os.Exit(ErrorExitCode)
96101
}
97102
gitDiff, err := git.Diff(baseRef)
98103
if err != nil {
99-
log.Fatal().Err(err).Msg("Error getting the git diff")
104+
log.Error().Err(err).Msg("Error getting the git diff")
105+
os.Exit(ErrorExitCode)
100106
}
101107
gitModDiff, err := git.ModDiff(baseRef, projectPath)
102108
if err != nil {
103-
log.Fatal().Err(err).Msg("Error getting the git mod diff")
109+
log.Error().Err(err).Msg("Error getting the git mod diff")
110+
os.Exit(ErrorExitCode)
104111
}
105112

106113
packages, err := golang.ParsePackages(goList.Stdout)
107114
if err != nil {
108-
log.Fatal().Err(err).Msg("Error parsing packages")
115+
log.Error().Err(err).Msg("Error parsing packages")
116+
os.Exit(ErrorExitCode)
109117
}
110118

111119
fileMap := golang.GetGoFileMap(packages, true)
112120

113121
var changedPackages []string
114122
changedPackages, err = git.GetChangedGoPackagesFromDiff(gitDiff.Stdout, projectPath, excludes, fileMap)
115123
if err != nil {
116-
log.Fatal().Err(err).Msg("Error getting changed packages")
124+
log.Error().Err(err).Msg("Error getting changed packages")
125+
os.Exit(ErrorExitCode)
117126
}
118127

119128
changedModPackages, err := git.GetGoModChangesFromDiff(gitModDiff.Stdout)
120129
if err != nil {
121-
log.Fatal().Err(err).Msg("Error getting go.mod changes")
130+
log.Error().Err(err).Msg("Error getting go.mod changes")
131+
os.Exit(ErrorExitCode)
122132
}
123133

124134
depMap := golang.GetGoDepMap(packages)
@@ -156,7 +166,8 @@ func outputResults(packages []string, jsonOutput bool) {
156166
if jsonOutput {
157167
data, err := json.Marshal(packages)
158168
if err != nil {
159-
log.Fatal().Err(err).Msg("Error marshaling test packages to JSON")
169+
log.Error().Err(err).Msg("Error marshaling test packages to JSON")
170+
os.Exit(ErrorExitCode)
160171
}
161172
log.Debug().Str("output", string(data)).Msg("JSON")
162173
} else {

0 commit comments

Comments
 (0)