Skip to content

Commit e2f4a7a

Browse files
authored
Fix/GitHub deployment time calculation (#8715)
* feat(github_graphql): add finished_date to GithubDeployment model Introduce FinishedDate field in GithubDeployment to represent success-priority deployment completion timestamp. This field allows distinguishing SUCCESS timestamp from latest status update time while preserving backward compatibility. * feat(github_graphql): compute success-priority deployment finish time Add logic to derive FinishedDate from deployment statuses. Preference order: 1. Latest SUCCESS timestamp 2. Latest terminal timestamp (FAILURE/ERROR/INACTIVE/ACTIVE) This improves deployment lifecycle accuracy without modifying existing LatestStatus semantics. * feat(github_graphql): use finished_date in deployment domain conversion Update ConvertDeployment to use tool-layer FinishedDate when populating domain TaskDatesInfo.FinishedDate. Duration is now calculated using resolved finished time instead of UpdatedDate. * chore(github_graphql): add migration for finished_date column Add migration script to auto-migrate GithubDeployment and create nullable finished_date column. * test(github_graphql): update e2e snapshots for deployment finished date and duration Introduce adjustments to existing e2e tests to validate backward compatibility after adding deployment finished date and duration calculation logic. Add `deployment_finished_date` field to `_tool_github_deployments.csv` and `duration_seconds` field to `cicd_deployments.csv`. Ensure historical data remains compatible with the updated behavior. * test(github_graphql): add tests for deployment finished date and duration calculation logic Add test coverage for deployment finished date and duration calculation based on the SUCCESS state instead of relying on the inactive state. Verify fallback behavior when a SUCCESS state is not present. * fix(github_graphql): decouple add finished_date migration from active model Define a dedicated versioned struct for the finished_date migration instead of referencing the evolving GithubDeployment model to ensure deterministic and reproducible schema changes. * chore(github_graphql): fix duplicate import and lint issues in deployment extractor Remove redundant restTasks alias and use githubTasks constants consistently to resolve lint warnings and improve import clarity.
1 parent b1cf560 commit e2f4a7a

11 files changed

Lines changed: 144 additions & 23 deletions

File tree

backend/plugins/github/models/deployment.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ type GithubDeployment struct {
4242
RepositoryUrl string `json:"repository_url" gorm:"type:varchar(255)"`
4343
RefName string `json:"ref_name" gorm:"type:varchar(255)"`
4444
Payload string `json:"payload" gorm:"type:text"`
45+
FinishedDate *time.Time `json:"finished_at"`
4546
CreatedDate time.Time `json:"created_at"`
4647
UpdatedDate time.Time `json:"updated_at"`
4748
}

backend/plugins/github_graphql/e2e/deployment_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ func TestGithubDeploymentDataFlow(t *testing.T) {
8888
"_raw_data_table",
8989
"_raw_data_id",
9090
"_raw_data_remark",
91+
"duration_sec",
9192
},
9293
)
9394

@@ -110,6 +111,7 @@ func TestGithubDeploymentDataFlow(t *testing.T) {
110111
"_raw_data_table",
111112
"_raw_data_id",
112113
"_raw_data_remark",
114+
"duration_sec",
113115
},
114116
)
115117
}

backend/plugins/github_graphql/e2e/raw_tables/_raw_github_graphql_deployment.csv

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"id","params","data","url","input","created_at"
2+
7,"{""ConnectionId"":1,""Name"":""facebook/OpenBIC""}","{""Task"":""deploy"",""Id"":""DE_kwDOFAKDls7nWeuH"",""CommitOid"":""0916a0afdfa825779c892a8951bde706a054d352"",""Environment"":""github-pages"",""State"":""ACTIVE"",""DatabaseId"":3881429895,""Description"":"""",""Payload"":"""",""Ref"":{""ID"":""MDM6UmVmMzM1NzA5MDc4OnJlZnMvaGVhZHMvZ2gtcGFnZXM="",""Name"":""gh-pages"",""Prefix"":""refs/heads/""},""Statuses"":{""nodes"":[{""state"":""SUCCESS"",""updatedAt"":""2026-02-20T00:30:59Z""},{""state"":""IN_PROGRESS"",""updatedAt"":""2026-02-20T00:30:40Z""},{""state"":""QUEUED"",""updatedAt"":""2026-02-20T00:30:38Z""}]},""LatestStatus"":{""Id"":""DES_kwDOFAKDls8AAAACkwrinw"",""State"":""SUCCESS"",""updatedAt"":""2026-02-20T00:30:59Z""},""Repository"":{""Id"":""MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg="",""Name"":""OpenBIC"",""Url"":""https://github.com/facebook/OpenBIC""},""CreatedAt"":""2026-02-20T00:30:37Z"",""UpdatedAt"":""2026-02-20T00:30:59Z"",""Commit"":{""Oid"":""0916a0afdfa825779c892a8951bde706a054d352"",""Message"":""Deploying to gh-pages from @ facebook/OpenBIC@0f1b47ec98e5def7fd64f476fb191643c818b36a 🚀"",""Author"":{""Name"":""facebook-github-bot"",""Email"":""facebook-github-bot@users.noreply.github.com""},""CommittedDate"":""2026-02-20T00:29:49Z""}}","query($name:String!$owner:String!$pageSize:Int!$skipCursor:String){rateLimit{cost},repository(owner:$owner,name:$name){deployments(first:$pageSize,after:$skipCursor,orderBy:{field:CREATED_AT,direction:DESC}){totalCount,pageInfo{endCursor,hasNextPage},nodes{task,id,commitOid,environment,state,databaseId,description,payload,ref{id,name,prefix},statuses(first:100){nodes{state,updatedAt}},latestStatus{id,state,updatedAt},repository{id,name,url},createdAt,updatedAt,commit{oid,message,author{name,email},committedDate}}}}}","{""name"":""OpenBIC"",""owner"":""facebook"",""pageSize"":100,""skipCursor"":null}","2026-02-21 14:56:50.106"
3+
6,"{""ConnectionId"":1,""Name"":""facebook/OpenBIC""}","{""Task"":""deploy"",""Id"":""DE_kwDOFAKDls7k2xiG"",""CommitOid"":""74962aec9820f7e3a6f1e60f54b4ce8c747e1e1f"",""Environment"":""github-pages"",""State"":""INACTIVE"",""DatabaseId"":3839563910,""Description"":"""",""Payload"":"""",""Ref"":{""ID"":""MDM6UmVmMzM1NzA5MDc4OnJlZnMvaGVhZHMvZ2gtcGFnZXM="",""Name"":""gh-pages"",""Prefix"":""refs/heads/""},""Statuses"":{""nodes"":[{""state"":""INACTIVE"",""updatedAt"":""2026-02-20T00:30:59Z""},{""state"":""SUCCESS"",""updatedAt"":""2026-02-14T00:32:36Z""},{""state"":""IN_PROGRESS"",""updatedAt"":""2026-02-14T00:32:20Z""}]},""LatestStatus"":{""Id"":""DES_kwDOFAKDls8AAAACkwrjLw"",""State"":""INACTIVE"",""updatedAt"":""2026-02-20T00:30:59Z""},""Repository"":{""Id"":""MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg="",""Name"":""OpenBIC"",""Url"":""https://github.com/facebook/OpenBIC""},""CreatedAt"":""2026-02-14T00:32:15Z"",""UpdatedAt"":""2026-02-20T00:30:59Z"",""Commit"":{""Oid"":""74962aec9820f7e3a6f1e60f54b4ce8c747e1e1f"",""Message"":""Deploying to gh-pages from @ facebook/OpenBIC@0f1b47ec98e5def7fd64f476fb191643c818b36a 🚀"",""Author"":{""Name"":""facebook-github-bot"",""Email"":""facebook-github-bot@users.noreply.github.com""},""CommittedDate"":""2026-02-14T00:31:30Z""}}","query($name:String!$owner:String!$pageSize:Int!$skipCursor:String){rateLimit{cost},repository(owner:$owner,name:$name){deployments(first:$pageSize,after:$skipCursor,orderBy:{field:CREATED_AT,direction:DESC}){totalCount,pageInfo{endCursor,hasNextPage},nodes{task,id,commitOid,environment,state,databaseId,description,payload,ref{id,name,prefix},statuses(first:100){nodes{state,updatedAt}},latestStatus{id,state,updatedAt},repository{id,name,url},createdAt,updatedAt,commit{oid,message,author{name,email},committedDate}}}}}","{""name"":""OpenBIC"",""owner"":""facebook"",""pageSize"":100,""skipCursor"":null}","2026-02-21 14:56:50.111"
24
5,"{""ConnectionId"":1,""Name"":""facebook/OpenBIC""}","{""Task"":""deploy"",""Id"":""DE_kwDOFAKDls5jmQjJ"",""CommitOid"":""5f64bfed25d7ab4ae0840357ec56890f4da27def"",""Environment"":""github-pages"",""State"":""INACTIVE"",""DatabaseId"":1670973641,""Description"":"""",""Payload"":"""",""Ref"":{""ID"":""MDM6UmVmMzM1NzA5MDc4OnJlZnMvaGVhZHMvZ2gtcGFnZXM="",""Name"":""gh-pages"",""Prefix"":""refs/heads/""},""LatestStatus"":{""Id"":""DES_kwDOFAKDls78VYGk"",""State"":""INACTIVE"",""updatedAt"":""2024-08-02T00:18:13Z""},""Repository"":{""Id"":""MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg="",""Name"":""OpenBIC"",""Url"":""https://github.com/facebook/OpenBIC""},""CreatedAt"":""2024-07-24T00:18:51Z"",""UpdatedAt"":""2024-08-02T00:18:13Z"",""Commit"":{""Oid"":""5f64bfed25d7ab4ae0840357ec56890f4da27def"",""Message"":""Deploying to gh-pages from @ facebook/OpenBIC@cc00015240209658cadae37a4c46698ff02ad78e 🚀"",""Author"":{""Name"":""facebook-github-bot"",""Email"":""facebook-github-bot@users.noreply.github.com""},""CommittedDate"":""2024-07-24T00:18:02Z""}}","query($name:String!$owner:String!$pageSize:Int!$skipCursor:String){rateLimit{cost},repository(owner: $owner, name: $name){deployments(first: $pageSize, after: $skipCursor, orderBy: {field: CREATED_AT, direction: DESC}){totalCount,pageInfo{endCursor,hasNextPage},nodes{task,id,commitOid,environment,state,databaseId,description,payload,ref{id,name,prefix},latestStatus{id,state,updatedAt},repository{id,name,url},createdAt,updatedAt,commit{oid,message,author{name,email},committedDate}}}}}","{""name"": ""OpenBIC"", ""owner"": ""facebook"", ""pageSize"": 100, ""skipCursor"": null}","2024-08-08 14:50:52.709"
35
4,"{""ConnectionId"":1,""Name"":""facebook/OpenBIC""}","{""Task"":""deploy"",""Id"":""DE_kwDOFAKDls5k72wd"",""CommitOid"":""c510f30dba35481866f55dc6f4ea94bb3ff5a7ae"",""Environment"":""github-pages"",""State"":""INACTIVE"",""DatabaseId"":1693412381,""Description"":"""",""Payload"":"""",""Ref"":{""ID"":""MDM6UmVmMzM1NzA5MDc4OnJlZnMvaGVhZHMvZ2gtcGFnZXM="",""Name"":""gh-pages"",""Prefix"":""refs/heads/""},""LatestStatus"":{""Id"":""DES_kwDOFAKDls78zSAf"",""State"":""INACTIVE"",""updatedAt"":""2024-08-03T00:17:54Z""},""Repository"":{""Id"":""MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg="",""Name"":""OpenBIC"",""Url"":""https://github.com/facebook/OpenBIC""},""CreatedAt"":""2024-08-02T00:17:55Z"",""UpdatedAt"":""2024-08-03T00:17:54Z"",""Commit"":{""Oid"":""c510f30dba35481866f55dc6f4ea94bb3ff5a7ae"",""Message"":""Deploying to gh-pages from @ facebook/OpenBIC@efd9dd4dbee783343b0fe32b20d04d4ed68b1681 🚀"",""Author"":{""Name"":""facebook-github-bot"",""Email"":""facebook-github-bot@users.noreply.github.com""},""CommittedDate"":""2024-08-02T00:17:05Z""}}","query($name:String!$owner:String!$pageSize:Int!$skipCursor:String){rateLimit{cost},repository(owner: $owner, name: $name){deployments(first: $pageSize, after: $skipCursor, orderBy: {field: CREATED_AT, direction: DESC}){totalCount,pageInfo{endCursor,hasNextPage},nodes{task,id,commitOid,environment,state,databaseId,description,payload,ref{id,name,prefix},latestStatus{id,state,updatedAt},repository{id,name,url},createdAt,updatedAt,commit{oid,message,author{name,email},committedDate}}}}}","{""name"": ""OpenBIC"", ""owner"": ""facebook"", ""pageSize"": 100, ""skipCursor"": null}","2024-08-08 14:50:52.707"
46
3,"{""ConnectionId"":1,""Name"":""facebook/OpenBIC""}","{""Task"":""deploy"",""Id"":""DE_kwDOFAKDls5lF2XZ"",""CommitOid"":""3f8aa35aa5d792e9890c804ba629c065f8609c7a"",""Environment"":""github-pages"",""State"":""INACTIVE"",""DatabaseId"":1696032217,""Description"":"""",""Payload"":"""",""Ref"":{""ID"":""MDM6UmVmMzM1NzA5MDc4OnJlZnMvaGVhZHMvZ2gtcGFnZXM="",""Name"":""gh-pages"",""Prefix"":""refs/heads/""},""LatestStatus"":{""Id"":""DES_kwDOFAKDls79uA1r"",""State"":""INACTIVE"",""updatedAt"":""2024-08-06T00:18:22Z""},""Repository"":{""Id"":""MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg="",""Name"":""OpenBIC"",""Url"":""https://github.com/facebook/OpenBIC""},""CreatedAt"":""2024-08-03T00:17:32Z"",""UpdatedAt"":""2024-08-06T00:18:22Z"",""Commit"":{""Oid"":""3f8aa35aa5d792e9890c804ba629c065f8609c7a"",""Message"":""Deploying to gh-pages from @ facebook/OpenBIC@2c1c4c6f660961692a9736d0304f9fdb2db3a9e8 🚀"",""Author"":{""Name"":""facebook-github-bot"",""Email"":""facebook-github-bot@users.noreply.github.com""},""CommittedDate"":""2024-08-03T00:16:52Z""}}","query($name:String!$owner:String!$pageSize:Int!$skipCursor:String){rateLimit{cost},repository(owner: $owner, name: $name){deployments(first: $pageSize, after: $skipCursor, orderBy: {field: CREATED_AT, direction: DESC}){totalCount,pageInfo{endCursor,hasNextPage},nodes{task,id,commitOid,environment,state,databaseId,description,payload,ref{id,name,prefix},latestStatus{id,state,updatedAt},repository{id,name,url},createdAt,updatedAt,commit{oid,message,author{name,email},committedDate}}}}}","{""name"": ""OpenBIC"", ""owner"": ""facebook"", ""pageSize"": 100, ""skipCursor"": null}","2024-08-08 14:50:52.704"
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
connection_id,id,github_id,display_title,url,database_id,commit_oid,description,environment,state,latest_status_state,latest_updated_date,repository_id,repository_name,repository_url,ref_name,payload,created_date,updated_date
2-
1,DE_kwDOFAKDls5jmQjJ,335709078,Deploying to gh-pages from @ facebook/OpenBIC@cc00015240209658cadae37a4c46698ff02ad78e 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,1670973641,5f64bfed25d7ab4ae0840357ec56890f4da27def,,github-pages,INACTIVE,INACTIVE,2024-08-02T00:18:13.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2024-07-24T00:18:51.000+00:00,2024-08-02T00:18:13.000+00:00
3-
1,DE_kwDOFAKDls5k72wd,335709078,Deploying to gh-pages from @ facebook/OpenBIC@efd9dd4dbee783343b0fe32b20d04d4ed68b1681 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,1693412381,c510f30dba35481866f55dc6f4ea94bb3ff5a7ae,,github-pages,INACTIVE,INACTIVE,2024-08-03T00:17:54.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2024-08-02T00:17:55.000+00:00,2024-08-03T00:17:54.000+00:00
4-
1,DE_kwDOFAKDls5lF2XZ,335709078,Deploying to gh-pages from @ facebook/OpenBIC@2c1c4c6f660961692a9736d0304f9fdb2db3a9e8 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,1696032217,3f8aa35aa5d792e9890c804ba629c065f8609c7a,,github-pages,INACTIVE,INACTIVE,2024-08-06T00:18:22.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2024-08-03T00:17:32.000+00:00,2024-08-06T00:18:22.000+00:00
5-
1,DE_kwDOFAKDls5lZH1E,335709078,Deploying to gh-pages from @ facebook/OpenBIC@fa848dcf1e18b9e6caea562ccecf282e0b52af39 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,1701084484,7a4d4b248e85a148f0bec8bc7fd480ed3c396b35,,github-pages,INACTIVE,INACTIVE,2024-08-08T00:18:13.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2024-08-06T00:18:05.000+00:00,2024-08-08T00:18:13.000+00:00
6-
1,DE_kwDOFAKDls5lv0SB,335709078,Deploying to gh-pages from @ facebook/OpenBIC@b25ee19a81f110e744af6fb62870dcca3cba93d7 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,1707033729,c0cfe86acc9ee2c2d0e64a5f1276e1ac3cf1f5c6,,github-pages,ACTIVE,SUCCESS,2024-08-08T00:18:12.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2024-08-08T00:17:56.000+00:00,2024-08-08T00:18:13.000+00:00
1+
connection_id,id,github_id,display_title,url,database_id,commit_oid,description,environment,state,latest_status_state,latest_updated_date,repository_id,repository_name,repository_url,ref_name,payload,created_date,updated_date,finished_date
2+
1,DE_kwDOFAKDls5jmQjJ,335709078,Deploying to gh-pages from @ facebook/OpenBIC@cc00015240209658cadae37a4c46698ff02ad78e 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,1670973641,5f64bfed25d7ab4ae0840357ec56890f4da27def,,github-pages,INACTIVE,INACTIVE,2024-08-02T00:18:13.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2024-07-24T00:18:51.000+00:00,2024-08-02T00:18:13.000+00:00,
3+
1,DE_kwDOFAKDls5k72wd,335709078,Deploying to gh-pages from @ facebook/OpenBIC@efd9dd4dbee783343b0fe32b20d04d4ed68b1681 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,1693412381,c510f30dba35481866f55dc6f4ea94bb3ff5a7ae,,github-pages,INACTIVE,INACTIVE,2024-08-03T00:17:54.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2024-08-02T00:17:55.000+00:00,2024-08-03T00:17:54.000+00:00,
4+
1,DE_kwDOFAKDls5lF2XZ,335709078,Deploying to gh-pages from @ facebook/OpenBIC@2c1c4c6f660961692a9736d0304f9fdb2db3a9e8 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,1696032217,3f8aa35aa5d792e9890c804ba629c065f8609c7a,,github-pages,INACTIVE,INACTIVE,2024-08-06T00:18:22.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2024-08-03T00:17:32.000+00:00,2024-08-06T00:18:22.000+00:00,
5+
1,DE_kwDOFAKDls5lZH1E,335709078,Deploying to gh-pages from @ facebook/OpenBIC@fa848dcf1e18b9e6caea562ccecf282e0b52af39 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,1701084484,7a4d4b248e85a148f0bec8bc7fd480ed3c396b35,,github-pages,INACTIVE,INACTIVE,2024-08-08T00:18:13.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2024-08-06T00:18:05.000+00:00,2024-08-08T00:18:13.000+00:00,
6+
1,DE_kwDOFAKDls5lv0SB,335709078,Deploying to gh-pages from @ facebook/OpenBIC@b25ee19a81f110e744af6fb62870dcca3cba93d7 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,1707033729,c0cfe86acc9ee2c2d0e64a5f1276e1ac3cf1f5c6,,github-pages,ACTIVE,SUCCESS,2024-08-08T00:18:12.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2024-08-08T00:17:56.000+00:00,2024-08-08T00:18:13.000+00:00,
7+
1,DE_kwDOFAKDls7k2xiG,335709078,Deploying to gh-pages from @ facebook/OpenBIC@0f1b47ec98e5def7fd64f476fb191643c818b36a 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,3839563910,74962aec9820f7e3a6f1e60f54b4ce8c747e1e1f,,github-pages,INACTIVE,INACTIVE,2026-02-20T00:30:59.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2026-02-14T00:32:15.000+00:00,2026-02-20T00:30:59.000+00:00,2026-02-14T00:32:36.000+00:00
8+
1,DE_kwDOFAKDls7nWeuH,335709078,Deploying to gh-pages from @ facebook/OpenBIC@0f1b47ec98e5def7fd64f476fb191643c818b36a 🚀,https://github.com/facebook/OpenBIC/deployments/github-pages,3881429895,0916a0afdfa825779c892a8951bde706a054d352,,github-pages,ACTIVE,SUCCESS,2026-02-20T00:30:59.000+00:00,MDEwOlJlcG9zaXRvcnkzMzU3MDkwNzg=,OpenBIC,https://github.com/facebook/OpenBIC,gh-pages,,2026-02-20T00:30:37.000+00:00,2026-02-20T00:30:59.000+00:00,2026-02-20T00:30:59.000+00:00

0 commit comments

Comments
 (0)