Skip to content

Commit

Permalink
cherry-pick #5908 fix: converting pipelines to deployments should ign…
Browse files Browse the repository at this point in the history
…ore skipped items to v0.18 (beta6) (#5913)

* fix: converting pipelines to deployments should ignore skipped items

  Closes #5885

* fix: linting and test cases
  • Loading branch information
klesh authored Aug 18, 2023
1 parent e32f076 commit 2865173
Show file tree
Hide file tree
Showing 23 changed files with 121 additions and 113 deletions.
43 changes: 25 additions & 18 deletions backend/core/models/domainlayer/devops/cicd_pipeline.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,72 +42,79 @@ func (CICDPipeline) TableName() string {

// this is for the field `result` in table.cicd_pipelines and table.cicd_tasks
const (
SUCCESS = "SUCCESS"
FAILURE = "FAILURE"
ABORT = "ABORT"
MANUAL = "MANUAL"
RESULT_SUCCESS = "SUCCESS"
RESULT_FAILURE = "FAILURE"
RESULT_ABORT = "ABORT"
RESULT_MANUAL = "MANUAL"
RESULT_SKIPPED = "SKIPPED"
)

// this is for the field `status` in table.cicd_pipelines and table.cicd_tasks
const (
IN_PROGRESS = "IN_PROGRESS"
DONE = "DONE"
STATUS_IN_PROGRESS = "IN_PROGRESS"
STATUS_DONE = "DONE"
)

type ResultRule struct {
Success []string
Failed []string
Abort []string
Manual []string
Skipped []string
Default string
}
type StatusRule struct {
InProgress []string
Done []string
Manual []string
type StatusRule[T comparable] struct {
InProgress []T
Done []T
Manual []T
Default string
}

// GetResult compare the input with rule for return the enmu value of result
func GetResult(rule *ResultRule, input interface{}) string {
for _, suc := range rule.Success {
if suc == input {
return SUCCESS
return RESULT_SUCCESS
}
}
for _, fail := range rule.Failed {
if fail == input {
return FAILURE
return RESULT_FAILURE
}
}
for _, abort := range rule.Abort {
if abort == input {
return ABORT
return RESULT_ABORT
}
}
for _, manual := range rule.Manual {
if manual == input {
return MANUAL
return RESULT_MANUAL
}
}
for _, skipped := range rule.Skipped {
if skipped == input {
return RESULT_SKIPPED
}
}
return rule.Default
}

// GetStatus compare the input with rule for return the enmu value of status
func GetStatus(rule *StatusRule, input interface{}) string {
func GetStatus[T comparable](rule *StatusRule[T], input T) string {
for _, inp := range rule.InProgress {
if inp == input {
return IN_PROGRESS
return STATUS_IN_PROGRESS
}
}
for _, done := range rule.Done {
if done == input {
return DONE
return STATUS_DONE
}
}
for _, manual := range rule.Manual {
if manual == input {
return MANUAL
return RESULT_MANUAL
}
}
return rule.Default
Expand Down
4 changes: 2 additions & 2 deletions backend/plugins/bamboo/tasks/deploy_build_convertor.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ func ConvertDeployBuilds(taskCtx plugin.SubTaskContext) errors.Error {
Default: "",
}, deployBuild.DeploymentState),

Status: devops.GetStatus(&devops.StatusRule{
Status: devops.GetStatus(&devops.StatusRule[string]{
Done: []string{"Finished", "FINISHED"},
Default: devops.IN_PROGRESS,
Default: devops.STATUS_IN_PROGRESS,
}, deployBuild.LifeCycleState),

//DurationSec: uint64(deployBuild),
Expand Down
4 changes: 2 additions & 2 deletions backend/plugins/bamboo/tasks/job_build_convertor.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,9 @@ func ConvertJobBuilds(taskCtx plugin.SubTaskContext) errors.Error {
Default: "",
}, line.BuildState),

Status: devops.GetStatus(&devops.StatusRule{
Status: devops.GetStatus(&devops.StatusRule[string]{
Done: []string{"Finished"},
Default: devops.IN_PROGRESS,
Default: devops.STATUS_IN_PROGRESS,
}, line.LifeCycleState),
}

Expand Down
4 changes: 2 additions & 2 deletions backend/plugins/bamboo/tasks/plan_build_convertor.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,9 @@ func ConvertPlanBuilds(taskCtx plugin.SubTaskContext) errors.Error {
Default: "",
}, line.BuildState),

Status: devops.GetStatus(&devops.StatusRule{
Status: devops.GetStatus(&devops.StatusRule[string]{
Done: []string{"Finished"},
Default: devops.IN_PROGRESS,
Default: devops.STATUS_IN_PROGRESS,
}, line.LifeCycleState),
}

Expand Down
4 changes: 2 additions & 2 deletions backend/plugins/bitbucket/tasks/deployment_convertor.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,9 @@ func ConvertDeployments(taskCtx plugin.SubTaskContext) errors.Error {
Success: []string{"COMPLETED"},
Default: "",
}, bitbucketDeployment.Status),
Status: devops.GetStatus(&devops.StatusRule{
Status: devops.GetStatus(&devops.StatusRule[string]{
Done: []string{"COMPLETED", "UNDEPLOYED"},
Default: devops.IN_PROGRESS,
Default: devops.STATUS_IN_PROGRESS,
}, bitbucketDeployment.Status),
Environment: bitbucketDeployment.Environment,
CreatedDate: *bitbucketDeployment.CreatedOn,
Expand Down
9 changes: 5 additions & 4 deletions backend/plugins/bitbucket/tasks/pipeline_convertor.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,14 +88,15 @@ func ConvertPipelines(taskCtx plugin.SubTaskContext) errors.Error {
Generate(data.Options.ConnectionId, bitbucketPipeline.RefName),
Result: devops.GetResult(&devops.ResultRule{
Failed: []string{models.FAILED, models.ERROR, models.UNDEPLOYED},
Abort: []string{models.STOPPED, models.SKIPPED},
Abort: []string{models.STOPPED},
Success: []string{models.SUCCESSFUL, models.COMPLETED},
Manual: []string{models.PAUSED, models.HALTED},
Default: devops.SUCCESS,
Skipped: []string{models.SKIPPED},
Default: devops.RESULT_SUCCESS,
}, bitbucketPipeline.Result),
Status: devops.GetStatus(&devops.StatusRule{
Status: devops.GetStatus(&devops.StatusRule[string]{
InProgress: []string{models.IN_PROGRESS, models.PENDING, models.BUILDING},
Default: devops.DONE,
Default: devops.STATUS_DONE,
}, bitbucketPipeline.Status),
Type: bitbucketPipeline.Type,
Environment: bitbucketPipeline.Environment,
Expand Down
11 changes: 6 additions & 5 deletions backend/plugins/bitbucket/tasks/pipeline_steps_convertor.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,15 @@ func ConvertPipelineSteps(taskCtx plugin.SubTaskContext) errors.Error {
PipelineId: pipelineIdGen.Generate(data.Options.ConnectionId, bitbucketPipelineStep.PipelineId),
Result: devops.GetResult(&devops.ResultRule{
Failed: []string{models.FAILED, models.ERROR, models.UNDEPLOYED},
Abort: []string{models.STOPPED, models.SKIPPED},
Abort: []string{models.STOPPED},
Success: []string{models.SUCCESSFUL, models.COMPLETED},
Manual: []string{models.PAUSED, models.HALTED},
Default: devops.SUCCESS,
Skipped: []string{models.SKIPPED},
Default: devops.RESULT_SUCCESS,
}, bitbucketPipelineStep.Result),
Status: devops.GetStatus(&devops.StatusRule{
Status: devops.GetStatus(&devops.StatusRule[string]{
InProgress: []string{models.IN_PROGRESS, models.PENDING, models.BUILDING},
Default: devops.DONE,
Default: devops.STATUS_DONE,
}, bitbucketPipelineStep.State),
CicdScopeId: repoIdGen.Generate(data.Options.ConnectionId, data.Options.FullName),
}
Expand All @@ -87,7 +88,7 @@ func ConvertPipelineSteps(taskCtx plugin.SubTaskContext) errors.Error {
}
domainTask.StartedDate = *bitbucketPipelineStep.StartedOn
// rebuild the FinishedDate
if domainTask.Status == devops.DONE {
if domainTask.Status == devops.STATUS_DONE {
domainTask.FinishedDate = bitbucketPipelineStep.CompletedOn
domainTask.DurationSec = uint64(bitbucketPipelineStep.DurationInSeconds)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
id,commit_sha,cicd_scope_id,cicd_deployment_id,result,repo_url,environment,started_date,finished_date
gitlab:GitlabPipeline:1:457475337:https://gitlab.com/gitlab-data/snowflake_spend,10a6464b6bd2cf4b59b8ac37ce1466e013f5a20d,cicd1,gitlab:GitlabPipeline:1:457475337,,https://gitlab.com/gitlab-data/snowflake_spend,PRODUCTION,,
gitlab:GitlabPipeline:1:457475337:https://gitlab.com/gitlab-data/snowflake_spend,10a6464b6bd2cf4b59b8ac37ce1466e013f5a20d,cicd1,gitlab:GitlabPipeline:1:457475337,ABORTED,https://gitlab.com/gitlab-data/snowflake_spend,PRODUCTION,,
gitlab:GitlabPipeline:1:485811050:https://gitlab.com/gitlab-data/snowflake_spend,c791ea6949d6b4aadf79b15ba666cb690c6527ac,cicd1,gitlab:GitlabPipeline:1:485811050,FAILURE,https://gitlab.com/gitlab-data/snowflake_spend,PRODUCTION,2022-03-07T06:26:42.109+00:00,2022-03-07T06:26:42.109+00:00
gitlab:GitlabPipeline:1:485813816:https://gitlab.com/gitlab-data/snowflake_spend,ecc7c0b2874c812ed882c9effbbda26e0abc7110,cicd1,gitlab:GitlabPipeline:1:485813816,FAILURE,https://gitlab.com/gitlab-data/snowflake_spend,PRODUCTION,2022-03-07T06:33:56.824+00:00,2022-03-07T06:33:56.824+00:00
gitlab:GitlabPipeline:1:485814501:https://gitlab.com/gitlab-data/snowflake_spend,6a3346f8434cc65fbe3f7a80a0edec5b4014a733,cicd1,gitlab:GitlabPipeline:1:485814501,FAILURE,https://gitlab.com/gitlab-data/snowflake_spend,PRODUCTION,2022-03-07T06:35:28.111+00:00,2022-03-07T06:35:28.111+00:00
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,5 @@ gitlab:GitlabPipeline:1:485811059,c791ea6949d6b4aadf79b15ba666cb690c6527ac,refs/
gitlab:GitlabPipeline:1:485811050,c791ea6949d6b4aadf79b15ba666cb690c6527ac,EE-7121,cicd1,https://gitlab.com/gitlab-data/snowflake_spend
gitlab:GitlabPipeline:1:457475160,44d127e0ab7dbc4bc259b55929c9d00b62fc3bf4,renovate/lodash-monorepo,cicd1,https://gitlab.com/gitlab-data/snowflake_spend
gitlab:GitlabPipeline:1:457475337,10a6464b6bd2cf4b59b8ac37ce1466e013f5a20d,renovate/shx-0.x,cicd1,https://gitlab.com/gitlab-data/snowflake_spend
gitlab:GitlabPipeline:1:485932864,22a6464b6bd2cf4b59b8ac37ce1466e013f5a20d,renovate/shx-0.x,cicd1,https://gitlab.com/gitlab-data/snowflake_spend
gitlab:GitlabPipeline:1:485932865,33a6464b6bd2cf4b59b8ac37ce1466e013f5a20d,renovate/shx-0.x,cicd1,https://gitlab.com/gitlab-data/snowflake_spend
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
id,name,result,status,type,duration_sec,environment,created_date,finished_date,cicd_scope_id
gitlab:GitlabPipeline:1:457475160,cicd1,FAILURE,DONE,,0,,2022-01-27T10:07:26.435+00:00,2022-01-27T10:07:26.638+00:00,cicd1
gitlab:GitlabPipeline:1:457475337,cicd1,,IN_PROGRESS,,0,,2022-01-27T10:07:36.502+00:00,,cicd1
gitlab:GitlabPipeline:1:457475337,cicd1,ABORTED,IN_PROGRESS,,0,,2022-01-27T10:07:36.502+00:00,,cicd1
gitlab:GitlabPipeline:1:485811050,cicd1,FAILURE,DONE,DEPLOYMENT,0,PRODUCTION,2022-03-07T06:26:42.109+00:00,2022-03-07T06:26:42.109+00:00,cicd1
gitlab:GitlabPipeline:1:485811059,cicd1,FAILURE,DONE,,0,,2022-03-07T06:26:43.784+00:00,2022-03-07T06:26:43.784+00:00,cicd1
gitlab:GitlabPipeline:1:485813816,cicd1,FAILURE,DONE,DEPLOYMENT,0,PRODUCTION,2022-03-07T06:33:56.824+00:00,2022-03-07T06:33:56.824+00:00,cicd1
Expand All @@ -12,3 +12,5 @@ gitlab:GitlabPipeline:1:485817670,cicd1,FAILURE,DONE,,1956,,2022-03-07T06:45:09.
gitlab:GitlabPipeline:1:485845850,cicd1,FAILURE,DONE,,419,,2022-03-07T07:38:58.611+00:00,2022-03-07T07:45:58.412+00:00,cicd1
gitlab:GitlabPipeline:1:485877118,cicd1,FAILURE,DONE,,289,,2022-03-07T08:22:48.943+00:00,2022-03-07T08:27:38.364+00:00,cicd1
gitlab:GitlabPipeline:1:485932863,cicd1,SUCCESS,DONE,DEPLOYMENT,398,,2022-03-07T09:34:57.476+00:00,2022-03-07T09:41:36.267+00:00,cicd1
gitlab:GitlabPipeline:1:485932864,cicd1,SKIPPED,DONE,DEPLOYMENT,398,,2022-03-07T09:34:57.476+00:00,2022-03-07T09:41:36.267+00:00,cicd1
gitlab:GitlabPipeline:1:485932865,cicd1,SUCCESS,DONE,,398,,2022-03-07T09:34:57.476+00:00,2022-03-07T09:41:36.267+00:00,cicd1
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ gitlab:GitlabJob:1:107,format,gitlab:GitlabPipeline:1:457475337,SUCCESS,DONE,,,2
gitlab:GitlabJob:1:108,format,gitlab:GitlabPipeline:1:457475337,SUCCESS,DONE,,,2,2022-07-25T15:35:11.707+00:00,2022-07-25T15:35:14.224+00:00,gitlab:GitlabProject:1:44
gitlab:GitlabJob:1:109,compile,gitlab:GitlabPipeline:1:457475337,SUCCESS,DONE,DEPLOYMENT,PRODUCTION,3,2022-07-25T15:35:14.724+00:00,2022-07-25T15:35:17.828+00:00,gitlab:GitlabProject:1:44
gitlab:GitlabJob:1:110,format,gitlab:GitlabPipeline:1:457475337,SUCCESS,DONE,,,2,2022-07-25T15:36:18.097+00:00,2022-07-25T15:36:20.954+00:00,gitlab:GitlabProject:1:44
gitlab:GitlabJob:1:111,format,gitlab:GitlabPipeline:1:485932865,SKIPPED,DONE,DEPLOYMENT,PRODUCTION,2,2022-07-25T15:36:18.097+00:00,2022-07-25T15:36:20.954+00:00,gitlab:GitlabProject:1:44
18 changes: 10 additions & 8 deletions backend/plugins/dora/tasks/deployment_commits_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,16 @@ func GenerateDeploymentCommits(taskCtx plugin.SubTaskContext) errors.Error {
p.finished_date,
p.environment,
p.cicd_scope_id,
EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ?)
EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result <> ?)
as has_testing_tasks,
EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ?)
EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result <> ?)
as has_staging_tasks,
EXISTS( SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ?)
EXISTS( SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result <> ?)
as has_production_tasks
`,
devops.TESTING,
devops.STAGING,
devops.PRODUCTION,
devops.TESTING, devops.RESULT_SKIPPED,
devops.STAGING, devops.RESULT_SKIPPED,
devops.PRODUCTION, devops.RESULT_SKIPPED,
),
dal.From("cicd_pipeline_commits pc"),
dal.Join("LEFT JOIN cicd_pipelines p ON (p.id = pc.pipeline_id)"),
Expand All @@ -87,13 +87,15 @@ func GenerateDeploymentCommits(taskCtx plugin.SubTaskContext) errors.Error {
`
pm.project_name = ? AND (
p.type = ? OR EXISTS(
SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.type = ?
SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.type = ? AND t.result <> ?
)
)
) AND p.result <> ?
`,
data.Options.ProjectName,
devops.DEPLOYMENT,
devops.DEPLOYMENT,
devops.RESULT_SKIPPED,
devops.RESULT_SKIPPED,
),
)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion backend/plugins/dora/tasks/incident_deploy_connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func ConnectIncidentToDeployment(taskCtx plugin.SubTaskContext) errors.Error {
and cicd_deployment_commits.environment = ?
and pm.table = ?
and pm.project_name = ?`,
issue.CreatedDate, devops.SUCCESS, devops.PRODUCTION, "cicd_scopes", data.Options.ProjectName,
issue.CreatedDate, devops.RESULT_SUCCESS, devops.PRODUCTION, "cicd_scopes", data.Options.ProjectName,
),
dal.Orderby("finished_date DESC"),
dal.Limit(1),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func EnrichPrevSuccessDeploymentCommit(taskCtx plugin.SubTaskContext) errors.Err
AND dc.repo_url IS NOT NULL AND dc.repo_url != ''
AND pm.project_name = ? AND dc.result = ?
`,
data.Options.ProjectName, devops.SUCCESS,
data.Options.ProjectName, devops.RESULT_SUCCESS,
),
dal.Orderby(`dc.cicd_scope_id, dc.repo_url, dc.environment, dc.finished_date`),
)
Expand Down
28 changes: 12 additions & 16 deletions backend/plugins/github/tasks/cicd_job_convertor.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ limitations under the License.
package tasks

import (
"reflect"

"github.com/apache/incubator-devlake/core/dal"
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/core/models/domainlayer"
Expand All @@ -26,8 +28,6 @@ import (
"github.com/apache/incubator-devlake/core/plugin"
"github.com/apache/incubator-devlake/helpers/pluginhelper/api"
"github.com/apache/incubator-devlake/plugins/github/models"
"reflect"
"strings"
)

var ConvertJobsMeta = plugin.SubTaskMeta{
Expand Down Expand Up @@ -85,22 +85,18 @@ func ConvertJobs(taskCtx plugin.SubTaskContext) (err errors.Error) {
CicdScopeId: repoIdGen.Generate(data.Options.ConnectionId, line.RepoId),
Type: line.Type,
Environment: line.Environment,
Result: devops.GetResult(&devops.ResultRule{
Failed: []string{"failure", "FAILURE"},
Success: []string{"success", "SUCCESS"},
Skipped: []string{"skipped", "SKIPPED"},
}, line.Conclusion),
Status: devops.GetStatus(&devops.StatusRule[string]{
Done: []string{"completed", "COMPLETED"},
Default: devops.STATUS_IN_PROGRESS,
}, line.Status),
}

if strings.Contains(line.Conclusion, "SUCCESS") {
domainJob.Result = devops.SUCCESS
} else if strings.Contains(line.Conclusion, "FAILURE") {
domainJob.Result = devops.FAILURE
} else if strings.Contains(line.Conclusion, "ABORT") {
domainJob.Result = devops.ABORT
} else {
domainJob.Result = ""
}

if line.Status != "COMPLETED" {
domainJob.Status = devops.IN_PROGRESS
} else {
domainJob.Status = devops.DONE
if domainJob.Status == devops.STATUS_DONE {
domainJob.DurationSec = uint64(line.CompletedAt.Sub(*line.StartedAt).Seconds())
}

Expand Down
25 changes: 10 additions & 15 deletions backend/plugins/github/tasks/cicd_run_convertor.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package tasks

import (
"reflect"
"strings"

"github.com/apache/incubator-devlake/core/dal"
"github.com/apache/incubator-devlake/core/errors"
Expand Down Expand Up @@ -85,21 +84,17 @@ func ConvertRuns(taskCtx plugin.SubTaskContext) errors.Error {
CicdScopeId: repoIdGen.Generate(data.Options.ConnectionId, line.RepoId),
Type: line.Type,
Environment: line.Environment,
Result: devops.GetResult(&devops.ResultRule{
Failed: []string{"failure", "FAILURE"},
Success: []string{"success", "SUCCESS"},
Skipped: []string{"skipped", "SKIPPED"},
}, line.Conclusion),
Status: devops.GetStatus(&devops.StatusRule[string]{
Done: []string{"completed", "COMPLETED"},
Default: devops.STATUS_IN_PROGRESS,
}, line.Status),
}
if strings.Contains(line.Conclusion, "success") {
domainPipeline.Result = devops.SUCCESS
} else if strings.Contains(line.Conclusion, "failure") {
domainPipeline.Result = devops.FAILURE
} else if strings.Contains(line.Conclusion, "abort") {
domainPipeline.Result = devops.ABORT
} else {
domainPipeline.Result = ""
}

if line.Status != "completed" {
domainPipeline.Status = devops.IN_PROGRESS
} else {
domainPipeline.Status = devops.DONE
if domainPipeline.Status == devops.STATUS_DONE {
domainPipeline.DurationSec = uint64(line.GithubUpdatedAt.Sub(*line.GithubCreatedAt).Seconds())
}

Expand Down
7 changes: 4 additions & 3 deletions backend/plugins/gitlab/tasks/job_convertor.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,16 @@ func ConvertJobs(taskCtx plugin.SubTaskContext) (err errors.Error) {
PipelineId: pipelineIdGen.Generate(data.Options.ConnectionId, gitlabJob.PipelineId),
Result: devops.GetResult(&devops.ResultRule{
Failed: []string{"failed"},
Abort: []string{"canceled", "skipped"},
Abort: []string{"canceled"},
Manual: []string{"manual"},
Success: []string{"success"},
Skipped: []string{"skipped"},
Default: "",
}, gitlabJob.Status),
Status: devops.GetStatus(&devops.StatusRule{
Status: devops.GetStatus(&devops.StatusRule[string]{
InProgress: []string{"created", "waiting_for_resource", "preparing", "pending", "running", "scheduled"},
Manual: []string{"manual"},
Default: devops.DONE,
Default: devops.STATUS_DONE,
}, gitlabJob.Status),

DurationSec: uint64(gitlabJob.Duration),
Expand Down
Loading

0 comments on commit 2865173

Please sign in to comment.