aboutsummaryrefslogtreecommitdiff
path: root/mod
diff options
context:
space:
mode:
authorFrancois Kritzinger <francois@codesynthesis.com>2024-10-25 10:37:26 +0200
committerFrancois Kritzinger <francois@codesynthesis.com>2024-10-25 13:26:47 +0200
commit817bb7e0312c655ad646bbb07ba01855d01a7fdf (patch)
treed9213ad445aadeb5fdaa2444f26887f4f88e4d99 /mod
parent69d87bcad5b0c252fa4cc3ee09431a822d3352ae (diff)
Handle rebuilds (all checks) of remote PRs
Diffstat (limited to 'mod')
-rw-r--r--mod/mod-ci-github.cxx41
1 files changed, 34 insertions, 7 deletions
diff --git a/mod/mod-ci-github.cxx b/mod/mod-ci-github.cxx
index 6784db8..fe3f6c8 100644
--- a/mod/mod-ci-github.cxx
+++ b/mod/mod-ci-github.cxx
@@ -473,7 +473,7 @@ namespace brep
//
string sid (cs.repository.node_id + ":" + cs.check_suite.head_sha);
- // If the user requests a rebuilt of the (entire) PR, then this manifests
+ // If the user requests a rebuild of the (entire) PR, then this manifests
// as check_suite rather than pull_request event. Specifically:
//
// - For a local PR, this event is shared with the branch push and all we
@@ -484,23 +484,50 @@ namespace brep
// commit, extract the test merge commit, and restart the CI for that.
//
string check_sha;
+ service_data::kind_type kind (service_data::local);
bool re_requested (cs.action == "rerequested");
if (re_requested && !cs.check_suite.head_branch)
{
- // @@ TODO: load data, copy check_sha.
+ kind = service_data::remote;
+
+ optional<tenant_service> ts (find (*build_db_, "ci-github", sid));
+
+ if (ts)
+ {
+ try
+ {
+ service_data sd (*ts->data);
+ check_sha = move (sd.check_sha);
+ }
+ catch (const invalid_argument& e)
+ {
+ fail << "failed to parse service data: " << e;
+ }
+ }
+ else
+ {
+ // Proceed as for a rebuild of a local PR, letting the "no such
+ // tenant" error be reported below.
+ //
+ // @@ TMP Why do we want to continue? Feels like we're mangling the CS
+ // quite badly. Is this a best effort attempt to handle the
+ // rebuilding of archived PR tenants?
+ //
+ //
+ kind = service_data::local;
+ check_sha = cs.check_suite.head_sha;
+ }
}
else
check_sha = cs.check_suite.head_sha;
- // @@ Add check/report sha member to both ctors.
- //
service_data sd (warning_success,
iat->token,
iat->expires_at,
cs.installation.id,
move (cs.repository.node_id),
- service_data::local, false /* pre_check */, re_requested,
+ kind, false /* pre_check */, re_requested,
move (check_sha),
move (cs.check_suite.head_sha) /* report_sha */);
@@ -511,8 +538,8 @@ namespace brep
// Note that GitHub UI does not allow re-running the entire check suite
// until all the check runs are completed.
//
- duplicate_tenant_mode dtm (sd.re_request ? duplicate_tenant_mode::replace
- : duplicate_tenant_mode::ignore);
+ duplicate_tenant_mode dtm (re_requested ? duplicate_tenant_mode::replace
+ : duplicate_tenant_mode::ignore);
// Create an unloaded CI request.
//