You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by kl...@apache.org on 2024/04/28 04:03:31 UTC

(incubator-devlake) branch main updated: fix: make FinishTime optional for unfinished builds (#7401)

This is an automated email from the ASF dual-hosted git repository.

klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 9542510e3 fix: make FinishTime optional for unfinished builds (#7401)
9542510e3 is described below

commit 9542510e35aaf69ff7e580492657a0f8fb2d55a7
Author: Markus Braunbeck <32...@users.noreply.github.com>
AuthorDate: Sun Apr 28 06:03:27 2024 +0200

    fix: make FinishTime optional for unfinished builds (#7401)
    
    Builds in progress do not have a finish time set, causing an internal server error when the plugin attempts to write "0000-00-00" into the database. To address this issue, the FinishTime field of the Build API response struct is changed from `time.Time` to a pointer value `*time.Time`.
---
 .../e2e/raw_tables/_raw_azuredevops_go_api_builds.csv    |  5 ++++-
 .../_raw_azuredevops_go_api_timeline_records.csv         |  6 +++++-
 .../e2e/snapshot_tables/_tool_azuredevops_go_builds.csv  |  5 ++++-
 .../_tool_azuredevops_go_timeline_records.csv            |  4 ++++
 .../e2e/snapshot_tables/cicd_pipeline_commits.csv        |  5 ++++-
 .../e2e/snapshot_tables/cicd_pipelines.csv               |  5 ++++-
 .../azuredevops_go/e2e/snapshot_tables/cicd_tasks.csv    |  4 ++++
 backend/plugins/azuredevops_go/models/build.go           | 16 ++++++++--------
 .../azuredevops_go/tasks/ci_cd_build_converter.go        |  5 ++++-
 .../azuredevops_go/tasks/ci_cd_build_extractor.go        |  6 +++---
 10 files changed, 44 insertions(+), 17 deletions(-)

diff --git a/backend/plugins/azuredevops_go/e2e/raw_tables/_raw_azuredevops_go_api_builds.csv b/backend/plugins/azuredevops_go/e2e/raw_tables/_raw_azuredevops_go_api_builds.csv
index 501cb91c4..89a5511ea 100644
--- a/backend/plugins/azuredevops_go/e2e/raw_tables/_raw_azuredevops_go_api_builds.csv
+++ b/backend/plugins/azuredevops_go/e2e/raw_tables/_raw_azuredevops_go_api_builds.csv
@@ -2,4 +2,7 @@ id,params,data,url,input,created_at
 1,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""properties"":{},""tags"":[],""validationResults"":[],""plans"":[{""planId"":""c672e778-a9e9-444a-b1e0-92f839c061e0""}],""triggerInfo"":{},""id"":12,""buildNumber"":""azure-job"",""status"":""completed"",""result"":""succeeded"",""queueTime"":""2023-02-25T06:22:21.2237625Z"",""startTime"":""2023-02-25T06:22:32.8097789Z"",""finishTime"":""2023-02-25T06:23:04.006 [...]
 2,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""properties"":{},""tags"":[""first-tag"",""second-tag""],""validationResults"":[],""plans"":[{""planId"":""c672e778-a9e9-444a-b1e0-92f839c061e0""}],""triggerInfo"":{},""id"":13,""buildNumber"":""azure-job"",""status"":""completed"",""result"":""succeeded"",""queueTime"":""2023-02-25T06:22:21.2237625Z"",""startTime"":""2023-02-25T06:22:32.8097789Z"",""finishTime [...]
 3,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""properties"":{},""tags"":[""prod"",""deploy""],""validationResults"":[],""plans"":[{""planId"":""c672e778-a9e9-444a-b1e0-92f839c061e0""}],""triggerInfo"":{},""id"":14,""buildNumber"":""azure-job"",""status"":""completed"",""result"":""succeeded"",""queueTime"":""2023-02-25T06:22:21.2237625Z"",""startTime"":""2023-02-25T06:22:32.8097789Z"",""finishTime"":""2023 [...]
-4,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""properties"":{},""tags"":[""d""],""validationResults"":[],""plans"":[{""planId"":""c672e778-a9e9-444a-b1e0-92f839c061e0""}],""triggerInfo"":{},""id"":15,""buildNumber"":""azure-job"",""status"":""completed"",""result"":""succeeded"",""queueTime"":""2023-02-25T06:22:21.2237625Z"",""startTime"":""2023-02-25T06:22:32.8097789Z"",""finishTime"":""2023-02-25T06:23:0 [...]
\ No newline at end of file
+4,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""properties"":{},""tags"":[""d""],""validationResults"":[],""plans"":[{""planId"":""c672e778-a9e9-444a-b1e0-92f839c061e0""}],""triggerInfo"":{},""id"":15,""buildNumber"":""azure-job"",""status"":""completed"",""result"":""succeeded"",""queueTime"":""2023-02-25T06:22:21.2237625Z"",""startTime"":""2023-02-25T06:22:32.8097789Z"",""finishTime"":""2023-02-25T06:23:0 [...]
+5,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""properties"":{},""tags"":[""d""],""validationResults"":[],""plans"":[{""planId"":""c672e778-a9e9-444a-b1e0-92f839c061e0""}],""triggerInfo"":{},""id"":16,""buildNumber"":""azure-job"",""status"":""inProgress"",""queueTime"":""2023-02-25T06:22:21.2237625Z"",""startTime"":""2023-02-25T06:22:32.8097789Z"",""url"":""https://dev.azure.com/johndoe/0d50ba13-f9ad-49b0- [...]
+6,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""properties"":{},""tags"":[""d""],""validationResults"":[],""plans"":[{""planId"":""c672e778-a9e9-444a-b1e0-92f839c061e0""}],""triggerInfo"":{},""id"":17,""buildNumber"":""azure-job"",""status"":""notStarted"",""queueTime"":""2023-02-25T06:22:21.2237625Z"",""url"":""https://dev.azure.com/johndoe/0d50ba13-f9ad-49b0-9b21-d29eda50ca33/_apis/build/Builds/12"",""def [...]
+7,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""properties"":{},""tags"":[""d""],""validationResults"":[],""plans"":[{""planId"":""c672e778-a9e9-444a-b1e0-92f839c061e0""}],""triggerInfo"":{},""id"":18,""buildNumber"":""azure-job"",""status"":""completed"",""result"": ""canceled"",""queueTime"":""2023-02-25T06:22:21.2237625Z"",""startTime"":""2023-02-25T06:22:25.2237625Z"",""finishTime"":""2023-02-25T06:22:3 [...]
\ No newline at end of file
diff --git a/backend/plugins/azuredevops_go/e2e/raw_tables/_raw_azuredevops_go_api_timeline_records.csv b/backend/plugins/azuredevops_go/e2e/raw_tables/_raw_azuredevops_go_api_timeline_records.csv
index 75e3977d0..21414b025 100644
--- a/backend/plugins/azuredevops_go/e2e/raw_tables/_raw_azuredevops_go_api_timeline_records.csv
+++ b/backend/plugins/azuredevops_go/e2e/raw_tables/_raw_azuredevops_go_api_timeline_records.csv
@@ -1,2 +1,6 @@
 id,params,data,url,input,created_at
-1,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""previousAttempts"":[],""id"":""cfa20e98-6997-523c-4233-f0a7302c929f"",""parentId"":""9ecf18fe-987d-5811-7c63-300aecae35da"",""type"":""Job"",""name"":""deploy production"",""startTime"":""2023-02-25T06:22:36.8066667Z"",""finishTime"":""2023-02-25T06:22:43.2333333Z"",""currentOperation"":null,""percentComplete"":null,""state"":""completed"",""result"":""succeed [...]
\ No newline at end of file
+1,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""previousAttempts"":[],""id"":""cfa20e98-6997-523c-4233-f0a7302c929f"",""parentId"":""9ecf18fe-987d-5811-7c63-300aecae35da"",""type"":""Job"",""name"":""deploy production"",""startTime"":""2023-02-25T06:22:36.8066667Z"",""finishTime"":""2023-02-25T06:22:43.2333333Z"",""currentOperation"":null,""percentComplete"":null,""state"":""completed"",""result"":""succeed [...]
+2,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""previousAttempts"":[],""id"":""6a89fe25-b324-470d-9c9d-d2d889ab7965"",""parentId"":null,""type"":""type"",""name"":""name"",""startTime"":null,""finishTime"":null,""currentOperation"":null,""percentComplete"":null,""state"":""pending"",""result"":null,""resultCode"":null,""changeId"":1,""lastModified"":""0001-01-01T00:00:00"",""workerName"":null,""order"":1,"" [...]
+3,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""previousAttempts"":[],""id"":""20193cff-ae1b-4ec5-8bef-d1565901932d"",""parentId"":""6a89fe25-b324-470d-9c9d-d2d889ab7965"",""type"":""type"",""name"":""name"",""startTime"":""2024-04-27T16:39:12.8844213Z"",""finishTime"":""2024-04-27T16:39:12.8844213Z"",""currentOperation"":null,""percentComplete"":null,""state"":""completed"",""result"":""succeeded"",""resul [...]
+4,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""previousAttempts"":[],""id"":""c3d72b53-372e-4b2b-8876-fb1021bbbe5e"",""parentId"":""6a89fe25-b324-470d-9c9d-d2d889ab7965"",""type"":""type"",""name"":""name"",""startTime"":null,""finishTime"":null,""currentOperation"":null,""percentComplete"":null,""state"":""pending"",""result"":null,""resultCode"":null,""changeId"":3,""lastModified"":""0001-01-01T00:00:00" [...]
+5,"{""OrganizationId"":""johndoe"",""RepositoryId"":""0d50ba13-f9ad-49b0-9b21-d29eda50ca33"",""ProjectId"":""test-project""}","{""previousAttempts"":[],""id"":""02645afb-a196-4c8b-bb38-a83bf68d4729"",""parentId"":""c3d72b53-372e-4b2b-8876-fb1021bbbe5e"",""type"":""type"",""name"":""name"",""startTime"":null,""finishTime"":null,""currentOperation"":null,""percentComplete"":null,""state"":""pending"",""result"":null,""resultCode"":null,""changeId"":5,""lastModified"":""0001-01-01T00:00:00" [...]
\ No newline at end of file
diff --git a/backend/plugins/azuredevops_go/e2e/snapshot_tables/_tool_azuredevops_go_builds.csv b/backend/plugins/azuredevops_go/e2e/snapshot_tables/_tool_azuredevops_go_builds.csv
index 67227b988..83e089c79 100644
--- a/backend/plugins/azuredevops_go/e2e/snapshot_tables/_tool_azuredevops_go_builds.csv
+++ b/backend/plugins/azuredevops_go/e2e/snapshot_tables/_tool_azuredevops_go_builds.csv
@@ -2,4 +2,7 @@ connection_id,azuredevops_id,repository_id,status,result,name,source_branch,sour
 1,12,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,completed,succeeded,deploy_to_prod,refs/heads/main,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,[],2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,2023-02-25T06:23:04.006+00:00
 1,13,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,completed,succeeded,deploy_to_prod,refs/heads/main,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,"[""first-tag"",""second-tag""]",2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,2023-02-25T06:23:04.006+00:00
 1,14,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,completed,succeeded,label_regex_test,refs/heads/main,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,"[""prod"",""deploy""]",2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,2023-02-25T06:23:04.006+00:00
-1,15,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,completed,succeeded,label_regex_test_pro,refs/heads/main,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,"[""d""]",2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,2023-02-25T06:23:04.006+00:00
\ No newline at end of file
+1,15,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,completed,succeeded,label_regex_test_pro,refs/heads/main,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,"[""d""]",2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,2023-02-25T06:23:04.006+00:00
+1,16,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,inProgress,,label_regex_test_pro,refs/heads/main,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,"[""d""]",2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,""
+1,17,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,notStarted,,label_regex_test_pro,refs/heads/main,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,"[""d""]",2023-02-25T06:22:21.224+00:00,"",""
+1,18,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,completed,canceled,label_regex_test_pro,refs/heads/main,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,"[""d""]",2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:25.224+00:00,2023-02-25T06:22:30.224+00:00
\ No newline at end of file
diff --git a/backend/plugins/azuredevops_go/e2e/snapshot_tables/_tool_azuredevops_go_timeline_records.csv b/backend/plugins/azuredevops_go/e2e/snapshot_tables/_tool_azuredevops_go_timeline_records.csv
index d8e1543b5..846f510af 100644
--- a/backend/plugins/azuredevops_go/e2e/snapshot_tables/_tool_azuredevops_go_timeline_records.csv
+++ b/backend/plugins/azuredevops_go/e2e/snapshot_tables/_tool_azuredevops_go_timeline_records.csv
@@ -1,2 +1,6 @@
 connection_id,record_id,build_id,parent_id,type,name,start_time,finish_time,state,result,change_id,last_modified
 1,cfa20e98-6997-523c-4233-f0a7302c929f,12,9ecf18fe-987d-5811-7c63-300aecae35da,,deploy production,2023-02-25T06:22:36.807+00:00,2023-02-25T06:22:43.233+00:00,completed,succeeded,18,0001-01-01T00:00:00
+1,6a89fe25-b324-470d-9c9d-d2d889ab7965,13,"",,name,"","",pending,"",1,0001-01-01T00:00:00
+1,20193cff-ae1b-4ec5-8bef-d1565901932d,13,6a89fe25-b324-470d-9c9d-d2d889ab7965,,name,2024-04-27T16:39:12.8844213Z,2024-04-27T16:39:12.8844213Z,completed,succeeded,2,0001-01-01T00:00:00
+1,c3d72b53-372e-4b2b-8876-fb1021bbbe5e,13,6a89fe25-b324-470d-9c9d-d2d889ab7965,,name,"","",pending,"",3,0001-01-01T00:00:00
+1,02645afb-a196-4c8b-bb38-a83bf68d4729,13,c3d72b53-372e-4b2b-8876-fb1021bbbe5e,,name,"","",pending,"",5,0001-01-01T00:00:00
diff --git a/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_pipeline_commits.csv b/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_pipeline_commits.csv
index 8e897b02c..697577d53 100644
--- a/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_pipeline_commits.csv
+++ b/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_pipeline_commits.csv
@@ -2,4 +2,7 @@ pipeline_id,commit_sha,commit_msg,branch,repo_id,repo_url
 azuredevops_go:AzuredevopsBuild:1:12,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,,refs/heads/main,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,
 azuredevops_go:AzuredevopsBuild:1:13,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,,refs/heads/main,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,
 azuredevops_go:AzuredevopsBuild:1:14,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,,refs/heads/main,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,
-azuredevops_go:AzuredevopsBuild:1:15,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,,refs/heads/main,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,
\ No newline at end of file
+azuredevops_go:AzuredevopsBuild:1:15,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,,refs/heads/main,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,
+azuredevops_go:AzuredevopsBuild:1:16,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,,refs/heads/main,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,
+azuredevops_go:AzuredevopsBuild:1:17,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,,refs/heads/main,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,
+azuredevops_go:AzuredevopsBuild:1:18,40c59264e73fc5e1a6cab192f1622d26b7bd5c2a,,refs/heads/main,0d50ba13-f9ad-49b0-9b21-d29eda50ca33,
\ No newline at end of file
diff --git a/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_pipelines.csv b/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_pipelines.csv
index a588b158c..5375d12d8 100644
--- a/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_pipelines.csv
+++ b/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_pipelines.csv
@@ -2,4 +2,7 @@ id,name,result,status,original_status,original_result,type,duration_sec,queued_d
 azuredevops_go:AzuredevopsBuild:1:12,deploy_to_prod,SUCCESS,DONE,completed,succeeded,DEPLOYMENT,31,,PRODUCTION,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,2023-02-25T06:23:04.006+00:00,azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
 azuredevops_go:AzuredevopsBuild:1:13,deploy_to_prod,SUCCESS,DONE,completed,succeeded,DEPLOYMENT,31,,PRODUCTION,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,2023-02-25T06:23:04.006+00:00,azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
 azuredevops_go:AzuredevopsBuild:1:14,label_regex_test,SUCCESS,DONE,completed,succeeded,DEPLOYMENT,31,,PRODUCTION,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,2023-02-25T06:23:04.006+00:00,azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
-azuredevops_go:AzuredevopsBuild:1:15,label_regex_test_pro,SUCCESS,DONE,completed,succeeded,,31,,,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,2023-02-25T06:23:04.006+00:00,azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
\ No newline at end of file
+azuredevops_go:AzuredevopsBuild:1:15,label_regex_test_pro,SUCCESS,DONE,completed,succeeded,,31,,,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,2023-02-25T06:23:04.006+00:00,azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
+azuredevops_go:AzuredevopsBuild:1:16,label_regex_test_pro,"",IN_PROGRESS,inProgress,"",,0,,,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:32.810+00:00,"",azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
+azuredevops_go:AzuredevopsBuild:1:17,label_regex_test_pro,"",IN_PROGRESS,notStarted,"",,0,,,2023-02-25T06:22:21.224+00:00,"","","",azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
+azuredevops_go:AzuredevopsBuild:1:18,label_regex_test_pro,FAILURE,DONE,completed,canceled,,5,,,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:21.224+00:00,2023-02-25T06:22:25.224+00:00,2023-02-25T06:22:30.224+00:00,azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
\ No newline at end of file
diff --git a/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_tasks.csv b/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_tasks.csv
index 35bea53c0..d4c80a091 100644
--- a/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_tasks.csv
+++ b/backend/plugins/azuredevops_go/e2e/snapshot_tables/cicd_tasks.csv
@@ -1,2 +1,6 @@
 id,name,pipeline_id,result,status,original_status,original_result,type,environment,duration_sec,queued_duration_sec,created_date,queued_date,started_date,finished_date,cicd_scope_id
 azuredevops_go:AzuredevopsTimelineRecord:1:cfa20e98-6997-523c-4233-f0a7302c929f:12,deploy production,azuredevops_go:AzuredevopsBuild:1:12,SUCCESS,DONE,completed,succeeded,DEPLOYMENT,PRODUCTION,6,,2023-02-25T06:22:36.807+00:00,,2023-02-25T06:22:36.807+00:00,2023-02-25T06:22:43.233+00:00,azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
+azuredevops_go:AzuredevopsTimelineRecord:1:6a89fe25-b324-470d-9c9d-d2d889ab7965:13,name,azuredevops_go:AzuredevopsBuild:1:13,"",IN_PROGRESS,pending,"","","",0,,2023-02-25T06:22:36.807+00:00,,"","",azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
+azuredevops_go:AzuredevopsTimelineRecord:1:20193cff-ae1b-4ec5-8bef-d1565901932d:13,name,azuredevops_go:AzuredevopsBuild:1:13,SUCCESS,DONE,completed,succeeded,"","",0,,2023-02-25T06:22:36.807+00:00,,2024-04-27T16:39:12.8844213Z,2024-04-27T16:39:12.8844213Z,azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
+azuredevops_go:AzuredevopsTimelineRecord:1:c3d72b53-372e-4b2b-8876-fb1021bbbe5e:13,name,azuredevops_go:AzuredevopsBuild:1:13,"",IN_PROGRESS,pending,"","","",0,,2023-02-25T06:22:36.807+00:00,,"","",azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
+azuredevops_go:AzuredevopsTimelineRecord:1:02645afb-a196-4c8b-bb38-a83bf68d4729:13,name,azuredevops_go:AzuredevopsBuild:1:13,"",IN_PROGRESS,pending,"","","",0,,2023-02-25T06:22:36.807+00:00,,"","",azuredevops_go:AzuredevopsRepo:1:0d50ba13-f9ad-49b0-9b21-d29eda50ca33
diff --git a/backend/plugins/azuredevops_go/models/build.go b/backend/plugins/azuredevops_go/models/build.go
index f57c03024..7dd6da856 100644
--- a/backend/plugins/azuredevops_go/models/build.go
+++ b/backend/plugins/azuredevops_go/models/build.go
@@ -46,14 +46,14 @@ func (AzuredevopsBuild) TableName() string {
 }
 
 type AzuredevopsApiBuild struct {
-	Id          int       `json:"id"`
-	BuildNumber string    `json:"buildNumber"`
-	Status      string    `json:"status"`
-	Result      string    `json:"result"`
-	QueueTime   time.Time `json:"queueTime"`
-	StartTime   time.Time `json:"startTime"`
-	FinishTime  time.Time `json:"finishTime"`
-	Url         string    `json:"url"`
+	Id          int        `json:"id"`
+	BuildNumber string     `json:"buildNumber"`
+	Status      string     `json:"status"`
+	Result      string     `json:"result"`
+	QueueTime   *time.Time `json:"queueTime"`
+	StartTime   *time.Time `json:"startTime"`
+	FinishTime  *time.Time `json:"finishTime"`
+	Url         string     `json:"url"`
 	Definition  struct {
 		Drafts      []interface{} `json:"drafts"`
 		Id          int           `json:"id"`
diff --git a/backend/plugins/azuredevops_go/tasks/ci_cd_build_converter.go b/backend/plugins/azuredevops_go/tasks/ci_cd_build_converter.go
index a3d6c240b..0668e8ef0 100644
--- a/backend/plugins/azuredevops_go/tasks/ci_cd_build_converter.go
+++ b/backend/plugins/azuredevops_go/tasks/ci_cd_build_converter.go
@@ -69,7 +69,10 @@ func ConvertBuilds(taskCtx plugin.SubTaskContext) errors.Error {
 		Convert: func(inputRow interface{}) ([]interface{}, errors.Error) {
 			build := inputRow.(*models.AzuredevopsBuild)
 			duration := 0.0
-			duration = float64(build.FinishTime.Sub(*build.StartTime).Milliseconds() / 1e3)
+
+			if build.FinishTime != nil {
+				duration = float64(build.FinishTime.Sub(*build.StartTime).Milliseconds() / 1e3)
+			}
 
 			domainPipeline := &devops.CICDPipeline{
 				DomainEntity: domainlayer.DomainEntity{
diff --git a/backend/plugins/azuredevops_go/tasks/ci_cd_build_extractor.go b/backend/plugins/azuredevops_go/tasks/ci_cd_build_extractor.go
index a994749b8..de3a6ec1f 100644
--- a/backend/plugins/azuredevops_go/tasks/ci_cd_build_extractor.go
+++ b/backend/plugins/azuredevops_go/tasks/ci_cd_build_extractor.go
@@ -72,9 +72,9 @@ func ExtractApiBuilds(taskCtx plugin.SubTaskContext) errors.Error {
 				Name:          buildApi.Definition.Name,
 				SourceBranch:  buildApi.SourceBranch,
 				SourceVersion: buildApi.SourceVersion,
-				QueueTime:     &buildApi.QueueTime,
-				StartTime:     &buildApi.StartTime,
-				FinishTime:    &buildApi.FinishTime,
+				QueueTime:     buildApi.QueueTime,
+				StartTime:     buildApi.StartTime,
+				FinishTime:    buildApi.FinishTime,
 				Tags:          string(tagsB),
 			}