-
-
Notifications
You must be signed in to change notification settings - Fork 46
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f9cc46c
commit 5fc600e
Showing
2 changed files
with
116 additions
and
0 deletions.
There are no files selected for viewing
78 changes: 78 additions & 0 deletions
78
core/src/main/java/io/jenkins/pluginhealth/scoring/probes/FailingBuildProbe.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"; | ||
} | ||
|
||
|
||
} |
38 changes: 38 additions & 0 deletions
38
core/src/test/java/io/jenkins/pluginhealth/scoring/probes/FailingBuildProbeTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |