8000 conditional result setter · github-cloud/github-plugin@fc067ba · GitHub
[go: up one dir, main page]

Skip to content

Commit fc067ba

Browse files
committed
conditional result setter
1 parent 11c3ba0 commit fc067ba

File tree

8 files changed

+281
-3
lines changed

8 files changed

+281
-3
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package org.jenkinsci.plugins.github.extension.status.misc;
2+
3+
import hudson.DescriptorExtensionList;
4+
import hudson.ExtensionPoint;
5+
import hudson.model.AbstractDescribableImpl;
6+
import hudson.model.Descriptor;
7+
import hudson.model.Run;
8+
import hudson.util.ListBoxModel;
9+
import jenkins.model.Jenkins;
10+
import org.kohsuke.github.GHCommitState;
11+
import org.kohsuke.stapler.DataBoundSetter;
12+
13+
import javax.annotation.Nonnull;
14+
15+
/**
16+
* @author lanwen (Merkushev Kirill)
17+
*/
18+
public abstract class ConditionalResult extends AbstractDescribableImpl<ConditionalResult> implements ExtensionPoint {
19+
20+
protected String status;
21+
protected String message;
22+
23+
@DataBoundSetter
24+
public void setStatus(String status) {
25+
this.status = status;
26+
}
27+
28+
@DataBoundSetter
29+
public void setMessage(String message) {
30+
this.message = message;
31+
}
32+
33+
public String getStatus() {
34+
return status;
35+
}
36+
37+
public String getMessage() {
38+
return message;
39+
}
40+
41+
public abstract boolean matches(@Nonnull Run<?, ?> run);
42+
43+
public static abstract class ConditionalResultDescriptor extends Descriptor<ConditionalResult> {
44+
45+
public static DescriptorExtensionList<ConditionalResult, Descriptor<ConditionalResult>> all() {
46+
return Jenkins.getInstance().getDescriptorList(ConditionalResult.class);
47+
}
48+
49+
public ListBoxModel doFillStatusItems() {
50+
ListBoxModel items = new ListBoxModel();
51+
for (GHCommitState status1 : GHCommitState.values()) {
52+
items.add(status1.name());
53+
}
54+
return items;
55+
}
56+
}
57+
58+
59+
}

src/main/java/org/jenkinsci/plugins/github/status/err/ChangingBuildStatusErrorHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public boolean handle(Exception e, @Nonnull Run<?, ?> run, @Nonnull TaskListener
4545
public static class ChangingBuildStatusErrorHandlerDescriptor extends Descriptor<StatusErrorHandler> {
4646
private static final Result[] SUPPORTED_RESULTS = {
4747
FAILURE,
48-
UNSTABLE
48+
UNSTABLE,
4949
};
5050

5151
@Override
@@ -56,8 +56,8 @@ public String getDisplayName() {
5656
@SuppressWarnings("unused")
5757
public ListBoxModel doFillResultItems() {
5858
ListBoxModel items = new ListBoxModel();
59-
for (Result result : SUPPORTED_RESULTS) {
60-
items.add(result.toString());
59+
for (Result supported : SUPPORTED_RESULTS) {
60+
items.add(supported.toString());
6161
}
6262
return items;
6363
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package org.jenkinsci.plugins.github.status.sources;
2+
3+
import hudson.Extension;
4+
import hudson.model.Descriptor;
5+
import hudson.model.Run;
6+
import hudson.model.TaskListener;
7+
import hudson.util.ListBoxModel;
8+
import org.apache.commons.lang3.EnumUtils;
9+
import org.jenkinsci.plugins.github.common.ExpandableMessage;
10+
import org.jenkinsci.plugins.github.extension.status.GitHubStatusResultSource;
11+
import org.jenkinsci.plugins.github.extension.status.misc.ConditionalResult;
12+
import org.kohsuke.github.GHCommitState;
13+
import org.kohsuke.stapler.DataBoundConstructor;
14+
15+
import javax.annotation.Nonnull;
16+
import java.io.IOException;
17+
import java.util.Collections;
18+
import java.util.List;
19+
20+
import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;
21+
import static org.kohsuke.github.GHCommitState.ERROR;
22+
import static org.kohsuke.github.GHCommitState.PENDING;
23+
24+
/**
25+
* @author lanwen (Merkushev Kirill)
26+
*/
27+
public class ConditionalStatusResultSource extends GitHubStatusResultSource {
28+
29+
private List<ConditionalResult> results;
30+
31+
@DataBoundConstructor
32+
public ConditionalStatusResultSource(List<ConditionalResult> results) {
33+
this.results = results;
34+
}
35+
36+
@Nonnull
37+
public List<ConditionalResult> getResults() {
38+
return defaultIfNull(results, Collections.<ConditionalResult>emptyList());
39+
}
40+
41+
@Override
42+
public StatusResult get(@Nonnull Run<?, ?> run, @Nonnull TaskListener listener)
43+
throws IOException, InterruptedException {
44+
45+
for (ConditionalResult conditionalResult : getResults()) {
46+
if (conditionalResult.matches(run)) {
47+
return new StatusResult(
48+
defaultIfNull(EnumUtils.getEnum(GHCommitState.class, conditionalResult.getStatus()), ERROR),
49+
new ExpandableMessage(conditionalResult.getMessage()).expandAll(run, listener)
50+
);
51+
}
52+
}
53+
54+
return new StatusResult(
55+
PENDING,
56+
new ExpandableMessage("Can't define which status to set").expandAll(run, listener)
57+
);
58+
}
59+
60+
@Extension
61+
public static class ConditionalStatusResultSourceDescriptor extends Descriptor<GitHubStatusResultSource> {
62+
@Override
63+
public String getDisplayName() {
64+
return "Based on build result manually defined";
65+
}
66+
67+
@SuppressWarnings("unused")
68+
public ListBoxModel doFillStatusItems() {
69+
ListBoxModel items = new ListBoxModel();
70+
for (GHCommitState status : GHCommitState.values()) {
71+
items.add(status.name());
72+
}
73+
return items;
74+
}
75+
}
76+
77+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.jenkinsci.plugins.github.status.sources.misc;
2+
3+
import hudson.Extension;
4+
import hudson.model.Run;
5+
import org.jenkinsci.plugins.github.extension.status.misc.ConditionalResult;
6+
import org.kohsuke.stapler.DataBoundConstructor;
7+
8+
import javax.annotation.Nonnull;
9+
10+
/**
11+
* @author lanwen (Merkushev Kirill)
12+
*/
13+
public class AnyBuildResult extends ConditionalResult {
14+
15+
@DataBoundConstructor
16+
public AnyBuildResult() {
17+
}
18+
19+
@Override
20+
public boolean matches(@Nonnull Run<?, ?> run) {
21+
return true;
22+
}
23+
24+
@Extension
25+
public static class AnyBuildResultDescriptor extends ConditionalResultDescriptor {
26+
@Override
27+
public String getDisplayName() {
28+
return "Result ANY";
29+
}
30+
}
31+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package org.jenkinsci.plugins.github.status.sources.misc;
2+
3+
import hudson.Extension;
4+
import hudson.model.Result;
5+
import hudson.model.Run;
6+
import hudson.util.ListBoxModel;
7+
import org.jenkinsci.plugins.github.extension.status.misc.ConditionalResult;
8+
import org.kohsuke.stapler.DataBoundConstructor;
9+
import org.kohsuke.stapler.DataBoundSetter;
10+
11+
import javax.annotation.Nonnull;
12+
13+
import static hudson.model.Result.FAILURE;
14+
import static hudson.model.Result.SUCCESS;
15+
import static hudson.model.Result.UNSTABLE;
16+
import static hudson.model.Result.fromString;
17+
import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;
18+
import static org.apache.commons.lang3.StringUtils.trimToEmpty;
19+
20+
/**
21+
* @author lanwen (Merkushev Kirill)
22+
*/
23+
public class BetterThanOrEqualBuildResult extends ConditionalResult {
24+
25+
private String result;
26+
27+
@DataBoundConstructor
28+
public BetterThanOrEqualBuildResult() {
29+
}
30+
31+
@DataBoundSetter
32+
public void setResult(String result) {
33+
this.result = result;
34+
}
35+
36+
public String getResult() {
37+
return result;
38+
}
39+
40+
@Override
41+
public boolean matches(@Nonnull Run<?, ?> run) {
42+
return defaultIfNull(run.getResult(), Result.NOT_BUILT).isBetterOrEqualTo(fromString(trimToEmpty(result)));
43+
}
44+
45+
@Extension
46+
public static class BetterThanOrEqualBuildResultDescriptor extends ConditionalResultDescriptor {
47+
private static final Result[] SUPPORTED_RESULTS = {
48+
SUCCESS,
49+
UNSTABLE,
50+
FAILURE,
51+
};
52+
53+
@Override
54+
public String getDisplayName() {
55+
return "Result better than or equal to";
56+
}
57+
58+
@SuppressWarnings("unused")
59+
public ListBoxModel doFillResultItems() {
60+
ListBoxModel items = new ListBoxModel();
61+
for (Result supported : SUPPORTED_RESULTS) {
62+
items.add(supported.toString());
63+
}
64+
return items;
65+
}
66+
}
67+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.jenkinsci.plugins.github.extension.status.misc.ConditionalResult
2+
3+
4+
def f = namespace(lib.FormTagLib);
5+
6+
f.entry(title: _('Status'), field: 'status') {
7+
f.select()
8+
}
9+
10+
f.entry(title: _('Message'), field: 'message') {
11+
f.textbox()
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.jenkinsci.plugins.github.status.sources.ConditionalStatusResultSource
2+
3+
import org.apache.commons.collections.CollectionUtils
4+
import org.jenkinsci.plugins.github.extension.status.misc.ConditionalResult.ConditionalResultDescriptor;
5+
6+
def f = namespace(lib.FormTagLib);
7+
8+
f.block {
9+
f.hetero_list(items: CollectionUtils.isEmpty(instance?.results)
10+
? []
11+
: instance.results,
12+
addCaption: 'If build',
13+
name: 'results',
14+
oneEach: false, hasHeader: true, descriptors: ConditionalResultDescriptor.all())
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.jenkinsci.plugins.github.status.sources.misc.BetterThanOrEqualBuildResult
2+
3+
4+
def f = namespace(lib.FormTagLib);
5+
6+
7+
f.entry(title: _('Build result better than or equal to'), field: 'result') {
8+
f.select()
9+
}
10+
11+
f.entry(title: _('Status'), field: 'status') {
12+
f.select()
13+
}
14+
15+
f.entry(title: _('Message'), field: 'message') {
16+
f.textbox()
17+
}

0 commit comments

Comments
 (0)
0