Skip to content
Snippets Groups Projects
Commit d492924d authored by Martin Lowe's avatar Martin Lowe :flag_ca:
Browse files

Merge branch 'malowe/main/147' into 'main'

Iss #147 - Update head SHA on retrieval of tracking

See merge request !161
parents 9fa55fe1 360fa5d3
No related branches found
No related tags found
1 merge request!161Iss #147 - Update head SHA on retrieval of tracking
Pipeline #32119 passed
......@@ -218,26 +218,24 @@ public class GithubValidationHelper {
* @return true if the validation passed, false otherwise.
*/
public ValidationResponse handleGithubWebhookValidation(GithubWebhookRequest request, ValidationRequest vr, RequestWrapper wrapper) {
// null check the pull request to make sure that someone didn't push a bad value
PullRequest pr = request.getPullRequest();
if (pr == null) {
throw new IllegalStateException("Pull request should not be null when handling validation");
}
// update the status before processing
LOGGER
.trace(VALIDATION_LOGGING_MESSAGE, request.getRepository().getFullName(), request.getPullRequest().getNumber(),
GithubCommitStatuses.PENDING);
LOGGER.trace(VALIDATION_LOGGING_MESSAGE, request.getRepository().getFullName(), pr.getNumber(), GithubCommitStatuses.PENDING);
updateCommitStatus(request, GithubCommitStatuses.PENDING);
// validate the response
LOGGER
.trace("Begining validation of request for {}/#{}", request.getRepository().getFullName(),
request.getPullRequest().getNumber());
LOGGER.trace("Begining validation of request for {}/#{}", request.getRepository().getFullName(), pr.getNumber());
ValidationResponse r = validation.validateIncomingRequest(vr, wrapper);
if (r.getPassed()) {
LOGGER
.trace(VALIDATION_LOGGING_MESSAGE, request.getRepository().getFullName(), request.getPullRequest().getNumber(),
GithubCommitStatuses.SUCCESS);
LOGGER.trace(VALIDATION_LOGGING_MESSAGE, request.getRepository().getFullName(), pr.getNumber(), GithubCommitStatuses.SUCCESS);
updateCommitStatus(request, GithubCommitStatuses.SUCCESS);
} else {
LOGGER
.trace(VALIDATION_LOGGING_MESSAGE, request.getRepository().getFullName(), request.getPullRequest().getNumber(),
GithubCommitStatuses.FAILURE);
LOGGER.trace(VALIDATION_LOGGING_MESSAGE, request.getRepository().getFullName(), pr.getNumber(), GithubCommitStatuses.FAILURE);
updateCommitStatus(request, GithubCommitStatuses.FAILURE);
}
return r;
......@@ -275,12 +273,10 @@ public class GithubValidationHelper {
GithubWebhookTracking updatedTracking;
if (tracking.isEmpty()) {
updatedTracking = new GithubWebhookTracking();
updatedTracking.setHeadSha(request.getHead().getSha());
updatedTracking.setInstallationId(installationId);
updatedTracking.setLastUpdated(DateTimeHelper.now());
updatedTracking.setPullRequestNumber(request.getNumber());
updatedTracking.setRepositoryFullName(sanitizedRepoName);
updatedTracking.setLastKnownState(request.getState());
updatedTracking.setNeedsRevalidation(false);
updatedTracking.setManualRevalidationCount(0);
if (!"open".equalsIgnoreCase(request.getState())) {
......@@ -289,10 +285,12 @@ public class GithubValidationHelper {
updatedTracking.getPullRequestNumber(), sanitizedRepoName);
}
} else {
// at least update the state on every run
// uses the DB version as a base if available
updatedTracking = tracking.get();
updatedTracking.setLastKnownState(request.getState());
}
// always update the head SHA and the last known state
updatedTracking.setLastKnownState(request.getState());
updatedTracking.setHeadSha(request.getHead().getSha());
// save the data, and log on its success or failure
List<GithubWebhookTracking> savedTracking = dao
......@@ -342,18 +340,24 @@ public class GithubValidationHelper {
* @param fingerprint the internal unique string for the set of commits being processed
*/
private void updateCommitStatus(GithubWebhookRequest request, GithubCommitStatuses state) {
PullRequest pr = request.getPullRequest();
if (pr == null) {
// should not be reachable, but for safety
throw new IllegalStateException("Pull request should not be null when handling validation");
}
LOGGER
.trace("Generated access token for installation {}: {}", request.getInstallation().getId(),
jwtHelper.getGithubAccessToken(request.getInstallation().getId()).getToken());
ghApi
.updateStatus(jwtHelper.getGhBearerString(request.getInstallation().getId()), apiVersion,
request.getRepository().getFullName(), request.getPullRequest().getHead().getSha(),
request.getRepository().getFullName(), pr.getHead().getSha(),
GithubCommitStatusRequest
.builder()
.setDescription(state.getMessage())
.setState(state.toString())
.setTargetUrl(webhooksConfig.github().serverTarget() + "/git/eca/status/gh/"
+ request.getRepository().getFullName() + '/' + request.getPullRequest().getNumber())
+ request.getRepository().getFullName() + '/' + pr.getNumber())
.setContext(webhooksConfig.github().context())
.build());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment