From 26a0c8367c14f050002b2c82da44098c8e2b116c Mon Sep 17 00:00:00 2001 From: abeizn Date: Mon, 13 May 2024 10:58:02 +0800 Subject: [PATCH 01/15] fix: post project with blueprint (#7449) * fix: post project with blueprint * fix: add bp info checker * fix: backend assembly bp information * fix: bp unit test * fix: bp unit test and add custom bp by api * fix: bp unit test * fix: bp unit test * fix: lint * fix: typo * fix: typo --- backend/core/models/project.go | 1 + backend/server/services/project.go | 32 ++++++++++++++++++++++++++ backend/test/e2e/remote/helper.go | 7 +++--- backend/test/helper/api.go | 37 ++++++++++++++++++++++++++++-- backend/test/helper/models.go | 1 + 5 files changed, 73 insertions(+), 5 deletions(-) diff --git a/backend/core/models/project.go b/backend/core/models/project.go index 5014f20b3f8..56cd3b500e7 100644 --- a/backend/core/models/project.go +++ b/backend/core/models/project.go @@ -62,6 +62,7 @@ type ApiInputProject struct { BaseProject `mapstructure:",squash"` Enable *bool `json:"enable" mapstructure:"enable"` Metrics []*BaseMetric `json:"metrics" mapstructure:"metrics"` + Blueprint *Blueprint `json:"blueprint" mapstructure:"blueprint"` } type ApiOutputProject struct { diff --git a/backend/server/services/project.go b/backend/server/services/project.go index 51d773e820a..754092ad2c6 100644 --- a/backend/server/services/project.go +++ b/backend/server/services/project.go @@ -19,6 +19,7 @@ package services import ( "fmt" + "time" "github.com/apache/incubator-devlake/core/dal" "github.com/apache/incubator-devlake/core/errors" @@ -108,12 +109,43 @@ func CreateProject(projectInput *models.ApiInputProject) (*models.ApiOutputProje } } + // create blueprint + blueprint := &models.Blueprint{ + Name: project.Name + "-Blueprint", + ProjectName: project.Name, + Mode: "NORMAL", + Enable: true, + CronConfig: "0 0 * * *", + IsManual: false, + SyncPolicy: models.SyncPolicy{ + TimeAfter: func() *time.Time { + t := time.Now().AddDate(0, -6, 0) + t = time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()) + return &t + }(), + }, + Connections: nil, + } + if projectInput.Blueprint != nil { + blueprint = projectInput.Blueprint + } + err = tx.Create(blueprint) + if err != nil { + return nil, errors.Default.Wrap(err, "error creating DB blueprint") + } + // all good, commit transaction err = tx.Commit() if err != nil { return nil, err } + // reload schedule + err = reloadBlueprint(blueprint) + if err != nil { + return nil, err + } + return makeProjectOutput(project, false) } diff --git a/backend/test/e2e/remote/helper.go b/backend/test/e2e/remote/helper.go index 82cc2e3229d..e94f6a4a399 100644 --- a/backend/test/e2e/remote/helper.go +++ b/backend/test/e2e/remote/helper.go @@ -145,8 +145,10 @@ func CreateTestBlueprints(t *testing.T, client *helper.DevlakeClient, count int) client.CreateProject(&helper.ProjectConfig{ ProjectName: projectName, }) - blueprint := client.CreateBasicBlueprintV2( - fmt.Sprintf("Test blueprint %d", i), + project := client.GetProject(projectName) + blueprint := client.PatchBasicBlueprintV2( + project.Blueprint.ID, + fmt.Sprintf("Test project %d-Blueprint", i), &helper.BlueprintV2Config{ Connection: &models.BlueprintConnection{ PluginName: "fake", @@ -162,7 +164,6 @@ func CreateTestBlueprints(t *testing.T, client *helper.DevlakeClient, count int) }, ) bps = append(bps, blueprint) - project := client.GetProject(projectName) require.Equal(t, blueprint.Name, project.Blueprint.Name) projects = append(projects, project) } diff --git a/backend/test/helper/api.go b/backend/test/helper/api.go index 9099f90adad..2af718f3500 100644 --- a/backend/test/helper/api.go +++ b/backend/test/helper/api.go @@ -22,6 +22,7 @@ import ( "net/http" "reflect" "strings" + "time" "github.com/apache/incubator-devlake/helpers/pluginhelper/services" @@ -103,6 +104,37 @@ func (d *DevlakeClient) CreateBasicBlueprintV2(name string, config *BlueprintV2C return blueprint } +// PatchBasicBlueprintV2 FIXME +func (d *DevlakeClient) PatchBasicBlueprintV2(blueprintId uint64, name string, config *BlueprintV2Config) models.Blueprint { + blueprint := models.Blueprint{ + Name: name, + ProjectName: config.ProjectName, + Mode: models.BLUEPRINT_MODE_NORMAL, + Plan: nil, + Enable: true, + CronConfig: "manual", + IsManual: true, + SyncPolicy: models.SyncPolicy{ + SkipOnFail: config.SkipOnFail, + TimeAfter: func() *time.Time { + t, _ := time.Parse(time.RFC3339, time.Now().AddDate(0, 0, 1).Format(time.RFC3339)) + return &t + }(), + }, + Labels: []string{"test-label"}, + Connections: []*models.BlueprintConnection{ + config.Connection, + }, + } + d.testCtx.Helper() + blueprint = sendHttpRequest[models.Blueprint](d.testCtx, d.timeout, &testContext{ + client: d, + printPayload: true, + inlineJson: false, + }, http.MethodPatch, fmt.Sprintf("%s/blueprints/%d", d.Endpoint, blueprintId), nil, &blueprint) + return blueprint +} + func (d *DevlakeClient) ListBlueprints() blueprints.PaginatedBlueprint { return sendHttpRequest[blueprints.PaginatedBlueprint](d.testCtx, d.timeout, &testContext{ client: d, @@ -156,8 +188,9 @@ func (d *DevlakeClient) CreateProject(project *ProjectConfig) models.ApiOutputPr Name: project.ProjectName, Description: project.ProjectDescription, }, - Enable: Val(true), - Metrics: metrics, + Enable: Val(true), + Metrics: metrics, + Blueprint: project.Blueprint, }) } diff --git a/backend/test/helper/models.go b/backend/test/helper/models.go index 1596a3c65db..8e0bbbc1058 100644 --- a/backend/test/helper/models.go +++ b/backend/test/helper/models.go @@ -36,6 +36,7 @@ type ( ProjectDescription string EnableDora bool MetricPlugins []ProjectPlugin + Blueprint *models.Blueprint } ScopeResponse struct { From 1b8a1877d088d848176f360b57d2e50c7201bc7b Mon Sep 17 00:00:00 2001 From: abeizn Date: Mon, 13 May 2024 11:13:46 +0800 Subject: [PATCH 02/15] fix: missing required value for field display_title (#7460) --- backend/python/plugins/azuredevops/azuredevops/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/python/plugins/azuredevops/azuredevops/models.py b/backend/python/plugins/azuredevops/azuredevops/models.py index 28f7692d8f2..27c1124296e 100644 --- a/backend/python/plugins/azuredevops/azuredevops/models.py +++ b/backend/python/plugins/azuredevops/azuredevops/models.py @@ -115,8 +115,8 @@ def __str__(self) -> str: result: Optional[BuildResult] source_branch: str source_version: str - display_title: str = Field(source='/triggerInfo/ci.message') - url: str = Field(source='/_links/web/href') + display_title: Optional[str] = Field(source='/triggerInfo/ci.message') + url: Optional[str] = Field(source='/_links/web/href') class Job(ToolModel, table=True): From 44ccba3748b95c6878c4eb8e22219bd5c9d06f5c Mon Sep 17 00:00:00 2001 From: abeizn Date: Mon, 13 May 2024 14:34:02 +0800 Subject: [PATCH 03/15] fix: optimize error messages when there are duplicate scope configurations. (#7461) --- backend/helpers/srvhelper/model_service_helper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/helpers/srvhelper/model_service_helper.go b/backend/helpers/srvhelper/model_service_helper.go index 3ec9abe39d6..70acbe4462b 100644 --- a/backend/helpers/srvhelper/model_service_helper.go +++ b/backend/helpers/srvhelper/model_service_helper.go @@ -103,7 +103,7 @@ func (srv *ModelSrvHelper[M]) Create(model *M) errors.Error { err = srv.db.Create(model) if err != nil { if srv.db.IsDuplicationError(err) { - return errors.Conflict.Wrap(err, fmt.Sprintf("%s already exists", srv.modelName)) + return errors.Default.New("The name of the current scope config is duplicated. Please modify it before saving.") } return err } From f7f808742e4e3e2042953291e8fd3e80e93f08a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=92=E6=B9=9B?= <0x1304570@gmail.com> Date: Tue, 14 May 2024 14:35:07 +1200 Subject: [PATCH 04/15] fix: remove auto create blueprint when creating project (#7462) --- config-ui/src/api/blueprint/index.ts | 2 +- config-ui/src/routes/onboard/step-3.tsx | 18 ++++------------ config-ui/src/routes/project/home/index.tsx | 24 +++++---------------- 3 files changed, 10 insertions(+), 34 deletions(-) diff --git a/config-ui/src/api/blueprint/index.ts b/config-ui/src/api/blueprint/index.ts index c514ed74423..727c026de68 100644 --- a/config-ui/src/api/blueprint/index.ts +++ b/config-ui/src/api/blueprint/index.ts @@ -32,7 +32,7 @@ export const create = (data: any) => export const remove = (id: ID) => request(`/blueprints/${id}`, { method: 'delete' }); -export const update = (id: ID, data: IBlueprint) => request(`/blueprints/${id}`, { method: 'patch', data }); +export const update = (id: ID, data: Partial) => request(`/blueprints/${id}`, { method: 'patch', data }); export const pipelines = (id: ID) => request(`/blueprints/${id}/pipelines`); diff --git a/config-ui/src/routes/onboard/step-3.tsx b/config-ui/src/routes/onboard/step-3.tsx index 2e5b79c0b5b..4ee900bfac9 100644 --- a/config-ui/src/routes/onboard/step-3.tsx +++ b/config-ui/src/routes/onboard/step-3.tsx @@ -21,9 +21,7 @@ import { Flex, Button } from 'antd'; import dayjs from 'dayjs'; import API from '@/api'; -import { cronPresets } from '@/config'; import { Markdown } from '@/components'; -import { IBPMode } from '@/types'; import { DataScopeRemote, getPluginScopeId } from '@/plugins'; import { operator, formatTime } from '@/utils'; @@ -43,7 +41,6 @@ export const Step3 = () => { .then((text) => setQA(text)); }, [plugin]); - const presets = useMemo(() => cronPresets.map((preset) => preset.config), []); const connectionId = useMemo(() => { const record = records.find((it) => it.plugin === plugin); return record?.connectionId ?? null; @@ -57,7 +54,7 @@ export const Step3 = () => { const [success] = await operator( async () => { // 1. create a new project - await API.project.create({ + const { blueprint } = await API.project.create({ name: projectName, description: '', metrics: [ @@ -69,18 +66,11 @@ export const Step3 = () => { ], }); - // 2. add a data scope to the connection + // 2. add data scopes to the connection await API.scope.batch(plugin, connectionId, { data: scopes.map((it) => it.data) }); - // 3. create a new blueprint - const blueprint = await API.blueprint.create({ - name: `${projectName}-Blueprint`, - projectName, - mode: IBPMode.NORMAL, - enable: true, - cronConfig: presets[0], - isManual: false, - skipOnFail: true, + // 3. add data scopes to the blueprint + await API.blueprint.update(blueprint.id, { timeAfter: formatTime(dayjs().subtract(14, 'day').startOf('day').toDate(), 'YYYY-MM-DD[T]HH:mm:ssZ'), connections: [ { diff --git a/config-ui/src/routes/project/home/index.tsx b/config-ui/src/routes/project/home/index.tsx index 5a7a350f426..7c253d91e03 100644 --- a/config-ui/src/routes/project/home/index.tsx +++ b/config-ui/src/routes/project/home/index.tsx @@ -20,18 +20,17 @@ import { useState, useMemo, useRef } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { PlusOutlined, SettingOutlined } from '@ant-design/icons'; import { Flex, Table, Button, Modal, Input, Checkbox, message } from 'antd'; -import dayjs from 'dayjs'; import API from '@/api'; import { PageHeader, Block, ExternalLink, IconButton } from '@/components'; -import { getCron, cronPresets, PATHS } from '@/config'; +import { getCron, PATHS } from '@/config'; import { ConnectionName } from '@/features'; import { useRefreshData } from '@/hooks'; import { OnboardTour } from '@/routes/onboard/components'; import { DOC_URL } from '@/release'; import { formatTime, operator } from '@/utils'; import { PipelineStatus } from '@/routes/pipeline'; -import { IBlueprint, IBPMode } from '@/types'; +import { IBlueprint } from '@/types'; import { validName } from '../utils'; @@ -52,7 +51,6 @@ export const ProjectHomePage = () => { const navigate = useNavigate(); - const presets = useMemo(() => cronPresets.map((preset) => preset.config), []); const [dataSource, total] = useMemo( () => [ (data?.projects ?? []).map((it) => { @@ -85,8 +83,8 @@ export const ProjectHomePage = () => { } const [success] = await operator( - async () => { - await API.project.create({ + async () => + API.project.create({ name, description: '', metrics: [ @@ -96,19 +94,7 @@ export const ProjectHomePage = () => { enable: enableDora, }, ], - }); - return API.blueprint.create({ - name: `${name}-Blueprint`, - projectName: name, - mode: IBPMode.NORMAL, - enable: true, - cronConfig: presets[0], - isManual: false, - skipOnFail: true, - timeAfter: formatTime(dayjs().subtract(6, 'month').startOf('day').toDate(), 'YYYY-MM-DD[T]HH:mm:ssZ'), - connections: [], - }); - }, + }), { setOperating: setSaving, }, From 88535776919628ada56063705f056d92fe9af571 Mon Sep 17 00:00:00 2001 From: Klesh Wong Date: Wed, 15 May 2024 10:29:45 +0800 Subject: [PATCH 05/15] refactor: add ipv6 test cases for api client blacklist feature (#7455) --- .../pluginhelper/api/api_client_test.go | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/backend/helpers/pluginhelper/api/api_client_test.go b/backend/helpers/pluginhelper/api/api_client_test.go index 361dc619d49..d0c96471903 100644 --- a/backend/helpers/pluginhelper/api/api_client_test.go +++ b/backend/helpers/pluginhelper/api/api_client_test.go @@ -33,7 +33,7 @@ func TestApiClientBlackList(t *testing.T) { Err errors.Error }{ { - Name: "Internal IP Addresses", + Name: "Blocked Internal IP Addresses", Pattern: "10.0.0.1/16", Endpoints: []string{ "https://10.0.0.1", @@ -44,7 +44,7 @@ func TestApiClientBlackList(t *testing.T) { Err: ErrHostNotAllowed, }, { - Name: "Internal IP Addresses", + Name: "Allowed Public IP Addresses", Pattern: "10.0.0.1/16", Endpoints: []string{ "http://10.1.0.1", @@ -54,6 +54,38 @@ func TestApiClientBlackList(t *testing.T) { }, Err: nil, }, + { + Name: "Blocked IPv6 loopback", + Pattern: "::1/128", + Endpoints: []string{ + "http://[::1]", + }, + Err: ErrHostNotAllowed, + }, + { + Name: "Blocked IPv6 Unique Local Addresses IP Addresses", + Pattern: "fc00::/7", + Endpoints: []string{ + "http://[fdf8:f53b:82e4::53]", + }, + Err: ErrHostNotAllowed, + }, + { + Name: "Blocked IPv6 Link-Local IP Addresses", + Pattern: "fe80::/10", + Endpoints: []string{ + "http://[fe80::200:5aee:feaa:20a2]", + }, + Err: ErrHostNotAllowed, + }, + { + Name: "Allowed IPv6 Public IP Addresses", + Pattern: "fe80::/10", + Endpoints: []string{ + "http://[2001:0002:6c::430]", + }, + Err: nil, + }, } { t.Run(tc.Name, func(t *testing.T) { for _, endpoint := range tc.Endpoints { From 8baef4f2713920c068380686dcdc6b31b19403b4 Mon Sep 17 00:00:00 2001 From: Klesh Wong Date: Wed, 15 May 2024 11:56:59 +0800 Subject: [PATCH 06/15] fix: jira worklog collector fetches only the 1st page (#7466) * fix: jira worklog collector fetches only the 1st page * fix: typo * fix: unit test --- backend/helpers/e2ehelper/data_flow_tester.go | 5 +- .../impls/context/default_subtask_context.go | 6 +- .../_tool_jira_issues_for_external_epics.csv | 8 +-- backend/plugins/jira/models/issue.go | 1 + .../20240514_add_worklog_total_to_issue.go | 56 +++++++++++++++++++ .../jira/models/migrationscripts/register.go | 1 + .../plugins/jira/tasks/apiv2models/issue.go | 3 + .../plugins/jira/tasks/worklog_collector.go | 32 ++++------- 8 files changed, 85 insertions(+), 27 deletions(-) create mode 100644 backend/plugins/jira/models/migrationscripts/20240514_add_worklog_total_to_issue.go diff --git a/backend/helpers/e2ehelper/data_flow_tester.go b/backend/helpers/e2ehelper/data_flow_tester.go index fd6c80a0a94..178a08f30b0 100644 --- a/backend/helpers/e2ehelper/data_flow_tester.go +++ b/backend/helpers/e2ehelper/data_flow_tester.go @@ -227,7 +227,10 @@ func (t *DataFlowTester) Subtask(subtaskMeta plugin.SubTaskMeta, taskData interf // SubtaskContext creates a subtask context func (t *DataFlowTester) SubtaskContext(taskData interface{}) plugin.SubTaskContext { - return contextimpl.NewStandaloneSubTaskContext(context.Background(), runner.CreateBasicRes(t.Cfg, t.Log, t.Db), t.Name, taskData, t.Name) + syncPolicy := &models.SyncPolicy{ + FullSync: true, + } + return contextimpl.NewStandaloneSubTaskContext(context.Background(), runner.CreateBasicRes(t.Cfg, t.Log, t.Db), t.Name, taskData, t.Name, syncPolicy) } func filterColumn(column dal.ColumnMeta, opts TableOptions) bool { diff --git a/backend/impls/context/default_subtask_context.go b/backend/impls/context/default_subtask_context.go index 9720013529b..6f05af66cc2 100644 --- a/backend/impls/context/default_subtask_context.go +++ b/backend/impls/context/default_subtask_context.go @@ -22,6 +22,7 @@ import ( "time" "github.com/apache/incubator-devlake/core/context" + "github.com/apache/incubator-devlake/core/models" "github.com/apache/incubator-devlake/core/plugin" ) @@ -69,10 +70,13 @@ func NewStandaloneSubTaskContext( name string, data interface{}, pluginName string, + syncPolicy *models.SyncPolicy, ) plugin.SubTaskContext { + taskContext := &DefaultTaskContext{defaultExecContext: newDefaultExecContext(ctx, basicRes, pluginName, data, nil)} + taskContext.SetSyncPolicy(syncPolicy) return &DefaultSubTaskContext{ newDefaultExecContext(ctx, basicRes, name, data, nil), - &DefaultTaskContext{defaultExecContext: newDefaultExecContext(ctx, basicRes, pluginName, data, nil)}, + taskContext, time.Time{}, } } diff --git a/backend/plugins/jira/e2e/snapshot_tables/_tool_jira_issues_for_external_epics.csv b/backend/plugins/jira/e2e/snapshot_tables/_tool_jira_issues_for_external_epics.csv index ee61bf223c2..7412788af91 100644 --- a/backend/plugins/jira/e2e/snapshot_tables/_tool_jira_issues_for_external_epics.csv +++ b/backend/plugins/jira/e2e/snapshot_tables/_tool_jira_issues_for_external_epics.csv @@ -1,4 +1,4 @@ -connection_id,issue_id,project_id,project_name,self,icon_url,issue_key,summary,description,type,epic_key,status_name,status_key,story_point,original_estimate_minutes,aggregate_estimate_minutes,remaining_estimate_minutes,creator_account_id,creator_account_type,creator_display_name,assignee_account_id,assignee_account_type,assignee_display_name,priority_id,priority_name,parent_id,parent_key,sprint_id,sprint_name,resolution_date,created,updated,spent_minutes,comment_total,lead_time_minutes,std_type,std_status,components,changelog_total -1,20708,10050,Keon_5,https://merico.atlassian.net/rest/agile/1.0/issue/20708,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,K5-2,first story,,Story,K5-1,To Do,new,0,,0,0,62a2d08d1be00a0068af1945,,Keon Amini,,,,3,Medium,20707,K5-1,175,K5 Sprint 1,,2022-07-15T22:29:49.026+00:00,2022-07-15T22:30:23.341+00:00,,0,,STORY,TODO,,2 -1,20709,10050,Keon_5,https://merico.atlassian.net/rest/agile/1.0/issue/20709,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,K5-3,second story,,Story,K5-4,To Do,new,0,,0,0,62a2d08d1be00a0068af1945,,Keon Amini,,,,3,Medium,20710,K5-4,175,K5 Sprint 1,,2022-07-15T22:30:43.178+00:00,2022-07-15T22:31:38.612+00:00,,0,,STORY,TODO,,2 -1,20710,10050,Keon_5,https://merico.atlassian.net/rest/agile/1.0/issue/20710,https://merico.atlassian.net/images/icons/issuetypes/epic.svg,K5-4,K5 epic,,Epic,,To Do,new,0,,0,0,62a2d08d1be00a0068af1945,,Keon Amini,,,,3,Medium,0,,0,,,2022-07-15T22:31:15.981+00:00,2022-07-15T22:31:38.598+00:00,,0,,EPIC,TODO,,1 +connection_id,issue_id,project_id,project_name,self,icon_url,issue_key,summary,description,type,epic_key,status_name,status_key,story_point,original_estimate_minutes,aggregate_estimate_minutes,remaining_estimate_minutes,creator_account_id,creator_account_type,creator_display_name,assignee_account_id,assignee_account_type,assignee_display_name,priority_id,priority_name,parent_id,parent_key,sprint_id,sprint_name,resolution_date,created,updated,spent_minutes,comment_total,lead_time_minutes,std_type,std_status,components,changelog_total,worklog_total +1,20708,10050,Keon_5,https://merico.atlassian.net/rest/agile/1.0/issue/20708,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,K5-2,first story,,Story,K5-1,To Do,new,0,,0,0,62a2d08d1be00a0068af1945,,Keon Amini,,,,3,Medium,20707,K5-1,175,K5 Sprint 1,,2022-07-15T22:29:49.026+00:00,2022-07-15T22:30:23.341+00:00,,0,,STORY,TODO,,2,0 +1,20709,10050,Keon_5,https://merico.atlassian.net/rest/agile/1.0/issue/20709,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,K5-3,second story,,Story,K5-4,To Do,new,0,,0,0,62a2d08d1be00a0068af1945,,Keon Amini,,,,3,Medium,20710,K5-4,175,K5 Sprint 1,,2022-07-15T22:30:43.178+00:00,2022-07-15T22:31:38.612+00:00,,0,,STORY,TODO,,2,0 +1,20710,10050,Keon_5,https://merico.atlassian.net/rest/agile/1.0/issue/20710,https://merico.atlassian.net/images/icons/issuetypes/epic.svg,K5-4,K5 epic,,Epic,,To Do,new,0,,0,0,62a2d08d1be00a0068af1945,,Keon Amini,,,,3,Medium,0,,0,,,2022-07-15T22:31:15.981+00:00,2022-07-15T22:31:38.598+00:00,,0,,EPIC,TODO,,1,0 diff --git a/backend/plugins/jira/models/issue.go b/backend/plugins/jira/models/issue.go index 489118831b0..d7c44edb682 100644 --- a/backend/plugins/jira/models/issue.go +++ b/backend/plugins/jira/models/issue.go @@ -64,6 +64,7 @@ type JiraIssue struct { StdStatus string `gorm:"type:varchar(255)"` Components string `gorm:"type:varchar(255)"` ChangelogTotal int + WorklogTotal int common.NoPKModel } diff --git a/backend/plugins/jira/models/migrationscripts/20240514_add_worklog_total_to_issue.go b/backend/plugins/jira/models/migrationscripts/20240514_add_worklog_total_to_issue.go new file mode 100644 index 00000000000..104606ec6a1 --- /dev/null +++ b/backend/plugins/jira/models/migrationscripts/20240514_add_worklog_total_to_issue.go @@ -0,0 +1,56 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package migrationscripts + +import ( + "github.com/apache/incubator-devlake/core/context" + "github.com/apache/incubator-devlake/core/errors" +) + +type jiraIssue20240514 struct { + WorklogTotal int +} + +func (jiraIssue20240514) TableName() string { + return "_tool_jira_issues" +} + +type addWorklogToIssue struct{} + +func (script *addWorklogToIssue) Up(basicRes context.BasicRes) errors.Error { + db := basicRes.GetDal() + err := db.AutoMigrate(&jiraIssue20240514{}) + if err != nil { + return err + } + // force full issue extraction so issue.worklog_total can be updated + err = db.Exec("DELETE FROM _devlake_subtask_states WHERE plugin = ? AND subtask = ?", "jira", "extractIssues") + if err != nil { + return err + } + // force full collection for all jira worklogs + return db.Exec("DELETE FROM _devlake_collector_latest_state WHERE raw_data_table = ?", "_raw_jira_api_worklogs") +} + +func (*addWorklogToIssue) Version() uint64 { + return 20240514145131 +} + +func (*addWorklogToIssue) Name() string { + return "add worklog_total to _tool_jira_issues" +} diff --git a/backend/plugins/jira/models/migrationscripts/register.go b/backend/plugins/jira/models/migrationscripts/register.go index b4c410c9fbc..1a8f8367b6d 100644 --- a/backend/plugins/jira/models/migrationscripts/register.go +++ b/backend/plugins/jira/models/migrationscripts/register.go @@ -47,5 +47,6 @@ func All() []plugin.MigrationScript { new(modifyIssueRelationship), new(addComponents20230412), new(addFilterJQL), + new(addWorklogToIssue), } } diff --git a/backend/plugins/jira/tasks/apiv2models/issue.go b/backend/plugins/jira/tasks/apiv2models/issue.go index 2ebace7c413..8a4417a3d46 100644 --- a/backend/plugins/jira/tasks/apiv2models/issue.go +++ b/backend/plugins/jira/tasks/apiv2models/issue.go @@ -242,6 +242,9 @@ func (i Issue) toToolLayer(connectionId uint64) *models.JiraIssue { if i.Changelog != nil { result.ChangelogTotal = i.Changelog.Total } + if i.Fields.Worklog != nil { + result.WorklogTotal = i.Fields.Worklog.Total + } if i.Fields.Epic != nil { result.EpicKey = i.Fields.Epic.Key } diff --git a/backend/plugins/jira/tasks/worklog_collector.go b/backend/plugins/jira/tasks/worklog_collector.go index 8112a6d0a7c..b364a700489 100644 --- a/backend/plugins/jira/tasks/worklog_collector.go +++ b/backend/plugins/jira/tasks/worklog_collector.go @@ -20,6 +20,7 @@ package tasks import ( "encoding/json" "net/http" + "net/url" "reflect" "github.com/apache/incubator-devlake/core/dal" @@ -59,32 +60,15 @@ func CollectWorklogs(taskCtx plugin.SubTaskContext) errors.Error { // filter out issue_ids that needed collection clauses := []dal.Clause{ - dal.Select("i.issue_id, i.updated AS update_time"), + dal.Select("i.issue_id AS issue_id, i.updated AS update_time"), dal.From("_tool_jira_board_issues bi"), dal.Join("LEFT JOIN _tool_jira_issues i ON (bi.connection_id = i.connection_id AND bi.issue_id = i.issue_id)"), - dal.Join("LEFT JOIN _tool_jira_worklogs wl ON (wl.connection_id = i.connection_id AND wl.issue_id = i.issue_id)"), - dal.Where("i.updated > i.created AND bi.connection_id = ? AND bi.board_id = ? ", data.Options.ConnectionId, data.Options.BoardId), - dal.Groupby("i.issue_id, i.updated"), + dal.Where("bi.connection_id=? and bi.board_id = ? AND i.std_type != ? and i.worklog_total > 20", data.Options.ConnectionId, data.Options.BoardId, "Epic"), } if apiCollector.IsIncremental() && apiCollector.GetSince() != nil { - clauses = append( - clauses, - dal.Having( - "i.updated > ? AND (i.updated > max(wl.issue_updated) OR (max(wl.issue_updated) IS NULL AND COUNT(wl.worklog_id) > 0))", - apiCollector.GetSince(), - ), - ) - } else { - /* - i.updated > max(wl.issue_updated) was deleted because for non-incremental collection, - max(wl.issue_updated) will only be one of null, less or equal to i.updated - so i.updated > max(wl.issue_updated) is always false. - max(wl.issue_updated) IS NULL AND COUNT(wl.worklog_id) > 0 infers the issue has more than 100 worklogs, - because we collected worklogs when collecting issues, and assign worklog.issue_updated if num of worklogs < 100, - and max(wl.issue_updated) IS NULL AND COUNT(wl.worklog_id) > 0 means all worklogs for the issue were not assigned issue_updated - */ - clauses = append(clauses, dal.Having("max(wl.issue_updated) IS NULL AND COUNT(wl.worklog_id) > 0")) + clauses = append(clauses, dal.Where("i.updated > ?", apiCollector.GetSince())) } + // construct the input iterator cursor, err := db.Cursor(clauses...) if err != nil { @@ -101,6 +85,12 @@ func CollectWorklogs(taskCtx plugin.SubTaskContext) errors.Error { UrlTemplate: "api/2/issue/{{ .Input.IssueId }}/worklog", PageSize: 50, GetTotalPages: GetTotalPagesFromResponse, + Query: func(reqData *api.RequestData) (url.Values, errors.Error) { + // According to the following resources, the worklogs API returns all worklogs without pagination + // https://community.atlassian.com/t5/Jira-questions/Worklog-Pagination/qaq-p/117614 + // https://community.atlassian.com/t5/Jira-questions/Worklog-Pagination-JIRA-REST-API/qaq-p/2173832 + return nil, nil + }, ResponseParser: func(res *http.Response) ([]json.RawMessage, errors.Error) { var data struct { Worklogs []json.RawMessage `json:"worklogs"` From 05160fe4597ea724cefec7a2a71aed1eb7142e44 Mon Sep 17 00:00:00 2001 From: abeizn Date: Wed, 15 May 2024 12:01:33 +0800 Subject: [PATCH 07/15] fix: patch api error messages optimize (#7467) --- backend/helpers/srvhelper/model_service_helper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/helpers/srvhelper/model_service_helper.go b/backend/helpers/srvhelper/model_service_helper.go index 70acbe4462b..9c3d05ecee7 100644 --- a/backend/helpers/srvhelper/model_service_helper.go +++ b/backend/helpers/srvhelper/model_service_helper.go @@ -115,7 +115,7 @@ func (srv *ModelSrvHelper[M]) Update(model *M) errors.Error { err := srv.ValidateModel(model) if err != nil { if srv.db.IsDuplicationError(err) { - return errors.Conflict.Wrap(err, fmt.Sprintf("%s already exists", srv.modelName)) + return errors.Default.New("The name of the current scope config is duplicated. Please modify it before saving.") } return err } From 57acac81faa80dd2aa8199b7f89a1904c70a92ca Mon Sep 17 00:00:00 2001 From: Lynwee Date: Wed, 15 May 2024 12:02:17 +0800 Subject: [PATCH 08/15] feat(githubgraphql): add releases (#7469) * feat(githubgraphql): add releases * fix(githubgraphql): fix lint errors * fix(githubgraphql): fix lint errors --- .../models/domainlayer/devops/cicd_release.go | 53 +++++++ .../domainlayer/domaininfo/domaininfo.go | 1 + .../20240514_add_cicd_release.go | 69 ++++++++++ .../core/models/migrationscripts/register.go | 1 + backend/plugins/github/impl/impl.go | 1 + .../20240514_add_github_release.go | 66 +++++++++ .../models/migrationscripts/register.go | 1 + backend/plugins/github/models/release.go | 50 +++++++ .../plugins/github/tasks/release_convertor.go | 103 ++++++++++++++ backend/plugins/github_graphql/impl/impl.go | 5 + .../github_graphql/tasks/release_collector.go | 130 ++++++++++++++++++ .../github_graphql/tasks/release_extractor.go | 105 ++++++++++++++ 12 files changed, 585 insertions(+) create mode 100644 backend/core/models/domainlayer/devops/cicd_release.go create mode 100644 backend/core/models/migrationscripts/20240514_add_cicd_release.go create mode 100644 backend/plugins/github/models/migrationscripts/20240514_add_github_release.go create mode 100644 backend/plugins/github/models/release.go create mode 100644 backend/plugins/github/tasks/release_convertor.go create mode 100644 backend/plugins/github_graphql/tasks/release_collector.go create mode 100644 backend/plugins/github_graphql/tasks/release_extractor.go diff --git a/backend/core/models/domainlayer/devops/cicd_release.go b/backend/core/models/domainlayer/devops/cicd_release.go new file mode 100644 index 00000000000..f9ed7401236 --- /dev/null +++ b/backend/core/models/domainlayer/devops/cicd_release.go @@ -0,0 +1,53 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package devops + +import ( + "github.com/apache/incubator-devlake/core/models/domainlayer" + "time" +) + +type CicdRelease struct { + domainlayer.DomainEntity + PublishedAt time.Time `json:"publishedAt"` + + CicdScopeId string `gorm:"index;type:varchar(255)"` + + Name string `gorm:"type:varchar(255)"` + DisplayTitle string `gorm:"type:varchar(255)"` + Description string `json:"description"` + URL string `json:"url"` + + IsDraft bool `json:"isDraft"` + IsLatest bool `json:"isLatest"` + IsPrerelease bool `json:"isPrerelease"` + + AuthorID string `json:"id" gorm:"type:varchar(255)"` + + RepoId string `gorm:"type:varchar(255)"` + //RepoUrl string `gorm:"index;not null"` + + TagName string `json:"tagName"` + //CommitSha string `gorm:"primaryKey;type:varchar(255)"` + //CommitMsg string + //RefName string `gorm:"type:varchar(255)"` +} + +func (CicdRelease) TableName() string { + return "cicd_releases" +} diff --git a/backend/core/models/domainlayer/domaininfo/domaininfo.go b/backend/core/models/domainlayer/domaininfo/domaininfo.go index 9f67181eb74..92fa770e928 100644 --- a/backend/core/models/domainlayer/domaininfo/domaininfo.go +++ b/backend/core/models/domainlayer/domaininfo/domaininfo.go @@ -73,6 +73,7 @@ func GetDomainTablesInfo() []dal.Tabler { &devops.CiCDPipelineCommit{}, &devops.CicdScope{}, &devops.CICDDeployment{}, + &devops.CicdRelease{}, // didgen no table // ticket &ticket.Board{}, diff --git a/backend/core/models/migrationscripts/20240514_add_cicd_release.go b/backend/core/models/migrationscripts/20240514_add_cicd_release.go new file mode 100644 index 00000000000..9f6d22fcde6 --- /dev/null +++ b/backend/core/models/migrationscripts/20240514_add_cicd_release.go @@ -0,0 +1,69 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package migrationscripts + +import ( + "github.com/apache/incubator-devlake/core/models/migrationscripts/archived" + "time" + + "github.com/apache/incubator-devlake/core/context" + "github.com/apache/incubator-devlake/core/errors" + "github.com/apache/incubator-devlake/core/plugin" +) + +var _ plugin.MigrationScript = (*addCicdRelease)(nil) + +type cicdRelease20240514 struct { + archived.DomainEntity + PublishedAt time.Time `json:"publishedAt"` + + CicdScopeId string `gorm:"index;type:varchar(255)"` + + Name string `gorm:"type:varchar(255)"` + DisplayTitle string `gorm:"type:varchar(255)"` + Description string `json:"description"` + URL string `json:"url"` + + IsDraft bool `json:"isDraft"` + IsLatest bool `json:"isLatest"` + IsPrerelease bool `json:"isPrerelease"` + + AuthorID string `json:"id" gorm:"type:varchar(255)"` + + RepoId string `gorm:"type:varchar(255)"` + + TagName string `json:"tagName"` +} + +func (cicdRelease20240514) TableName() string { + return "cicd_releases" +} + +type addCicdRelease struct{} + +func (*addCicdRelease) Up(basicRes context.BasicRes) errors.Error { + return basicRes.GetDal().AutoMigrate(cicdRelease20240514{}) +} + +func (*addCicdRelease) Version() uint64 { + return 20240514181200 +} + +func (*addCicdRelease) Name() string { + return "add cicd_releases table" +} diff --git a/backend/core/models/migrationscripts/register.go b/backend/core/models/migrationscripts/register.go index b79d0bc4c4b..ac7f66fc99c 100644 --- a/backend/core/models/migrationscripts/register.go +++ b/backend/core/models/migrationscripts/register.go @@ -113,5 +113,6 @@ func All() []plugin.MigrationScript { new(addSubtaskField), new(addDisplayTitleAndUrl), new(addSubtaskStates), + new(addCicdRelease), } } diff --git a/backend/plugins/github/impl/impl.go b/backend/plugins/github/impl/impl.go index f0bce7313a4..f73f331200a 100644 --- a/backend/plugins/github/impl/impl.go +++ b/backend/plugins/github/impl/impl.go @@ -104,6 +104,7 @@ func (p Github) GetTablesInfo() []dal.Tabler { &models.GithubIssueAssignee{}, &models.GithubScopeConfig{}, &models.GithubDeployment{}, + &models.GithubRelease{}, } } diff --git a/backend/plugins/github/models/migrationscripts/20240514_add_github_release.go b/backend/plugins/github/models/migrationscripts/20240514_add_github_release.go new file mode 100644 index 00000000000..12dd37e6050 --- /dev/null +++ b/backend/plugins/github/models/migrationscripts/20240514_add_github_release.go @@ -0,0 +1,66 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package migrationscripts + +import ( + "github.com/apache/incubator-devlake/core/context" + "github.com/apache/incubator-devlake/core/errors" + "github.com/apache/incubator-devlake/core/models/migrationscripts/archived" + "github.com/apache/incubator-devlake/helpers/migrationhelper" + "time" +) + +type addReleaseTable struct{} + +type release20240514 struct { + archived.NoPKModel `json:"-" mapstructure:"-"` + ConnectionId uint64 `json:"connection_id" gorm:"primaryKey"` + GithubId int `json:"github_id"` + Id string `json:"id" gorm:"type:varchar(255);primaryKey"` + AuthorName string `json:"authorName"` + AuthorID string `json:"authorId"` + CreatedAt time.Time `json:"createdAt"` + DatabaseID int `json:"databaseId"` + Description string `json:"description"` + DescriptionHTML string `json:"descriptionHTML"` + IsDraft bool `json:"isDraft"` + IsLatest bool `json:"isLatest"` + IsPrerelease bool `json:"isPrerelease"` + Name string `json:"name"` + PublishedAt time.Time `json:"publishedAt"` + ResourcePath string `json:"resourcePath"` + TagName string `json:"tagName"` + UpdatedAt time.Time `json:"updatedAt"` + URL string `json:"url"` +} + +func (release20240514) TableName() string { + return "_tool_github_releases" +} + +func (u *addReleaseTable) Up(baseRes context.BasicRes) errors.Error { + return migrationhelper.AutoMigrateTables(baseRes, &release20240514{}) +} + +func (*addReleaseTable) Version() uint64 { + return 20240514182300 +} + +func (*addReleaseTable) Name() string { + return "add table _tool_github_releases" +} diff --git a/backend/plugins/github/models/migrationscripts/register.go b/backend/plugins/github/models/migrationscripts/register.go index 1f09898dfea..89ebfa42969 100644 --- a/backend/plugins/github/models/migrationscripts/register.go +++ b/backend/plugins/github/models/migrationscripts/register.go @@ -48,5 +48,6 @@ func All() []plugin.MigrationScript { new(addEnvNamePattern), new(modifyIssueTypeLength), new(addWorkflowDisplayTitle), + new(addReleaseTable), } } diff --git a/backend/plugins/github/models/release.go b/backend/plugins/github/models/release.go new file mode 100644 index 00000000000..d713831820d --- /dev/null +++ b/backend/plugins/github/models/release.go @@ -0,0 +1,50 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package models + +import ( + "time" + + "github.com/apache/incubator-devlake/core/models/common" +) + +type GithubRelease struct { + common.NoPKModel `json:"-" mapstructure:"-"` + ConnectionId uint64 `json:"connection_id" gorm:"primaryKey"` + GithubId int `json:"github_id"` + Id string `json:"id" gorm:"type:varchar(255);primaryKey"` + AuthorName string `json:"authorName"` + AuthorID string `json:"authorId"` + CreatedAt time.Time `json:"createdAt"` + DatabaseID int `json:"databaseId"` + Description string `json:"description"` + DescriptionHTML string `json:"descriptionHTML"` + IsDraft bool `json:"isDraft"` + IsLatest bool `json:"isLatest"` + IsPrerelease bool `json:"isPrerelease"` + Name string `json:"name"` + PublishedAt time.Time `json:"publishedAt"` + ResourcePath string `json:"resourcePath"` + TagName string `json:"tagName"` + UpdatedAt time.Time `json:"updatedAt"` + URL string `json:"url"` +} + +func (GithubRelease) TableName() string { + return "_tool_github_releases" +} diff --git a/backend/plugins/github/tasks/release_convertor.go b/backend/plugins/github/tasks/release_convertor.go new file mode 100644 index 00000000000..bcf4914ac6b --- /dev/null +++ b/backend/plugins/github/tasks/release_convertor.go @@ -0,0 +1,103 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +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" + "github.com/apache/incubator-devlake/core/models/domainlayer/devops" + "github.com/apache/incubator-devlake/core/models/domainlayer/didgen" + "github.com/apache/incubator-devlake/core/plugin" + "github.com/apache/incubator-devlake/helpers/pluginhelper/api" + "github.com/apache/incubator-devlake/plugins/github/models" +) + +func init() { + RegisterSubtaskMeta(&ConvertReleasesMeta) +} + +const ( + RAW_RELEASE_TABLE = "github_graphql_release" +) + +var ConvertReleasesMeta = plugin.SubTaskMeta{ + Name: "Convert Releases", + EntryPoint: ConvertRelease, + EnabledByDefault: true, + Description: "Convert tool layer table github_releases into domain layer table releases", + DomainTypes: []string{plugin.DOMAIN_TYPE_CICD}, + DependencyTables: []string{models.GithubRelease{}.TableName()}, + ProductTables: []string{devops.CicdRelease{}.TableName()}, +} + +func ConvertRelease(taskCtx plugin.SubTaskContext) errors.Error { + db := taskCtx.GetDal() + rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_RELEASE_TABLE) + cursor, err := db.Cursor( + dal.From(&models.GithubRelease{}), + dal.Where("connection_id = ? and github_id = ?", data.Options.ConnectionId, data.Options.GithubId), + ) + if err != nil { + return err + } + defer cursor.Close() + + releaseIdGen := didgen.NewDomainIdGenerator(&models.GithubRelease{}) + releaseScopeIdGen := didgen.NewDomainIdGenerator(&models.GithubRepo{}) + + converter, err := api.NewDataConverter(api.DataConverterArgs{ + InputRowType: reflect.TypeOf(models.GithubRelease{}), + Input: cursor, + RawDataSubTaskArgs: *rawDataSubTaskArgs, + Convert: func(inputRow interface{}) ([]interface{}, errors.Error) { + githubRelease := inputRow.(*models.GithubRelease) + release := &devops.CicdRelease{ + DomainEntity: domainlayer.DomainEntity{ + Id: releaseIdGen.Generate(githubRelease.ConnectionId, githubRelease.Id), + }, + PublishedAt: githubRelease.PublishedAt, + CicdScopeId: releaseScopeIdGen.Generate(githubRelease.ConnectionId, githubRelease.GithubId), + Name: githubRelease.Name, + DisplayTitle: githubRelease.Name, + Description: githubRelease.Description, + URL: githubRelease.URL, + IsDraft: githubRelease.IsDraft, + IsLatest: githubRelease.IsLatest, + IsPrerelease: githubRelease.IsPrerelease, + TagName: githubRelease.TagName, + + AuthorID: githubRelease.AuthorID, + + RepoId: releaseScopeIdGen.Generate(githubRelease.ConnectionId, githubRelease.GithubId), + } + + return []interface{}{ + release, + }, nil + }, + }) + + if err != nil { + return err + } + + return converter.Execute() +} diff --git a/backend/plugins/github_graphql/impl/impl.go b/backend/plugins/github_graphql/impl/impl.go index 46dbe6fa071..58a8d04f69a 100644 --- a/backend/plugins/github_graphql/impl/impl.go +++ b/backend/plugins/github_graphql/impl/impl.go @@ -132,6 +132,11 @@ func (p GithubGraphql) SubTaskMetas() []plugin.SubTaskMeta { tasks.CollectDeploymentsMeta, tasks.ExtractDeploymentsMeta, githubTasks.ConvertDeploymentsMeta, + + // releases + tasks.CollectReleaseMeta, + tasks.ExtractReleasesMeta, + githubTasks.ConvertReleasesMeta, } } diff --git a/backend/plugins/github_graphql/tasks/release_collector.go b/backend/plugins/github_graphql/tasks/release_collector.go new file mode 100644 index 00000000000..e80c138870c --- /dev/null +++ b/backend/plugins/github_graphql/tasks/release_collector.go @@ -0,0 +1,130 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package tasks + +import ( + "strings" + "time" + + "github.com/apache/incubator-devlake/core/errors" + "github.com/apache/incubator-devlake/core/plugin" + helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api" + githubTasks "github.com/apache/incubator-devlake/plugins/github/tasks" + "github.com/merico-dev/graphql" +) + +const RAW_RELEASE_TABLE = "github_graphql_release" + +type GraphqlQueryReleaseWrapper struct { + RateLimit struct { + Cost int + } + Repository struct { + Releases struct { + TotalCount graphql.Int `graphql:"totalCount"` + PageInfo *helper.GraphqlQueryPageInfo `graphql:"pageInfo"` + Releases []*GraphqlQueryRelease `graphql:"nodes"` + } `graphql:"releases(first: $pageSize, after: $skipCursor, orderBy: {field: CREATED_AT, direction: DESC})"` + } `graphql:"repository(owner: $owner, name: $name)"` +} + +type GraphqlQueryReleaseAuthor struct { + Name *string `graphql:"name"` + ID string `graphql:"id"` +} + +type GraphqlQueryRelease struct { + Author GraphqlQueryReleaseAuthor `graphql:"author"` + DatabaseID int `graphql:"databaseId"` + Id string `graphql:"id"` + CreatedAt time.Time `graphql:"createdAt"` + Description string `graphql:"description"` + DescriptionHTML string `graphql:"descriptionHTML"` + IsDraft bool `graphql:"isDraft"` + IsLatest bool `graphql:"isLatest"` + IsPrerelease bool `graphql:"isPrerelease"` + Name string `graphql:"name"` + PublishedAt time.Time `graphql:"publishedAt"` + ResourcePath string `graphql:"resourcePath"` + TagName string `graphql:"tagName"` + UpdatedAt time.Time `graphql:"updatedAt"` + URL string `graphql:"url"` +} + +var CollectReleaseMeta = plugin.SubTaskMeta{ + Name: "Collect Releases", + EntryPoint: CollectRelease, + EnabledByDefault: true, + Description: "Collect Release data from GithubGraphql api, does not support either timeFilter or diffSync.", + DomainTypes: []string{plugin.DOMAIN_TYPE_CICD}, +} + +var _ plugin.SubTaskEntryPoint = CollectRelease + +func CollectRelease(taskCtx plugin.SubTaskContext) errors.Error { + data := taskCtx.GetData().(*githubTasks.GithubTaskData) + apiCollector, err := helper.NewStatefulApiCollector(helper.RawDataSubTaskArgs{ + Ctx: taskCtx, + Params: githubTasks.GithubApiParams{ + ConnectionId: data.Options.ConnectionId, + Name: data.Options.Name, + }, + Table: RAW_RELEASE_TABLE, + }) + if err != nil { + return err + } + + err = apiCollector.InitGraphQLCollector(helper.GraphqlCollectorArgs{ + GraphqlClient: data.GraphqlClient, + PageSize: 100, + BuildQuery: func(reqData *helper.GraphqlRequestData) (interface{}, map[string]interface{}, error) { + query := &GraphqlQueryReleaseWrapper{} + variables := make(map[string]interface{}) + if reqData == nil { + return query, variables, nil + } + ownerName := strings.Split(data.Options.Name, "/") + variables = map[string]interface{}{ + "pageSize": graphql.Int(reqData.Pager.Size), + "skipCursor": (*graphql.String)(reqData.Pager.SkipCursor), + "owner": graphql.String(ownerName[0]), + "name": graphql.String(ownerName[1]), + } + return query, variables, nil + }, + GetPageInfo: func(iQuery interface{}, args *helper.GraphqlCollectorArgs) (*helper.GraphqlQueryPageInfo, error) { + query := iQuery.(*GraphqlQueryReleaseWrapper) + return query.Repository.Releases.PageInfo, nil + }, + ResponseParser: func(iQuery interface{}, variables map[string]interface{}) ([]interface{}, error) { + query := iQuery.(*GraphqlQueryReleaseWrapper) + deployments := query.Repository.Releases.Releases + for _, rawL := range deployments { + if apiCollector.GetSince() != nil && !apiCollector.GetSince().Before(rawL.UpdatedAt) { + return nil, helper.ErrFinishCollect + } + } + return nil, nil + }, + }) + if err != nil { + return err + } + return apiCollector.Execute() +} diff --git a/backend/plugins/github_graphql/tasks/release_extractor.go b/backend/plugins/github_graphql/tasks/release_extractor.go new file mode 100644 index 00000000000..4d019dcc81a --- /dev/null +++ b/backend/plugins/github_graphql/tasks/release_extractor.go @@ -0,0 +1,105 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package tasks + +import ( + "encoding/json" + "github.com/apache/incubator-devlake/core/errors" + "github.com/apache/incubator-devlake/core/models/common" + "github.com/apache/incubator-devlake/core/plugin" + "github.com/apache/incubator-devlake/helpers/pluginhelper/api" + githubModels "github.com/apache/incubator-devlake/plugins/github/models" + githubTasks "github.com/apache/incubator-devlake/plugins/github/tasks" +) + +var _ plugin.SubTaskEntryPoint = ExtractReleases + +var ExtractReleasesMeta = plugin.SubTaskMeta{ + Name: "Extract Releases", + EntryPoint: ExtractReleases, + EnabledByDefault: true, + Description: "extract raw release data into tool layer table github_releases", + DomainTypes: []string{plugin.DOMAIN_TYPE_CICD}, +} + +func ExtractReleases(taskCtx plugin.SubTaskContext) errors.Error { + data := taskCtx.GetData().(*githubTasks.GithubTaskData) + extractor, err := api.NewApiExtractor(api.ApiExtractorArgs{ + RawDataSubTaskArgs: api.RawDataSubTaskArgs{ + Ctx: taskCtx, + Params: githubTasks.GithubApiParams{ + ConnectionId: data.Options.ConnectionId, + Name: data.Options.Name, + }, + Table: RAW_RELEASE_TABLE, + }, + Extract: func(row *api.RawData) ([]interface{}, errors.Error) { + apiDeployment := &GraphqlQueryReleaseWrapper{} + err := errors.Convert(json.Unmarshal(row.Data, apiDeployment)) + if err != nil { + return nil, err + } + + releases := apiDeployment.Repository.Releases.Releases + var results []interface{} + for _, release := range releases { + githubRelease, err := convertGitHubRelease(release, data.Options.ConnectionId, data.Options.GithubId) + if err != nil { + return nil, errors.Convert(err) + } + results = append(results, githubRelease) + } + + return results, nil + }, + }) + + if err != nil { + return err + } + + return extractor.Execute() +} + +func convertGitHubRelease(release *GraphqlQueryRelease, connectionId uint64, githubId int) (*githubModels.GithubRelease, errors.Error) { + ret := &githubModels.GithubRelease{ + ConnectionId: connectionId, + GithubId: githubId, + NoPKModel: common.NewNoPKModel(), + + Id: release.Id, + AuthorID: release.Author.ID, + CreatedAt: release.CreatedAt, + DatabaseID: release.DatabaseID, + Description: release.Description, + DescriptionHTML: release.Description, + IsDraft: release.IsDraft, + IsLatest: release.IsLatest, + IsPrerelease: release.IsPrerelease, + Name: release.Name, + PublishedAt: release.PublishedAt, + ResourcePath: release.ResourcePath, + TagName: release.TagName, + UpdatedAt: release.UpdatedAt, + URL: release.URL, + } + if release.Author.Name != nil { + ret.AuthorName = *release.Author.Name + } + return ret, nil +} From 2a052dee85d9380df583851418d6819863bc3fe0 Mon Sep 17 00:00:00 2001 From: Lynwee Date: Wed, 15 May 2024 12:10:33 +0800 Subject: [PATCH 09/15] fix(apikey): abort request if api key doesn't match (#7471) --- backend/server/api/middlewares.go | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/server/api/middlewares.go b/backend/server/api/middlewares.go index 32ec5e85490..86c8c6a6fb7 100644 --- a/backend/server/api/middlewares.go +++ b/backend/server/api/middlewares.go @@ -121,6 +121,7 @@ func RestAuthentication(router *gin.Engine, basicRes context.BasicRes) gin.Handl authHeader := c.GetHeader("Authorization") ok := CheckAuthorizationHeader(c, logger, db, apiKeyHelper, authHeader, path) if !ok { + c.Abort() return } else { router.HandleContext(c) From 3dd13fad3469ac88f1c6bf1bfbe082815a1b61ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=92=E6=B9=9B?= <0x1304570@gmail.com> Date: Wed, 15 May 2024 19:50:09 +1200 Subject: [PATCH 10/15] fix: related projects error when updating scope config (#7472) --- config-ui/src/api/scope/index.ts | 6 +- .../plugins/components/scope-config/index.tsx | 150 +++++++++++++++--- .../blueprint/connection-detail/index.tsx | 8 +- .../blueprint/connection-detail/table.tsx | 87 ++++------ .../src/routes/connection/connection.tsx | 68 +------- 5 files changed, 164 insertions(+), 155 deletions(-) diff --git a/config-ui/src/api/scope/index.ts b/config-ui/src/api/scope/index.ts index b4331cd50af..7007314f694 100644 --- a/config-ui/src/api/scope/index.ts +++ b/config-ui/src/api/scope/index.ts @@ -37,8 +37,10 @@ export const list = ( data, }); -export const get = (plugin: string, connectionId: ID, scopeId: ID) => - request(`/plugins/${plugin}/connections/${connectionId}/scopes/${scopeId}`); +export const get = (plugin: string, connectionId: ID, scopeId: ID, payload?: { blueprints: boolean }) => + request(`/plugins/${plugin}/connections/${connectionId}/scopes/${scopeId}`, { + data: payload, + }); export const remove = (plugin: string, connectionId: ID, scopeId: ID, onlyData: boolean) => request(`/plugins/${plugin}/connections/${connectionId}/scopes/${scopeId}?delete_data_only=${onlyData}`, { diff --git a/config-ui/src/plugins/components/scope-config/index.tsx b/config-ui/src/plugins/components/scope-config/index.tsx index 303191aa5bf..8c3c6fe71da 100644 --- a/config-ui/src/plugins/components/scope-config/index.tsx +++ b/config-ui/src/plugins/components/scope-config/index.tsx @@ -23,6 +23,7 @@ import styled from 'styled-components'; import API from '@/api'; import { IconButton, Message } from '@/components'; +import { PATHS } from '@/config'; import { operator } from '@/utils'; import { PluginName } from '../plugin-name'; @@ -31,31 +32,42 @@ import { ScopeConfigForm } from '../scope-config-form'; const Wrapper = styled.div``; +type RelatedProjects = Array<{ name: string; blueprintId: ID; scopes: Array<{ scopeName: string }> }>; + interface Props { plugin: string; connectionId: ID; scopeId: ID; scopeName: string; - id?: ID; - name?: string; - onSuccess?: (id?: ID) => void; + scopeConfigId?: ID; + scopeConfigName?: string; + projects?: Array<{ name: string; blueprintId: ID }>; + onSuccess: (id?: ID) => void; } -export const ScopeConfig = ({ plugin, connectionId, scopeId, scopeName, id, name, onSuccess }: Props) => { +export const ScopeConfig = ({ + plugin, + connectionId, + scopeId, + scopeName, + scopeConfigId, + scopeConfigName, + onSuccess, +}: Props) => { const [type, setType] = useState<'associate' | 'update' | 'relatedProjects' | 'duplicate'>(); - const [relatedProjects, setRelatedProjects] = useState< - Array<{ name: string; scopes: Array<{ scopeId: ID; scopeName: string }> }> - >([]); + const [relatedProjects, setRelatedProjects] = useState([]); + + const [operating, setOperating] = useState(false); const { token: { colorPrimary }, } = theme.useToken(); - const handleHideDialog = () => setType(undefined); + const [modal, contextHolder] = Modal.useModal(); - const handleCheckScopeConfig = async () => { - if (!id) return; + const handleHideDialog = () => setType(undefined); + const handleCheckScopeConfig = async (id: ID) => { const [success, res] = await operator(() => API.scopeConfig.check(plugin, id), { hideToast: true }); if (success) { @@ -64,7 +76,7 @@ export const ScopeConfig = ({ plugin, connectionId, scopeId, scopeName, id, name scopes: it.scopes, })); - if (projects.length > 0) { + if (projects.length > 1) { setRelatedProjects(projects); setType('relatedProjects'); } else { @@ -73,9 +85,82 @@ export const ScopeConfig = ({ plugin, connectionId, scopeId, scopeName, id, name } }; + const handleRun = async (pname: string, blueprintId: ID, data?: { skipCollectors?: boolean; fullSync?: boolean }) => { + const [success] = await operator(() => API.blueprint.trigger(blueprintId, data), { + setOperating, + }); + + if (success) { + window.open(PATHS.PROJECT(pname, { tab: 'status' })); + } + }; + + const handleShowProjectsModal = (projects: RelatedProjects) => { + if (!projects || !projects.length) { + onSuccess(); + } else if (projects.length === 1) { + const [{ name, blueprintId }] = projects; + modal.success({ + closable: true, + centered: true, + width: 550, + title: 'Scope Config Saved', + content: 'Please re-transform data to apply the updated scope config.', + footer: ( +
+ +
+ ), + onCancel: onSuccess, + }); + } else { + modal.success({ + closable: true, + centered: true, + width: 830, + title: 'Scope Config Saved', + content: ( + <> +
+ The listed projects are impacted. Please re-transform the data to apply the updated scope config. +
+
    + {projects.map(({ name, blueprintId }: { name: string; blueprintId: ID }) => ( +
  • + + {name} + + +
  • + ))} +
+ + ), + footer: null, + onCancel: onSuccess, + }); + } + }; + const handleAssociate = async (trId: ID) => { - const [success] = await operator( - () => API.scope.update(plugin, connectionId, scopeId, { scopeConfigId: trId !== 'None' ? +trId : null }), + const [success, res] = await operator( + async () => { + await API.scope.update(plugin, connectionId, scopeId, { scopeConfigId: trId === 'None' ? null : +trId }); + return API.scope.get(plugin, connectionId, scopeId, { blueprints: true }); + }, { hideToast: true, }, @@ -83,18 +168,35 @@ export const ScopeConfig = ({ plugin, connectionId, scopeId, scopeName, id, name if (success) { handleHideDialog(); - onSuccess?.(trId); + handleShowProjectsModal( + (res.blueprints ?? []).map((it: any) => ({ + name: it.projectName, + blueprintId: it.id, + scopes: [ + { + scopeId, + scopeName, + }, + ], + })), + ); } }; - const handleUpdate = (trId: ID) => { + const handleUpdate = async (trId: ID) => { handleHideDialog(); - onSuccess?.(trId); + + const [success, res] = await operator(() => API.scopeConfig.check(plugin, trId), { hideToast: true }); + + if (success) { + handleShowProjectsModal(res.projects ?? []); + } }; return ( - {id ? name : 'N/A'} + {contextHolder} + {scopeConfigId ? scopeConfigName : 'N/A'} } helptip="Associate Scope Config" @@ -104,13 +206,13 @@ export const ScopeConfig = ({ plugin, connectionId, scopeId, scopeName, id, name setType('associate'); }} /> - {id && ( + {scopeConfigId && ( } helptip=" Edit Scope Config" type="link" size="small" - onClick={handleCheckScopeConfig} + onClick={() => handleCheckScopeConfig(scopeConfigId)} /> )} {type === 'associate' && ( @@ -126,7 +228,7 @@ export const ScopeConfig = ({ plugin, connectionId, scopeId, scopeName, id, name @@ -148,7 +250,7 @@ export const ScopeConfig = ({ plugin, connectionId, scopeId, scopeName, id, name plugin={plugin} connectionId={connectionId} showWarning - scopeConfigId={id} + scopeConfigId={scopeConfigId} scopeId={scopeId} onCancel={handleHideDialog} onSubmit={handleUpdate} @@ -162,7 +264,7 @@ export const ScopeConfig = ({ plugin, connectionId, scopeId, scopeName, id, name connectionId={connectionId} showWarning forceCreate - scopeConfigId={id} + scopeConfigId={scopeConfigId} scopeId={scopeId} onCancel={handleHideDialog} onSubmit={handleAssociate} @@ -175,7 +277,7 @@ export const ScopeConfig = ({ plugin, connectionId, scopeId, scopeName, id, name width={830} centered footer={null} - title={`Edit '${name}' for '${scopeName}'`} + title={`Edit '${scopeConfigName}' for '${scopeName}'`} onCancel={handleHideDialog} > diff --git a/config-ui/src/routes/blueprint/connection-detail/index.tsx b/config-ui/src/routes/blueprint/connection-detail/index.tsx index d0c66d4bc2d..665d0ca1fb7 100644 --- a/config-ui/src/routes/blueprint/connection-detail/index.tsx +++ b/config-ui/src/routes/blueprint/connection-detail/index.tsx @@ -223,13 +223,7 @@ export const BlueprintConnectionDetailPage = () => { Manage Data Scope - + void; } -export const BlueprintConnectionDetailTable = ({ plugin, connectionId, scopeIds, operating, onRun }: Props) => { +export const BlueprintConnectionDetailTable = ({ plugin, connectionId, scopeIds }: Props) => { const [version, setVersion] = useState(1); const { ready, data } = useRefreshData(async () => { @@ -44,59 +42,34 @@ export const BlueprintConnectionDetailTable = ({ plugin, connectionId, scopeIds, })); }, [version]); - const [modal, contextHolder] = Modal.useModal(); - - const handleChangeScopeConfig = () => { - modal.success({ - closable: true, - centered: true, - width: 550, - title: 'Scope Config Saved', - content: 'Please re-transform data to apply the updated scope config.', - footer: ( -
- -
- ), - onCancel: () => { - setVersion(version + 1); - }, - }); - }; - return ( - <> - ( - - ), - }, - ]} - dataSource={data ?? []} - /> - {contextHolder} - +
( + setVersion(version + 1)} + /> + ), + }, + ]} + dataSource={data ?? []} + /> ); }; diff --git a/config-ui/src/routes/connection/connection.tsx b/config-ui/src/routes/connection/connection.tsx index 74533aa54f1..d2d81e6233b 100644 --- a/config-ui/src/routes/connection/connection.tsx +++ b/config-ui/src/routes/connection/connection.tsx @@ -69,8 +69,6 @@ export const Connection = () => { token: { colorPrimary }, } = theme.useToken(); - const [modal, contextHolder] = Modal.useModal(); - const dispatch = useAppDispatch(); const connection = useAppSelector((state) => selectConnection(state, `${plugin}-${connectionId}`)) as IConnection; @@ -230,65 +228,6 @@ export const Connection = () => { } }; - const handleRun = async (pname: string, blueprintId: ID, data?: { skipCollectors?: boolean; fullSync?: boolean }) => { - const [success] = await operator(() => API.blueprint.trigger(blueprintId, data), { - setOperating, - hideToast: true, - }); - - if (success) { - window.open(PATHS.PROJECT(pname, { tab: 'status' })); - } - }; - - const handleScopeConfigChange = async (scopeConfigId?: ID) => { - if (!scopeConfigId) { - setVersion(version + 1); - return; - } - - const [success, res] = await operator(() => API.scopeConfig.check(plugin, scopeConfigId), { hideToast: true }); - - if (success) { - if (!res.projects) { - setVersion(version + 1); - return; - } - - modal.success({ - closable: true, - centered: true, - width: 830, - title: 'Scope Config Saved', - content: ( - <> -
- The listed projects are impacted. Please re-transform the data to apply the updated scope config. -
-
    - {res.projects.map(({ name, blueprintId }: { name: string; blueprintId: ID }) => ( -
  • - - {name} - - -
  • - ))} -
- - ), - footer: null, - onCancel: () => setVersion(version + 1), - }); - } - }; - return ( { connectionId={connectionId} scopeId={id} scopeName={name} - id={configId} - name={configName} - onSuccess={handleScopeConfigChange} + scopeConfigId={configId} + scopeConfigName={configName} + onSuccess={() => setVersion(version + 1)} /> ), }, @@ -579,7 +518,6 @@ export const Connection = () => { )} )} - {contextHolder} ); }; From ccb7d93e7ab79b3be1fdfde578f9e90939131374 Mon Sep 17 00:00:00 2001 From: Lynwee Date: Wed, 15 May 2024 21:16:31 +0800 Subject: [PATCH 11/15] Add commit_sha to github_releases and cicd_releases. (#7473) * feat(githubgraphql): add releases * fix(githubgraphql): fix lint errors * fix(githubgraphql): fix lint errors * feat(githubgraphql): add commit_sha field --- .../models/domainlayer/devops/cicd_release.go | 4 +- ...20240515_add_commit_sha_to_cicd_release.go | 49 +++++++++++++++++++ .../core/models/migrationscripts/register.go | 1 + .../20240515_add_release_commit_sha.go | 46 +++++++++++++++++ .../models/migrationscripts/register.go | 1 + backend/plugins/github/models/release.go | 1 + .../plugins/github/tasks/release_convertor.go | 1 + .../github_graphql/tasks/release_collector.go | 37 ++++++++------ .../github_graphql/tasks/release_extractor.go | 1 + 9 files changed, 124 insertions(+), 17 deletions(-) create mode 100644 backend/core/models/migrationscripts/20240515_add_commit_sha_to_cicd_release.go create mode 100644 backend/plugins/github/models/migrationscripts/20240515_add_release_commit_sha.go diff --git a/backend/core/models/domainlayer/devops/cicd_release.go b/backend/core/models/domainlayer/devops/cicd_release.go index f9ed7401236..7a8b6206117 100644 --- a/backend/core/models/domainlayer/devops/cicd_release.go +++ b/backend/core/models/domainlayer/devops/cicd_release.go @@ -42,8 +42,8 @@ type CicdRelease struct { RepoId string `gorm:"type:varchar(255)"` //RepoUrl string `gorm:"index;not null"` - TagName string `json:"tagName"` - //CommitSha string `gorm:"primaryKey;type:varchar(255)"` + TagName string `json:"tagName"` + CommitSha string `gorm:"uniqueIndex;type:varchar(255)"` //CommitMsg string //RefName string `gorm:"type:varchar(255)"` } diff --git a/backend/core/models/migrationscripts/20240515_add_commit_sha_to_cicd_release.go b/backend/core/models/migrationscripts/20240515_add_commit_sha_to_cicd_release.go new file mode 100644 index 00000000000..58afad5d2aa --- /dev/null +++ b/backend/core/models/migrationscripts/20240515_add_commit_sha_to_cicd_release.go @@ -0,0 +1,49 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package migrationscripts + +import ( + "github.com/apache/incubator-devlake/core/context" + "github.com/apache/incubator-devlake/core/errors" + "github.com/apache/incubator-devlake/core/plugin" + "github.com/apache/incubator-devlake/helpers/migrationhelper" +) + +var _ plugin.MigrationScript = (*addCommitShaToCicdRelease)(nil) + +type cicdRelease20240515 struct { + CommitSha string +} + +func (cicdRelease20240515) TableName() string { + return "cicd_releases" +} + +type addCommitShaToCicdRelease struct{} + +func (*addCommitShaToCicdRelease) Up(basicRes context.BasicRes) errors.Error { + return migrationhelper.AutoMigrateTables(basicRes, &cicdRelease20240515{}) +} + +func (*addCommitShaToCicdRelease) Version() uint64 { + return 20240515194901 +} + +func (*addCommitShaToCicdRelease) Name() string { + return "add commit_sha to cicd_releases" +} diff --git a/backend/core/models/migrationscripts/register.go b/backend/core/models/migrationscripts/register.go index ac7f66fc99c..8618db1aa8c 100644 --- a/backend/core/models/migrationscripts/register.go +++ b/backend/core/models/migrationscripts/register.go @@ -114,5 +114,6 @@ func All() []plugin.MigrationScript { new(addDisplayTitleAndUrl), new(addSubtaskStates), new(addCicdRelease), + new(addCommitShaToCicdRelease), } } diff --git a/backend/plugins/github/models/migrationscripts/20240515_add_release_commit_sha.go b/backend/plugins/github/models/migrationscripts/20240515_add_release_commit_sha.go new file mode 100644 index 00000000000..40833eb403b --- /dev/null +++ b/backend/plugins/github/models/migrationscripts/20240515_add_release_commit_sha.go @@ -0,0 +1,46 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package migrationscripts + +import ( + "github.com/apache/incubator-devlake/core/context" + "github.com/apache/incubator-devlake/core/errors" + "github.com/apache/incubator-devlake/helpers/migrationhelper" +) + +type addReleaseCommitSha struct{} + +type release20240515 struct { + CommitSha string +} + +func (release20240515) TableName() string { + return "_tool_github_releases" +} + +func (u *addReleaseCommitSha) Up(baseRes context.BasicRes) errors.Error { + return migrationhelper.AutoMigrateTables(baseRes, &release20240515{}) +} + +func (*addReleaseCommitSha) Version() uint64 { + return 20240515194858 +} + +func (*addReleaseCommitSha) Name() string { + return "add commit_sha to _tool_github_releases" +} diff --git a/backend/plugins/github/models/migrationscripts/register.go b/backend/plugins/github/models/migrationscripts/register.go index 89ebfa42969..496f54544fd 100644 --- a/backend/plugins/github/models/migrationscripts/register.go +++ b/backend/plugins/github/models/migrationscripts/register.go @@ -49,5 +49,6 @@ func All() []plugin.MigrationScript { new(modifyIssueTypeLength), new(addWorkflowDisplayTitle), new(addReleaseTable), + new(addReleaseCommitSha), } } diff --git a/backend/plugins/github/models/release.go b/backend/plugins/github/models/release.go index d713831820d..1e4ae1688f8 100644 --- a/backend/plugins/github/models/release.go +++ b/backend/plugins/github/models/release.go @@ -42,6 +42,7 @@ type GithubRelease struct { ResourcePath string `json:"resourcePath"` TagName string `json:"tagName"` UpdatedAt time.Time `json:"updatedAt"` + CommitSha string `json:"commit_sha"` URL string `json:"url"` } diff --git a/backend/plugins/github/tasks/release_convertor.go b/backend/plugins/github/tasks/release_convertor.go index bcf4914ac6b..1a1389093bd 100644 --- a/backend/plugins/github/tasks/release_convertor.go +++ b/backend/plugins/github/tasks/release_convertor.go @@ -83,6 +83,7 @@ func ConvertRelease(taskCtx plugin.SubTaskContext) errors.Error { IsLatest: githubRelease.IsLatest, IsPrerelease: githubRelease.IsPrerelease, TagName: githubRelease.TagName, + CommitSha: githubRelease.CommitSha, AuthorID: githubRelease.AuthorID, diff --git a/backend/plugins/github_graphql/tasks/release_collector.go b/backend/plugins/github_graphql/tasks/release_collector.go index e80c138870c..4b71626d0d9 100644 --- a/backend/plugins/github_graphql/tasks/release_collector.go +++ b/backend/plugins/github_graphql/tasks/release_collector.go @@ -48,22 +48,29 @@ type GraphqlQueryReleaseAuthor struct { ID string `graphql:"id"` } +type GraphqlQueryReleaseTagCommit struct { + ID string `graphql:"id"` + Oid string `graphql:"oid"` + AbbreviatedOid string `graphql:"abbreviatedOid"` +} + type GraphqlQueryRelease struct { - Author GraphqlQueryReleaseAuthor `graphql:"author"` - DatabaseID int `graphql:"databaseId"` - Id string `graphql:"id"` - CreatedAt time.Time `graphql:"createdAt"` - Description string `graphql:"description"` - DescriptionHTML string `graphql:"descriptionHTML"` - IsDraft bool `graphql:"isDraft"` - IsLatest bool `graphql:"isLatest"` - IsPrerelease bool `graphql:"isPrerelease"` - Name string `graphql:"name"` - PublishedAt time.Time `graphql:"publishedAt"` - ResourcePath string `graphql:"resourcePath"` - TagName string `graphql:"tagName"` - UpdatedAt time.Time `graphql:"updatedAt"` - URL string `graphql:"url"` + Author GraphqlQueryReleaseAuthor `graphql:"author"` + DatabaseID int `graphql:"databaseId"` + Id string `graphql:"id"` + CreatedAt time.Time `graphql:"createdAt"` + Description string `graphql:"description"` + DescriptionHTML string `graphql:"descriptionHTML"` + IsDraft bool `graphql:"isDraft"` + IsLatest bool `graphql:"isLatest"` + IsPrerelease bool `graphql:"isPrerelease"` + Name string `graphql:"name"` + PublishedAt time.Time `graphql:"publishedAt"` + ResourcePath string `graphql:"resourcePath"` + TagName string `graphql:"tagName"` + TagCommit GraphqlQueryReleaseTagCommit `graphql:"tagCommit"` + UpdatedAt time.Time `graphql:"updatedAt"` + URL string `graphql:"url"` } var CollectReleaseMeta = plugin.SubTaskMeta{ diff --git a/backend/plugins/github_graphql/tasks/release_extractor.go b/backend/plugins/github_graphql/tasks/release_extractor.go index 4d019dcc81a..ef98a28037e 100644 --- a/backend/plugins/github_graphql/tasks/release_extractor.go +++ b/backend/plugins/github_graphql/tasks/release_extractor.go @@ -97,6 +97,7 @@ func convertGitHubRelease(release *GraphqlQueryRelease, connectionId uint64, git TagName: release.TagName, UpdatedAt: release.UpdatedAt, URL: release.URL, + CommitSha: release.TagCommit.Oid, } if release.Author.Name != nil { ret.AuthorName = *release.Author.Name From 79a2bb36d0f1cc07700794c2b6f0b894ba3e75aa Mon Sep 17 00:00:00 2001 From: Lynwee Date: Thu, 16 May 2024 13:57:54 +0800 Subject: [PATCH 12/15] fix: update webhook API (#7474) * feat(githubgraphql): add releases * fix(githubgraphql): fix lint errors * fix(githubgraphql): fix lint errors * feat(githubgraphql): add commit_sha field * feat(webhook): add display_title in payload * feat(webhook): update post-deployment API * feat(webhook): update deployment'display_title field \ --- .../devops/cicd_deployment_commit.go | 6 +- backend/plugins/webhook/api/deployments.go | 141 +++++++++--------- .../webhook/components/create-dialog.tsx | 4 +- .../webhook/components/view-dialog.tsx | 4 +- 4 files changed, 82 insertions(+), 73 deletions(-) diff --git a/backend/core/models/domainlayer/devops/cicd_deployment_commit.go b/backend/core/models/domainlayer/devops/cicd_deployment_commit.go index 7b24cee6bea..0dd0e2ee6fd 100644 --- a/backend/core/models/domainlayer/devops/cicd_deployment_commit.go +++ b/backend/core/models/domainlayer/devops/cicd_deployment_commit.go @@ -51,6 +51,10 @@ func (cicdDeploymentCommit CicdDeploymentCommit) TableName() string { } func (cicdDeploymentCommit CicdDeploymentCommit) ToDeployment() *CICDDeployment { + return cicdDeploymentCommit.ToDeploymentWithCustomDisplayTitle(cicdDeploymentCommit.DisplayTitle) +} + +func (cicdDeploymentCommit CicdDeploymentCommit) ToDeploymentWithCustomDisplayTitle(displayTitle string) *CICDDeployment { return &CICDDeployment{ DomainEntity: domainlayer.DomainEntity{ Id: cicdDeploymentCommit.CicdDeploymentId, @@ -72,7 +76,7 @@ func (cicdDeploymentCommit CicdDeploymentCommit) ToDeployment() *CICDDeployment }, QueuedDurationSec: cicdDeploymentCommit.QueuedDurationSec, DurationSec: cicdDeploymentCommit.DurationSec, - DisplayTitle: cicdDeploymentCommit.DisplayTitle, + DisplayTitle: displayTitle, Url: cicdDeploymentCommit.Url, } } diff --git a/backend/plugins/webhook/api/deployments.go b/backend/plugins/webhook/api/deployments.go index 64b9e91e52d..47ff8e9b9d6 100644 --- a/backend/plugins/webhook/api/deployments.go +++ b/backend/plugins/webhook/api/deployments.go @@ -20,6 +20,8 @@ package api import ( "crypto/md5" "fmt" + "github.com/apache/incubator-devlake/core/dal" + "github.com/apache/incubator-devlake/core/log" "net/http" "strings" "time" @@ -36,7 +38,8 @@ import ( ) type WebhookDeployTaskRequest struct { - PipelineId string `mapstructure:"pipeline_id"` + DisplayTitle string `mapstructure:"display_title"` + PipelineId string `mapstructure:"pipeline_id" validate:"required"` // RepoUrl should be unique string, fill url or other unique data RepoId string `mapstructure:"repo_id"` Result string `mapstructure:"result"` @@ -54,53 +57,24 @@ type WebhookDeployTaskRequest struct { CommitSha string `mapstructure:"commit_sha"` CommitMsg string `mapstructure:"commit_msg"` // DeploymentCommits is used for multiple commits in one deployment - DeploymentCommits []DeploymentCommit `mapstructure:"deploymentCommits" validate:"omitempty,dive"` + DeploymentCommits []DeploymentCommit `mapstructure:"deployment_commits" validate:"omitempty,dive"` } type DeploymentCommit struct { - RepoUrl string `mapstructure:"repo_url" validate:"required"` - Name string `mapstructure:"name"` - RefName string `mapstructure:"ref_name"` - CommitSha string `mapstructure:"commit_sha" validate:"required"` - CommitMsg string `mapstructure:"commit_msg"` + DisplayTitle string `mapstructure:"display_title"` + RepoUrl string `mapstructure:"repo_url" validate:"required"` + Name string `mapstructure:"name"` + RefName string `mapstructure:"ref_name"` + CommitSha string `mapstructure:"commit_sha" validate:"required"` + CommitMsg string `mapstructure:"commit_msg"` } -// PostDeploymentCicdTask -// @Summary create deployment by webhook -// @Description Create deployment pipeline by webhook.
-// @Description example1: {"repo_url":"devlake","commit_sha":"015e3d3b480e417aede5a1293bd61de9b0fd051d","start_time":"2020-01-01T12:00:00+00:00","end_time":"2020-01-01T12:59:59+00:00","environment":"PRODUCTION"}
-// @Description So we suggest request before task after deployment pipeline finish. -// @Description Both cicd_pipeline and cicd_task will be created -// @Tags plugins/webhook -// @Param body body WebhookDeployTaskRequest true "json body" -// @Success 200 -// @Failure 400 {string} errcode.Error "Bad Request" -// @Failure 403 {string} errcode.Error "Forbidden" -// @Failure 500 {string} errcode.Error "Internal Error" -// @Router /plugins/webhook/connections/:connectionId/deployments [POST] -func PostDeploymentCicdTask(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) { - connection := &models.WebhookConnection{} - err := connectionHelper.First(connection, input.Params) - if err != nil { - return nil, err - } - // get request - request := &WebhookDeployTaskRequest{} - err = api.DecodeMapStruct(input.Body, request, true) - if err != nil { - return &plugin.ApiResourceOutput{Body: err.Error(), Status: http.StatusBadRequest}, nil - } - // validate - vld = validator.New() - err = errors.Convert(vld.Struct(request)) - if err != nil { - return nil, errors.BadInput.Wrap(vld.Struct(request), `input json error`) - } - txHelper := dbhelper.NewTxHelper(basicRes, &err) - defer txHelper.End() - tx := txHelper.Begin() +func generateDeploymentCommitId(connectionId uint64, repoUrl string, commitSha string) string { + urlHash16 := fmt.Sprintf("%x", md5.Sum([]byte(repoUrl)))[:16] + return fmt.Sprintf("%s:%d:%s:%s", "webhook", connectionId, urlHash16, commitSha) +} - pipelineId := request.PipelineId +func CreateDeploymentAndDeploymentCommits(connection *models.WebhookConnection, request *WebhookDeployTaskRequest, tx dal.Transaction, logger log.Logger) errors.Error { scopeId := fmt.Sprintf("%s:%d", "webhook", connection.ID) if request.CreatedDate == nil { request.CreatedDate = request.StartedDate @@ -143,21 +117,17 @@ func PostDeploymentCicdTask(input *plugin.ApiResourceInput) (*plugin.ApiResource // queuedDuration := dateInfo.CalculateQueueDuration() if request.DeploymentCommits == nil { if request.CommitSha == "" || request.RepoUrl == "" { - return nil, errors.Convert(fmt.Errorf("commit_sha or repo_url is required")) - } - urlHash16 := fmt.Sprintf("%x", md5.Sum([]byte(request.RepoUrl)))[:16] - deploymentCommitId := fmt.Sprintf("%s:%d:%s:%s", "webhook", connection.ID, urlHash16, request.CommitSha) - if pipelineId == "" { - pipelineId = deploymentCommitId + return errors.Convert(fmt.Errorf("commit_sha or repo_url is required")) } // create a deployment_commit record deploymentCommit := &devops.CicdDeploymentCommit{ DomainEntity: domainlayer.DomainEntity{ - Id: deploymentCommitId, + Id: generateDeploymentCommitId(connection.ID, request.RepoUrl, request.CommitSha), }, - CicdDeploymentId: pipelineId, + CicdDeploymentId: request.PipelineId, CicdScopeId: scopeId, Name: name, + DisplayTitle: request.DisplayTitle, Result: request.Result, Status: devops.STATUS_DONE, OriginalResult: request.Result, @@ -173,30 +143,23 @@ func PostDeploymentCicdTask(input *plugin.ApiResourceInput) (*plugin.ApiResource CommitSha: request.CommitSha, CommitMsg: request.CommitMsg, } - err = tx.CreateOrUpdate(deploymentCommit) - if err != nil { + if err := tx.CreateOrUpdate(deploymentCommit); err != nil { logger.Error(err, "create deployment commit") - return nil, err + return err } - // create a deployment record - if err = tx.CreateOrUpdate(deploymentCommit.ToDeployment()); err != nil { + if err := tx.CreateOrUpdate(deploymentCommit.ToDeploymentWithCustomDisplayTitle(request.DisplayTitle)); err != nil { logger.Error(err, "create deployment") - return nil, err + return err } } else { for _, commit := range request.DeploymentCommits { - urlHash16 := fmt.Sprintf("%x", md5.Sum([]byte(commit.RepoUrl)))[:16] - deploymentCommitId := fmt.Sprintf("%s:%d:%s:%s", "webhook", connection.ID, urlHash16, commit.CommitSha) - if pipelineId == "" { - pipelineId = deploymentCommitId - } // create a deployment_commit record deploymentCommit := &devops.CicdDeploymentCommit{ DomainEntity: domainlayer.DomainEntity{ - Id: deploymentCommitId, + Id: generateDeploymentCommitId(connection.ID, commit.RepoUrl, commit.CommitSha), }, - CicdDeploymentId: pipelineId, + CicdDeploymentId: request.PipelineId, CicdScopeId: scopeId, Result: request.Result, Status: devops.STATUS_DONE, @@ -207,6 +170,7 @@ func PostDeploymentCicdTask(input *plugin.ApiResourceInput) (*plugin.ApiResource //QueuedDurationSec: queuedDuration, RepoId: request.RepoId, Name: fmt.Sprintf(`deployment for %s`, commit.CommitSha), + DisplayTitle: commit.DisplayTitle, RepoUrl: commit.RepoUrl, Environment: request.Environment, OriginalEnvironment: request.Environment, @@ -214,20 +178,61 @@ func PostDeploymentCicdTask(input *plugin.ApiResourceInput) (*plugin.ApiResource CommitSha: commit.CommitSha, CommitMsg: commit.CommitMsg, } - err = tx.CreateOrUpdate(deploymentCommit) - if err != nil { + + if err := tx.CreateOrUpdate(deploymentCommit); err != nil { logger.Error(err, "create deployment commit") - return nil, err + return err } // create a deployment record deploymentCommit.Name = name - if err = tx.CreateOrUpdate(deploymentCommit.ToDeployment()); err != nil { + if err := tx.CreateOrUpdate(deploymentCommit.ToDeploymentWithCustomDisplayTitle(request.DisplayTitle)); err != nil { logger.Error(err, "create deployment") - return nil, err + return err } } } + return nil +} + +// PostDeploymentCicdTask +// @Summary create deployment by webhook +// @Description Create deployment pipeline by webhook.
+// @Description example1: {"repo_url":"devlake","commit_sha":"015e3d3b480e417aede5a1293bd61de9b0fd051d","start_time":"2020-01-01T12:00:00+00:00","end_time":"2020-01-01T12:59:59+00:00","environment":"PRODUCTION"}
+// @Description So we suggest request before task after deployment pipeline finish. +// @Description Both cicd_pipeline and cicd_task will be created +// @Tags plugins/webhook +// @Param body body WebhookDeployTaskRequest true "json body" +// @Success 200 +// @Failure 400 {string} errcode.Error "Bad Request" +// @Failure 403 {string} errcode.Error "Forbidden" +// @Failure 500 {string} errcode.Error "Internal Error" +// @Router /plugins/webhook/connections/:connectionId/deployments [POST] +func PostDeploymentCicdTask(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) { + connection := &models.WebhookConnection{} + err := connectionHelper.First(connection, input.Params) + if err != nil { + return nil, err + } + // get request + request := &WebhookDeployTaskRequest{} + err = api.DecodeMapStruct(input.Body, request, true) + if err != nil { + return &plugin.ApiResourceOutput{Body: err.Error(), Status: http.StatusBadRequest}, nil + } + // validate + vld = validator.New() + err = errors.Convert(vld.Struct(request)) + if err != nil { + return nil, errors.BadInput.Wrap(vld.Struct(request), `input json error`) + } + txHelper := dbhelper.NewTxHelper(basicRes, &err) + defer txHelper.End() + tx := txHelper.Begin() + if err := CreateDeploymentAndDeploymentCommits(connection, request, tx, logger); err != nil { + logger.Error(err, "create deployments") + return nil, err + } return &plugin.ApiResourceOutput{Body: nil, Status: http.StatusOK}, nil } diff --git a/config-ui/src/plugins/register/webhook/components/create-dialog.tsx b/config-ui/src/plugins/register/webhook/components/create-dialog.tsx index 233ee908fa9..d293508f78e 100644 --- a/config-ui/src/plugins/register/webhook/components/create-dialog.tsx +++ b/config-ui/src/plugins/register/webhook/components/create-dialog.tsx @@ -80,13 +80,13 @@ export const CreateDialog = ({ open, onCancel, onSubmitAfter }: Props) => { "title":"a feature from DLK", "type":"INCIDENT", "original_status":"TODO", - "status":"TODO", + "status":"TODO", "created_date":"2020-01-01T12:00:00+00:00", "updated_date":"2020-01-01T12:00:00+00:00" }'`, closeIssuesEndpoint: `curl ${prefix}${res.closeIssuesEndpoint} -X 'POST' -H 'Authorization: Bearer ${res.apiKey}'`, postDeploymentsCurl: `curl ${prefix}${res.postPipelineDeployTaskEndpoint} -X 'POST' -H 'Authorization: Bearer ${res.apiKey}' -d '{ - "deploymentCommits":[ + "deployment_commits":[ { "commit_sha":"the sha of deployment commit1", "repo_url":"the repo URL of the deployment commit" diff --git a/config-ui/src/plugins/register/webhook/components/view-dialog.tsx b/config-ui/src/plugins/register/webhook/components/view-dialog.tsx index 342f701e84b..bb44c7a39ab 100644 --- a/config-ui/src/plugins/register/webhook/components/view-dialog.tsx +++ b/config-ui/src/plugins/register/webhook/components/view-dialog.tsx @@ -41,7 +41,7 @@ const transformURI = (prefix: string, webhook: IWebhook, apiKey: string) => { "title":"a feature from DLK", "type":"INCIDENT", "original_status":"TODO", - "status":"TODO", + "status":"TODO", "created_date":"2020-01-01T12:00:00+00:00", "updated_date":"2020-01-01T12:00:00+00:00" }'`, @@ -51,7 +51,7 @@ const transformURI = (prefix: string, webhook: IWebhook, apiKey: string) => { postDeploymentsCurl: `curl ${prefix}${webhook.postPipelineDeployTaskEndpoint} -X 'POST' -H 'Authorization: Bearer ${ apiKey ?? '{API_KEY}' }' -d '{ - "deploymentCommits":[ + "deployment_commits":[ { "commit_sha":"the sha of deployment commit1", "repo_url":"the repo URL of the deployment commit" From 153f7b9ab8ee7d59618cd1adbf10491cb79eb4c8 Mon Sep 17 00:00:00 2001 From: Klesh Wong Date: Thu, 16 May 2024 15:09:35 +0800 Subject: [PATCH 13/15] fix: should not throw error on any shallow cloned repo (#7475) --- backend/plugins/gitextractor/parser/clone_gitcli.go | 9 ++------- backend/plugins/gitextractor/tasks/repo_cloner.go | 5 +---- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/backend/plugins/gitextractor/parser/clone_gitcli.go b/backend/plugins/gitextractor/parser/clone_gitcli.go index 745af661a03..49ce4c4ad6e 100644 --- a/backend/plugins/gitextractor/parser/clone_gitcli.go +++ b/backend/plugins/gitextractor/parser/clone_gitcli.go @@ -34,8 +34,7 @@ import ( ) var _ RepoCloner = (*GitcliCloner)(nil) -var ErrShallowInfoProcessing = errors.BadInput.New("No data found for the selected time range. Please revise the 'Time Range' on your Project/Blueprint/Configuration page or in the API parameter.") -var ErrNoDataOnIncrementalMode = errors.NotModified.New("No data found since the previous run.") +var ErrNoData = errors.NotModified.New("No data to be collected") type GitcliCloner struct { logger log.Logger @@ -84,10 +83,6 @@ func (g *GitcliCloner) CloneRepo(ctx plugin.SubTaskContext, localDir string) err } err = g.execCloneCommand(cmd) if err != nil { - // it is likely that nothing to collect on incrmental mode - if errors.Is(err, ErrShallowInfoProcessing) && g.stateManager != nil && g.stateManager.IsIncremental() { - return ErrNoDataOnIncrementalMode - } return err } // deepen the commits by 1 more step to avoid https://github.com/apache/incubator-devlake/issues/7426 @@ -222,7 +217,7 @@ func (g *GitcliCloner) execCloneCommand(cmd *exec.Cmd) errors.Error { g.logger.Error(err, "git exited with error\n%s", combinedOutput.String()) if strings.Contains(combinedOutput.String(), "stderr: fatal: error processing shallow info: 4") || strings.Contains(combinedOutput.String(), "stderr: fatal: the remote end hung up unexpectedly") { - return ErrShallowInfoProcessing + return ErrNoData } return errors.Default.New("git exit error") } diff --git a/backend/plugins/gitextractor/tasks/repo_cloner.go b/backend/plugins/gitextractor/tasks/repo_cloner.go index cf5e03ca539..a00b447b32f 100644 --- a/backend/plugins/gitextractor/tasks/repo_cloner.go +++ b/backend/plugins/gitextractor/tasks/repo_cloner.go @@ -56,13 +56,10 @@ func CloneGitRepo(subTaskCtx plugin.SubTaskContext) errors.Error { repoCloner := parser.NewGitcliCloner(subTaskCtx) err = repoCloner.CloneRepo(subTaskCtx, localDir) if err != nil { - if errors.Is(err, parser.ErrNoDataOnIncrementalMode) { + if errors.Is(err, parser.ErrNoData) { taskData.SkipAllSubtasks = true return nil } - if errors.Is(err, parser.ErrShallowInfoProcessing) { - return nil - } return err } From 3ae23bfdda0537e3cbe5eed17340e4fb115af1ce Mon Sep 17 00:00:00 2001 From: Gustavo Bini <6403728+gustavobini@users.noreply.github.com> Date: Thu, 16 May 2024 09:11:42 +0200 Subject: [PATCH 14/15] fix(jenkins): incorrect class type on multibranch jobs (#7464) * fix(jenkins): check for correct class type The input for builds is a workflow job and not a workflow multibranch project. * fix(jenkins): add tests to multibranch flow --- .../plugins/jenkins/e2e/multibranch_test.go | 206 ++++++++++++++++++ .../_raw_jenkins_api_builds_multibranch.csv | 30 +-- .../_raw_jenkins_api_stages_multibranch.csv | 130 +++++------ ...tool_jenkins_build_commits_multibranch.csv | 26 +-- .../_tool_jenkins_builds_multibranch.csv | 32 +-- ...enkins_builds_multibranch_after_enrich.csv | 16 ++ .../_tool_jenkins_stages_multibranch.csv | 130 +++++------ .../cicd_pipeline_commits_multibranch.csv | 26 +-- .../cicd_pipelines_multibranch.csv | 32 +-- .../cicd_tasks_multibranch.csv | 71 +----- .../plugins/jenkins/tasks/build_extractor.go | 2 +- 11 files changed, 429 insertions(+), 272 deletions(-) create mode 100644 backend/plugins/jenkins/e2e/multibranch_test.go create mode 100644 backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds_multibranch_after_enrich.csv diff --git a/backend/plugins/jenkins/e2e/multibranch_test.go b/backend/plugins/jenkins/e2e/multibranch_test.go new file mode 100644 index 00000000000..f78437114f0 --- /dev/null +++ b/backend/plugins/jenkins/e2e/multibranch_test.go @@ -0,0 +1,206 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package e2e + +import ( + "testing" + + "github.com/apache/incubator-devlake/core/models/common" + "github.com/apache/incubator-devlake/core/models/domainlayer/devops" + + "github.com/apache/incubator-devlake/helpers/e2ehelper" + "github.com/apache/incubator-devlake/plugins/jenkins/impl" + "github.com/apache/incubator-devlake/plugins/jenkins/models" + "github.com/apache/incubator-devlake/plugins/jenkins/tasks" + + api "github.com/apache/incubator-devlake/helpers/pluginhelper/api" +) + +func TestJenkinsMultibranchDataFlow(t *testing.T) { + var jenkins impl.Jenkins + dataflowTester := e2ehelper.NewDataFlowTester(t, "jenkins", jenkins) + + regexEnricher := api.NewRegexEnricher() + _ = regexEnricher.TryAdd(devops.DEPLOYMENT, `test-sub-sub-dir\/devlake.*`) + taskData := &tasks.JenkinsTaskData{ + Options: &tasks.JenkinsOptions{ + ConnectionId: 1, + JobName: `devlake-jenkins`, + JobFullName: `github_org/devlake-jenkins`, + JobPath: ``, + Class: `org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject`, + ScopeConfig: new(models.JenkinsScopeConfig), + }, + Connection: &models.JenkinsConnection{ + JenkinsConn: models.JenkinsConn{ + RestConnection: api.RestConnection{ + Endpoint: "https://1457-62-195-68-26.ngrok-free.app", + }, + }, + }, + RegexEnricher: regexEnricher, + } + + // This replaces tasks.CollectApiJobsMeta + dataflowTester.FlushTabler(&models.JenkinsJob{}) + dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jenkins_api_jobs_multibranch.csv", "_raw_jenkins_api_jobs") + + dataflowTester.Subtask(tasks.ExtractApiJobsMeta, taskData) + dataflowTester.VerifyTableWithOptions(&models.JenkinsJob{}, e2ehelper.TableOptions{ + CSVRelPath: "./raw_tables/_tool_jenkins_jobs_multibranch.csv", + IgnoreTypes: []interface{}{common.NoPKModel{}}, + }) + + dataflowTester.FlushTabler(&devops.CicdScope{}) + dataflowTester.Subtask(tasks.ConvertJobsMeta, taskData) + dataflowTester.VerifyTableWithOptions(&devops.CicdScope{}, e2ehelper.TableOptions{ + CSVRelPath: "./snapshot_tables/cicd_scopes_multibranch.csv", + IgnoreTypes: []interface{}{common.NoPKModel{}}, + }) + + // This replaces tasks.CollectApiBuildsMeta + dataflowTester.FlushTabler(&models.JenkinsBuild{}) + dataflowTester.FlushTabler(&models.JenkinsBuildCommit{}) + dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jenkins_api_builds_multibranch.csv", "_raw_jenkins_api_builds") + + dataflowTester.Subtask(tasks.ExtractApiBuildsMeta, taskData) + dataflowTester.VerifyTable( + models.JenkinsBuild{}, + "./snapshot_tables/_tool_jenkins_builds_multibranch.csv", + e2ehelper.ColumnWithRawData( + "connection_id", + "job_name", + "job_path", + "duration", + "full_name", + "estimated_duration", + "number", + "result", + "timestamp", + "start_time", + "has_stages", + ), + ) + dataflowTester.VerifyTable( + models.JenkinsBuildCommit{}, + "./snapshot_tables/_tool_jenkins_build_commits_multibranch.csv", + e2ehelper.ColumnWithRawData( + "connection_id", + "build_name", + "commit_sha", + "branch", + "repo_url", + ), + ) + + // This replaces tasks.CollectApiStagesMeta + dataflowTester.FlushRawTable("_raw_jenkins_api_stages") + dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jenkins_api_stages_multibranch.csv", "_raw_jenkins_api_stages") + + dataflowTester.FlushTabler(&models.JenkinsStage{}) + dataflowTester.Subtask(tasks.ExtractApiStagesMeta, taskData) + dataflowTester.VerifyTable( + models.JenkinsStage{}, + "./snapshot_tables/_tool_jenkins_stages_multibranch.csv", + e2ehelper.ColumnWithRawData( + "connection_id", + "id", + "build_name", + "name", + "exec_node", + "status", + "start_time_millis", + "duration_millis", + "pause_duration_millis", + "type", + ), + ) + + dataflowTester.Subtask(tasks.EnrichApiBuildWithStagesMeta, taskData) + dataflowTester.VerifyTable( + models.JenkinsBuild{}, + "./snapshot_tables/_tool_jenkins_builds_multibranch_after_enrich.csv", + e2ehelper.ColumnWithRawData( + "connection_id", + "job_name", + "job_path", + "duration", + "full_name", + "estimated_duration", + "number", + "result", + "timestamp", + "start_time", + "has_stages", + ), + ) + + dataflowTester.FlushTabler(&devops.CICDTask{}) + dataflowTester.FlushTabler(&devops.CICDPipeline{}) + dataflowTester.FlushTabler(&devops.CiCDPipelineCommit{}) + + dataflowTester.Subtask(tasks.ConvertBuildsToCicdTasksMeta, taskData) + dataflowTester.VerifyTable( + devops.CICDTask{}, + "./snapshot_tables/cicd_tasks_multibranch.csv", + e2ehelper.ColumnWithRawData( + "name", + "pipeline_id", + "result", + "status", + "original_result", + "original_status", + "type", + "environment", + "duration_sec", + "started_date", + "finished_date", + "cicd_scope_id", + ), + ) + dataflowTester.VerifyTable( + devops.CICDPipeline{}, + "./snapshot_tables/cicd_pipelines_multibranch.csv", + e2ehelper.ColumnWithRawData( + "name", + "result", + "status", + "original_result", + "original_status", + "type", + "duration_sec", + "environment", + "created_date", + "finished_date", + "cicd_scope_id", + ), + ) + dataflowTester.Subtask(tasks.ConvertBuildReposMeta, taskData) + dataflowTester.VerifyTable( + devops.CiCDPipelineCommit{}, + "./snapshot_tables/cicd_pipeline_commits_multibranch.csv", + e2ehelper.ColumnWithRawData( + "pipeline_id", + "repo_id", + "repo_url", + "branch", + "commit_sha", + ), + ) + +} diff --git a/backend/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_builds_multibranch.csv b/backend/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_builds_multibranch.csv index 785dd643a94..9a24ef5e0df 100644 --- a/backend/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_builds_multibranch.csv +++ b/backend/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_builds_multibranch.csv @@ -1,16 +1,16 @@ "id","params","data","url","input","created_at" -1,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Push event to branch main\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"c83ae02076382670e286ac2474b7a7327fc28cde\",\"branch\":[{\"name\":\"main\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":30415,\"estimatedDuration\":33703,\"fullDisplayName\":\"my-org » devlake-jenkins » main #4\",\"number\":4,\"result\":\"SUCCESS\",\"timestamp\":1711277551963}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"Name\": \"main\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/main\"}","2024-03-24 11:01:19.648" -2,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Push event to branch main\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"78b8e3a2029f991982039e4ed6d7b1f9c6670497\",\"branch\":[{\"name\":\"main\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":35435,\"estimatedDuration\":33703,\"fullDisplayName\":\"my-org » devlake-jenkins » main #3\",\"number\":3,\"result\":\"SUCCESS\",\"timestamp\":1711277501923}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"Name\": \"main\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/main\"}","2024-03-24 11:01:19.648" -3,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Push event to branch main\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"f521ff9c806e74b9100c8fc87d07ac504f828f93\",\"branch\":[{\"name\":\"main\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":35260,\"estimatedDuration\":33703,\"fullDisplayName\":\"my-org » devlake-jenkins » main #2\",\"number\":2,\"result\":\"SUCCESS\",\"timestamp\":1711277301765}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"Name\": \"main\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/main\"}","2024-03-24 11:01:19.648" -4,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchIndexingCause\",\"shortDescription\":\"Branch indexing\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"87f0f9ee7c305c561c96f66ed8c71c85df4b940f\",\"branch\":[{\"name\":\"main\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":36568,\"estimatedDuration\":33703,\"fullDisplayName\":\"my-org » devlake-jenkins » main #1\",\"number\":1,\"result\":\"SUCCESS\",\"timestamp\":1711275815622}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"Name\": \"main\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/main\"}","2024-03-24 11:01:19.648" -5,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Pull request #2 updated\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"49359d217ea617c7e4771235979b56015172ba6c\",\"branch\":[{\"name\":\"PR-2\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":30086,\"estimatedDuration\":30086,\"fullDisplayName\":\"my-org » devlake-jenkins » PR-2 #2\",\"number\":2,\"result\":\"SUCCESS\",\"timestamp\":1711277541959}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"Name\": \"PR-2\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/PR-2\"}","2024-03-24 11:01:20.022" -6,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Pull request #2 opened\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"aba54481a73573c0587f26fbd4c9788eb2bf2398\",\"branch\":[{\"name\":\"PR-2\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{\"_class\":\"jenkins.model.InterruptedBuildAction\",\"causes\":[{\"_class\":\"org.jenkinsci.plugins.workflow.steps.TimeoutStepExecution$ExceededTimeout\",\"shortDescription\":\"Timeout has been exceeded\"}]},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":7390,\"estimatedDuration\":30086,\"fullDisplayName\":\"my-org » devlake-jenkins » PR-2 #1\",\"number\":1,\"result\":\"ABORTED\",\"timestamp\":1711277511931}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"Name\": \"PR-2\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/PR-2\"}","2024-03-24 11:01:20.022" -7,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Push event to branch feature-1\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"3ff14f4a781018e6e800ded3a5ac95fa2f9bb26f\",\"branch\":[{\"name\":\"feature-1\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":35354,\"estimatedDuration\":36750,\"fullDisplayName\":\"my-org » devlake-jenkins » feature-1 #3\",\"number\":3,\"result\":\"SUCCESS\",\"timestamp\":1711277071589}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"Name\": \"feature-1\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/feature-1\"}","2024-03-24 11:01:20.380" -8,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchIndexingCause\",\"shortDescription\":\"Branch indexing\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"eae3667426e1da0d8cab523e372e6771a39b16a7\",\"branch\":[{\"name\":\"feature-1\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":35351,\"estimatedDuration\":36750,\"fullDisplayName\":\"my-org » devlake-jenkins » feature-1 #2\",\"number\":2,\"result\":\"SUCCESS\",\"timestamp\":1711276326044}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"Name\": \"feature-1\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/feature-1\"}","2024-03-24 11:01:20.380" -9,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchIndexingCause\",\"shortDescription\":\"Branch indexing\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"87f0f9ee7c305c561c96f66ed8c71c85df4b940f\",\"branch\":[{\"name\":\"feature-1\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":39545,\"estimatedDuration\":36750,\"fullDisplayName\":\"my-org » devlake-jenkins » feature-1 #1\",\"number\":1,\"result\":\"SUCCESS\",\"timestamp\":1711275815628}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"Name\": \"feature-1\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/feature-1\"}","2024-03-24 11:01:20.380" -10,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Push event to branch feature-2\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"aba54481a73573c0587f26fbd4c9788eb2bf2398\",\"branch\":[{\"name\":\"feature-2\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{\"_class\":\"jenkins.model.InterruptedBuildAction\",\"causes\":[{\"_class\":\"org.jenkinsci.plugins.workflow.steps.TimeoutStepExecution$ExceededTimeout\",\"shortDescription\":\"Timeout has been exceeded\"}]},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":5993,\"estimatedDuration\":35268,\"fullDisplayName\":\"my-org » devlake-jenkins » feature-2 #6\",\"number\":6,\"result\":\"ABORTED\",\"timestamp\":1711277456887}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Name\": \"feature-2\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/feature-2\"}","2024-03-24 11:01:20.749" -11,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Push event to branch feature-2\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":1098,\"estimatedDuration\":35268,\"fullDisplayName\":\"my-org » devlake-jenkins » feature-2 #5\",\"number\":5,\"result\":\"FAILURE\",\"timestamp\":1711277371815}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Name\": \"feature-2\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/feature-2\"}","2024-03-24 11:01:20.749" -12,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Push event to branch feature-2\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":976,\"estimatedDuration\":35268,\"fullDisplayName\":\"my-org » devlake-jenkins » feature-2 #4\",\"number\":4,\"result\":\"FAILURE\",\"timestamp\":1711277261723}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Name\": \"feature-2\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/feature-2\"}","2024-03-24 11:01:20.749" -13,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Push event to branch feature-2\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"881b398774e020772bca7fdd7fdc60e7250f53ef\",\"branch\":[{\"name\":\"feature-2\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":35435,\"estimatedDuration\":35268,\"fullDisplayName\":\"my-org » devlake-jenkins » feature-2 #3\",\"number\":3,\"result\":\"SUCCESS\",\"timestamp\":1711277191663}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Name\": \"feature-2\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/feature-2\"}","2024-03-24 11:01:20.749" -14,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Push event to branch feature-2\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"2578423ba5c348fb9948279f3ea64ed650fecd8a\",\"branch\":[{\"name\":\"feature-2\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":35162,\"estimatedDuration\":35268,\"fullDisplayName\":\"my-org » devlake-jenkins » feature-2 #2\",\"number\":2,\"result\":\"SUCCESS\",\"timestamp\":1711277156634}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Name\": \"feature-2\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/feature-2\"}","2024-03-24 11:01:20.749" -15,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_class\":\"org.jenkinsci.plugins.workflow.job.WorkflowRun\",\"actions\":[{\"_class\":\"hudson.model.CauseAction\",\"causes\":[{\"_class\":\"jenkins.branch.BranchEventCause\",\"shortDescription\":\"Push event to branch feature-2\"}]},{\"_class\":\"jenkins.scm.api.SCMRevisionAction\"},{\"_class\":\"org.jenkinsci.plugins.workflow.libs.LibrariesAction\"},{},{},{\"_class\":\"hudson.plugins.git.util.BuildData\",\"lastBuiltRevision\":{\"SHA1\":\"2578423ba5c348fb9948279f3ea64ed650fecd8a\",\"branch\":[{\"name\":\"feature-2\"}]},\"remoteUrls\":[\"git@github.com:gustavobini/devlake-jenkins.git\"]},{},{},{},{},{\"_class\":\"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction\"},{\"_class\":\"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction\"},{},{\"_class\":\"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction\"},{},{},{}],\"building\":false,\"duration\":35206,\"estimatedDuration\":35268,\"fullDisplayName\":\"my-org » devlake-jenkins » feature-2 #1\",\"number\":1,\"result\":\"SUCCESS\",\"timestamp\":1711277141627}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{\"URL\": \"https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Name\": \"feature-2\", \"Path\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"Class\": \"org.jenkinsci.plugins.workflow.job.WorkflowJob\", \"FullName\": \"github_org/devlake-jenkins/feature-2\"}","2024-03-24 11:01:20.749" +1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Push event to branch main""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""c83ae02076382670e286ac2474b7a7327fc28cde"",""branch"":[{""name"":""main""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":30415,""estimatedDuration"":33703,""fullDisplayName"":""my-org » devlake-jenkins » main #4"",""number"":4,""result"":""SUCCESS"",""timestamp"":1711277551963}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""Name"": ""main"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/main""}","2024-03-24 11:01:19.648" +2,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Push event to branch main""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""78b8e3a2029f991982039e4ed6d7b1f9c6670497"",""branch"":[{""name"":""main""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":35435,""estimatedDuration"":33703,""fullDisplayName"":""my-org » devlake-jenkins » main #3"",""number"":3,""result"":""SUCCESS"",""timestamp"":1711277501923}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""Name"": ""main"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/main""}","2024-03-24 11:01:19.648" +3,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Push event to branch main""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""f521ff9c806e74b9100c8fc87d07ac504f828f93"",""branch"":[{""name"":""main""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":35260,""estimatedDuration"":33703,""fullDisplayName"":""my-org » devlake-jenkins » main #2"",""number"":2,""result"":""SUCCESS"",""timestamp"":1711277301765}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""Name"": ""main"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/main""}","2024-03-24 11:01:19.648" +4,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchIndexingCause"",""shortDescription"":""Branch indexing""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""87f0f9ee7c305c561c96f66ed8c71c85df4b940f"",""branch"":[{""name"":""main""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":36568,""estimatedDuration"":33703,""fullDisplayName"":""my-org » devlake-jenkins » main #1"",""number"":1,""result"":""SUCCESS"",""timestamp"":1711275815622}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""Name"": ""main"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/main""}","2024-03-24 11:01:19.648" +5,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Pull request #2 updated""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""49359d217ea617c7e4771235979b56015172ba6c"",""branch"":[{""name"":""PR-2""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":30086,""estimatedDuration"":30086,""fullDisplayName"":""my-org » devlake-jenkins » PR-2 #2"",""number"":2,""result"":""SUCCESS"",""timestamp"":1711277541959}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""Name"": ""PR-2"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/PR-2""}","2024-03-24 11:01:20.022" +6,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Pull request #2 opened""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""aba54481a73573c0587f26fbd4c9788eb2bf2398"",""branch"":[{""name"":""PR-2""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{""_class"":""jenkins.model.InterruptedBuildAction"",""causes"":[{""_class"":""org.jenkinsci.plugins.workflow.steps.TimeoutStepExecution$ExceededTimeout"",""shortDescription"":""Timeout has been exceeded""}]},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":7390,""estimatedDuration"":30086,""fullDisplayName"":""my-org » devlake-jenkins » PR-2 #1"",""number"":1,""result"":""ABORTED"",""timestamp"":1711277511931}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""Name"": ""PR-2"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/PR-2""}","2024-03-24 11:01:20.022" +7,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Push event to branch feature-1""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""3ff14f4a781018e6e800ded3a5ac95fa2f9bb26f"",""branch"":[{""name"":""feature-1""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":35354,""estimatedDuration"":36750,""fullDisplayName"":""my-org » devlake-jenkins » feature-1 #3"",""number"":3,""result"":""SUCCESS"",""timestamp"":1711277071589}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""Name"": ""feature-1"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/feature-1""}","2024-03-24 11:01:20.380" +8,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchIndexingCause"",""shortDescription"":""Branch indexing""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""eae3667426e1da0d8cab523e372e6771a39b16a7"",""branch"":[{""name"":""feature-1""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":35351,""estimatedDuration"":36750,""fullDisplayName"":""my-org » devlake-jenkins » feature-1 #2"",""number"":2,""result"":""SUCCESS"",""timestamp"":1711276326044}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""Name"": ""feature-1"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/feature-1""}","2024-03-24 11:01:20.380" +9,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchIndexingCause"",""shortDescription"":""Branch indexing""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""87f0f9ee7c305c561c96f66ed8c71c85df4b940f"",""branch"":[{""name"":""feature-1""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":39545,""estimatedDuration"":36750,""fullDisplayName"":""my-org » devlake-jenkins » feature-1 #1"",""number"":1,""result"":""SUCCESS"",""timestamp"":1711275815628}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""Name"": ""feature-1"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/feature-1""}","2024-03-24 11:01:20.380" +10,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Push event to branch feature-2""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""aba54481a73573c0587f26fbd4c9788eb2bf2398"",""branch"":[{""name"":""feature-2""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{""_class"":""jenkins.model.InterruptedBuildAction"",""causes"":[{""_class"":""org.jenkinsci.plugins.workflow.steps.TimeoutStepExecution$ExceededTimeout"",""shortDescription"":""Timeout has been exceeded""}]},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":5993,""estimatedDuration"":35268,""fullDisplayName"":""my-org » devlake-jenkins » feature-2 #6"",""number"":6,""result"":""ABORTED"",""timestamp"":1711277456887}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Name"": ""feature-2"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/feature-2""}","2024-03-24 11:01:20.749" +11,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Push event to branch feature-2""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":1098,""estimatedDuration"":35268,""fullDisplayName"":""my-org » devlake-jenkins » feature-2 #5"",""number"":5,""result"":""FAILURE"",""timestamp"":1711277371815}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Name"": ""feature-2"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/feature-2""}","2024-03-24 11:01:20.749" +12,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Push event to branch feature-2""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":976,""estimatedDuration"":35268,""fullDisplayName"":""my-org » devlake-jenkins » feature-2 #4"",""number"":4,""result"":""FAILURE"",""timestamp"":1711277261723}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Name"": ""feature-2"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/feature-2""}","2024-03-24 11:01:20.749" +13,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Push event to branch feature-2""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""881b398774e020772bca7fdd7fdc60e7250f53ef"",""branch"":[{""name"":""feature-2""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":35435,""estimatedDuration"":35268,""fullDisplayName"":""my-org » devlake-jenkins » feature-2 #3"",""number"":3,""result"":""SUCCESS"",""timestamp"":1711277191663}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Name"": ""feature-2"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/feature-2""}","2024-03-24 11:01:20.749" +14,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Push event to branch feature-2""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""2578423ba5c348fb9948279f3ea64ed650fecd8a"",""branch"":[{""name"":""feature-2""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":35162,""estimatedDuration"":35268,""fullDisplayName"":""my-org » devlake-jenkins » feature-2 #2"",""number"":2,""result"":""SUCCESS"",""timestamp"":1711277156634}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Name"": ""feature-2"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/feature-2""}","2024-03-24 11:01:20.749" +15,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""jenkins.branch.BranchEventCause"",""shortDescription"":""Push event to branch feature-2""}]},{""_class"":""jenkins.scm.api.SCMRevisionAction""},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""2578423ba5c348fb9948279f3ea64ed650fecd8a"",""branch"":[{""name"":""feature-2""}]},""remoteUrls"":[""git@github.com:gustavobini/devlake-jenkins.git""]},{},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction""},{},{""_class"":""org.jenkinsci.plugins.workflow.job.views.FlowGraphAction""},{},{},{}],""building"":false,""duration"":35206,""estimatedDuration"":35268,""fullDisplayName"":""my-org » devlake-jenkins » feature-2 #1"",""number"":1,""result"":""SUCCESS"",""timestamp"":1711277141627}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/api/json?tree=allBuilds%5Btimestamp%2Cnumber%2Cduration%2Cbuilding%2CestimatedDuration%2CfullDisplayName%2Cresult%2Cactions%5BlastBuiltRevision%5BSHA1%2Cbranch%5Bname%5D%5D%2CremoteUrls%2CmercurialRevisionNumber%2Ccauses%5B%2A%5D%5D%2CchangeSet%5Bkind%2Crevisions%5Brevision%5D%5D%5D","{""URL"": ""https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Name"": ""feature-2"", ""Path"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""Class"": ""org.jenkinsci.plugins.workflow.job.WorkflowJob"", ""FullName"": ""github_org/devlake-jenkins/feature-2""}","2024-03-24 11:01:20.749" diff --git a/backend/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_stages_multibranch.csv b/backend/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_stages_multibranch.csv index 282c0e150a5..05b65e8c839 100644 --- a/backend/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_stages_multibranch.csv +++ b/backend/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_stages_multibranch.csv @@ -1,66 +1,66 @@ "id","params","data","url","input","created_at" -1,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/2/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277302838,\"durationMillis\":2299,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#2\"}","2024-03-24 11:01:21.092" -2,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/2/execution/node/13/wfapi/describe\"}},\"id\":\"13\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277305172,\"durationMillis\":5526,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#2\"}","2024-03-24 11:01:21.092" -3,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/2/execution/node/18/wfapi/describe\"}},\"id\":\"18\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277310709,\"durationMillis\":10223,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#2\"}","2024-03-24 11:01:21.092" -4,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/2/execution/node/23/wfapi/describe\"}},\"id\":\"23\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277320947,\"durationMillis\":12470,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#2\"}","2024-03-24 11:01:21.092" -5,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/2/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277333432,\"durationMillis\":3552,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#2\"}","2024-03-24 11:01:21.092" -6,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277513092,\"durationMillis\":3894,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"FullName\": \"github_org/devlake-jenkins/PR-2#1\"}","2024-03-24 11:01:21.474" -7,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/execution/node/15/wfapi/describe\"}},\"id\":\"15\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"ABORTED\",\"error\":{\"message\":null,\"type\":\"org.jenkinsci.plugins.workflow.steps.FlowInterruptedException\"},\"startTimeMillis\":1711277517022,\"durationMillis\":2196,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"FullName\": \"github_org/devlake-jenkins/PR-2#1\"}","2024-03-24 11:01:21.474" -8,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/execution/node/20/wfapi/describe\"}},\"id\":\"20\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"ABORTED\",\"error\":{\"message\":null,\"type\":\"org.jenkinsci.plugins.workflow.steps.FlowInterruptedException\"},\"startTimeMillis\":1711277519230,\"durationMillis\":18,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"FullName\": \"github_org/devlake-jenkins/PR-2#1\"}","2024-03-24 11:01:21.474" -9,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/execution/node/24/wfapi/describe\"}},\"id\":\"24\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"ABORTED\",\"error\":{\"message\":null,\"type\":\"org.jenkinsci.plugins.workflow.steps.FlowInterruptedException\"},\"startTimeMillis\":1711277519255,\"durationMillis\":13,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"FullName\": \"github_org/devlake-jenkins/PR-2#1\"}","2024-03-24 11:01:21.474" -10,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"ABORTED\",\"error\":{\"message\":null,\"type\":\"org.jenkinsci.plugins.workflow.steps.FlowInterruptedException\"},\"startTimeMillis\":1711277519275,\"durationMillis\":11,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"FullName\": \"github_org/devlake-jenkins/PR-2#1\"}","2024-03-24 11:01:21.474" -11,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277543070,\"durationMillis\":1836,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"FullName\": \"github_org/devlake-jenkins/PR-2#2\"}","2024-03-24 11:01:21.805" -12,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/execution/node/13/wfapi/describe\"}},\"id\":\"13\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277544926,\"durationMillis\":5519,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"FullName\": \"github_org/devlake-jenkins/PR-2#2\"}","2024-03-24 11:01:21.805" -13,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/execution/node/18/wfapi/describe\"}},\"id\":\"18\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277550462,\"durationMillis\":5521,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"FullName\": \"github_org/devlake-jenkins/PR-2#2\"}","2024-03-24 11:01:21.805" -14,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/execution/node/23/wfapi/describe\"}},\"id\":\"23\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277555994,\"durationMillis\":12447,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"FullName\": \"github_org/devlake-jenkins/PR-2#2\"}","2024-03-24 11:01:21.805" -15,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277568457,\"durationMillis\":3553,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/PR-2/\", \"FullName\": \"github_org/devlake-jenkins/PR-2#2\"}","2024-03-24 11:01:21.805" -16,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/1/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711275817796,\"durationMillis\":5502,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#1\"}","2024-03-24 11:01:22.172" -17,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/1/execution/node/13/wfapi/describe\"}},\"id\":\"13\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711275823323,\"durationMillis\":5543,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#1\"}","2024-03-24 11:01:22.172" -18,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/1/execution/node/18/wfapi/describe\"}},\"id\":\"18\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711275828881,\"durationMillis\":10233,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#1\"}","2024-03-24 11:01:22.172" -19,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/1/execution/node/23/wfapi/describe\"}},\"id\":\"23\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711275839129,\"durationMillis\":12445,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#1\"}","2024-03-24 11:01:22.172" -20,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/1/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711275851583,\"durationMillis\":3549,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#1\"}","2024-03-24 11:01:22.172" -21,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/2/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711276327154,\"durationMillis\":2318,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#2\"}","2024-03-24 11:01:22.531" -22,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/2/execution/node/13/wfapi/describe\"}},\"id\":\"13\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711276329502,\"durationMillis\":5545,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#2\"}","2024-03-24 11:01:22.531" -23,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/2/execution/node/18/wfapi/describe\"}},\"id\":\"18\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711276335061,\"durationMillis\":10232,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#2\"}","2024-03-24 11:01:22.531" -24,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/2/execution/node/23/wfapi/describe\"}},\"id\":\"23\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711276345310,\"durationMillis\":12463,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#2\"}","2024-03-24 11:01:22.531" -25,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/2/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711276357788,\"durationMillis\":3570,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#2\"}","2024-03-24 11:01:22.531" -26,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/3/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277072754,\"durationMillis\":2318,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#3\"}","2024-03-24 11:01:22.900" -27,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/3/execution/node/13/wfapi/describe\"}},\"id\":\"13\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277075100,\"durationMillis\":5546,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#3\"}","2024-03-24 11:01:22.900" -28,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/3/execution/node/18/wfapi/describe\"}},\"id\":\"18\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277080662,\"durationMillis\":10218,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#3\"}","2024-03-24 11:01:22.900" -29,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/3/execution/node/23/wfapi/describe\"}},\"id\":\"23\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277090895,\"durationMillis\":12441,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#3\"}","2024-03-24 11:01:22.900" -30,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-1/3/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277103348,\"durationMillis\":3555,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-1/\", \"FullName\": \"github_org/devlake-jenkins/feature-1#3\"}","2024-03-24 11:01:22.900" -31,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/1/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277142703,\"durationMillis\":2244,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#1\"}","2024-03-24 11:01:23.262" -32,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/1/execution/node/13/wfapi/describe\"}},\"id\":\"13\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277144974,\"durationMillis\":5541,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#1\"}","2024-03-24 11:01:23.262" -33,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/1/execution/node/18/wfapi/describe\"}},\"id\":\"18\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277150529,\"durationMillis\":10224,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#1\"}","2024-03-24 11:01:23.262" -34,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/1/execution/node/23/wfapi/describe\"}},\"id\":\"23\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277160766,\"durationMillis\":12449,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#1\"}","2024-03-24 11:01:23.262" -35,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/1/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277173228,\"durationMillis\":3567,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#1\"}","2024-03-24 11:01:23.262" -36,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/2/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277157667,\"durationMillis\":2273,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#2\"}","2024-03-24 11:01:23.609" -37,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/2/execution/node/13/wfapi/describe\"}},\"id\":\"13\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277159966,\"durationMillis\":5534,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#2\"}","2024-03-24 11:01:23.609" -38,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/2/execution/node/18/wfapi/describe\"}},\"id\":\"18\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277165515,\"durationMillis\":10220,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#2\"}","2024-03-24 11:01:23.609" -39,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/2/execution/node/23/wfapi/describe\"}},\"id\":\"23\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277175748,\"durationMillis\":12445,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#2\"}","2024-03-24 11:01:23.609" -40,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/2/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277188207,\"durationMillis\":3549,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/2/wfapi/describe","{\"Number\": \"2\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#2\"}","2024-03-24 11:01:23.609" -41,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/3/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277192935,\"durationMillis\":2285,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#3\"}","2024-03-24 11:01:23.979" -42,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/3/execution/node/15/wfapi/describe\"}},\"id\":\"15\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277195262,\"durationMillis\":5526,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#3\"}","2024-03-24 11:01:23.979" -43,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/3/execution/node/20/wfapi/describe\"}},\"id\":\"20\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277200803,\"durationMillis\":10214,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#3\"}","2024-03-24 11:01:23.979" -44,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/3/execution/node/25/wfapi/describe\"}},\"id\":\"25\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277211031,\"durationMillis\":12456,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#3\"}","2024-03-24 11:01:23.979" -45,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/feature-2/3/execution/node/30/wfapi/describe\"}},\"id\":\"30\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277223500,\"durationMillis\":3557,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#3\"}","2024-03-24 11:01:23.979" -46,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277457972,\"durationMillis\":2419,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/wfapi/describe","{\"Number\": \"6\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#6\"}","2024-03-24 11:01:25.056" -47,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/execution/node/15/wfapi/describe\"}},\"id\":\"15\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"ABORTED\",\"error\":{\"message\":null,\"type\":\"org.jenkinsci.plugins.workflow.steps.FlowInterruptedException\"},\"startTimeMillis\":1711277460433,\"durationMillis\":2305,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/wfapi/describe","{\"Number\": \"6\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#6\"}","2024-03-24 11:01:25.056" -48,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/execution/node/20/wfapi/describe\"}},\"id\":\"20\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"ABORTED\",\"error\":{\"message\":null,\"type\":\"org.jenkinsci.plugins.workflow.steps.FlowInterruptedException\"},\"startTimeMillis\":1711277462749,\"durationMillis\":38,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/wfapi/describe","{\"Number\": \"6\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#6\"}","2024-03-24 11:01:25.056" -49,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/execution/node/24/wfapi/describe\"}},\"id\":\"24\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"ABORTED\",\"error\":{\"message\":null,\"type\":\"org.jenkinsci.plugins.workflow.steps.FlowInterruptedException\"},\"startTimeMillis\":1711277462795,\"durationMillis\":16,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/wfapi/describe","{\"Number\": \"6\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#6\"}","2024-03-24 11:01:25.056" -50,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"ABORTED\",\"error\":{\"message\":null,\"type\":\"org.jenkinsci.plugins.workflow.steps.FlowInterruptedException\"},\"startTimeMillis\":1711277462819,\"durationMillis\":16,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/wfapi/describe","{\"Number\": \"6\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/feature-2/\", \"FullName\": \"github_org/devlake-jenkins/feature-2#6\"}","2024-03-24 11:01:25.056" -51,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/main/1/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711275817797,\"durationMillis\":2453,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#1\"}","2024-03-24 11:01:25.425" -52,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/main/1/execution/node/13/wfapi/describe\"}},\"id\":\"13\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711275820311,\"durationMillis\":5546,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#1\"}","2024-03-24 11:01:25.425" -53,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/main/1/execution/node/18/wfapi/describe\"}},\"id\":\"18\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711275825866,\"durationMillis\":10227,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#1\"}","2024-03-24 11:01:25.425" -54,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/main/1/execution/node/23/wfapi/describe\"}},\"id\":\"23\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711275836110,\"durationMillis\":12467,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#1\"}","2024-03-24 11:01:25.425" -55,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/job/github_org/job/devlake-jenkins/job/main/1/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711275848591,\"durationMillis\":3557,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/1/wfapi/describe","{\"Number\": \"1\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#1\"}","2024-03-24 11:01:25.425" -56,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/3/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277503096,\"durationMillis\":2390,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#3\"}","2024-03-24 11:01:25.777" -57,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/3/execution/node/13/wfapi/describe\"}},\"id\":\"13\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277505517,\"durationMillis\":5537,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#3\"}","2024-03-24 11:01:25.777" -58,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/3/execution/node/18/wfapi/describe\"}},\"id\":\"18\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277511068,\"durationMillis\":10220,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#3\"}","2024-03-24 11:01:25.777" -59,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/3/execution/node/23/wfapi/describe\"}},\"id\":\"23\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277521301,\"durationMillis\":12462,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#3\"}","2024-03-24 11:01:25.777" -60,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/3/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277533776,\"durationMillis\":3546,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/3/wfapi/describe","{\"Number\": \"3\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#3\"}","2024-03-24 11:01:25.777" -61,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/4/execution/node/6/wfapi/describe\"}},\"id\":\"6\",\"name\":\"Declarative: Checkout SCM\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277553013,\"durationMillis\":2231,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/4/wfapi/describe","{\"Number\": \"4\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#4\"}","2024-03-24 11:01:26.142" -62,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/4/execution/node/13/wfapi/describe\"}},\"id\":\"13\",\"name\":\"checkout\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277555275,\"durationMillis\":5511,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/4/wfapi/describe","{\"Number\": \"4\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#4\"}","2024-03-24 11:01:26.142" -63,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/4/execution/node/18/wfapi/describe\"}},\"id\":\"18\",\"name\":\"build\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277560796,\"durationMillis\":5531,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/4/wfapi/describe","{\"Number\": \"4\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#4\"}","2024-03-24 11:01:26.142" -64,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/4/execution/node/23/wfapi/describe\"}},\"id\":\"23\",\"name\":\"test\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277566345,\"durationMillis\":12433,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/4/wfapi/describe","{\"Number\": \"4\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#4\"}","2024-03-24 11:01:26.142" -65,"{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","{\"_links\":{\"self\":{\"href\":\"/view/all/job/github_org/job/devlake-jenkins/job/main/4/execution/node/28/wfapi/describe\"}},\"id\":\"28\",\"name\":\"deploy\",\"execNode\":\"\",\"status\":\"SUCCESS\",\"startTimeMillis\":1711277578791,\"durationMillis\":3551,\"pauseDurationMillis\":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/4/wfapi/describe","{\"Number\": \"4\", \"JobPath\": \"/view/all/job/github_org/job/devlake-jenkins/job/main/\", \"FullName\": \"github_org/devlake-jenkins/main#4\"}","2024-03-24 11:01:26.142" +1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/2/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277302838,""durationMillis"":2299,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#2""}","2024-03-24 11:01:21.092" +2,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/2/execution/node/13/wfapi/describe""}},""id"":""13"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277305172,""durationMillis"":5526,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#2""}","2024-03-24 11:01:21.092" +3,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/2/execution/node/18/wfapi/describe""}},""id"":""18"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277310709,""durationMillis"":10223,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#2""}","2024-03-24 11:01:21.092" +4,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/2/execution/node/23/wfapi/describe""}},""id"":""23"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277320947,""durationMillis"":12470,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#2""}","2024-03-24 11:01:21.092" +5,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/2/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277333432,""durationMillis"":3552,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#2""}","2024-03-24 11:01:21.092" +6,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277513092,""durationMillis"":3894,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""FullName"": ""github_org/devlake-jenkins/PR-2#1""}","2024-03-24 11:01:21.474" +7,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/execution/node/15/wfapi/describe""}},""id"":""15"",""name"":""checkout"",""execNode"":"""",""status"":""ABORTED"",""error"":{""message"":null,""type"":""org.jenkinsci.plugins.workflow.steps.FlowInterruptedException""},""startTimeMillis"":1711277517022,""durationMillis"":2196,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""FullName"": ""github_org/devlake-jenkins/PR-2#1""}","2024-03-24 11:01:21.474" +8,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/execution/node/20/wfapi/describe""}},""id"":""20"",""name"":""build"",""execNode"":"""",""status"":""ABORTED"",""error"":{""message"":null,""type"":""org.jenkinsci.plugins.workflow.steps.FlowInterruptedException""},""startTimeMillis"":1711277519230,""durationMillis"":18,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""FullName"": ""github_org/devlake-jenkins/PR-2#1""}","2024-03-24 11:01:21.474" +9,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/execution/node/24/wfapi/describe""}},""id"":""24"",""name"":""test"",""execNode"":"""",""status"":""ABORTED"",""error"":{""message"":null,""type"":""org.jenkinsci.plugins.workflow.steps.FlowInterruptedException""},""startTimeMillis"":1711277519255,""durationMillis"":13,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""FullName"": ""github_org/devlake-jenkins/PR-2#1""}","2024-03-24 11:01:21.474" +10,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""ABORTED"",""error"":{""message"":null,""type"":""org.jenkinsci.plugins.workflow.steps.FlowInterruptedException""},""startTimeMillis"":1711277519275,""durationMillis"":11,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""FullName"": ""github_org/devlake-jenkins/PR-2#1""}","2024-03-24 11:01:21.474" +11,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277543070,""durationMillis"":1836,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""FullName"": ""github_org/devlake-jenkins/PR-2#2""}","2024-03-24 11:01:21.805" +12,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/execution/node/13/wfapi/describe""}},""id"":""13"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277544926,""durationMillis"":5519,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""FullName"": ""github_org/devlake-jenkins/PR-2#2""}","2024-03-24 11:01:21.805" +13,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/execution/node/18/wfapi/describe""}},""id"":""18"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277550462,""durationMillis"":5521,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""FullName"": ""github_org/devlake-jenkins/PR-2#2""}","2024-03-24 11:01:21.805" +14,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/execution/node/23/wfapi/describe""}},""id"":""23"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277555994,""durationMillis"":12447,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""FullName"": ""github_org/devlake-jenkins/PR-2#2""}","2024-03-24 11:01:21.805" +15,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277568457,""durationMillis"":3553,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/PR-2/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/PR-2/"", ""FullName"": ""github_org/devlake-jenkins/PR-2#2""}","2024-03-24 11:01:21.805" +16,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/1/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711275817796,""durationMillis"":5502,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#1""}","2024-03-24 11:01:22.172" +17,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/1/execution/node/13/wfapi/describe""}},""id"":""13"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711275823323,""durationMillis"":5543,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#1""}","2024-03-24 11:01:22.172" +18,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/1/execution/node/18/wfapi/describe""}},""id"":""18"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711275828881,""durationMillis"":10233,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#1""}","2024-03-24 11:01:22.172" +19,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/1/execution/node/23/wfapi/describe""}},""id"":""23"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711275839129,""durationMillis"":12445,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#1""}","2024-03-24 11:01:22.172" +20,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/1/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711275851583,""durationMillis"":3549,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#1""}","2024-03-24 11:01:22.172" +21,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/2/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711276327154,""durationMillis"":2318,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#2""}","2024-03-24 11:01:22.531" +22,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/2/execution/node/13/wfapi/describe""}},""id"":""13"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711276329502,""durationMillis"":5545,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#2""}","2024-03-24 11:01:22.531" +23,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/2/execution/node/18/wfapi/describe""}},""id"":""18"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711276335061,""durationMillis"":10232,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#2""}","2024-03-24 11:01:22.531" +24,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/2/execution/node/23/wfapi/describe""}},""id"":""23"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711276345310,""durationMillis"":12463,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#2""}","2024-03-24 11:01:22.531" +25,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/2/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711276357788,""durationMillis"":3570,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#2""}","2024-03-24 11:01:22.531" +26,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/3/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277072754,""durationMillis"":2318,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#3""}","2024-03-24 11:01:22.900" +27,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/3/execution/node/13/wfapi/describe""}},""id"":""13"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277075100,""durationMillis"":5546,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#3""}","2024-03-24 11:01:22.900" +28,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/3/execution/node/18/wfapi/describe""}},""id"":""18"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277080662,""durationMillis"":10218,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#3""}","2024-03-24 11:01:22.900" +29,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/3/execution/node/23/wfapi/describe""}},""id"":""23"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277090895,""durationMillis"":12441,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#3""}","2024-03-24 11:01:22.900" +30,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-1/3/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277103348,""durationMillis"":3555,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-1/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-1/"", ""FullName"": ""github_org/devlake-jenkins/feature-1#3""}","2024-03-24 11:01:22.900" +31,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/1/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277142703,""durationMillis"":2244,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#1""}","2024-03-24 11:01:23.262" +32,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/1/execution/node/13/wfapi/describe""}},""id"":""13"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277144974,""durationMillis"":5541,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#1""}","2024-03-24 11:01:23.262" +33,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/1/execution/node/18/wfapi/describe""}},""id"":""18"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277150529,""durationMillis"":10224,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#1""}","2024-03-24 11:01:23.262" +34,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/1/execution/node/23/wfapi/describe""}},""id"":""23"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277160766,""durationMillis"":12449,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#1""}","2024-03-24 11:01:23.262" +35,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/1/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277173228,""durationMillis"":3567,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#1""}","2024-03-24 11:01:23.262" +36,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/2/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277157667,""durationMillis"":2273,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#2""}","2024-03-24 11:01:23.609" +37,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/2/execution/node/13/wfapi/describe""}},""id"":""13"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277159966,""durationMillis"":5534,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#2""}","2024-03-24 11:01:23.609" +38,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/2/execution/node/18/wfapi/describe""}},""id"":""18"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277165515,""durationMillis"":10220,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#2""}","2024-03-24 11:01:23.609" +39,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/2/execution/node/23/wfapi/describe""}},""id"":""23"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277175748,""durationMillis"":12445,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#2""}","2024-03-24 11:01:23.609" +40,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/2/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277188207,""durationMillis"":3549,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/2/wfapi/describe","{""Number"": ""2"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#2""}","2024-03-24 11:01:23.609" +41,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/3/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277192935,""durationMillis"":2285,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#3""}","2024-03-24 11:01:23.979" +42,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/3/execution/node/15/wfapi/describe""}},""id"":""15"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277195262,""durationMillis"":5526,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#3""}","2024-03-24 11:01:23.979" +43,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/3/execution/node/20/wfapi/describe""}},""id"":""20"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277200803,""durationMillis"":10214,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#3""}","2024-03-24 11:01:23.979" +44,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/3/execution/node/25/wfapi/describe""}},""id"":""25"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277211031,""durationMillis"":12456,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#3""}","2024-03-24 11:01:23.979" +45,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/feature-2/3/execution/node/30/wfapi/describe""}},""id"":""30"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277223500,""durationMillis"":3557,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#3""}","2024-03-24 11:01:23.979" +46,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277457972,""durationMillis"":2419,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/wfapi/describe","{""Number"": ""6"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#6""}","2024-03-24 11:01:25.056" +47,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/execution/node/15/wfapi/describe""}},""id"":""15"",""name"":""checkout"",""execNode"":"""",""status"":""ABORTED"",""error"":{""message"":null,""type"":""org.jenkinsci.plugins.workflow.steps.FlowInterruptedException""},""startTimeMillis"":1711277460433,""durationMillis"":2305,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/wfapi/describe","{""Number"": ""6"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#6""}","2024-03-24 11:01:25.056" +48,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/execution/node/20/wfapi/describe""}},""id"":""20"",""name"":""build"",""execNode"":"""",""status"":""ABORTED"",""error"":{""message"":null,""type"":""org.jenkinsci.plugins.workflow.steps.FlowInterruptedException""},""startTimeMillis"":1711277462749,""durationMillis"":38,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/wfapi/describe","{""Number"": ""6"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#6""}","2024-03-24 11:01:25.056" +49,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/execution/node/24/wfapi/describe""}},""id"":""24"",""name"":""test"",""execNode"":"""",""status"":""ABORTED"",""error"":{""message"":null,""type"":""org.jenkinsci.plugins.workflow.steps.FlowInterruptedException""},""startTimeMillis"":1711277462795,""durationMillis"":16,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/wfapi/describe","{""Number"": ""6"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#6""}","2024-03-24 11:01:25.056" +50,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""ABORTED"",""error"":{""message"":null,""type"":""org.jenkinsci.plugins.workflow.steps.FlowInterruptedException""},""startTimeMillis"":1711277462819,""durationMillis"":16,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/feature-2/6/wfapi/describe","{""Number"": ""6"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/feature-2/"", ""FullName"": ""github_org/devlake-jenkins/feature-2#6""}","2024-03-24 11:01:25.056" +51,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/main/1/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711275817797,""durationMillis"":2453,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#1""}","2024-03-24 11:01:25.425" +52,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/main/1/execution/node/13/wfapi/describe""}},""id"":""13"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711275820311,""durationMillis"":5546,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#1""}","2024-03-24 11:01:25.425" +53,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/main/1/execution/node/18/wfapi/describe""}},""id"":""18"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711275825866,""durationMillis"":10227,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#1""}","2024-03-24 11:01:25.425" +54,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/main/1/execution/node/23/wfapi/describe""}},""id"":""23"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711275836110,""durationMillis"":12467,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#1""}","2024-03-24 11:01:25.425" +55,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/job/github_org/job/devlake-jenkins/job/main/1/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711275848591,""durationMillis"":3557,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/1/wfapi/describe","{""Number"": ""1"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#1""}","2024-03-24 11:01:25.425" +56,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/3/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277503096,""durationMillis"":2390,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#3""}","2024-03-24 11:01:25.777" +57,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/3/execution/node/13/wfapi/describe""}},""id"":""13"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277505517,""durationMillis"":5537,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#3""}","2024-03-24 11:01:25.777" +58,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/3/execution/node/18/wfapi/describe""}},""id"":""18"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277511068,""durationMillis"":10220,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#3""}","2024-03-24 11:01:25.777" +59,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/3/execution/node/23/wfapi/describe""}},""id"":""23"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277521301,""durationMillis"":12462,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#3""}","2024-03-24 11:01:25.777" +60,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/3/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277533776,""durationMillis"":3546,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/3/wfapi/describe","{""Number"": ""3"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#3""}","2024-03-24 11:01:25.777" +61,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/4/execution/node/6/wfapi/describe""}},""id"":""6"",""name"":""Declarative: Checkout SCM"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277553013,""durationMillis"":2231,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/4/wfapi/describe","{""Number"": ""4"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#4""}","2024-03-24 11:01:26.142" +62,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/4/execution/node/13/wfapi/describe""}},""id"":""13"",""name"":""checkout"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277555275,""durationMillis"":5511,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/4/wfapi/describe","{""Number"": ""4"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#4""}","2024-03-24 11:01:26.142" +63,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/4/execution/node/18/wfapi/describe""}},""id"":""18"",""name"":""build"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277560796,""durationMillis"":5531,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/4/wfapi/describe","{""Number"": ""4"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#4""}","2024-03-24 11:01:26.142" +64,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/4/execution/node/23/wfapi/describe""}},""id"":""23"",""name"":""test"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277566345,""durationMillis"":12433,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/4/wfapi/describe","{""Number"": ""4"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#4""}","2024-03-24 11:01:26.142" +65,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","{""_links"":{""self"":{""href"":""/view/all/job/github_org/job/devlake-jenkins/job/main/4/execution/node/28/wfapi/describe""}},""id"":""28"",""name"":""deploy"",""execNode"":"""",""status"":""SUCCESS"",""startTimeMillis"":1711277578791,""durationMillis"":3551,""pauseDurationMillis"":0}","https://1457-62-195-68-26.ngrok-free.app/view/all/job/github_org/job/devlake-jenkins/job/main/4/wfapi/describe","{""Number"": ""4"", ""JobPath"": ""/view/all/job/github_org/job/devlake-jenkins/job/main/"", ""FullName"": ""github_org/devlake-jenkins/main#4""}","2024-03-24 11:01:26.142" diff --git a/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_build_commits_multibranch.csv b/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_build_commits_multibranch.csv index 93fad188618..50551c99a57 100644 --- a/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_build_commits_multibranch.csv +++ b/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_build_commits_multibranch.csv @@ -1,14 +1,14 @@ connection_id,build_name,commit_sha,branch,repo_url,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark -1,"github_org/devlake-jenkins/PR-2#1","aba54481a73573c0587f26fbd4c9788eb2bf2398","PR-2","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",6,"" -1,"github_org/devlake-jenkins/PR-2#2","49359d217ea617c7e4771235979b56015172ba6c","PR-2","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",5,"" -1,"github_org/devlake-jenkins/feature-1#1","87f0f9ee7c305c561c96f66ed8c71c85df4b940f","feature-1","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",9,"" -1,"github_org/devlake-jenkins/feature-1#2","eae3667426e1da0d8cab523e372e6771a39b16a7","feature-1","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",8,"" -1,"github_org/devlake-jenkins/feature-1#3","3ff14f4a781018e6e800ded3a5ac95fa2f9bb26f","feature-1","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",7,"" -1,"github_org/devlake-jenkins/feature-2#1","2578423ba5c348fb9948279f3ea64ed650fecd8a","feature-2","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",15,"" -1,"github_org/devlake-jenkins/feature-2#2","2578423ba5c348fb9948279f3ea64ed650fecd8a","feature-2","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",14,"" -1,"github_org/devlake-jenkins/feature-2#3","881b398774e020772bca7fdd7fdc60e7250f53ef","feature-2","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",13,"" -1,"github_org/devlake-jenkins/feature-2#6","aba54481a73573c0587f26fbd4c9788eb2bf2398","feature-2","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",10,"" -1,"github_org/devlake-jenkins/main#1","87f0f9ee7c305c561c96f66ed8c71c85df4b940f","main","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",4,"" -1,"github_org/devlake-jenkins/main#2","f521ff9c806e74b9100c8fc87d07ac504f828f93","main","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",3,"" -1,"github_org/devlake-jenkins/main#3","78b8e3a2029f991982039e4ed6d7b1f9c6670497","main","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",2,"" -1,"github_org/devlake-jenkins/main#4","c83ae02076382670e286ac2474b7a7327fc28cde","main","git@github.com:gustavobini/devlake-jenkins.git","2024-03-24 11:01:20.776","2024-03-24 11:01:20.776","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",1,"" +1,"github_org/devlake-jenkins/PR-2#1","aba54481a73573c0587f26fbd4c9788eb2bf2398","PR-2","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",6,"" +1,"github_org/devlake-jenkins/PR-2#2","49359d217ea617c7e4771235979b56015172ba6c","PR-2","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",5,"" +1,"github_org/devlake-jenkins/feature-1#1","87f0f9ee7c305c561c96f66ed8c71c85df4b940f","feature-1","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",9,"" +1,"github_org/devlake-jenkins/feature-1#2","eae3667426e1da0d8cab523e372e6771a39b16a7","feature-1","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",8,"" +1,"github_org/devlake-jenkins/feature-1#3","3ff14f4a781018e6e800ded3a5ac95fa2f9bb26f","feature-1","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",7,"" +1,"github_org/devlake-jenkins/feature-2#1","2578423ba5c348fb9948279f3ea64ed650fecd8a","feature-2","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",15,"" +1,"github_org/devlake-jenkins/feature-2#2","2578423ba5c348fb9948279f3ea64ed650fecd8a","feature-2","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",14,"" +1,"github_org/devlake-jenkins/feature-2#3","881b398774e020772bca7fdd7fdc60e7250f53ef","feature-2","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",13,"" +1,"github_org/devlake-jenkins/feature-2#6","aba54481a73573c0587f26fbd4c9788eb2bf2398","feature-2","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",10,"" +1,"github_org/devlake-jenkins/main#1","87f0f9ee7c305c561c96f66ed8c71c85df4b940f","main","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",4,"" +1,"github_org/devlake-jenkins/main#2","f521ff9c806e74b9100c8fc87d07ac504f828f93","main","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",3,"" +1,"github_org/devlake-jenkins/main#3","78b8e3a2029f991982039e4ed6d7b1f9c6670497","main","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",2,"" +1,"github_org/devlake-jenkins/main#4","c83ae02076382670e286ac2474b7a7327fc28cde","main","git@github.com:gustavobini/devlake-jenkins.git","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",1,"" \ No newline at end of file diff --git a/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds_multibranch.csv b/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds_multibranch.csv index 14f386a3191..775e9856f76 100644 --- a/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds_multibranch.csv +++ b/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds_multibranch.csv @@ -1,16 +1,16 @@ -connection_id,full_name,job_name,job_path,duration,estimated_duration,number,result,timestamp,start_time,has_stages,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.210","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",6,"",1,"PR-2","/view/all/job/github_org/job/devlake-jenkins/job/PR-2/",7390,"github_org/devlake-jenkins/PR-2#1",30086,1,"ABORTED",1711277511931,"2024-03-24 10:51:51.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.211","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",5,"",1,"PR-2","/view/all/job/github_org/job/devlake-jenkins/job/PR-2/",30086,"github_org/devlake-jenkins/PR-2#2",30086,2,"SUCCESS",1711277541959,"2024-03-24 10:52:21.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.211","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",9,"",1,"feature-1","/view/all/job/github_org/job/devlake-jenkins/job/feature-1/",39545,"github_org/devlake-jenkins/feature-1#1",36750,1,"SUCCESS",1711275815628,"2024-03-24 10:23:35.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.212","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",8,"",1,"feature-1","/view/all/job/github_org/job/devlake-jenkins/job/feature-1/",35351,"github_org/devlake-jenkins/feature-1#2",36750,2,"SUCCESS",1711276326044,"2024-03-24 10:32:06.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.212","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",7,"",1,"feature-1","/view/all/job/github_org/job/devlake-jenkins/job/feature-1/",35354,"github_org/devlake-jenkins/feature-1#3",36750,3,"SUCCESS",1711277071589,"2024-03-24 10:44:31.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.212","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",15,"",1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",35206,"github_org/devlake-jenkins/feature-2#1",35268,1,"SUCCESS",1711277141627,"2024-03-24 10:45:41.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.213","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",14,"",1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",35162,"github_org/devlake-jenkins/feature-2#2",35268,2,"SUCCESS",1711277156634,"2024-03-24 10:45:56.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.213","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",13,"",1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",35435,"github_org/devlake-jenkins/feature-2#3",35268,3,"SUCCESS",1711277191663,"2024-03-24 10:46:31.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:20.778","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",12,"",1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",976,"github_org/devlake-jenkins/feature-2#4",35268,4,"FAILURE",1711277261723,"2024-03-24 10:47:41.000","","WorkflowRun","",0,0 -"2024-03-24 11:01:20.778","2024-03-24 11:01:20.778","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",11,"",1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",1098,"github_org/devlake-jenkins/feature-2#5",35268,5,"FAILURE",1711277371815,"2024-03-24 10:49:31.000","","WorkflowRun","",0,0 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.214","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",10,"",1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",5993,"github_org/devlake-jenkins/feature-2#6",35268,6,"ABORTED",1711277456887,"2024-03-24 10:50:56.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.214","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",4,"",1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",36568,"github_org/devlake-jenkins/main#1",33703,1,"SUCCESS",1711275815622,"2024-03-24 10:23:35.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.215","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",3,"",1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",35260,"github_org/devlake-jenkins/main#2",33703,2,"SUCCESS",1711277301765,"2024-03-24 10:48:21.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.215","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",2,"",1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",35435,"github_org/devlake-jenkins/main#3",33703,3,"SUCCESS",1711277501923,"2024-03-24 10:51:41.000","","WorkflowRun","",0,1 -"2024-03-24 11:01:20.778","2024-03-24 11:01:26.215","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",1,"",1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",30415,"github_org/devlake-jenkins/main#4",33703,4,"SUCCESS",1711277551963,"2024-03-24 10:52:31.000","","WorkflowRun","",0,1 +connection_id,job_name,job_path,duration,full_name,estimated_duration,number,result,timestamp,start_time,has_stages,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark +1,"PR-2","/view/all/job/github_org/job/devlake-jenkins/job/PR-2/",7390,"github_org/devlake-jenkins/PR-2#1",30086,1,"ABORTED",1711277511931,"2024-03-24T10:51:51.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",6,"" +1,"PR-2","/view/all/job/github_org/job/devlake-jenkins/job/PR-2/",30086,"github_org/devlake-jenkins/PR-2#2",30086,2,"SUCCESS",1711277541959,"2024-03-24T10:52:21.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",5,"" +1,"feature-1","/view/all/job/github_org/job/devlake-jenkins/job/feature-1/",39545,"github_org/devlake-jenkins/feature-1#1",36750,1,"SUCCESS",1711275815628,"2024-03-24T10:23:35.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",9,"" +1,"feature-1","/view/all/job/github_org/job/devlake-jenkins/job/feature-1/",35351,"github_org/devlake-jenkins/feature-1#2",36750,2,"SUCCESS",1711276326044,"2024-03-24T10:32:06.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",8,"" +1,"feature-1","/view/all/job/github_org/job/devlake-jenkins/job/feature-1/",35354,"github_org/devlake-jenkins/feature-1#3",36750,3,"SUCCESS",1711277071589,"2024-03-24T10:44:31.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",7,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",35206,"github_org/devlake-jenkins/feature-2#1",35268,1,"SUCCESS",1711277141627,"2024-03-24T10:45:41.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",15,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",35162,"github_org/devlake-jenkins/feature-2#2",35268,2,"SUCCESS",1711277156634,"2024-03-24T10:45:56.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",14,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",35435,"github_org/devlake-jenkins/feature-2#3",35268,3,"SUCCESS",1711277191663,"2024-03-24T10:46:31.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",13,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",976,"github_org/devlake-jenkins/feature-2#4",35268,4,"FAILURE",1711277261723,"2024-03-24T10:47:41.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",12,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",1098,"github_org/devlake-jenkins/feature-2#5",35268,5,"FAILURE",1711277371815,"2024-03-24T10:49:31.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",11,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",5993,"github_org/devlake-jenkins/feature-2#6",35268,6,"ABORTED",1711277456887,"2024-03-24T10:50:56.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",10,"" +1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",36568,"github_org/devlake-jenkins/main#1",33703,1,"SUCCESS",1711275815622,"2024-03-24T10:23:35.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",4,"" +1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",35260,"github_org/devlake-jenkins/main#2",33703,2,"SUCCESS",1711277301765,"2024-03-24T10:48:21.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",3,"" +1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",35435,"github_org/devlake-jenkins/main#3",33703,3,"SUCCESS",1711277501923,"2024-03-24T10:51:41.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",2,"" +1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",30415,"github_org/devlake-jenkins/main#4",33703,4,"SUCCESS",1711277551963,"2024-03-24T10:52:31.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",1,"" diff --git a/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds_multibranch_after_enrich.csv b/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds_multibranch_after_enrich.csv new file mode 100644 index 00000000000..d2f0fc8b3f6 --- /dev/null +++ b/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds_multibranch_after_enrich.csv @@ -0,0 +1,16 @@ +connection_id,job_name,job_path,duration,full_name,estimated_duration,number,result,timestamp,start_time,has_stages,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark +1,"PR-2","/view/all/job/github_org/job/devlake-jenkins/job/PR-2/",7390,"github_org/devlake-jenkins/PR-2#1",30086,1,"ABORTED",1711277511931,"2024-03-24T10:51:51.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",6,"" +1,"PR-2","/view/all/job/github_org/job/devlake-jenkins/job/PR-2/",30086,"github_org/devlake-jenkins/PR-2#2",30086,2,"SUCCESS",1711277541959,"2024-03-24T10:52:21.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",5,"" +1,"feature-1","/view/all/job/github_org/job/devlake-jenkins/job/feature-1/",39545,"github_org/devlake-jenkins/feature-1#1",36750,1,"SUCCESS",1711275815628,"2024-03-24T10:23:35.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",9,"" +1,"feature-1","/view/all/job/github_org/job/devlake-jenkins/job/feature-1/",35351,"github_org/devlake-jenkins/feature-1#2",36750,2,"SUCCESS",1711276326044,"2024-03-24T10:32:06.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",8,"" +1,"feature-1","/view/all/job/github_org/job/devlake-jenkins/job/feature-1/",35354,"github_org/devlake-jenkins/feature-1#3",36750,3,"SUCCESS",1711277071589,"2024-03-24T10:44:31.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",7,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",35206,"github_org/devlake-jenkins/feature-2#1",35268,1,"SUCCESS",1711277141627,"2024-03-24T10:45:41.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",15,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",35162,"github_org/devlake-jenkins/feature-2#2",35268,2,"SUCCESS",1711277156634,"2024-03-24T10:45:56.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",14,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",35435,"github_org/devlake-jenkins/feature-2#3",35268,3,"SUCCESS",1711277191663,"2024-03-24T10:46:31.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",13,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",976,"github_org/devlake-jenkins/feature-2#4",35268,4,"FAILURE",1711277261723,"2024-03-24T10:47:41.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",12,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",1098,"github_org/devlake-jenkins/feature-2#5",35268,5,"FAILURE",1711277371815,"2024-03-24T10:49:31.000+00:00",0,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",11,"" +1,"feature-2","/view/all/job/github_org/job/devlake-jenkins/job/feature-2/",5993,"github_org/devlake-jenkins/feature-2#6",35268,6,"ABORTED",1711277456887,"2024-03-24T10:50:56.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",10,"" +1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",36568,"github_org/devlake-jenkins/main#1",33703,1,"SUCCESS",1711275815622,"2024-03-24T10:23:35.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",4,"" +1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",35260,"github_org/devlake-jenkins/main#2",33703,2,"SUCCESS",1711277301765,"2024-03-24T10:48:21.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",3,"" +1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",35435,"github_org/devlake-jenkins/main#3",33703,3,"SUCCESS",1711277501923,"2024-03-24T10:51:41.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",2,"" +1,"main","/view/all/job/github_org/job/devlake-jenkins/job/main/",30415,"github_org/devlake-jenkins/main#4",33703,4,"SUCCESS",1711277551963,"2024-03-24T10:52:31.000+00:00",1,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",1,"" diff --git a/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_stages_multibranch.csv b/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_stages_multibranch.csv index 0841a6203cd..4ac173e48a3 100644 --- a/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_stages_multibranch.csv +++ b/backend/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_stages_multibranch.csv @@ -1,66 +1,66 @@ connection_id,id,build_name,name,exec_node,status,start_time_millis,duration_millis,pause_duration_millis,type,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",12,"",1,"13","checkout","","SUCCESS",1711277544926,5519,0,"github_org/devlake-jenkins/PR-2#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",17,"",1,"13","checkout","","SUCCESS",1711275823323,5543,0,"github_org/devlake-jenkins/feature-1#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",22,"",1,"13","checkout","","SUCCESS",1711276329502,5545,0,"github_org/devlake-jenkins/feature-1#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",27,"",1,"13","checkout","","SUCCESS",1711277075100,5546,0,"github_org/devlake-jenkins/feature-1#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",32,"",1,"13","checkout","","SUCCESS",1711277144974,5541,0,"github_org/devlake-jenkins/feature-2#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",37,"",1,"13","checkout","","SUCCESS",1711277159966,5534,0,"github_org/devlake-jenkins/feature-2#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",52,"",1,"13","checkout","","SUCCESS",1711275820311,5546,0,"github_org/devlake-jenkins/main#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",2,"",1,"13","checkout","","SUCCESS",1711277305172,5526,0,"github_org/devlake-jenkins/main#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",57,"",1,"13","checkout","","SUCCESS",1711277505517,5537,0,"github_org/devlake-jenkins/main#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",62,"",1,"13","checkout","","SUCCESS",1711277555275,5511,0,"github_org/devlake-jenkins/main#4","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",7,"",1,"15","checkout","","ABORTED",1711277517022,2196,0,"github_org/devlake-jenkins/PR-2#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",42,"",1,"15","checkout","","SUCCESS",1711277195262,5526,0,"github_org/devlake-jenkins/feature-2#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",47,"",1,"15","checkout","","ABORTED",1711277460433,2305,0,"github_org/devlake-jenkins/feature-2#6","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",13,"",1,"18","build","","SUCCESS",1711277550462,5521,0,"github_org/devlake-jenkins/PR-2#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",18,"",1,"18","build","","SUCCESS",1711275828881,10233,0,"github_org/devlake-jenkins/feature-1#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",23,"",1,"18","build","","SUCCESS",1711276335061,10232,0,"github_org/devlake-jenkins/feature-1#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",28,"",1,"18","build","","SUCCESS",1711277080662,10218,0,"github_org/devlake-jenkins/feature-1#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",33,"",1,"18","build","","SUCCESS",1711277150529,10224,0,"github_org/devlake-jenkins/feature-2#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",38,"",1,"18","build","","SUCCESS",1711277165515,10220,0,"github_org/devlake-jenkins/feature-2#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",53,"",1,"18","build","","SUCCESS",1711275825866,10227,0,"github_org/devlake-jenkins/main#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",3,"",1,"18","build","","SUCCESS",1711277310709,10223,0,"github_org/devlake-jenkins/main#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",58,"",1,"18","build","","SUCCESS",1711277511068,10220,0,"github_org/devlake-jenkins/main#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",63,"",1,"18","build","","SUCCESS",1711277560796,5531,0,"github_org/devlake-jenkins/main#4","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",8,"",1,"20","build","","ABORTED",1711277519230,18,0,"github_org/devlake-jenkins/PR-2#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",43,"",1,"20","build","","SUCCESS",1711277200803,10214,0,"github_org/devlake-jenkins/feature-2#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",48,"",1,"20","build","","ABORTED",1711277462749,38,0,"github_org/devlake-jenkins/feature-2#6","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",14,"",1,"23","test","","SUCCESS",1711277555994,12447,0,"github_org/devlake-jenkins/PR-2#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",19,"",1,"23","test","","SUCCESS",1711275839129,12445,0,"github_org/devlake-jenkins/feature-1#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",24,"",1,"23","test","","SUCCESS",1711276345310,12463,0,"github_org/devlake-jenkins/feature-1#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",29,"",1,"23","test","","SUCCESS",1711277090895,12441,0,"github_org/devlake-jenkins/feature-1#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",34,"",1,"23","test","","SUCCESS",1711277160766,12449,0,"github_org/devlake-jenkins/feature-2#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",39,"",1,"23","test","","SUCCESS",1711277175748,12445,0,"github_org/devlake-jenkins/feature-2#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",54,"",1,"23","test","","SUCCESS",1711275836110,12467,0,"github_org/devlake-jenkins/main#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",4,"",1,"23","test","","SUCCESS",1711277320947,12470,0,"github_org/devlake-jenkins/main#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",59,"",1,"23","test","","SUCCESS",1711277521301,12462,0,"github_org/devlake-jenkins/main#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",64,"",1,"23","test","","SUCCESS",1711277566345,12433,0,"github_org/devlake-jenkins/main#4","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",9,"",1,"24","test","","ABORTED",1711277519255,13,0,"github_org/devlake-jenkins/PR-2#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",49,"",1,"24","test","","ABORTED",1711277462795,16,0,"github_org/devlake-jenkins/feature-2#6","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",44,"",1,"25","test","","SUCCESS",1711277211031,12456,0,"github_org/devlake-jenkins/feature-2#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",10,"",1,"28","deploy","","ABORTED",1711277519275,11,0,"github_org/devlake-jenkins/PR-2#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",15,"",1,"28","deploy","","SUCCESS",1711277568457,3553,0,"github_org/devlake-jenkins/PR-2#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",20,"",1,"28","deploy","","SUCCESS",1711275851583,3549,0,"github_org/devlake-jenkins/feature-1#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",25,"",1,"28","deploy","","SUCCESS",1711276357788,3570,0,"github_org/devlake-jenkins/feature-1#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",30,"",1,"28","deploy","","SUCCESS",1711277103348,3555,0,"github_org/devlake-jenkins/feature-1#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",35,"",1,"28","deploy","","SUCCESS",1711277173228,3567,0,"github_org/devlake-jenkins/feature-2#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",40,"",1,"28","deploy","","SUCCESS",1711277188207,3549,0,"github_org/devlake-jenkins/feature-2#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",50,"",1,"28","deploy","","ABORTED",1711277462819,16,0,"github_org/devlake-jenkins/feature-2#6","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",55,"",1,"28","deploy","","SUCCESS",1711275848591,3557,0,"github_org/devlake-jenkins/main#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",5,"",1,"28","deploy","","SUCCESS",1711277333432,3552,0,"github_org/devlake-jenkins/main#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",60,"",1,"28","deploy","","SUCCESS",1711277533776,3546,0,"github_org/devlake-jenkins/main#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",65,"",1,"28","deploy","","SUCCESS",1711277578791,3551,0,"github_org/devlake-jenkins/main#4","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",45,"",1,"30","deploy","","SUCCESS",1711277223500,3557,0,"github_org/devlake-jenkins/feature-2#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",6,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711277513092,3894,0,"github_org/devlake-jenkins/PR-2#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",11,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711277543070,1836,0,"github_org/devlake-jenkins/PR-2#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",16,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711275817796,5502,0,"github_org/devlake-jenkins/feature-1#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",21,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711276327154,2318,0,"github_org/devlake-jenkins/feature-1#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",26,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711277072754,2318,0,"github_org/devlake-jenkins/feature-1#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",31,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711277142703,2244,0,"github_org/devlake-jenkins/feature-2#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",36,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711277157667,2273,0,"github_org/devlake-jenkins/feature-2#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",41,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711277192935,2285,0,"github_org/devlake-jenkins/feature-2#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",46,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711277457972,2419,0,"github_org/devlake-jenkins/feature-2#6","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",51,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711275817797,2453,0,"github_org/devlake-jenkins/main#1","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",1,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711277302838,2299,0,"github_org/devlake-jenkins/main#2","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",56,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711277503096,2390,0,"github_org/devlake-jenkins/main#3","" -"2024-03-24 11:01:26.165","2024-03-24 11:01:26.165","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",61,"",1,"6","Declarative: Checkout SCM","","SUCCESS",1711277553013,2231,0,"github_org/devlake-jenkins/main#4","" +1,6,github_org/devlake-jenkins/PR-2#2,"Declarative: Checkout SCM",,"SUCCESS",1711277543070,1836,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",11, +1,13,github_org/devlake-jenkins/PR-2#2,"checkout",,"SUCCESS",1711277544926,5519,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",12, +1,18,github_org/devlake-jenkins/PR-2#2,"build",,"SUCCESS",1711277550462,5521,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",13, +1,23,github_org/devlake-jenkins/PR-2#2,"test",,"SUCCESS",1711277555994,12447,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",14, +1,28,github_org/devlake-jenkins/PR-2#2,"deploy",,"SUCCESS",1711277568457,3553,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",15, +1,6,github_org/devlake-jenkins/feature-1#1,"Declarative: Checkout SCM",,"SUCCESS",1711275817796,5502,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",16, +1,13,github_org/devlake-jenkins/feature-1#1,"checkout",,"SUCCESS",1711275823323,5543,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",17, +1,18,github_org/devlake-jenkins/feature-1#1,"build",,"SUCCESS",1711275828881,10233,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",18, +1,23,github_org/devlake-jenkins/feature-1#1,"test",,"SUCCESS",1711275839129,12445,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",19, +1,28,github_org/devlake-jenkins/feature-1#1,"deploy",,"SUCCESS",1711275851583,3549,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",20, +1,6,github_org/devlake-jenkins/feature-1#2,"Declarative: Checkout SCM",,"SUCCESS",1711276327154,2318,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",21, +1,13,github_org/devlake-jenkins/feature-1#2,"checkout",,"SUCCESS",1711276329502,5545,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",22, +1,18,github_org/devlake-jenkins/feature-1#2,"build",,"SUCCESS",1711276335061,10232,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",23, +1,23,github_org/devlake-jenkins/feature-1#2,"test",,"SUCCESS",1711276345310,12463,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",24, +1,28,github_org/devlake-jenkins/feature-1#2,"deploy",,"SUCCESS",1711276357788,3570,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",25, +1,6,github_org/devlake-jenkins/feature-1#3,"Declarative: Checkout SCM",,"SUCCESS",1711277072754,2318,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",26, +1,13,github_org/devlake-jenkins/feature-1#3,"checkout",,"SUCCESS",1711277075100,5546,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",27, +1,18,github_org/devlake-jenkins/feature-1#3,"build",,"SUCCESS",1711277080662,10218,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",28, +1,23,github_org/devlake-jenkins/feature-1#3,"test",,"SUCCESS",1711277090895,12441,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",29, +1,28,github_org/devlake-jenkins/feature-1#3,"deploy",,"SUCCESS",1711277103348,3555,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",30, +1,6,github_org/devlake-jenkins/feature-2#1,"Declarative: Checkout SCM",,"SUCCESS",1711277142703,2244,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",31, +1,13,github_org/devlake-jenkins/feature-2#1,"checkout",,"SUCCESS",1711277144974,5541,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",32, +1,18,github_org/devlake-jenkins/feature-2#1,"build",,"SUCCESS",1711277150529,10224,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",33, +1,23,github_org/devlake-jenkins/feature-2#1,"test",,"SUCCESS",1711277160766,12449,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",34, +1,28,github_org/devlake-jenkins/feature-2#1,"deploy",,"SUCCESS",1711277173228,3567,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",35, +1,6,github_org/devlake-jenkins/feature-2#2,"Declarative: Checkout SCM",,"SUCCESS",1711277157667,2273,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",36, +1,13,github_org/devlake-jenkins/feature-2#2,"checkout",,"SUCCESS",1711277159966,5534,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",37, +1,18,github_org/devlake-jenkins/feature-2#2,"build",,"SUCCESS",1711277165515,10220,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",38, +1,23,github_org/devlake-jenkins/feature-2#2,"test",,"SUCCESS",1711277175748,12445,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",39, +1,28,github_org/devlake-jenkins/feature-2#2,"deploy",,"SUCCESS",1711277188207,3549,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",40, +1,6,github_org/devlake-jenkins/feature-2#3,"Declarative: Checkout SCM",,"SUCCESS",1711277192935,2285,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",41, +1,15,github_org/devlake-jenkins/feature-2#3,"checkout",,"SUCCESS",1711277195262,5526,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",42, +1,20,github_org/devlake-jenkins/feature-2#3,"build",,"SUCCESS",1711277200803,10214,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",43, +1,25,github_org/devlake-jenkins/feature-2#3,"test",,"SUCCESS",1711277211031,12456,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",44, +1,30,github_org/devlake-jenkins/feature-2#3,"deploy",,"SUCCESS",1711277223500,3557,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",45, +1,6,github_org/devlake-jenkins/feature-2#6,"Declarative: Checkout SCM",,"SUCCESS",1711277457972,2419,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",46, +1,15,github_org/devlake-jenkins/feature-2#6,"checkout",,"ABORTED",1711277460433,2305,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",47, +1,20,github_org/devlake-jenkins/feature-2#6,"build",,"ABORTED",1711277462749,38,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",48, +1,24,github_org/devlake-jenkins/feature-2#6,"test",,"ABORTED",1711277462795,16,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",49, +1,28,github_org/devlake-jenkins/feature-2#6,"deploy",,"ABORTED",1711277462819,16,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",50, +1,6,github_org/devlake-jenkins/main#1,"Declarative: Checkout SCM",,"SUCCESS",1711275817797,2453,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",51, +1,13,github_org/devlake-jenkins/main#1,"checkout",,"SUCCESS",1711275820311,5546,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",52, +1,18,github_org/devlake-jenkins/main#1,"build",,"SUCCESS",1711275825866,10227,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",53, +1,23,github_org/devlake-jenkins/main#1,"test",,"SUCCESS",1711275836110,12467,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",54, +1,28,github_org/devlake-jenkins/main#1,"deploy",,"SUCCESS",1711275848591,3557,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",55, +1,6,github_org/devlake-jenkins/main#2,"Declarative: Checkout SCM",,"SUCCESS",1711277302838,2299,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",1, +1,13,github_org/devlake-jenkins/main#2,"checkout",,"SUCCESS",1711277305172,5526,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",2, +1,18,github_org/devlake-jenkins/main#2,"build",,"SUCCESS",1711277310709,10223,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",3, +1,23,github_org/devlake-jenkins/main#2,"test",,"SUCCESS",1711277320947,12470,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",4, +1,28,github_org/devlake-jenkins/main#2,"deploy",,"SUCCESS",1711277333432,3552,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",5, +1,6,github_org/devlake-jenkins/main#3,"Declarative: Checkout SCM",,"SUCCESS",1711277503096,2390,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",56, +1,13,github_org/devlake-jenkins/main#3,"checkout",,"SUCCESS",1711277505517,5537,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",57, +1,18,github_org/devlake-jenkins/main#3,"build",,"SUCCESS",1711277511068,10220,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",58, +1,23,github_org/devlake-jenkins/main#3,"test",,"SUCCESS",1711277521301,12462,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",59, +1,28,github_org/devlake-jenkins/main#3,"deploy",,"SUCCESS",1711277533776,3546,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",60, +1,6,github_org/devlake-jenkins/main#4,"Declarative: Checkout SCM",,"SUCCESS",1711277553013,2231,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",61, +1,13,github_org/devlake-jenkins/main#4,"checkout",,"SUCCESS",1711277555275,5511,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",62, +1,18,github_org/devlake-jenkins/main#4,"build",,"SUCCESS",1711277560796,5531,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",63, +1,23,github_org/devlake-jenkins/main#4,"test",,"SUCCESS",1711277566345,12433,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",64, +1,28,github_org/devlake-jenkins/main#4,"deploy",,"SUCCESS",1711277578791,3551,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",65, +1,6,github_org/devlake-jenkins/PR-2#1,"Declarative: Checkout SCM",,"SUCCESS",1711277513092,3894,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",6, +1,15,github_org/devlake-jenkins/PR-2#1,"checkout",,"ABORTED",1711277517022,2196,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",7, +1,20,github_org/devlake-jenkins/PR-2#1,"build",,"ABORTED",1711277519230,18,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",8, +1,24,github_org/devlake-jenkins/PR-2#1,"test",,"ABORTED",1711277519255,13,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",9, +1,28,github_org/devlake-jenkins/PR-2#1,"deploy",,"ABORTED",1711277519275,11,0,,"{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_stages",10, diff --git a/backend/plugins/jenkins/e2e/snapshot_tables/cicd_pipeline_commits_multibranch.csv b/backend/plugins/jenkins/e2e/snapshot_tables/cicd_pipeline_commits_multibranch.csv index 8210ba2827e..934da5a2921 100644 --- a/backend/plugins/jenkins/e2e/snapshot_tables/cicd_pipeline_commits_multibranch.csv +++ b/backend/plugins/jenkins/e2e/snapshot_tables/cicd_pipeline_commits_multibranch.csv @@ -1,14 +1,14 @@ pipeline_id,commit_sha,repo_id,repo_url,branch,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#1","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",6,"","aba54481a73573c0587f26fbd4c9788eb2bf2398","PR-2","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#2","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",5,"","49359d217ea617c7e4771235979b56015172ba6c","PR-2","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#1","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",9,"","87f0f9ee7c305c561c96f66ed8c71c85df4b940f","feature-1","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#2","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",8,"","eae3667426e1da0d8cab523e372e6771a39b16a7","feature-1","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#3","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",7,"","3ff14f4a781018e6e800ded3a5ac95fa2f9bb26f","feature-1","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#1","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",15,"","2578423ba5c348fb9948279f3ea64ed650fecd8a","feature-2","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#2","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",14,"","2578423ba5c348fb9948279f3ea64ed650fecd8a","feature-2","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#3","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",13,"","881b398774e020772bca7fdd7fdc60e7250f53ef","feature-2","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#6","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",10,"","aba54481a73573c0587f26fbd4c9788eb2bf2398","feature-2","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#1","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",4,"","87f0f9ee7c305c561c96f66ed8c71c85df4b940f","main","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#2","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",3,"","f521ff9c806e74b9100c8fc87d07ac504f828f93","main","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#3","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",2,"","78b8e3a2029f991982039e4ed6d7b1f9c6670497","main","git@github.com:gustavobini/devlake-jenkins.git","","" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#4","2024-03-24 11:01:26.227","2024-03-24 11:01:26.227","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",1,"","c83ae02076382670e286ac2474b7a7327fc28cde","main","git@github.com:gustavobini/devlake-jenkins.git","","" +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#1","aba54481a73573c0587f26fbd4c9788eb2bf2398",,"git@github.com:gustavobini/devlake-jenkins.git","PR-2","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",6, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#2","49359d217ea617c7e4771235979b56015172ba6c",,"git@github.com:gustavobini/devlake-jenkins.git","PR-2","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",5, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#1","87f0f9ee7c305c561c96f66ed8c71c85df4b940f",,"git@github.com:gustavobini/devlake-jenkins.git","feature-1","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",9, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#2","eae3667426e1da0d8cab523e372e6771a39b16a7",,"git@github.com:gustavobini/devlake-jenkins.git","feature-1","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",8, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#3","3ff14f4a781018e6e800ded3a5ac95fa2f9bb26f",,"git@github.com:gustavobini/devlake-jenkins.git","feature-1","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",7, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#1","2578423ba5c348fb9948279f3ea64ed650fecd8a",,"git@github.com:gustavobini/devlake-jenkins.git","feature-2","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",15, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#2","2578423ba5c348fb9948279f3ea64ed650fecd8a",,"git@github.com:gustavobini/devlake-jenkins.git","feature-2","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",14, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#3","881b398774e020772bca7fdd7fdc60e7250f53ef",,"git@github.com:gustavobini/devlake-jenkins.git","feature-2","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",13, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#6","aba54481a73573c0587f26fbd4c9788eb2bf2398",,"git@github.com:gustavobini/devlake-jenkins.git","feature-2","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",10, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#1","87f0f9ee7c305c561c96f66ed8c71c85df4b940f",,"git@github.com:gustavobini/devlake-jenkins.git","main","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",4, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#2","f521ff9c806e74b9100c8fc87d07ac504f828f93",,"git@github.com:gustavobini/devlake-jenkins.git","main","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",3, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#3","78b8e3a2029f991982039e4ed6d7b1f9c6670497",,"git@github.com:gustavobini/devlake-jenkins.git","main","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",2, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#4","c83ae02076382670e286ac2474b7a7327fc28cde",,"git@github.com:gustavobini/devlake-jenkins.git","main","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",1, diff --git a/backend/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines_multibranch.csv b/backend/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines_multibranch.csv index 8b6fc954f55..97f54305484 100644 --- a/backend/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines_multibranch.csv +++ b/backend/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines_multibranch.csv @@ -1,16 +1,16 @@ -id,name,result,status,original_result,original_status,type,duration_sec,environment,created_date,finished_date,cicd_scope_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#1","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",6,"","FAILURE","ABORTED","DONE","false","","2024-03-24 10:51:51.000",\N,\N,"2024-03-24 10:51:51.000","2024-03-24 10:51:58.390",7.39,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/PR-2#1" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#2","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",5,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:52:21.000",\N,\N,"2024-03-24 10:52:21.000","2024-03-24 10:52:51.086",30.086,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/PR-2#2" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#1","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",9,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:23:35.000",\N,\N,"2024-03-24 10:23:35.000","2024-03-24 10:24:14.545",39.545,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/feature-1#1" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#2","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",8,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:32:06.000",\N,\N,"2024-03-24 10:32:06.000","2024-03-24 10:32:41.351",35.351,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/feature-1#2" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#3","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",7,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:44:31.000",\N,\N,"2024-03-24 10:44:31.000","2024-03-24 10:45:06.354",35.354,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/feature-1#3" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#1","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",15,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:45:41.000",\N,\N,"2024-03-24 10:45:41.000","2024-03-24 10:46:16.206",35.206,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/feature-2#1" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#2","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",14,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:45:56.000",\N,\N,"2024-03-24 10:45:56.000","2024-03-24 10:46:31.162",35.162,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/feature-2#2" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#3","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",13,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:46:31.000",\N,\N,"2024-03-24 10:46:31.000","2024-03-24 10:47:06.435",35.435,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/feature-2#3" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#4","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",12,"","FAILURE","FAILURE","DONE","false","","2024-03-24 10:47:41.000",\N,\N,"2024-03-24 10:47:41.000","2024-03-24 10:47:41.976",0.976,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/feature-2#4" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#5","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",11,"","FAILURE","FAILURE","DONE","false","","2024-03-24 10:49:31.000",\N,\N,"2024-03-24 10:49:31.000","2024-03-24 10:49:32.098",1.098,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/feature-2#5" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#6","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",10,"","FAILURE","ABORTED","DONE","false","","2024-03-24 10:50:56.000",\N,\N,"2024-03-24 10:50:56.000","2024-03-24 10:51:01.993",5.993,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/feature-2#6" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#1","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",4,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:23:35.000",\N,\N,"2024-03-24 10:23:35.000","2024-03-24 10:24:11.568",36.568,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/main#1" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#2","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",3,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:48:21.000",\N,\N,"2024-03-24 10:48:21.000","2024-03-24 10:48:56.260",35.26,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/main#2" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#3","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",2,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:51:41.000",\N,\N,"2024-03-24 10:51:41.000","2024-03-24 10:52:16.435",35.435,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/main#3" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#4","2024-03-24 11:01:26.218","2024-03-24 11:01:26.218","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",1,"","SUCCESS","SUCCESS","DONE","false","","2024-03-24 10:52:31.000",\N,\N,"2024-03-24 10:52:31.000","2024-03-24 10:53:01.415",30.415,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","github_org/devlake-jenkins/main#4" +id,name,result,original_result,status,original_status,type,duration_sec,environment,created_date,finished_date,cicd_scope_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#1","github_org/devlake-jenkins/PR-2#1","FAILURE","ABORTED","DONE","false","",7.39,"PRODUCTION","2024-03-24T10:51:51.000+00:00","2024-03-24T10:51:58.390+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",6, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#2","github_org/devlake-jenkins/PR-2#2","SUCCESS","SUCCESS","DONE","false","",30.086,"PRODUCTION","2024-03-24T10:52:21.000+00:00","2024-03-24T10:52:51.086+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",5, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#1","github_org/devlake-jenkins/feature-1#1","SUCCESS","SUCCESS","DONE","false","",39.545,"PRODUCTION","2024-03-24T10:23:35.000+00:00","2024-03-24T10:24:14.545+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",9, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#2","github_org/devlake-jenkins/feature-1#2","SUCCESS","SUCCESS","DONE","false","",35.351,"PRODUCTION","2024-03-24T10:32:06.000+00:00","2024-03-24T10:32:41.351+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",8, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#3","github_org/devlake-jenkins/feature-1#3","SUCCESS","SUCCESS","DONE","false","",35.354,"PRODUCTION","2024-03-24T10:44:31.000+00:00","2024-03-24T10:45:06.354+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",7, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#1","github_org/devlake-jenkins/feature-2#1","SUCCESS","SUCCESS","DONE","false","",35.206,"PRODUCTION","2024-03-24T10:45:41.000+00:00","2024-03-24T10:46:16.206+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",15, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#2","github_org/devlake-jenkins/feature-2#2","SUCCESS","SUCCESS","DONE","false","",35.162,"PRODUCTION","2024-03-24T10:45:56.000+00:00","2024-03-24T10:46:31.162+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",14, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#3","github_org/devlake-jenkins/feature-2#3","SUCCESS","SUCCESS","DONE","false","",35.435,"PRODUCTION","2024-03-24T10:46:31.000+00:00","2024-03-24T10:47:06.435+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",13, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#4","github_org/devlake-jenkins/feature-2#4","FAILURE","FAILURE","DONE","false","",0.976,"PRODUCTION","2024-03-24T10:47:41.000+00:00","2024-03-24T10:47:41.976+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",12, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#5","github_org/devlake-jenkins/feature-2#5","FAILURE","FAILURE","DONE","false","",1.098,"PRODUCTION","2024-03-24T10:49:31.000+00:00","2024-03-24T10:49:32.098+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",11, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#6","github_org/devlake-jenkins/feature-2#6","FAILURE","ABORTED","DONE","false","",5.993,"PRODUCTION","2024-03-24T10:50:56.000+00:00","2024-03-24T10:51:01.993+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",10, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#1","github_org/devlake-jenkins/main#1","SUCCESS","SUCCESS","DONE","false","",36.568,"PRODUCTION","2024-03-24T10:23:35.000+00:00","2024-03-24T10:24:11.568+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",4, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#2","github_org/devlake-jenkins/main#2","SUCCESS","SUCCESS","DONE","false","",35.26,"PRODUCTION","2024-03-24T10:48:21.000+00:00","2024-03-24T10:48:56.260+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",3, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#3","github_org/devlake-jenkins/main#3","SUCCESS","SUCCESS","DONE","false","",35.435,"PRODUCTION","2024-03-24T10:51:41.000+00:00","2024-03-24T10:52:16.435+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",2, +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#4","github_org/devlake-jenkins/main#4","SUCCESS","SUCCESS","DONE","false","",30.415,"PRODUCTION","2024-03-24T10:52:31.000+00:00","2024-03-24T10:53:01.415+00:00","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",1, diff --git a/backend/plugins/jenkins/e2e/snapshot_tables/cicd_tasks_multibranch.csv b/backend/plugins/jenkins/e2e/snapshot_tables/cicd_tasks_multibranch.csv index 998fd1ebb0a..a27a8bdb09e 100644 --- a/backend/plugins/jenkins/e2e/snapshot_tables/cicd_tasks_multibranch.csv +++ b/backend/plugins/jenkins/e2e/snapshot_tables/cicd_tasks_multibranch.csv @@ -1,68 +1,3 @@ -id,name,pipeline_id,result,status,original_result,original_status,type,environment,duration_sec,started_date,finished_date,cicd_scope_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#4","2024-03-24 11:01:26.219","2024-03-24 11:01:26.219","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",12,"","github_org/devlake-jenkins","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#4","FAILURE","FAILURE","DONE","false","","2024-03-24 10:47:41.000",\N,\N,"2024-03-24 10:47:41.000","2024-03-24 10:47:41.976",0.976,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#5","2024-03-24 11:01:26.219","2024-03-24 11:01:26.219","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_builds",11,"","github_org/devlake-jenkins","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#5","FAILURE","FAILURE","DONE","false","","2024-03-24 10:49:31.000",\N,\N,"2024-03-24 10:49:31.000","2024-03-24 10:49:32.098",1.098,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/PR-2#1:15","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",7,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#1","FAILURE","ABORTED","OTHER","ABORTED","","2024-03-24 10:51:57.000",\N,\N,"2024-03-24 10:51:57.000","2024-03-24 10:51:59.218",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/PR-2#1:20","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",8,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#1","FAILURE","ABORTED","OTHER","ABORTED","","2024-03-24 10:51:59.000",\N,\N,"2024-03-24 10:51:59.000","2024-03-24 10:51:59.248",0,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/PR-2#1:24","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",9,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#1","FAILURE","ABORTED","OTHER","ABORTED","","2024-03-24 10:51:59.000",\N,\N,"2024-03-24 10:51:59.000","2024-03-24 10:51:59.268",0,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/PR-2#1:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",10,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#1","FAILURE","ABORTED","OTHER","ABORTED","","2024-03-24 10:51:59.000",\N,\N,"2024-03-24 10:51:59.000","2024-03-24 10:51:59.286",0,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/PR-2#1:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",6,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#1","FAILURE","ABORTED","DONE","SUCCESS","","2024-03-24 10:51:53.000",\N,\N,"2024-03-24 10:51:53.000","2024-03-24 10:51:56.986",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/PR-2#2:13","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",12,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:24.000",\N,\N,"2024-03-24 10:52:24.000","2024-03-24 10:52:30.445",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/PR-2#2:18","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",13,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:30.000",\N,\N,"2024-03-24 10:52:30.000","2024-03-24 10:52:35.983",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/PR-2#2:23","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",14,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:35.000",\N,\N,"2024-03-24 10:52:35.000","2024-03-24 10:52:48.441",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/PR-2#2:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",15,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:48.000",\N,\N,"2024-03-24 10:52:48.000","2024-03-24 10:52:52.010",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/PR-2#2:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",11,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/PR-2#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:23.000",\N,\N,"2024-03-24 10:52:23.000","2024-03-24 10:52:24.906",1,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#1:13","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",17,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:23:43.000",\N,\N,"2024-03-24 10:23:43.000","2024-03-24 10:23:48.866",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#1:18","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",18,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:23:48.000",\N,\N,"2024-03-24 10:23:48.000","2024-03-24 10:23:59.114",10,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#1:23","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",19,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:23:59.000",\N,\N,"2024-03-24 10:23:59.000","2024-03-24 10:24:11.574",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#1:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",20,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:24:11.000",\N,\N,"2024-03-24 10:24:11.000","2024-03-24 10:24:15.132",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#1:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",16,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:23:37.000",\N,\N,"2024-03-24 10:23:37.000","2024-03-24 10:23:43.298",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#2:13","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",22,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:32:09.000",\N,\N,"2024-03-24 10:32:09.000","2024-03-24 10:32:15.047",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#2:18","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",23,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:32:15.000",\N,\N,"2024-03-24 10:32:15.000","2024-03-24 10:32:25.293",10,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#2:23","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",24,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:32:25.000",\N,\N,"2024-03-24 10:32:25.000","2024-03-24 10:32:37.773",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#2:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",25,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:32:37.000",\N,\N,"2024-03-24 10:32:37.000","2024-03-24 10:32:41.358",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#2:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",21,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:32:07.000",\N,\N,"2024-03-24 10:32:07.000","2024-03-24 10:32:09.472",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#3:13","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",27,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:44:35.000",\N,\N,"2024-03-24 10:44:35.000","2024-03-24 10:44:40.646",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#3:18","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",28,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:44:40.000",\N,\N,"2024-03-24 10:44:40.000","2024-03-24 10:44:50.880",10,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#3:23","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",29,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:44:50.000",\N,\N,"2024-03-24 10:44:50.000","2024-03-24 10:45:03.336",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#3:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",30,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:45:03.000",\N,\N,"2024-03-24 10:45:03.000","2024-03-24 10:45:06.903",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-1#3:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",26,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-1#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:44:32.000",\N,\N,"2024-03-24 10:44:32.000","2024-03-24 10:44:35.072",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#1:13","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",32,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:45:44.000",\N,\N,"2024-03-24 10:45:44.000","2024-03-24 10:45:50.515",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#1:18","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",33,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:45:50.000",\N,\N,"2024-03-24 10:45:50.000","2024-03-24 10:46:00.753",10,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#1:23","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",34,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:46:00.000",\N,\N,"2024-03-24 10:46:00.000","2024-03-24 10:46:13.215",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#1:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",35,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:46:13.000",\N,\N,"2024-03-24 10:46:13.000","2024-03-24 10:46:16.795",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#1:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",31,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:45:42.000",\N,\N,"2024-03-24 10:45:42.000","2024-03-24 10:45:44.947",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#2:13","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",37,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:45:59.000",\N,\N,"2024-03-24 10:45:59.000","2024-03-24 10:46:05.500",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#2:18","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",38,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:46:05.000",\N,\N,"2024-03-24 10:46:05.000","2024-03-24 10:46:15.735",10,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#2:23","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",39,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:46:15.000",\N,\N,"2024-03-24 10:46:15.000","2024-03-24 10:46:28.193",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#2:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",40,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:46:28.000",\N,\N,"2024-03-24 10:46:28.000","2024-03-24 10:46:31.756",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#2:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",36,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:45:57.000",\N,\N,"2024-03-24 10:45:57.000","2024-03-24 10:45:59.940",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#3:15","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",42,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:46:35.000",\N,\N,"2024-03-24 10:46:35.000","2024-03-24 10:46:40.788",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#3:20","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",43,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:46:40.000",\N,\N,"2024-03-24 10:46:40.000","2024-03-24 10:46:51.017",10,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#3:25","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",44,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:46:51.000",\N,\N,"2024-03-24 10:46:51.000","2024-03-24 10:47:03.487",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#3:30","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",45,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:47:03.000",\N,\N,"2024-03-24 10:47:03.000","2024-03-24 10:47:07.057",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#3:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",41,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:46:32.000",\N,\N,"2024-03-24 10:46:32.000","2024-03-24 10:46:35.220",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#6:15","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",47,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#6","FAILURE","ABORTED","OTHER","ABORTED","","2024-03-24 10:51:00.000",\N,\N,"2024-03-24 10:51:00.000","2024-03-24 10:51:02.738",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#6:20","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",48,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#6","FAILURE","ABORTED","OTHER","ABORTED","","2024-03-24 10:51:02.000",\N,\N,"2024-03-24 10:51:02.000","2024-03-24 10:51:02.787",0,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#6:24","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",49,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#6","FAILURE","ABORTED","OTHER","ABORTED","","2024-03-24 10:51:02.000",\N,\N,"2024-03-24 10:51:02.000","2024-03-24 10:51:02.811",0,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#6:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",50,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#6","FAILURE","ABORTED","OTHER","ABORTED","","2024-03-24 10:51:02.000",\N,\N,"2024-03-24 10:51:02.000","2024-03-24 10:51:02.835",0,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/feature-2#6:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",46,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#6","FAILURE","ABORTED","DONE","SUCCESS","","2024-03-24 10:50:57.000",\N,\N,"2024-03-24 10:50:57.000","2024-03-24 10:51:00.391",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#1:13","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",52,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:23:40.000",\N,\N,"2024-03-24 10:23:40.000","2024-03-24 10:23:45.857",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#1:18","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",53,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:23:45.000",\N,\N,"2024-03-24 10:23:45.000","2024-03-24 10:23:56.093",10,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#1:23","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",54,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:23:56.000",\N,\N,"2024-03-24 10:23:56.000","2024-03-24 10:24:08.577",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#1:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",55,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:24:08.000",\N,\N,"2024-03-24 10:24:08.000","2024-03-24 10:24:12.148",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#1:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",51,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#1","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:23:37.000",\N,\N,"2024-03-24 10:23:37.000","2024-03-24 10:23:40.250",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#2:13","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",2,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:48:25.000",\N,\N,"2024-03-24 10:48:25.000","2024-03-24 10:48:30.698",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#2:18","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",3,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:48:30.000",\N,\N,"2024-03-24 10:48:30.000","2024-03-24 10:48:40.932",10,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#2:23","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",4,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:48:40.000",\N,\N,"2024-03-24 10:48:40.000","2024-03-24 10:48:53.417",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#2:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",5,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:48:53.000",\N,\N,"2024-03-24 10:48:53.000","2024-03-24 10:48:56.984",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#2:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",1,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#2","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:48:22.000",\N,\N,"2024-03-24 10:48:22.000","2024-03-24 10:48:25.137",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#3:13","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",57,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:51:45.000",\N,\N,"2024-03-24 10:51:45.000","2024-03-24 10:51:51.054",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#3:18","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",58,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:51:51.000",\N,\N,"2024-03-24 10:51:51.000","2024-03-24 10:52:01.288",10,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#3:23","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",59,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:01.000",\N,\N,"2024-03-24 10:52:01.000","2024-03-24 10:52:13.763",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#3:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",60,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:13.000",\N,\N,"2024-03-24 10:52:13.000","2024-03-24 10:52:17.322",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#3:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",56,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#3","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:51:43.000",\N,\N,"2024-03-24 10:51:43.000","2024-03-24 10:51:45.486",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#4:13","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",62,"","checkout","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#4","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:35.000",\N,\N,"2024-03-24 10:52:35.000","2024-03-24 10:52:40.786",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#4:18","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",63,"","build","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#4","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:40.000",\N,\N,"2024-03-24 10:52:40.000","2024-03-24 10:52:46.327",5,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#4:23","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",64,"","test","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#4","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:46.000",\N,\N,"2024-03-24 10:52:46.000","2024-03-24 10:52:58.778",12,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#4:28","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",65,"","deploy","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#4","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:58.000",\N,\N,"2024-03-24 10:52:58.000","2024-03-24 10:53:02.342",3,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" -"jenkins:JenkinsStage:1:github_org/devlake-jenkins/main#4:6","2024-03-24 11:01:26.222","2024-03-24 11:01:26.222","{\"ConnectionId\":1,\"FullName\":\"github_org/devlake-jenkins\"}","_raw_jenkins_api_stages",61,"","Declarative: Checkout SCM","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/main#4","SUCCESS","SUCCESS","DONE","SUCCESS","","2024-03-24 10:52:33.000",\N,\N,"2024-03-24 10:52:33.000","2024-03-24 10:52:35.244",2,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins" +id,name,pipeline_id,result,original_result,status,original_status,type,started_date,finished_date,duration_sec,environment,cicd_scope_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#4","github_org/devlake-jenkins","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#4","FAILURE","FAILURE","DONE","false","","2024-03-24T10:47:41.000+00:00","2024-03-24T10:47:41.976+00:00",0.976,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",12,"" +"jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#5","github_org/devlake-jenkins","jenkins:JenkinsBuild:1:github_org/devlake-jenkins/feature-2#5","FAILURE","FAILURE","DONE","false","","2024-03-24T10:49:31.000+00:00","2024-03-24T10:49:32.098+00:00",1.098,"PRODUCTION","jenkins:JenkinsJob:1:github_org/devlake-jenkins","{""ConnectionId"":1,""FullName"":""github_org/devlake-jenkins""}","_raw_jenkins_api_builds",11,"" \ No newline at end of file diff --git a/backend/plugins/jenkins/tasks/build_extractor.go b/backend/plugins/jenkins/tasks/build_extractor.go index a512843e3b2..d039034ab5a 100644 --- a/backend/plugins/jenkins/tasks/build_extractor.go +++ b/backend/plugins/jenkins/tasks/build_extractor.go @@ -61,7 +61,7 @@ func ExtractApiBuilds(taskCtx plugin.SubTaskContext) errors.Error { input := &SimpleJob{} err1 := json.Unmarshal(row.Input, input) - if err1 == nil && input.Class == WORKFLOW_MULTI_BRANCH_PROJECT { + if err1 == nil && input.Class == WORKFLOW_JOB { // For jobs from multi-branch workflow, the job name and path must come from the input, // otherwise it will be set to the multi-branch workflow name and path jobName = input.Name From e24102f2964c2035fff948a736a97108d000ba33 Mon Sep 17 00:00:00 2001 From: Klesh Wong Date: Thu, 16 May 2024 16:36:21 +0800 Subject: [PATCH 15/15] fix: sonarqube nextPageToken always empty (#7477) --- backend/plugins/sonarqube/api/remote_api.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backend/plugins/sonarqube/api/remote_api.go b/backend/plugins/sonarqube/api/remote_api.go index 167925a7f3f..704cdabf5e7 100644 --- a/backend/plugins/sonarqube/api/remote_api.go +++ b/backend/plugins/sonarqube/api/remote_api.go @@ -82,6 +82,13 @@ func querySonarqubeProjects( }) } + if resBody.Paging.Total > resBody.Paging.PageIndex*resBody.Paging.PageSize { + nextPage = &SonarqubeRemotePagination{ + Page: resBody.Paging.PageIndex + 1, + PageSize: resBody.Paging.PageSize, + } + } + return }