Skip to content
Snippets Groups Projects

Iss #147 - Update head SHA on retrieval of tracking

Merged Martin Lowe requested to merge (removed):malowe/main/147 into main
1 file
+ 22
18
Compare changes
  • Side-by-side
  • Inline
@@ -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());
}
Loading