Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>5.26</version>
<version>5.2099.v68c2f5e27299</version>
<relativePath />
</parent>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,13 @@ void beforeEach(JenkinsRule rule) {
void archive() throws Exception {
// job setup
WorkflowJob foo = r.jenkins.createProject(WorkflowJob.class, "foo");
foo.setDefinition(new CpsFlowDefinition(
"""
foo.setDefinition(new CpsFlowDefinition("""
node {
writeFile text: 'hello world', file: 'msg'
archive 'm*'
unarchive(mapping:['msg':'msg.out'])
archive 'msg.out'
}""",
true));
}""", true));

// get the build going, and wait until workflow pauses
WorkflowRun b = r.assertBuildStatusSuccess(foo.scheduleBuild2(0).get());
Expand Down Expand Up @@ -78,8 +76,7 @@ void nonexistent() throws Exception {
@Test
void unarchiveDir() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
node {
writeFile text: 'one', file: 'a/1'; writeFile text: 'two', file: 'a/b/2'
archive 'a/'
Expand All @@ -88,8 +85,7 @@ void unarchiveDir() throws Exception {
echo "${readFile 'a/1'}/${readFile 'a/b/2'}"
}
}
""",
true));
""", true));
WorkflowRun b = r.assertBuildStatusSuccess(p.scheduleBuild2(0).get());
VirtualFile archivedFile = b.getArtifactManager().root().child("a/b/2");
assertTrue(archivedFile.exists());
Expand All @@ -106,8 +102,7 @@ void directDownload() throws Exception {
r.createSlave("remote1", null, null);
r.createSlave("remote2", null, null);
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
node('remote1') {
writeFile file: 'x', text: 'contents'
archiveArtifacts 'x'
Expand All @@ -116,8 +111,7 @@ void directDownload() throws Exception {
unarchive mapping: [x: 'x']
echo "loaded ${readFile('x')}"
}
""",
true));
""", true));
DirectArtifactManagerFactory.whileBlockingOpen(() -> {
r.assertLogContains("loaded contents", r.buildAndAssertSuccess(p));
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,11 @@ void beforeEach(JenkinsRule rule) {
void specialStatus() throws Exception {
User.getById("smrt", true);
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
catchError {
semaphore 'specialStatus'
}
""",
true));
""", true));
SemaphoreStep.failure(
"specialStatus/1",
new FlowInterruptedException(Result.UNSTABLE, new CauseOfInterruption.UserInterruption("smrt")));
Expand Down Expand Up @@ -133,13 +131,11 @@ void serialFormWhenTypeOfBuildResultFieldWasResult() throws Exception {
@Test
void customBuildResult() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
catchError(message: 'caught error', buildResult: 'unstable') {
error 'oops'
}
""",
true));
""", true));
WorkflowRun b = p.scheduleBuild2(0).waitForStart();
assertCatchError(r, b, Result.UNSTABLE, null, true);
r.assertLogContains("Setting overall build result to UNSTABLE", b);
Expand All @@ -148,13 +144,11 @@ void customBuildResult() throws Exception {
@Test
void invalidBuildResult() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
catchError(buildResult: 'typo') {
error 'oops'
}
""",
true));
""", true));
WorkflowRun b = r.assertBuildStatus(Result.FAILURE, p.scheduleBuild2(0));
r.assertLogContains("buildResult is invalid: typo", b);
}
Expand All @@ -163,27 +157,23 @@ void invalidBuildResult() throws Exception {
@Test
void customStageResult() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
catchError(message: 'caught error', stageResult: 'failure') {
error 'oops'
}
""",
true));
""", true));
WorkflowRun b = p.scheduleBuild2(0).waitForStart();
assertCatchError(r, b, Result.FAILURE, Result.FAILURE, true);
}

@Test
void invalidStageResult() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
catchError(stageResult: 'typo') {
error 'oops'
}
""",
true));
""", true));
WorkflowRun b = r.assertBuildStatus(Result.FAILURE, p.scheduleBuild2(0));
r.assertLogContains("stageResult is invalid: typo", b);
}
Expand All @@ -192,59 +182,51 @@ void invalidStageResult() throws Exception {
@Test
void stepResultOnly() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
catchError(message: 'caught error', buildResult: 'success', stageResult: 'unstable') {
error 'oops'
}
""",
true));
""", true));
WorkflowRun b = p.scheduleBuild2(0).waitForStart();
assertCatchError(r, b, Result.SUCCESS, Result.UNSTABLE, true);
}

@Test
void catchesInterruptionsByDefault() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
import jenkins.model.CauseOfInterruption
import org.jenkinsci.plugins.workflow.steps.FlowInterruptedException
catchError(message: 'caught error') {
throw new FlowInterruptedException(Result.ABORTED, true, new CauseOfInterruption[0])
}
""",
false));
""", false));
WorkflowRun b = p.scheduleBuild2(0).waitForStart();
assertCatchError(r, b, Result.ABORTED, Result.ABORTED, true);
}

@Test
void canAvoidCatchingInterruptionsWithOption() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
import jenkins.model.CauseOfInterruption
import org.jenkinsci.plugins.workflow.steps.FlowInterruptedException
catchError(message: 'caught error', catchInterruptions: false) {
throw new FlowInterruptedException(Result.ABORTED, true, new CauseOfInterruption[0])
}
""",
false));
""", false));
WorkflowRun b = p.scheduleBuild2(0).waitForStart();
assertCatchError(r, b, Result.ABORTED, null, false);
}

@Test
void catchesAttemptsToStopBuildByDefault() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
catchError(message: 'caught error') {
semaphore 'ready'
}
""",
true));
""", true));
WorkflowRun b = p.scheduleBuild2(0).waitForStart();
SemaphoreStep.waitForStart("ready/1", b);
b.doStop();
Expand All @@ -254,13 +236,11 @@ void catchesAttemptsToStopBuildByDefault() throws Exception {
@Test
void canAvoidCatchingAttemptsToStopBuildWithOption() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
catchError(message: 'caught error', catchInterruptions: false) {
semaphore 'ready'
}
""",
true));
""", true));
WorkflowRun b = p.scheduleBuild2(0).waitForStart();
SemaphoreStep.waitForStart("ready/1", b);
b.doStop();
Expand All @@ -273,14 +253,12 @@ void catchesDownstreamBuildFailureEvenWhenNotCatchingInterruptions() throws Exce
WorkflowJob ds = r.createProject(WorkflowJob.class, "ds");
ds.setDefinition(new CpsFlowDefinition("error 'oops!'", true));
WorkflowJob us = r.createProject(WorkflowJob.class, "us");
us.setDefinition(new CpsFlowDefinition(
"""
us.setDefinition(new CpsFlowDefinition("""
int count = 1
catchError(message: 'caught error', catchInterruptions: false) {
build 'ds'
}
""",
true));
""", true));
WorkflowRun b = r.assertBuildStatus(Result.FAILURE, us.scheduleBuild2(0));
assertCatchError(r, b, Result.FAILURE, Result.FAILURE, true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,11 @@ void fingerprinter() throws Exception {
@Test
void javadoc() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
node {
writeFile text: 'hello world', file: 'docs/index.html'
step([$class: 'JavadocArchiver', javadocDir: 'docs'])
}""",
true));
}""", true));
WorkflowRun b = r.assertBuildStatusSuccess(p.scheduleBuild2(0));
assertEquals(
"hello world",
Expand All @@ -143,55 +141,47 @@ void javadoc() throws Exception {
@Test
void mailer() throws Exception {
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
node {
writeFile text: '''<testsuite name='s'><testcase name='c'><error>failed</error></testcase></testsuite>''', file: 'r.xml'
junit 'r.xml'
step([$class: 'Mailer', recipients: 'test@nowhere.net'])
}
""",
true));
""", true));
String recipient = "test@nowhere.net";
Mailbox inbox = Mailbox.get(new InternetAddress(recipient));
inbox.clear();
WorkflowRun b = r.assertBuildStatus(Result.UNSTABLE, p.scheduleBuild2(0).get());
assertEquals(1, inbox.size());
var subj = Messages.MailSender_UnstableMail_Subject(); // MailSender.createUnstableMail/getSubject
assertEquals(subj + " " + b.getFullDisplayName(), inbox.get(0).getSubject());
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
node {
catchError {error 'oops'}
step([$class: 'Mailer', recipients: 'test@nowhere.net'])
}
""",
true));
""", true));
inbox.clear();
b = r.assertBuildStatus(Result.FAILURE, p.scheduleBuild2(0).get());
assertEquals(1, inbox.size());
assertEquals(
Messages.MailSender_FailureMail_Subject() + " " + b.getFullDisplayName(),
inbox.get(0).getSubject());
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
node {
catchError {echo 'ok'}
step([$class: 'Mailer', recipients: 'test@nowhere.net'])
}
""",
true));
""", true));
inbox.clear();
b = r.assertBuildStatus(Result.SUCCESS, p.scheduleBuild2(0).get());
assertEquals(0, inbox.size());
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
node {
try {error 'oops'} catch (e) {echo "caught ${e}"; currentBuild.result = 'FAILURE'}
step([$class: 'Mailer', recipients: 'test@nowhere.net'])
}
""",
true));
""", true));
inbox.clear();
b = r.assertBuildStatus(Result.FAILURE, p.scheduleBuild2(0).get());
assertEquals(1, inbox.size());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,7 @@ void useWrapper() throws Throwable {
slaveEnv.put("HOME", "/home/jenkins");
createSpecialEnvSlave(j, "slave", "", slaveEnv);
WorkflowJob p = j.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
node('slave') {
mock {
semaphore 'restarting'
Expand All @@ -118,8 +117,7 @@ void useWrapper() throws Throwable {
}
}
}
""",
true));
""", true));
WorkflowRun b = p.scheduleBuild2(0).getStartCondition().get();
SemaphoreStep.waitForStart("restarting/1", b);
});
Expand Down Expand Up @@ -190,8 +188,7 @@ public boolean isApplicable(AbstractProject<?, ?> item) {
void envStickiness() throws Throwable {
sessions.then(j -> {
WorkflowJob p = j.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
def show(which) {
echo "groovy ${which} ${env.TESTVAR}"
if (isUnix()) {
Expand All @@ -209,8 +206,7 @@ def show(which) {
}
show 'outside'
}
""",
true));
""", true));
WorkflowRun b = j.buildAndAssertSuccess(p);
j.assertLogContains("received initial", b);
j.assertLogContains("groovy before wrapped", b);
Expand Down Expand Up @@ -334,12 +330,10 @@ public boolean isApplicable(AbstractProject<?, ?> item) {
void argumentsToString() throws Throwable {
sessions.then(j -> {
WorkflowJob p = j.createProject(WorkflowJob.class, "p");
p.setDefinition(new CpsFlowDefinition(
"""
p.setDefinition(new CpsFlowDefinition("""
node {
wrap([$class: 'AnsiColorBuildWrapper', colorMapName: 'xterm']) {}
}""",
true));
}""", true));
WorkflowRun b = j.buildAndAssertSuccess(p);
List<FlowNode> coreStepNodes = new DepthFirstScanner()
.filteredNodes(
Expand Down
Loading
Loading