in cmd/report.go [63:160]
func getBenchReportCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "benchmark",
Short: "Generate a benchmark report",
Long: "Generate a benchmark report comparing local results against ones from another benchmark run.",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
cmd.Printf("Generate benchmark reports\n")
failOnMissing, err := cmd.Flags().GetBool(cobraext.FailOnMissingFlagName)
if err != nil {
return cobraext.FlagParsingError(err, cobraext.FailOnMissingFlagName)
}
reportOutput, err := cmd.Flags().GetString(cobraext.ReportOutputFlagName)
if err != nil {
return cobraext.FlagParsingError(err, cobraext.ReportOutputFlagName)
}
reportOutputPath, err := cmd.Flags().GetString(cobraext.ReportOutputPathFlagName)
if err != nil {
return cobraext.FlagParsingError(err, cobraext.ReportOutputPathFlagName)
}
if reportOutputPath == "" {
dest, err := resultsDir()
if err != nil {
return fmt.Errorf("could not determine benchmark reports folder: %w", err)
}
reportOutputPath = dest
}
isFull, err := cmd.Flags().GetBool(cobraext.ReportFullFlagName)
if err != nil {
return cobraext.FlagParsingError(err, cobraext.ReportFullFlagName)
}
newPath, err := cmd.Flags().GetString(cobraext.BenchReportNewPathFlagName)
if err != nil {
return cobraext.FlagParsingError(err, cobraext.BenchReportNewPathFlagName)
}
oldPath, err := cmd.Flags().GetString(cobraext.BenchReportOldPathFlagName)
if err != nil {
return cobraext.FlagParsingError(err, cobraext.BenchReportOldPathFlagName)
}
threshold, err := cmd.Flags().GetFloat64(cobraext.BenchThresholdFlagName)
if err != nil {
return cobraext.FlagParsingError(err, cobraext.BenchThresholdFlagName)
}
if _, err := os.Stat(newPath); err != nil {
err = fmt.Errorf("stat file failed for the new path (path: %s): %w", newPath, err)
if failOnMissing {
return err
}
cmd.Println(err)
return nil
}
if _, err := os.Stat(oldPath); err != nil {
err = fmt.Errorf("stat file failed for the old path (path: %s): %w", oldPath, err)
if failOnMissing {
return err
}
cmd.Println(err)
return nil
}
report, err := reportgenerator.Generate("benchmark", reportgenerator.ReportOptions{
NewPath: newPath,
OldPath: oldPath,
Threshold: threshold,
Full: isFull,
})
if err != nil {
return err
}
if err := reportgenerator.WriteReport(
reportgenerator.ReportOutput(reportOutput),
report,
(reportgenerator.ReportGenerators()["benchmark"]).Format(),
reportOutputPath,
); err != nil {
return fmt.Errorf("error writing benchmark report: %w", err)
}
return err
},
}
cmd.Flags().StringP(cobraext.BenchReportNewPathFlagName, "", "", cobraext.BenchReportNewPathFlagDescription)
cmd.Flags().StringP(cobraext.BenchReportOldPathFlagName, "", "", cobraext.BenchReportOldPathFlagDescription)
cmd.Flags().Float64P(cobraext.BenchThresholdFlagName, "", 10, cobraext.BenchThresholdFlagDescription)
return cmd
}