Skip to content

Commit 437ce41

Browse files
vsukhinexu
andauthored
feat: [TKC-2299] add tags to testworkflow models (#5744)
* feat: add tags to testworkflow models Signed-off-by: Vladislav Sukhin <[email protected]> * fix: missed model Signed-off-by: Vladislav Sukhin <[email protected]> * fix: dep update Signed-off-by: Vladislav Sukhin <[email protected]> * feat: filter by tags Signed-off-by: Vladislav Sukhin <[email protected]> * fix: convert dots for parallel step Signed-off-by: Vladislav Sukhin <[email protected]> * fix: convert dots for execute Signed-off-by: Vladislav Sukhin <[email protected]> * fix: remove filed Signed-off-by: Vladislav Sukhin <[email protected]> * fix: remove tags Signed-off-by: Vladislav Sukhin <[email protected]> * fix: remove unsued tags Signed-off-by: Vladislav Sukhin <[email protected]> * fix: unit tests Signed-off-by: Vladislav Sukhin <[email protected]> * feat: pass execution tags Signed-off-by: Vladislav Sukhin <[email protected]> * fix: format result Signed-off-by: Vladislav Sukhin <[email protected]> * fix: remove from parallel step Signed-off-by: Vladislav Sukhin <[email protected]> * fix: cli docs Signed-off-by: Vladislav Sukhin <[email protected]> * fix: extract methods Signed-off-by: Vladislav Sukhin <[email protected]> * fix: go mod tidy Signed-off-by: Vladislav Sukhin <[email protected]> * fix: typo Signed-off-by: Vladislav Sukhin <[email protected]> --------- Signed-off-by: Vladislav Sukhin <[email protected]> Co-authored-by: Jacek Wysocki <[email protected]>
1 parent 4a09d78 commit 437ce41

34 files changed

+230
-23
lines changed

api/v1/testkube.yaml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3735,6 +3735,7 @@ paths:
37353735
- pro
37363736
parameters:
37373737
- $ref: "#/components/parameters/ID"
3738+
- $ref: "#/components/parameters/TagSelector"
37383739
summary: List test workflow executions
37393740
description: List test workflow executions
37403741
operationId: listTestWorkflowExecutionsByTestWorkflow
@@ -3963,6 +3964,7 @@ paths:
39633964
- pro
39643965
parameters:
39653966
- $ref: "#/components/parameters/ID"
3967+
- $ref: "#/components/parameters/TagSelector"
39663968
summary: List test workflow executions
39673969
description: List test workflow executions
39683970
operationId: listTestWorkflowExecutions
@@ -7889,6 +7891,8 @@ components:
78897891
type: boolean
78907892
description: whether webhooks on the execution of this test workflow are disabled
78917893
default: false
7894+
tags:
7895+
$ref: "#/components/schemas/TestWorkflowTagValue"
78927896

78937897
TestWorkflowWithExecution:
78947898
type: object
@@ -7980,6 +7984,8 @@ components:
79807984
example:
79817985
- true
79827986
- false
7987+
tags:
7988+
$ref: "#/components/schemas/TestWorkflowTagValue"
79837989
required:
79847990
- id
79857991
- name
@@ -8012,6 +8018,8 @@ components:
80128018
$ref: "#/components/schemas/TestWorkflowResultSummary"
80138019
workflow:
80148020
$ref: "#/components/schemas/TestWorkflowSummary"
8021+
tags:
8022+
$ref: "#/components/schemas/TestWorkflowTagValue"
80158023
required:
80168024
- id
80178025
- name
@@ -8525,6 +8533,8 @@ components:
85258533
type: array
85268534
items:
85278535
$ref: "#/components/schemas/TestWorkflowEvent"
8536+
execution:
8537+
$ref: "#/components/schemas/TestWorkflowTagSchema"
85288538

85298539
TestWorkflowTemplateSpec:
85308540
type: object
@@ -8561,6 +8571,8 @@ components:
85618571
type: array
85628572
items:
85638573
$ref: "#/components/schemas/TestWorkflowEvent"
8574+
execution:
8575+
$ref: "#/components/schemas/TestWorkflowTagSchema"
85648576

85658577
TestWorkflowStepControl:
85668578
type: object
@@ -9382,6 +9394,19 @@ components:
93829394
format: int64
93839395
description: test workflow execution generation
93849396

9397+
TestWorkflowTagValue:
9398+
type: object
9399+
description: tag values to pass to the test workflow execution
9400+
additionalProperties:
9401+
type: string
9402+
9403+
TestWorkflowTagSchema:
9404+
type: object
9405+
description: test workflow execution tag definition
9406+
properties:
9407+
tags:
9408+
$ref: "#/components/schemas/TestWorkflowTagValue"
9409+
93859410
ContentGitAuthType:
93869411
type: string
93879412
description: auth type for git requests
@@ -10505,6 +10530,12 @@ components:
1050510530
default: false
1050610531
description: dont delete CRD
1050710532
required: false
10533+
TagSelector:
10534+
in: query
10535+
name: tagSelector
10536+
schema:
10537+
type: string
10538+
description: Test workflow execution tags
1050810539
requestBodies:
1050910540
UploadsBody:
1051010541
description: "Upload files request body data"

cmd/kubectl-testkube/commands/testworkflows/executions.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func NewGetTestWorkflowExecutionsCmd() *cobra.Command {
1919
selectors []string
2020
testWorkflowName string
2121
logsOnly bool
22+
tags []string
2223
)
2324

2425
cmd := &cobra.Command{
@@ -44,7 +45,8 @@ func NewGetTestWorkflowExecutionsCmd() *cobra.Command {
4445
client, _, err := common.GetClient(cmd)
4546
ui.ExitOnError("getting client", err)
4647

47-
executions, err := client.ListTestWorkflowExecutions(testWorkflowName, limit, strings.Join(selectors, ","))
48+
executions, err := client.ListTestWorkflowExecutions(testWorkflowName, limit,
49+
strings.Join(selectors, ","), strings.Join(tags, ","))
4850
ui.ExitOnError("getting test workflow executions list", err)
4951
err = render.List(cmd, testkube.TestWorkflowExecutionSummaries(executions.Results), os.Stdout)
5052
ui.ExitOnError("rendering list", err)
@@ -84,6 +86,7 @@ func NewGetTestWorkflowExecutionsCmd() *cobra.Command {
8486
cmd.Flags().IntVar(&limit, "limit", 1000, "max number of records to return")
8587
cmd.Flags().StringSliceVarP(&selectors, "label", "l", nil, "label key value pair: --label key1=value1")
8688
cmd.Flags().BoolVar(&logsOnly, "logs-only", false, "show only execution logs")
89+
cmd.Flags().StringSliceVarP(&tags, "tag", "", nil, "tag key value pair: --tag key1=value1")
8790

8891
return cmd
8992
}

cmd/kubectl-testkube/commands/testworkflows/renderer/testworkflowexecution_obj.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,14 @@ func printPrettyOutput(ui *ui.UI, execution testkube.TestWorkflowExecution) {
5959
}
6060
ui.Warn("Requested at: ", execution.ScheduledAt.String())
6161
ui.Warn("Disabled webhooks: ", fmt.Sprint(execution.DisableWebhooks))
62+
if len(execution.Tags) > 0 {
63+
ui.NL()
64+
ui.Warn("Tags: ", testkube.MapToString(execution.Tags))
65+
}
6266
if execution.Result != nil && execution.Result.Status != nil {
6367
ui.Warn("Status: ", string(*execution.Result.Status))
6468
if !execution.Result.QueuedAt.IsZero() {
65-
ui.Warn("Queued at: ", execution.Result.QueuedAt.String())
69+
ui.Warn("Queued at: ", execution.Result.QueuedAt.String())
6670
}
6771
if !execution.Result.StartedAt.IsZero() {
6872
ui.Warn("Started at: ", execution.Result.StartedAt.String())

cmd/kubectl-testkube/commands/testworkflows/run.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func NewRunTestWorkflowCmd() *cobra.Command {
4040
downloadDir string
4141
format string
4242
masks []string
43+
tags map[string]string
4344
)
4445

4546
cmd := &cobra.Command{
@@ -65,6 +66,7 @@ func NewRunTestWorkflowCmd() *cobra.Command {
6566
Name: executionName,
6667
Config: config,
6768
DisableWebhooks: disableWebhooks,
69+
Tags: tags,
6870
})
6971
if err != nil {
7072
// User friendly Open Source operation error
@@ -121,6 +123,7 @@ func NewRunTestWorkflowCmd() *cobra.Command {
121123
cmd.Flags().BoolVarP(&downloadArtifactsEnabled, "download-artifacts", "d", false, "download artifacts automatically")
122124
cmd.Flags().StringVar(&format, "format", "folder", "data format for storing files, one of folder|archive")
123125
cmd.Flags().StringArrayVarP(&masks, "mask", "", []string{}, "regexp to filter downloaded files, single or comma separated, like report/.* or .*\\.json,.*\\.js$")
126+
cmd.Flags().StringToStringVarP(&tags, "tag", "", map[string]string{}, "execution tags in a form of name1=val1 passed to executor")
124127

125128
return cmd
126129
}

cmd/tcl/testworkflow-toolkit/commands/execute.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
"github.com/kubeshop/testkube/pkg/mapper/testworkflows"
3333
"github.com/kubeshop/testkube/pkg/testworkflows/testworkflowprocessor/constants"
3434
"github.com/kubeshop/testkube/pkg/ui"
35+
"github.com/kubeshop/testkube/pkg/utils"
3536
)
3637

3738
type testExecutionDetails struct {
@@ -151,10 +152,16 @@ func buildWorkflowExecution(workflow testworkflowsv1.StepExecuteWorkflow, async
151152
return func() (err error) {
152153
c := env.Testkube()
153154

155+
tags, err := utils.DecodeEnvVarToStringMap(env.ExecutionTags())
156+
if err != nil {
157+
ui.Errf("failed to decode tags: %s: %s", workflow.Name, err.Error())
158+
}
159+
154160
exec, err := c.ExecuteTestWorkflow(workflow.Name, testkube.TestWorkflowExecutionRequest{
155161
Name: workflow.ExecutionName,
156162
Config: testworkflows.MapConfigValueKubeToAPI(workflow.Config),
157163
DisableWebhooks: env.ExecutionDisableWebhooks(),
164+
Tags: tags,
158165
})
159166
execName := exec.Name
160167
if err != nil {

cmd/tcl/testworkflow-toolkit/spawn/utils.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ func CreateExecutionMachine(prefix string, index int64) (string, expressions.Mac
205205
"number": env.ExecutionNumber(),
206206
"scheduledAt": env.ExecutionScheduledAt().UTC().Format(constants.RFC3339Millis),
207207
"disableWebhooks": env.ExecutionDisableWebhooks(),
208+
"tags": env.ExecutionTags(),
208209
})
209210
}
210211

cmd/testworkflow-toolkit/env/config.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ type envExecutionConfig struct {
4747
RootResourceId string `envconfig:"TK_EXR"`
4848
FSPrefix string `envconfig:"TK_FS"`
4949
DisableWebhooks bool `envconfig:"TK_DWH"`
50+
Tags string `envconfig:"TK_TAG"`
5051
}
5152

5253
type envSystemConfig struct {
@@ -157,3 +158,7 @@ func ExecutionDisableWebhooks() bool {
157158
func JUnitParserEnabled() bool {
158159
return Config().Features.EnableJUnitParser
159160
}
161+
162+
func ExecutionTags() string {
163+
return Config().Execution.Tags
164+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ require (
3434
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
3535
github.com/kelseyhightower/envconfig v1.4.0
3636
github.com/kubepug/kubepug v1.7.1
37-
github.com/kubeshop/testkube-operator v1.15.2-beta1.0.20240808123612-1bfae781ec4c
37+
github.com/kubeshop/testkube-operator v1.15.2-beta1.0.20240812092626-c23e9abedcd0
3838
github.com/minio/minio-go/v7 v7.0.47
3939
github.com/montanaflynn/stats v0.6.6
4040
github.com/moogar0880/problems v0.1.1

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,8 +371,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
371371
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
372372
github.com/kubepug/kubepug v1.7.1 h1:LKhfSxS8Y5mXs50v+3Lpyec+cogErDLcV7CMUuiaisw=
373373
github.com/kubepug/kubepug v1.7.1/go.mod h1:lv+HxD0oTFL7ZWjj0u6HKhMbbTIId3eG7aWIW0gyF8g=
374-
github.com/kubeshop/testkube-operator v1.15.2-beta1.0.20240808123612-1bfae781ec4c h1:lMNmYvazHkx+yDxxbNUg0Vfk+5tvexLwhUGZAZ9mM6Y=
375-
github.com/kubeshop/testkube-operator v1.15.2-beta1.0.20240808123612-1bfae781ec4c/go.mod h1:P47tw1nKQFufdsZndyq2HG2MSa0zK/lU0XpRfZtEmIk=
374+
github.com/kubeshop/testkube-operator v1.15.2-beta1.0.20240812092626-c23e9abedcd0 h1:5+V5zL1CyCGQkoi9rYrf1ttOus6j2A5xGfuPjXA2+Ns=
375+
github.com/kubeshop/testkube-operator v1.15.2-beta1.0.20240812092626-c23e9abedcd0/go.mod h1:P47tw1nKQFufdsZndyq2HG2MSa0zK/lU0XpRfZtEmIk=
376376
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
377377
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
378378
github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4=

internal/app/api/v1/testworkflowexecutions.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,5 +510,10 @@ func getWorkflowExecutionsFilterFromRequest(c *fiber.Ctx) testworkflow2.Filter {
510510
filter = filter.WithSelector(selector)
511511
}
512512

513+
tagSelector := c.Query("tagSelector")
514+
if tagSelector != "" {
515+
filter = filter.WithTagSelector(tagSelector)
516+
}
517+
513518
return filter
514519
}

pkg/api/v1/client/interface.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ type TestWorkflowAPI interface {
147147
// TestWorkflowExecutionAPI describes test workflow api methods
148148
type TestWorkflowExecutionAPI interface {
149149
GetTestWorkflowExecution(executionID string) (execution testkube.TestWorkflowExecution, err error)
150-
ListTestWorkflowExecutions(id string, limit int, selector string) (executions testkube.TestWorkflowExecutionsResult, err error)
150+
ListTestWorkflowExecutions(id string, limit int, selector, tagSelector string) (executions testkube.TestWorkflowExecutionsResult, err error)
151151
AbortTestWorkflowExecution(workflow string, id string) error
152152
AbortTestWorkflowExecutions(workflow string) error
153153
GetTestWorkflowExecutionArtifacts(executionID string) (artifacts testkube.Artifacts, err error)

pkg/api/v1/client/testworkflow.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,15 @@ func (c TestWorkflowClient) GetTestWorkflowExecution(id string) (testkube.TestWo
136136
}
137137

138138
// ListTestWorkflowExecutions list test workflow executions for selected workflow
139-
func (c TestWorkflowClient) ListTestWorkflowExecutions(id string, limit int, selector string) (testkube.TestWorkflowExecutionsResult, error) {
139+
func (c TestWorkflowClient) ListTestWorkflowExecutions(id string, limit int, selector, tagSelector string) (testkube.TestWorkflowExecutionsResult, error) {
140140
uri := c.testWorkflowExecutionsResultTransport.GetURI("/test-workflow-executions/")
141141
if id != "" {
142142
uri = c.testWorkflowExecutionsResultTransport.GetURI(fmt.Sprintf("/test-workflows/%s/executions", id))
143143
}
144144
params := map[string]string{
145-
"selector": selector,
146-
"pageSize": fmt.Sprintf("%d", limit),
145+
"selector": selector,
146+
"pageSize": fmt.Sprintf("%d", limit),
147+
"tagSelector": tagSelector,
147148
}
148149
return c.testWorkflowExecutionsResultTransport.Execute(http.MethodGet, uri, nil, params)
149150
}

pkg/api/v1/testkube/model_test_workflow_execution.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,6 @@ type TestWorkflowExecution struct {
3838
// test workflow execution name started the test workflow execution
3939
TestWorkflowExecutionName string `json:"testWorkflowExecutionName,omitempty"`
4040
// whether webhooks on the execution of this test workflow are disabled
41-
DisableWebhooks bool `json:"disableWebhooks,omitempty"`
41+
DisableWebhooks bool `json:"disableWebhooks,omitempty"`
42+
Tags map[string]string `json:"tags,omitempty"`
4243
}

pkg/api/v1/testkube/model_test_workflow_execution_extended.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import "github.com/kubeshop/testkube/pkg/utils"
55
type TestWorkflowExecutions []TestWorkflowExecution
66

77
func (executions TestWorkflowExecutions) Table() (header []string, output [][]string) {
8-
header = []string{"Id", "Name", "Test Workflow Name", "Status", "Labels"}
8+
header = []string{"Id", "Name", "Test Workflow Name", "Status", "Labels", "Tags"}
99

1010
for _, e := range executions {
1111
status := "unknown"
@@ -19,6 +19,7 @@ func (executions TestWorkflowExecutions) Table() (header []string, output [][]st
1919
e.Workflow.Name,
2020
status,
2121
MapToString(e.Workflow.Labels),
22+
MapToString(e.Tags),
2223
})
2324
}
2425

@@ -28,6 +29,9 @@ func (executions TestWorkflowExecutions) Table() (header []string, output [][]st
2829
func (e *TestWorkflowExecution) ConvertDots(fn func(string) string) *TestWorkflowExecution {
2930
e.Workflow.ConvertDots(fn)
3031
e.ResolvedWorkflow.ConvertDots(fn)
32+
if e.Tags != nil {
33+
e.Tags = convertDotsInMap(e.Tags, fn)
34+
}
3135
return e
3236
}
3337

pkg/api/v1/testkube/model_test_workflow_execution_request.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ type TestWorkflowExecutionRequest struct {
1616
// test workflow execution name started the test workflow execution
1717
TestWorkflowExecutionName string `json:"testWorkflowExecutionName,omitempty"`
1818
// whether webhooks on the execution of this test workflow are disabled
19-
DisableWebhooks bool `json:"disableWebhooks,omitempty"`
19+
DisableWebhooks bool `json:"disableWebhooks,omitempty"`
20+
Tags map[string]string `json:"tags,omitempty"`
2021
}

pkg/api/v1/testkube/model_test_workflow_execution_summary.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ type TestWorkflowExecutionSummary struct {
2626
StatusAt time.Time `json:"statusAt,omitempty"`
2727
Result *TestWorkflowResultSummary `json:"result,omitempty"`
2828
Workflow *TestWorkflowSummary `json:"workflow"`
29+
Tags map[string]string `json:"tags,omitempty"`
2930
}

pkg/api/v1/testkube/model_test_workflow_execution_summary_extended.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
type TestWorkflowExecutionSummaries []TestWorkflowExecutionSummary
88

99
func (executions TestWorkflowExecutionSummaries) Table() (header []string, output [][]string) {
10-
header = []string{"Id", "Name", "Test Workflow Name", "Status", "Labels"}
10+
header = []string{"Id", "Name", "Test Workflow Name", "Status", "Labels", "Tags"}
1111

1212
for _, e := range executions {
1313
status := "unknown"
@@ -21,6 +21,7 @@ func (executions TestWorkflowExecutionSummaries) Table() (header []string, outpu
2121
e.Workflow.Name,
2222
status,
2323
MapToString(e.Workflow.Labels),
24+
MapToString(e.Tags),
2425
})
2526
}
2627

@@ -29,6 +30,9 @@ func (executions TestWorkflowExecutionSummaries) Table() (header []string, outpu
2930

3031
func (e *TestWorkflowExecutionSummary) ConvertDots(fn func(string) string) *TestWorkflowExecutionSummary {
3132
e.Workflow.ConvertDots(fn)
33+
if e.Tags != nil {
34+
e.Tags = convertDotsInMap(e.Tags, fn)
35+
}
3236
return e
3337
}
3438

pkg/api/v1/testkube/model_test_workflow_extended.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func (w *TestWorkflow) ConvertDots(fn func(string) string) *TestWorkflow {
3030
if w == nil {
3131
return w
3232
}
33-
if w.Labels == nil {
33+
if w.Labels != nil {
3434
w.Labels = convertDotsInMap(w.Labels, fn)
3535
}
3636
if w.Spec.Pod != nil {
@@ -56,6 +56,10 @@ func (w *TestWorkflow) ConvertDots(fn func(string) string) *TestWorkflow {
5656
for i := range w.Spec.After {
5757
w.Spec.After[i].ConvertDots(fn)
5858
}
59+
if w.Spec.Execution != nil {
60+
w.Spec.Execution.Tags = convertDotsInMap(w.Spec.Execution.Tags, fn)
61+
}
62+
5963
return w
6064
}
6165

pkg/api/v1/testkube/model_test_workflow_independent_step_parallel.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,5 @@ type TestWorkflowIndependentStepParallel struct {
5252
Steps []TestWorkflowIndependentStep `json:"steps,omitempty"`
5353
After []TestWorkflowIndependentStep `json:"after,omitempty"`
5454
Events []TestWorkflowEvent `json:"events,omitempty"`
55+
Execution *TestWorkflowTagSchema `json:"execution,omitempty"`
5556
}

pkg/api/v1/testkube/model_test_workflow_spec.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ type TestWorkflowSpec struct {
2222
Steps []TestWorkflowStep `json:"steps,omitempty"`
2323
After []TestWorkflowStep `json:"after,omitempty"`
2424
Events []TestWorkflowEvent `json:"events,omitempty"`
25+
Execution *TestWorkflowTagSchema `json:"execution,omitempty"`
2526
}

pkg/api/v1/testkube/model_test_workflow_step_parallel.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,5 @@ type TestWorkflowStepParallel struct {
5454
Steps []TestWorkflowStep `json:"steps,omitempty"`
5555
After []TestWorkflowStep `json:"after,omitempty"`
5656
Events []TestWorkflowEvent `json:"events,omitempty"`
57+
Execution *TestWorkflowTagSchema `json:"execution,omitempty"`
5758
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* Testkube API
3+
*
4+
* Testkube provides a Kubernetes-native framework for test definition, execution and results
5+
*
6+
* API version: 1.0.0
7+
* Contact: [email protected]
8+
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9+
*/
10+
package testkube
11+
12+
// test workflow execution tag definition
13+
type TestWorkflowTagSchema struct {
14+
Tags map[string]string `json:"tags,omitempty"`
15+
}

0 commit comments

Comments
 (0)