From c580a91cf239f399d9c25d869bf316690cf43e65 Mon Sep 17 00:00:00 2001 From: Teresa Romero Date: Wed, 12 Nov 2025 10:43:40 +0100 Subject: [PATCH 1/6] feat: add Elastic Stack and Elastic Package version to test results --- .../testrunner/reporters/formats/human.go | 13 +++++- .../testrunner/reporters/formats/xunit.go | 15 ++++--- internal/testrunner/runners/system/tester.go | 45 +++++++++++-------- internal/testrunner/testrunner.go | 6 +++ internal/version/version.go | 13 ++++++ 5 files changed, 67 insertions(+), 25 deletions(-) diff --git a/internal/testrunner/reporters/formats/human.go b/internal/testrunner/reporters/formats/human.go index feee51b42a..142bd920f7 100644 --- a/internal/testrunner/reporters/formats/human.go +++ b/internal/testrunner/reporters/formats/human.go @@ -48,7 +48,7 @@ func reportHumanFormat(results []testrunner.TestResult) (string, error) { } t := table.NewWriter() - t.AppendHeader(table.Row{"Package", "Data stream", "Test type", "Test name", "Result", "Time elapsed"}) + t.AppendHeader(table.Row{"Package", "Data stream", "Test type", "Test name", "Result", "Stack version", "EP version", "Time elapsed"}) for _, r := range results { var result string @@ -62,7 +62,16 @@ func reportHumanFormat(results []testrunner.TestResult) (string, error) { result = "PASS" } - t.AppendRow(table.Row{r.Package, r.DataStream, r.TestType, r.Name, result, r.TimeElapsed}) + stackVersion := r.ElasticStackVersion + if stackVersion == "" { + stackVersion = "N/A" + } + epVersion := r.ElasticPackageVersion + if epVersion == "" { + epVersion = "N/A" + } + + t.AppendRow(table.Row{r.Package, r.DataStream, r.TestType, r.Name, result, stackVersion, epVersion, r.TimeElapsed}) } t.SetStyle(table.StyleRounded) diff --git a/internal/testrunner/reporters/formats/xunit.go b/internal/testrunner/reporters/formats/xunit.go index 106e9c256e..14a3aa37b0 100644 --- a/internal/testrunner/reporters/formats/xunit.go +++ b/internal/testrunner/reporters/formats/xunit.go @@ -41,6 +41,9 @@ type testCase struct { ClassName string `xml:"classname,attr"` TimeInSeconds float64 `xml:"time,attr"` + StackVersion string `xml:"stack-version,attr,omitempty"` + ElasticPackageVersion string `xml:"elastic-package-version,attr,omitempty"` + Error string `xml:"error,omitempty"` Failure string `xml:"failure,omitempty"` Skipped *skipped `xml:"skipped,omitempty"` @@ -93,11 +96,13 @@ func reportXUnitFormat(results []testrunner.TestResult) (string, error) { } c := testCase{ - Name: name, - ClassName: fmt.Sprintf("%s.%s", r.Package, r.DataStream), - TimeInSeconds: r.TimeElapsed.Seconds(), - Error: r.ErrorMsg, - Failure: failure, + Name: name, + ClassName: fmt.Sprintf("%s.%s", r.Package, r.DataStream), + TimeInSeconds: r.TimeElapsed.Seconds(), + StackVersion: r.ElasticStackVersion, + ElasticPackageVersion: r.ElasticPackageVersion, + Error: r.ErrorMsg, + Failure: failure, } if r.Skipped != nil { diff --git a/internal/testrunner/runners/system/tester.go b/internal/testrunner/runners/system/tester.go index e8c4028885..0713e7b2ca 100644 --- a/internal/testrunner/runners/system/tester.go +++ b/internal/testrunner/runners/system/tester.go @@ -38,6 +38,7 @@ import ( "github.com/elastic/elastic-package/internal/servicedeployer" "github.com/elastic/elastic-package/internal/stack" "github.com/elastic/elastic-package/internal/testrunner" + "github.com/elastic/elastic-package/internal/version" "github.com/elastic/elastic-package/internal/wait" ) @@ -640,10 +641,12 @@ func (r *tester) tearDownTest(ctx context.Context) error { func (r *tester) newResult(name string) *testrunner.ResultComposer { return testrunner.NewResultComposer(testrunner.TestResult{ - TestType: TestType, - Name: name, - Package: r.testFolder.Package, - DataStream: r.testFolder.DataStream, + TestType: TestType, + Name: name, + Package: r.testFolder.Package, + DataStream: r.testFolder.DataStream, + ElasticStackVersion: r.stackVersion.Version(), + ElasticPackageVersion: version.String(), }) } @@ -920,12 +923,14 @@ func (r *tester) checkDeprecationWarnings(stackVersion *semver.Version, warnings details = fmt.Sprintf("%s (index: %s)", details, warning.index) } tr := testrunner.TestResult{ - TestType: TestType, - Name: "Deprecation warnings - " + configName, - Package: r.testFolder.Package, - DataStream: r.testFolder.DataStream, - FailureMsg: warning.Message, - FailureDetails: details, + TestType: TestType, + Name: "Deprecation warnings - " + configName, + Package: r.testFolder.Package, + DataStream: r.testFolder.DataStream, + FailureMsg: warning.Message, + FailureDetails: details, + ElasticStackVersion: r.stackVersion.Version(), + ElasticPackageVersion: version.String(), } results = append(results, tr) } @@ -2514,10 +2519,12 @@ func (r *tester) checkNewAgentLogs(ctx context.Context, agent agentdeployer.Depl err = r.anyErrorMessages(f.Name(), startTesting, patternsContainer.patterns) if e, ok := err.(testrunner.ErrTestCaseFailed); ok { tr := testrunner.TestResult{ - TestType: TestType, - Name: fmt.Sprintf("(%s logs - %s)", patternsContainer.containerName, configName), - Package: r.testFolder.Package, - DataStream: r.testFolder.DataStream, + TestType: TestType, + Name: fmt.Sprintf("(%s logs - %s)", patternsContainer.containerName, configName), + Package: r.testFolder.Package, + DataStream: r.testFolder.DataStream, + ElasticStackVersion: r.stackVersion.Version(), + ElasticPackageVersion: version.String(), } tr.FailureMsg = e.Error() tr.FailureDetails = e.Details @@ -2551,10 +2558,12 @@ func (r *tester) checkAgentLogs(dump []stack.DumpResult, startTesting time.Time, err = r.anyErrorMessages(serviceLogsFile, startTesting, patternsContainer.patterns) if e, ok := err.(testrunner.ErrTestCaseFailed); ok { tr := testrunner.TestResult{ - TestType: TestType, - Name: fmt.Sprintf("(%s logs)", patternsContainer.containerName), - Package: r.testFolder.Package, - DataStream: r.testFolder.DataStream, + TestType: TestType, + Name: fmt.Sprintf("(%s logs)", patternsContainer.containerName), + Package: r.testFolder.Package, + DataStream: r.testFolder.DataStream, + ElasticStackVersion: r.stackVersion.Version(), + ElasticPackageVersion: version.String(), } tr.FailureMsg = e.Error() tr.FailureDetails = e.Details diff --git a/internal/testrunner/testrunner.go b/internal/testrunner/testrunner.go index 9168d97311..2fec613003 100644 --- a/internal/testrunner/testrunner.go +++ b/internal/testrunner/testrunner.go @@ -123,6 +123,12 @@ type TestResult struct { // Coverage details in Cobertura format (optional). Coverage CoverageReport + + // Elastic Stack version + ElasticStackVersion string + + // ElasticPackage version + ElasticPackageVersion string } // ResultComposer wraps a TestResult and provides convenience methods for diff --git a/internal/version/version.go b/internal/version/version.go index f3b9bb31b5..94399f103e 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -5,8 +5,10 @@ package version import ( + "fmt" "runtime/debug" "strconv" + "strings" "time" ) @@ -44,3 +46,14 @@ func BuildTimeFormatted() string { } return time.Unix(seconds, 0).Format(time.RFC3339) } + +// String returns a formatted version string for elastic-package. +// Format: "tag version-hash commitHash (build time: buildTime)" or just "version-hash commitHash" if no tag. +func String() string { + var parts []string + if Tag != "" { + parts = append(parts, Tag) + } + parts = append(parts, fmt.Sprintf("version-hash %s (build time: %s)", CommitHash, BuildTimeFormatted())) + return strings.Join(parts, " ") +} From e258efe396f07af8372e9c4113998aae7a0ef353 Mon Sep 17 00:00:00 2001 From: Teresa Romero Date: Thu, 13 Nov 2025 11:28:31 +0100 Subject: [PATCH 2/6] Revert "feat: add Elastic Stack and Elastic Package version to test results" This reverts commit c580a91cf239f399d9c25d869bf316690cf43e65. --- .../testrunner/reporters/formats/human.go | 13 +----- .../testrunner/reporters/formats/xunit.go | 15 +++---- internal/testrunner/runners/system/tester.go | 45 ++++++++----------- internal/testrunner/testrunner.go | 6 --- internal/version/version.go | 13 ------ 5 files changed, 25 insertions(+), 67 deletions(-) diff --git a/internal/testrunner/reporters/formats/human.go b/internal/testrunner/reporters/formats/human.go index 142bd920f7..feee51b42a 100644 --- a/internal/testrunner/reporters/formats/human.go +++ b/internal/testrunner/reporters/formats/human.go @@ -48,7 +48,7 @@ func reportHumanFormat(results []testrunner.TestResult) (string, error) { } t := table.NewWriter() - t.AppendHeader(table.Row{"Package", "Data stream", "Test type", "Test name", "Result", "Stack version", "EP version", "Time elapsed"}) + t.AppendHeader(table.Row{"Package", "Data stream", "Test type", "Test name", "Result", "Time elapsed"}) for _, r := range results { var result string @@ -62,16 +62,7 @@ func reportHumanFormat(results []testrunner.TestResult) (string, error) { result = "PASS" } - stackVersion := r.ElasticStackVersion - if stackVersion == "" { - stackVersion = "N/A" - } - epVersion := r.ElasticPackageVersion - if epVersion == "" { - epVersion = "N/A" - } - - t.AppendRow(table.Row{r.Package, r.DataStream, r.TestType, r.Name, result, stackVersion, epVersion, r.TimeElapsed}) + t.AppendRow(table.Row{r.Package, r.DataStream, r.TestType, r.Name, result, r.TimeElapsed}) } t.SetStyle(table.StyleRounded) diff --git a/internal/testrunner/reporters/formats/xunit.go b/internal/testrunner/reporters/formats/xunit.go index 14a3aa37b0..106e9c256e 100644 --- a/internal/testrunner/reporters/formats/xunit.go +++ b/internal/testrunner/reporters/formats/xunit.go @@ -41,9 +41,6 @@ type testCase struct { ClassName string `xml:"classname,attr"` TimeInSeconds float64 `xml:"time,attr"` - StackVersion string `xml:"stack-version,attr,omitempty"` - ElasticPackageVersion string `xml:"elastic-package-version,attr,omitempty"` - Error string `xml:"error,omitempty"` Failure string `xml:"failure,omitempty"` Skipped *skipped `xml:"skipped,omitempty"` @@ -96,13 +93,11 @@ func reportXUnitFormat(results []testrunner.TestResult) (string, error) { } c := testCase{ - Name: name, - ClassName: fmt.Sprintf("%s.%s", r.Package, r.DataStream), - TimeInSeconds: r.TimeElapsed.Seconds(), - StackVersion: r.ElasticStackVersion, - ElasticPackageVersion: r.ElasticPackageVersion, - Error: r.ErrorMsg, - Failure: failure, + Name: name, + ClassName: fmt.Sprintf("%s.%s", r.Package, r.DataStream), + TimeInSeconds: r.TimeElapsed.Seconds(), + Error: r.ErrorMsg, + Failure: failure, } if r.Skipped != nil { diff --git a/internal/testrunner/runners/system/tester.go b/internal/testrunner/runners/system/tester.go index 0713e7b2ca..e8c4028885 100644 --- a/internal/testrunner/runners/system/tester.go +++ b/internal/testrunner/runners/system/tester.go @@ -38,7 +38,6 @@ import ( "github.com/elastic/elastic-package/internal/servicedeployer" "github.com/elastic/elastic-package/internal/stack" "github.com/elastic/elastic-package/internal/testrunner" - "github.com/elastic/elastic-package/internal/version" "github.com/elastic/elastic-package/internal/wait" ) @@ -641,12 +640,10 @@ func (r *tester) tearDownTest(ctx context.Context) error { func (r *tester) newResult(name string) *testrunner.ResultComposer { return testrunner.NewResultComposer(testrunner.TestResult{ - TestType: TestType, - Name: name, - Package: r.testFolder.Package, - DataStream: r.testFolder.DataStream, - ElasticStackVersion: r.stackVersion.Version(), - ElasticPackageVersion: version.String(), + TestType: TestType, + Name: name, + Package: r.testFolder.Package, + DataStream: r.testFolder.DataStream, }) } @@ -923,14 +920,12 @@ func (r *tester) checkDeprecationWarnings(stackVersion *semver.Version, warnings details = fmt.Sprintf("%s (index: %s)", details, warning.index) } tr := testrunner.TestResult{ - TestType: TestType, - Name: "Deprecation warnings - " + configName, - Package: r.testFolder.Package, - DataStream: r.testFolder.DataStream, - FailureMsg: warning.Message, - FailureDetails: details, - ElasticStackVersion: r.stackVersion.Version(), - ElasticPackageVersion: version.String(), + TestType: TestType, + Name: "Deprecation warnings - " + configName, + Package: r.testFolder.Package, + DataStream: r.testFolder.DataStream, + FailureMsg: warning.Message, + FailureDetails: details, } results = append(results, tr) } @@ -2519,12 +2514,10 @@ func (r *tester) checkNewAgentLogs(ctx context.Context, agent agentdeployer.Depl err = r.anyErrorMessages(f.Name(), startTesting, patternsContainer.patterns) if e, ok := err.(testrunner.ErrTestCaseFailed); ok { tr := testrunner.TestResult{ - TestType: TestType, - Name: fmt.Sprintf("(%s logs - %s)", patternsContainer.containerName, configName), - Package: r.testFolder.Package, - DataStream: r.testFolder.DataStream, - ElasticStackVersion: r.stackVersion.Version(), - ElasticPackageVersion: version.String(), + TestType: TestType, + Name: fmt.Sprintf("(%s logs - %s)", patternsContainer.containerName, configName), + Package: r.testFolder.Package, + DataStream: r.testFolder.DataStream, } tr.FailureMsg = e.Error() tr.FailureDetails = e.Details @@ -2558,12 +2551,10 @@ func (r *tester) checkAgentLogs(dump []stack.DumpResult, startTesting time.Time, err = r.anyErrorMessages(serviceLogsFile, startTesting, patternsContainer.patterns) if e, ok := err.(testrunner.ErrTestCaseFailed); ok { tr := testrunner.TestResult{ - TestType: TestType, - Name: fmt.Sprintf("(%s logs)", patternsContainer.containerName), - Package: r.testFolder.Package, - DataStream: r.testFolder.DataStream, - ElasticStackVersion: r.stackVersion.Version(), - ElasticPackageVersion: version.String(), + TestType: TestType, + Name: fmt.Sprintf("(%s logs)", patternsContainer.containerName), + Package: r.testFolder.Package, + DataStream: r.testFolder.DataStream, } tr.FailureMsg = e.Error() tr.FailureDetails = e.Details diff --git a/internal/testrunner/testrunner.go b/internal/testrunner/testrunner.go index 2fec613003..9168d97311 100644 --- a/internal/testrunner/testrunner.go +++ b/internal/testrunner/testrunner.go @@ -123,12 +123,6 @@ type TestResult struct { // Coverage details in Cobertura format (optional). Coverage CoverageReport - - // Elastic Stack version - ElasticStackVersion string - - // ElasticPackage version - ElasticPackageVersion string } // ResultComposer wraps a TestResult and provides convenience methods for diff --git a/internal/version/version.go b/internal/version/version.go index 94399f103e..f3b9bb31b5 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -5,10 +5,8 @@ package version import ( - "fmt" "runtime/debug" "strconv" - "strings" "time" ) @@ -46,14 +44,3 @@ func BuildTimeFormatted() string { } return time.Unix(seconds, 0).Format(time.RFC3339) } - -// String returns a formatted version string for elastic-package. -// Format: "tag version-hash commitHash (build time: buildTime)" or just "version-hash commitHash" if no tag. -func String() string { - var parts []string - if Tag != "" { - parts = append(parts, Tag) - } - parts = append(parts, fmt.Sprintf("version-hash %s (build time: %s)", CommitHash, BuildTimeFormatted())) - return strings.Join(parts, " ") -} From 98001640ba3396d29b43f3b9b9a5e695b93bc197 Mon Sep 17 00:00:00 2001 From: Teresa Romero Date: Thu, 13 Nov 2025 13:56:07 +0100 Subject: [PATCH 3/6] feat: add JSON format support for test reports and update file output extension --- internal/cobraext/flags.go | 2 +- internal/testrunner/reporters/formats/json.go | 72 +++++++++++++++++++ internal/testrunner/reporters/outputs/file.go | 5 +- 3 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 internal/testrunner/reporters/formats/json.go diff --git a/internal/cobraext/flags.go b/internal/cobraext/flags.go index a096c9fb56..d3ee455550 100644 --- a/internal/cobraext/flags.go +++ b/internal/cobraext/flags.go @@ -154,7 +154,7 @@ const ( ProfileFormatFlagDescription = "format of the profiles list (table | json)" ReportFormatFlagName = "report-format" - ReportFormatFlagDescription = "format of test report, eg: human, xUnit" + ReportFormatFlagDescription = "format of test report, eg: human, xUnit, json" ReportFullFlagName = "full" ReportFullFlagDescription = "whether to show the full report or a summary" diff --git a/internal/testrunner/reporters/formats/json.go b/internal/testrunner/reporters/formats/json.go new file mode 100644 index 0000000000..452f4d9825 --- /dev/null +++ b/internal/testrunner/reporters/formats/json.go @@ -0,0 +1,72 @@ +// 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 formats + +import ( + "encoding/json" + "fmt" + + "github.com/elastic/elastic-package/internal/testrunner" +) + +func init() { + testrunner.RegisterReporterFormat(ReportFormatJSON, reportJSONFormat) +} + +const ( + // ReportFormatJSON reports test results in a JSON format + ReportFormatJSON testrunner.TestReportFormat = "json" +) + +type jsonResult struct { + Package string `json:"package"` + DataStream string `json:"data_stream,omitempty"` + TestType string `json:"test_type"` + Name string `json:"name"` + Result string `json:"result"` + TimeElapsed string `json:"time_elapsed"` + FailureDetails string `json:"failure_details,omitempty"` +} + +func reportJSONFormat(results []testrunner.TestResult) (string, error) { + if len(results) == 0 { + return "No test results", nil + } + + jsonReport := make([]jsonResult, 0, len(results)) + for _, r := range results { + jsonResult := jsonResult{ + Package: r.Package, + DataStream: r.DataStream, + TestType: string(r.TestType), + Name: r.Name, + TimeElapsed: r.TimeElapsed.String(), + } + + if r.FailureMsg != "" { + jsonResult.FailureDetails = fmt.Sprintf("%s/%s %s:\n%s\n", r.Package, r.DataStream, r.Name, r.FailureDetails) + } + + var result string + if r.ErrorMsg != "" { + result = fmt.Sprintf("ERROR: %s", r.ErrorMsg) + } else if r.FailureMsg != "" { + result = fmt.Sprintf("FAIL: %s", r.FailureMsg) + } else if r.Skipped != nil { + result = fmt.Sprintf("SKIPPED: %s", r.Skipped.String()) + } else { + result = "PASS" + } + jsonResult.Result = result + + jsonReport = append(jsonReport, jsonResult) + } + + b, err := json.Marshal(jsonReport) + if err != nil { + return "", fmt.Errorf("marshaling test results to JSON: %w", err) + } + return string(b), nil +} diff --git a/internal/testrunner/reporters/outputs/file.go b/internal/testrunner/reporters/outputs/file.go index 4588357e56..bf04cfbc90 100644 --- a/internal/testrunner/reporters/outputs/file.go +++ b/internal/testrunner/reporters/outputs/file.go @@ -39,8 +39,11 @@ func reportToFile(pkg, report string, testType testrunner.TestType, format testr } ext := "txt" - if format == formats.ReportFormatXUnit { + switch format { + case formats.ReportFormatXUnit: ext = "xml" + case formats.ReportFormatJSON: + ext = "json" } fileName := fmt.Sprintf("%s-%s-%d.%s", pkg, testType, time.Now().UnixNano(), ext) From 44babb7f6d482b99745bfa6d2719e38891747790 Mon Sep 17 00:00:00 2001 From: Teresa Romero Date: Thu, 13 Nov 2025 14:16:30 +0100 Subject: [PATCH 4/6] refactor version cmd to use new version.Version function --- cmd/version.go | 10 +--------- internal/version/version.go | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/cmd/version.go b/cmd/version.go index 62e19d3d34..ba26a3f003 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -6,7 +6,6 @@ package cmd import ( "fmt" - "strings" "github.com/spf13/cobra" @@ -29,13 +28,6 @@ func setupVersionCommand() *cobraext.Command { } func versionCommandAction(cmd *cobra.Command, args []string) error { - var sb strings.Builder - sb.WriteString("elastic-package ") - if version.Tag != "" { - sb.WriteString(version.Tag) - sb.WriteString(" ") - } - sb.WriteString(fmt.Sprintf("version-hash %s (build time: %s)", version.CommitHash, version.BuildTimeFormatted())) - fmt.Println(sb.String()) + fmt.Println(version.Version()) return nil } diff --git a/internal/version/version.go b/internal/version/version.go index f3b9bb31b5..e715dc7732 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -5,8 +5,10 @@ package version import ( + "fmt" "runtime/debug" "strconv" + "strings" "time" ) @@ -32,8 +34,8 @@ func init() { } } -// BuildTimeFormatted method returns the build time preserving the RFC3339 format. -func BuildTimeFormatted() string { +// buildTimeFormatted method returns the build time preserving the RFC3339 format. +func buildTimeFormatted() string { if BuildTime == "unknown" { return BuildTime } @@ -44,3 +46,14 @@ func BuildTimeFormatted() string { } return time.Unix(seconds, 0).Format(time.RFC3339) } + +func Version() string { + var sb strings.Builder + sb.WriteString("elastic-package ") + if Tag != "" { + sb.WriteString(Tag) + sb.WriteString(" ") + } + sb.WriteString(fmt.Sprintf("version-hash %s (build time: %s)", CommitHash, buildTimeFormatted())) + return sb.String() +} From 9354a4cbac0e561a7acf78d5137cd21053115c77 Mon Sep 17 00:00:00 2001 From: Teresa Romero Date: Thu, 13 Nov 2025 14:17:23 +0100 Subject: [PATCH 5/6] show stack version and elastic-package version to system test command action --- cmd/testrunner.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmd/testrunner.go b/cmd/testrunner.go index f06a33045c..9551321566 100644 --- a/cmd/testrunner.go +++ b/cmd/testrunner.go @@ -31,6 +31,7 @@ import ( "github.com/elastic/elastic-package/internal/testrunner/runners/policy" "github.com/elastic/elastic-package/internal/testrunner/runners/static" "github.com/elastic/elastic-package/internal/testrunner/runners/system" + "github.com/elastic/elastic-package/internal/version" ) const testLongDescription = `Use this command to run tests on a package. Currently, the following types of tests are available: @@ -566,6 +567,13 @@ func testRunnerSystemCommandAction(cmd *cobra.Command, args []string) error { return fmt.Errorf("failed to read global config: %w", err) } + stackVersion, err := kibanaClient.Version() + if err != nil { + return fmt.Errorf("fetching stack version failed: %w", err) + } + + cmd.Println(version.Version()) + cmd.Printf("elastic-stack: %s\n", stackVersion.Version()) runner := system.NewSystemTestRunner(system.SystemTestRunnerOptions{ Profile: profile, PackageRootPath: packageRootPath, From f9c24e2db8f84e9ae3ef1e45ac9c33374919dcd6 Mon Sep 17 00:00:00 2001 From: Teresa Romero Date: Thu, 13 Nov 2025 14:25:04 +0100 Subject: [PATCH 6/6] display Elastic Package and Stack versions in test runner commands --- cmd/testrunner.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/cmd/testrunner.go b/cmd/testrunner.go index 9551321566..a097cbd1cf 100644 --- a/cmd/testrunner.go +++ b/cmd/testrunner.go @@ -175,6 +175,7 @@ func testRunnerAssetCommandAction(cmd *cobra.Command, args []string) error { return fmt.Errorf("failed to read global config: %w", err) } + cmd.Println(version.Version()) runner := asset.NewAssetTestRunner(asset.AssetTestRunnerOptions{ PackageRootPath: packageRootPath, KibanaClient: kibanaClient, @@ -263,6 +264,7 @@ func testRunnerStaticCommandAction(cmd *cobra.Command, args []string) error { return fmt.Errorf("failed to read global config: %w", err) } + cmd.Println(version.Version()) runner := static.NewStaticTestRunner(static.StaticTestRunnerOptions{ PackageRootPath: packageRootPath, DataStreams: dataStreams, @@ -381,6 +383,13 @@ func testRunnerPipelineCommandAction(cmd *cobra.Command, args []string) error { return fmt.Errorf("failed to read global config: %w", err) } + esClientInfo, err := esClient.Info(ctx) + if err != nil { + return fmt.Errorf("fetching stack version failed: %w", err) + } + + cmd.Println(version.Version()) + cmd.Printf("elastic-stack: %s\n", esClientInfo.Version.Number) runner := pipeline.NewPipelineTestRunner(pipeline.PipelineTestRunnerOptions{ Profile: profile, PackageRootPath: packageRootPath, @@ -699,6 +708,13 @@ func testRunnerPolicyCommandAction(cmd *cobra.Command, args []string) error { return fmt.Errorf("failed to read global config: %w", err) } + stackVersion, err := kibanaClient.Version() + if err != nil { + return fmt.Errorf("fetching stack version failed: %w", err) + } + + cmd.Println(version.Version()) + cmd.Printf("elastic-stack: %s\n", stackVersion.Version()) runner := policy.NewPolicyTestRunner(policy.PolicyTestRunnerOptions{ PackageRootPath: packageRootPath, KibanaClient: kibanaClient,