Skip to content

Commit 630a0dc

Browse files
smjt-hHarness
authored andcommitted
feat: [CI-16291]: Add telemetry for local delegate (#50)
* feat: [CI-16291]: Add telemetry for local delegate * feat: [CI-16291]: Add telemetry for local delegate
1 parent 90fe041 commit 630a0dc

File tree

8 files changed

+107
-63
lines changed

8 files changed

+107
-63
lines changed

api/api.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package api
77
import (
88
"github.com/harness/harness-docker-runner/engine/spec"
99
leapi "github.com/harness/lite-engine/api"
10+
"github.com/harness/ti-client/types"
1011
)
1112

1213
type CommandExecutionStatus string
@@ -163,14 +164,15 @@ type (
163164
}
164165

165166
PollStepResponse struct {
166-
Exited bool `json:"exited,omitempty"`
167-
ExitCode int `json:"exit_code,omitempty"`
168-
Error string `json:"error,omitempty"`
169-
OOMKilled bool `json:"oom_killed,omitempty"`
170-
Outputs map[string]string `json:"outputs,omitempty"`
171-
Artifact []byte `json:"artifact,omitempty"`
172-
OutputV2 []*OutputV2 `json:"outputV2,omitempty"`
173-
OptimizationState string `json:"optimization_state,omitempty"`
167+
Exited bool `json:"exited,omitempty"`
168+
ExitCode int `json:"exit_code,omitempty"`
169+
Error string `json:"error,omitempty"`
170+
OOMKilled bool `json:"oom_killed,omitempty"`
171+
Outputs map[string]string `json:"outputs,omitempty"`
172+
Artifact []byte `json:"artifact,omitempty"`
173+
OutputV2 []*OutputV2 `json:"outputV2,omitempty"`
174+
OptimizationState string `json:"optimization_state,omitempty"`
175+
Telemetry *types.TelemetryData `json:"telemetry,omitempty"`
174176
}
175177

176178
StreamOutputRequest struct {

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ require (
4242
github.com/google/gops v0.3.25 // indirect
4343
github.com/google/uuid v1.3.0 // indirect
4444
github.com/harness/godotenv/v2 v2.0.0 // indirect
45-
github.com/harness/lite-engine v0.5.89 // indirect
46-
github.com/harness/ti-client v0.0.0-20240617230757-1e90e7e3ada2 // indirect
45+
github.com/harness/lite-engine v0.5.96 // indirect
46+
github.com/harness/ti-client v0.0.0-20250211085345-7c82b29d1b3c // indirect
4747
github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19 // indirect
4848
github.com/klauspost/compress v1.16.3 // indirect
4949
github.com/klauspost/pgzip v1.2.5 // indirect

go.sum

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -580,10 +580,14 @@ github.com/harness/lite-engine v0.5.78 h1:6EOIlW0djiJ7a9xgWppxu+FOUiXwZFYK59sbiR
580580
github.com/harness/lite-engine v0.5.78/go.mod h1:07w13fj/1efZZgY78xBo+iXuZH3BiVIx44cNZkHKPlc=
581581
github.com/harness/lite-engine v0.5.81 h1:TUF4EJlUnbfVLKu+y+pAELXhe9HHwMH4P53Ot6oPyYo=
582582
github.com/harness/lite-engine v0.5.81/go.mod h1:CwyhOnIA6XDt/U02eKUXwT0hIMK4Q9uKG9LM86j7qns=
583-
github.com/harness/lite-engine v0.5.89 h1:4FVnnGKJUDVVDSLDbeweGtmsnj1Ia/Wpywghs8uupnU=
584-
github.com/harness/lite-engine v0.5.89/go.mod h1:Wf7YWBRYKvUuS5l7GrWtW0h19vhWqZDfUu3BNDyKrE0=
583+
github.com/harness/lite-engine v0.5.95 h1:lvw+4OCtwEPLV+Kt9EllkqE/Q0NdJjfcS8IJTPkpXP4=
584+
github.com/harness/lite-engine v0.5.95/go.mod h1:/6AqaF3+ibpBG/vcPIzO4qQI8QaGFX1951qh1KxYZCk=
585+
github.com/harness/lite-engine v0.5.96 h1:97G+uVTvP2TECBsZFGwJLBsqxJ+v2XzPcBFMupd5r7o=
586+
github.com/harness/lite-engine v0.5.96/go.mod h1:/6AqaF3+ibpBG/vcPIzO4qQI8QaGFX1951qh1KxYZCk=
585587
github.com/harness/ti-client v0.0.0-20240617230757-1e90e7e3ada2 h1:9QHzlirx9Lg77ohXYTOeC+3aDPG8ZeHTKI1iAN5+cIo=
586588
github.com/harness/ti-client v0.0.0-20240617230757-1e90e7e3ada2/go.mod h1:/ow4f34mPgr5KPkzKxmBUB4cC09OjzStcLX6R8+43TI=
589+
github.com/harness/ti-client v0.0.0-20250211085345-7c82b29d1b3c h1:fAVNZiSrO9i8lQUo1joeEiOxHyqYwRxtVQivjrMeHpE=
590+
github.com/harness/ti-client v0.0.0-20250211085345-7c82b29d1b3c/go.mod h1:/ow4f34mPgr5KPkzKxmBUB4cC09OjzStcLX6R8+43TI=
587591
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
588592
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
589593
github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=

handler/setup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,6 @@ func setProxyEnvs(environment map[string]string) {
240240

241241
func getTiCfg(t api.TIConfig, dataDir string) tiCfg.Cfg {
242242
cfg := tiCfg.New(t.URL, t.Token, t.AccountID, t.OrgID, t.ProjectID, t.PipelineID, t.BuildID, t.StageID, t.Repo,
243-
t.Sha, t.CommitLink, t.SourceBranch, t.TargetBranch, t.CommitBranch, dataDir, t.ParseSavings, false)
243+
t.Sha, t.CommitLink, t.SourceBranch, t.TargetBranch, t.CommitBranch, dataDir, t.ParseSavings, false, "", "")
244244
return cfg
245245
}

pipeline/runtime/run.go

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package runtime
66

77
import (
88
"context"
9+
"encoding/json"
910
"fmt"
1011
"io"
1112
"os"
@@ -24,15 +25,16 @@ import (
2425
)
2526

2627
func executeRunStep(ctx context.Context, engine *engine.Engine, r *api.StartStepRequest, out io.Writer, tiConfig *tiCfg.Cfg) (
27-
*runtime.State, map[string]string, []byte, []*api.OutputV2, string, error) {
28+
*runtime.State, map[string]string, []byte, []*api.OutputV2, string, *types.TelemetryData, error) {
2829
start := time.Now()
30+
telemetry := &types.TelemetryData{}
2931
step := toStep(r)
3032
step.Command = r.Run.Command
3133
step.Entrypoint = r.Run.Entrypoint
3234

3335
optimizationState := types.DISABLED
3436
if (len(r.OutputVars) > 0 || len(r.Outputs) > 0) && (len(step.Entrypoint) == 0 || len(step.Command) == 0) {
35-
return nil, nil, nil, nil, string(optimizationState), fmt.Errorf("output variable should not be set for unset entrypoint or command")
37+
return nil, nil, nil, nil, string(optimizationState), telemetry, fmt.Errorf("output variable should not be set for unset entrypoint or command")
3638
}
3739

3840
enablePluginOutputSecrets := IsFeatureFlagEnabled(ciEnablePluginOutputSecrets, engine, step)
@@ -69,13 +71,21 @@ func executeRunStep(ctx context.Context, engine *engine.Engine, r *api.StartStep
6971
exited, err := engine.Run(ctx, step, out)
7072
timeTakenMs := time.Since(start).Milliseconds()
7173
logrus.WithField("step_id", r.ID).WithField("stage_id", r.StageRuntimeID).Traceln("completed step run")
72-
if rerr := report.ParseAndUploadTests(ctx, r.TestReport, r.WorkingDir, step.Name, log, time.Now(), tiConfig, r.Envs); rerr != nil {
74+
if _, rerr := report.ParseAndUploadTests(ctx, r.TestReport, r.WorkingDir, step.Name, log, time.Now(), tiConfig, &telemetry.TestIntelligenceMetaData, r.Envs); rerr != nil {
7375
logrus.WithError(rerr).WithField("step", step.Name).Errorln("failed to upload report")
7476
}
7577

7678
// Parse and upload savings to TI
7779
if tiConfig.GetParseSavings() {
78-
optimizationState = savings.ParseAndUploadSavings(ctx, r.WorkingDir, log, step.Name, checkStepSuccess(exited, err), timeTakenMs, tiConfig, r.Envs)
80+
optimizationState = savings.ParseAndUploadSavings(ctx, r.WorkingDir, log, step.Name, checkStepSuccess(exited, err), timeTakenMs, tiConfig, r.Envs, telemetry)
81+
}
82+
83+
//only for git-clone-step
84+
if buildLangFile, found := r.Envs["PLUGIN_BUILD_TOOL_FILE"]; found {
85+
err1 := parseBuildInfo(telemetry, r.WorkingDir+"/"+buildLangFile)
86+
if err1 != nil {
87+
logrus.WithContext(ctx).WithError(err1).Errorln("failed to parse build info")
88+
}
7989
}
8090

8191
artifact, _ := fetchArtifactDataFromArtifactFile(artifactFile, out)
@@ -151,12 +161,12 @@ func executeRunStep(ctx context.Context, engine *engine.Engine, r *api.StartStep
151161
outputsV2 = append(outputsV2, summaryOutputsV2...)
152162
}
153163

154-
return exited, outputs, artifact, outputsV2, string(optimizationState), finalErr
164+
return exited, outputs, artifact, outputsV2, string(optimizationState), telemetry, finalErr
155165

156166
} else {
157167
outputs, err := fetchOutputVariables(outputFile, out, false) // nolint:govet
158168
if err != nil {
159-
return exited, nil, nil, nil, string(optimizationState), err
169+
return exited, nil, nil, nil, string(optimizationState), telemetry, err
160170
}
161171
// Delete output variable file
162172
if ferr := os.Remove(outputFile); ferr != nil {
@@ -176,17 +186,38 @@ func executeRunStep(ctx context.Context, engine *engine.Engine, r *api.StartStep
176186
if report.TestSummaryAsOutputEnabled(r.Envs) {
177187
outputsV2 = append(outputsV2, summaryOutputsV2...)
178188
}
179-
return exited, outputs, artifact, outputsV2, string(optimizationState), err
189+
return exited, outputs, artifact, outputsV2, string(optimizationState), telemetry, err
180190
}
181191
if len(summaryOutputsV2) > 0 && report.TestSummaryAsOutputEnabled(r.Envs) {
182-
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), err
192+
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), telemetry, err
183193
}
184-
return exited, outputs, artifact, nil, string(optimizationState), err
194+
return exited, outputs, artifact, nil, string(optimizationState), telemetry, err
185195
}
186196
}
187197
if len(summaryOutputsV2) == 0 || !report.TestSummaryAsOutputEnabled(r.Envs) {
188-
return exited, nil, artifact, nil, string(optimizationState), err
198+
return exited, nil, artifact, nil, string(optimizationState), telemetry, err
199+
}
200+
201+
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), telemetry, err
202+
}
203+
204+
func parseBuildInfo(telemetryData *types.TelemetryData, buildFile string) error {
205+
if _, err := os.Stat(buildFile); os.IsNotExist(err) {
206+
return err
207+
}
208+
209+
// Read the JSON file containing the cache metrics.
210+
data, err := os.ReadFile(buildFile)
211+
if err != nil {
212+
return err
213+
}
214+
215+
// Deserialize the JSON data into the CacheMetrics struct.
216+
var buildInfo types.BuildInfo
217+
if err := json.Unmarshal(data, &buildInfo); err != nil {
218+
return err
189219
}
190220

191-
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), err
221+
telemetryData.BuildInfo = buildInfo
222+
return nil
192223
}

pipeline/runtime/runtest.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,23 @@ const (
2828
)
2929

3030
func executeRunTestStep(ctx context.Context, engine *engine.Engine, r *api.StartStepRequest, out io.Writer, tiConfig *tiCfg.Cfg) (
31-
*runtime.State, map[string]string, []byte, []*api.OutputV2, string, error) {
31+
*runtime.State, map[string]string, []byte, []*api.OutputV2, string, *types.TelemetryData, error) {
3232
start := time.Now()
33+
telemetry := &types.TelemetryData{}
3334
log := logrus.New()
3435
log.Out = out
3536
optimizationState := types.DISABLED
36-
cmd, err := instrumentation.GetCmd(ctx, &r.RunTest, r.Name, r.WorkingDir, log, r.Envs, tiConfig)
37+
cmd, err := instrumentation.GetCmd(ctx, &r.RunTest, r.Name, r.WorkingDir, log, r.Envs, tiConfig, &telemetry.TestIntelligenceMetaData)
3738
if err != nil {
38-
return nil, nil, nil, nil, string(optimizationState), err
39+
return nil, nil, nil, nil, string(optimizationState), telemetry, err
3940
}
4041

4142
step := toStep(r)
4243
step.Command = []string{cmd}
4344
step.Entrypoint = r.RunTest.Entrypoint
4445

4546
if (len(r.OutputVars) > 0 || len(r.Outputs) > 0) && len(step.Entrypoint) == 0 || len(step.Command) == 0 {
46-
return nil, nil, nil, nil, string(optimizationState), fmt.Errorf("output variable should not be set for unset entrypoint or command")
47+
return nil, nil, nil, nil, string(optimizationState), telemetry, fmt.Errorf("output variable should not be set for unset entrypoint or command")
4748
}
4849

4950
enablePluginOutputSecrets := IsFeatureFlagEnabled(ciEnablePluginOutputSecrets, engine, step)
@@ -66,17 +67,18 @@ func executeRunTestStep(ctx context.Context, engine *engine.Engine, r *api.Start
6667

6768
exited, err := engine.Run(ctx, step, out)
6869
timeTakenMs := time.Since(start).Milliseconds()
69-
if rerr := report.ParseAndUploadTests(ctx, r.TestReport, r.WorkingDir, step.Name, log, time.Now(), tiConfig, r.Envs); rerr != nil {
70+
if _, rerr := report.ParseAndUploadTests(ctx, r.TestReport, r.WorkingDir, step.Name, log, time.Now(), tiConfig, &telemetry.TestIntelligenceMetaData, r.Envs); rerr != nil {
7071
log.WithError(rerr).Errorln("failed to upload report")
7172
}
7273

73-
if uerr := callgraph.Upload(ctx, step.Name, time.Since(start).Milliseconds(), log, time.Now(), tiConfig, cgDir); uerr != nil {
74+
//Passing default false for failed test for now.
75+
if uerr := callgraph.Upload(ctx, step.Name, time.Since(start).Milliseconds(), log, time.Now(), tiConfig, cgDir, false); uerr != nil {
7476
log.WithError(uerr).Errorln("unable to collect callgraph")
7577
}
7678

7779
// Parse and upload savings to TI
7880
if tiConfig.GetParseSavings() {
79-
optimizationState = savings.ParseAndUploadSavings(ctx, r.WorkingDir, log, step.Name, checkStepSuccess(exited, err), timeTakenMs, tiConfig, r.Envs)
81+
optimizationState = savings.ParseAndUploadSavings(ctx, r.WorkingDir, log, step.Name, checkStepSuccess(exited, err), timeTakenMs, tiConfig, r.Envs, telemetry)
8082
}
8183

8284
summaryOutputs := make(map[string]string)
@@ -117,10 +119,10 @@ func executeRunTestStep(ctx context.Context, engine *engine.Engine, r *api.Start
117119
if report.TestSummaryAsOutputEnabled(r.Envs) {
118120
outputsV2 = append(outputsV2, summaryOutputsV2...)
119121
}
120-
return exited, outputs, artifact, outputsV2, string(optimizationState), outputErr
122+
return exited, outputs, artifact, outputsV2, string(optimizationState), telemetry, outputErr
121123
}
122124
if len(summaryOutputsV2) > 0 && report.TestSummaryAsOutputEnabled(r.Envs) {
123-
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), err
125+
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), telemetry, err
124126
}
125127
} else if len(r.OutputVars) > 0 {
126128
if exited != nil && exited.Exited && exited.ExitCode == 0 {
@@ -134,17 +136,17 @@ func executeRunTestStep(ctx context.Context, engine *engine.Engine, r *api.Start
134136
outputs[k] = v
135137
}
136138
}
137-
return exited, outputs, artifact, nil, string(optimizationState), outputErr
139+
return exited, outputs, artifact, nil, string(optimizationState), telemetry, outputErr
138140
}
139141
if len(summaryOutputs) != 0 && len(summaryOutputsV2) != 0 && report.TestSummaryAsOutputEnabled(r.Envs) {
140142
// when step has failed return the actual error
141-
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), err
143+
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), telemetry, err
142144
}
143145
}
144146

145147
if len(summaryOutputsV2) == 0 || !report.TestSummaryAsOutputEnabled(r.Envs) {
146-
return exited, nil, artifact, nil, string(optimizationState), err
148+
return exited, nil, artifact, nil, string(optimizationState), telemetry, err
147149
}
148150

149-
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), err
151+
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), telemetry, err
150152
}

pipeline/runtime/runtestsV2.go

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,17 @@ const (
3030
)
3131

3232
func executeRunTestsV2Step(ctx context.Context, engine *engine.Engine, r *api.StartStepRequest, out io.Writer, tiConfig *tiCfg.Cfg) (
33-
*runtime.State, map[string]string, []byte, []*api.OutputV2, string, error) {
33+
*runtime.State, map[string]string, []byte, []*api.OutputV2, string, *types.TelemetryData, error) {
3434
start := time.Now()
35+
telemetry := &types.TelemetryData{}
3536
log := logrus.New()
3637
log.Out = out
3738
step := toStep(r)
3839
optimizationState := types.DISABLED
3940
step.Entrypoint = r.RunTestsV2.Entrypoint
40-
preCmd, err := leRuntime.SetupRunTestV2(ctx, &r.RunTestsV2, step.Name, r.WorkingDir, log, r.Envs, tiConfig)
41+
preCmd, err := leRuntime.SetupRunTestV2(ctx, &r.RunTestsV2, step.Name, r.WorkingDir, log, r.Envs, tiConfig, &telemetry.TestIntelligenceMetaData)
4142
if err != nil {
42-
return nil, nil, nil, nil, string(optimizationState), err
43+
return nil, nil, nil, nil, string(optimizationState), telemetry, err
4344
}
4445
command := r.RunTestsV2.Command[0]
4546
if preCmd != "" {
@@ -48,7 +49,7 @@ func executeRunTestsV2Step(ctx context.Context, engine *engine.Engine, r *api.St
4849
step.Command = []string{command}
4950

5051
if (len(r.OutputVars) > 0 || len(r.Outputs) > 0) && (len(step.Entrypoint) == 0 || len(step.Command) == 0) {
51-
return nil, nil, nil, nil, string(optimizationState), fmt.Errorf("output variable should not be set for unset entrypoint or command")
52+
return nil, nil, nil, nil, string(optimizationState), telemetry, fmt.Errorf("output variable should not be set for unset entrypoint or command")
5253
}
5354

5455
enablePluginOutputSecrets := IsFeatureFlagEnabled(ciEnablePluginOutputSecrets, engine, step)
@@ -87,17 +88,18 @@ func executeRunTestsV2Step(ctx context.Context, engine *engine.Engine, r *api.St
8788
// If there are no paths specified, set Paths[0] to include all XML files and all TRX files
8889
r.TestReport.Junit.Paths = []string{"**/*.xml", "**/*.trx"}
8990
}
90-
if rerr := report.ParseAndUploadTests(ctx, r.TestReport, r.WorkingDir, step.Name, log, time.Now(), tiConfig, r.Envs); rerr != nil {
91+
if _, rerr := report.ParseAndUploadTests(ctx, r.TestReport, r.WorkingDir, step.Name, log, time.Now(), tiConfig, &telemetry.TestIntelligenceMetaData, r.Envs); rerr != nil {
9192
log.WithError(rerr).Errorln("failed to upload report")
9293
}
9394

94-
if uerr := callgraph.Upload(ctx, step.Name, time.Since(start).Milliseconds(), log, time.Now(), tiConfig, outDir); uerr != nil {
95+
//Passing default false for failed test for now
96+
if uerr := callgraph.Upload(ctx, step.Name, time.Since(start).Milliseconds(), log, time.Now(), tiConfig, outDir, false); uerr != nil {
9597
log.WithError(uerr).Errorln("unable to collect callgraph")
9698
}
9799

98100
// Parse and upload savings to TI
99101
if tiConfig.GetParseSavings() {
100-
optimizationState = savings.ParseAndUploadSavings(ctx, r.WorkingDir, log, step.Name, checkStepSuccess(exited, err), timeTakenMs, tiConfig, r.Envs)
102+
optimizationState = savings.ParseAndUploadSavings(ctx, r.WorkingDir, log, step.Name, checkStepSuccess(exited, err), timeTakenMs, tiConfig, r.Envs, telemetry)
101103
}
102104

103105
artifact, _ := fetchArtifactDataFromArtifactFile(artifactFile, out)
@@ -170,12 +172,12 @@ func executeRunTestsV2Step(ctx context.Context, engine *engine.Engine, r *api.St
170172
outputsV2 = append(outputsV2, summaryOutputsV2...)
171173
}
172174

173-
return exited, outputs, artifact, outputsV2, string(optimizationState), finalErr
175+
return exited, outputs, artifact, outputsV2, string(optimizationState), telemetry, finalErr
174176

175177
} else {
176178
outputs, err := fetchOutputVariables(outputFile, out, false) // nolint:govet
177179
if err != nil {
178-
return exited, nil, nil, nil, string(optimizationState), err
180+
return nil, nil, nil, nil, string(optimizationState), telemetry, err
179181
}
180182
// Delete output variable file
181183
if ferr := os.Remove(outputFile); ferr != nil {
@@ -195,22 +197,22 @@ func executeRunTestsV2Step(ctx context.Context, engine *engine.Engine, r *api.St
195197
if report.TestSummaryAsOutputEnabled(r.Envs) {
196198
outputsV2 = append(outputsV2, summaryOutputsV2...)
197199
}
198-
return exited, outputs, artifact, outputsV2, string(optimizationState), err
200+
return exited, outputs, artifact, outputsV2, string(optimizationState), telemetry, err
199201
} else if len(r.OutputVars) > 0 {
200202
// only return err when output vars are expected
201203
if report.TestSummaryAsOutputEnabled(r.Envs) {
202-
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), err
204+
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), telemetry, err
203205
}
204-
return exited, outputs, artifact, nil, string(optimizationState), err
206+
return exited, outputs, artifact, nil, string(optimizationState), telemetry, err
205207
}
206208
if len(summaryOutputsV2) != 0 && report.TestSummaryAsOutputEnabled(r.Envs) {
207-
return exited, outputs, artifact, summaryOutputsV2, string(optimizationState), nil
209+
return exited, outputs, artifact, summaryOutputsV2, string(optimizationState), telemetry, nil
208210
}
209-
return exited, outputs, artifact, nil, string(optimizationState), nil
211+
return exited, outputs, artifact, nil, string(optimizationState), telemetry, nil
210212
}
211213
}
212214
if len(summaryOutputsV2) != 0 && report.TestSummaryAsOutputEnabled(r.Envs) {
213-
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), err
215+
return exited, summaryOutputs, artifact, summaryOutputsV2, string(optimizationState), telemetry, err
214216
}
215-
return exited, nil, artifact, nil, string(optimizationState), err
217+
return exited, nil, artifact, nil, string(optimizationState), telemetry, err
216218
}

0 commit comments

Comments
 (0)