Skip to content

Commit

Permalink
Add Failing Build Probe
Browse files Browse the repository at this point in the history
  • Loading branch information
aayushRedHat committed Dec 27, 2023
1 parent f9cc46c commit 5fc600e
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package io.jenkins.pluginhealth.scoring.probes;

import io.jenkins.pluginhealth.scoring.model.Plugin;
import io.jenkins.pluginhealth.scoring.model.ProbeResult;
import org.kohsuke.github.*;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;

@Component
@Order(FailingBuildProbe.ORDER)
public class FailingBuildProbe extends Probe{

public static final int ORDER = LastCommitDateProbe.ORDER + 100;
public static final String KEY = "failing-buildingProbe";

@Override
protected ProbeResult doApply(Plugin plugin, ProbeContext context){

if (context.getRepositoryName(plugin.getScm()).isPresent()) {
return ProbeResult.success(key(),"There is no local repository for plugin " + plugin.getName() + ".");
}
try {
if(repoContainsJenkins(context).equals("Jenkinsfile found")){

final GitHub gh = context.getGitHub();
final GHRepository repository = gh.getRepository(context.getRepositoryName(plugin.getScm()).orElseThrow());
repository.getDefaultBranch();

GHCommit commit = repository.getCommit(repository.getDefaultBranch());
GHCheckRun checkRun = commit.getCheckRuns().iterator().next();
GHCheckRun.Conclusion conclusion = checkRun.getConclusion();

if(conclusion == GHCheckRun.Conclusion.FAILURE){

return ProbeResult.success(key(),"Build Failed in Default Branch");
}
else{
return ProbeResult.success(key(),"Build is Success in Default Branch");
}
}
else{

return ProbeResult.failure(key(),"No JenkinsFile found");
}
}catch (IOException e) {
return ProbeResult.error(key(), "Could not get failingBuilding Check");
}

}

public ProbeResult repoContainsJenkins(ProbeContext context){
final Path repository = context.getScmRepository();
try (Stream<Path> paths = Files.find(repository, 1, (file, $) ->
Files.isReadable(file) && "JenkinsFile".equals(file.getFileName().toString()))) {
return paths.findFirst()
.map(file -> ProbeResult.success (key(),"Jenkinsfile found"))
.orElseGet(() -> ProbeResult.failure(key(),"No Jenkinsfile found"));
} catch (IOException e) {
return ProbeResult.failure(key(),e.getMessage());
}
}
@Override
public String key() {
return KEY;
}

@Override
public String getDescription() {
return "Return whether the build is failed on default branch or not";
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package io.jenkins.pluginhealth.scoring.probes;

import io.jenkins.pluginhealth.scoring.model.Plugin;
import io.jenkins.pluginhealth.scoring.model.ProbeResult;
import io.jenkins.pluginhealth.scoring.model.ResultStatus;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.nio.file.Files;
import java.util.Map;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.*;
import static org.mockito.Mockito.when;

public class FailingBuildProbeTest extends AbstractProbeTest<FailingBuildProbe> {

@Override
FailingBuildProbe getSpy() {
return spy(FailingBuildProbe.class);
}

@Test
void shouldCorrectlyDetectMissingJenkinsfile() throws IOException {
final Plugin plugin = mock(Plugin.class);
final ProbeContext ctx = mock(ProbeContext.class);
final FailingBuildProbe probe = getSpy();

when(plugin.getDetails()).thenReturn(Map.of(
SCMLinkValidationProbe.KEY, ProbeResult.success(SCMLinkValidationProbe.KEY, ""),
LastCommitDateProbe.KEY, ProbeResult.success(LastCommitDateProbe.KEY, "")
));
when(ctx.getScmRepository()).thenReturn(
Files.createTempDirectory("foo")
);
assertThat(probe.apply(plugin, ctx).status()).isEqualTo(ResultStatus.FAILURE);
}
}

0 comments on commit 5fc600e

Please sign in to comment.