func getBenchReportCommand()

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
}