diff --git a/pom.xml b/pom.xml index 3c535b86..a17a6537 100644 --- a/pom.xml +++ b/pom.xml @@ -78,6 +78,12 @@ import pom + + + org.jenkins-ci.plugins.workflow + workflow-cps + 3817.vd20b_7e2b_692b_ + diff --git a/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java b/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java index aa98e73e..409ef336 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java @@ -540,17 +540,23 @@ public void replaceAction(@NonNull Action a) { @NonNull @Override public Collection getSCMs() { + Collection definedSCMs = definition != null + ? definition.getSCMs() + : Collections.emptySet(); WorkflowRun b = getLastSuccessfulBuild(); if (b == null) { b = getLastCompletedBuild(); } if (b == null) { - return Collections.emptySet(); + return definedSCMs; } Map scms = new LinkedHashMap<>(); for (WorkflowRun.SCMCheckout co : b.checkouts(null)) { scms.put(co.scm.getKey(), co.scm); } + for (SCM scm : definedSCMs) { + scms.put(scm.getKey(), scm); + } return scms.values(); } diff --git a/src/test/java/org/jenkinsci/plugins/workflow/job/WorkflowJobTest.java b/src/test/java/org/jenkinsci/plugins/workflow/job/WorkflowJobTest.java index 54ed91ce..1a3ef6e3 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/job/WorkflowJobTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/job/WorkflowJobTest.java @@ -76,6 +76,32 @@ public class WorkflowJobTest { j.assertLogContains("second version", b2); } + @Issue("JENKINS-38669") + @Test public void nonEmptySCMListForGitSCMJobBeforeBuild() throws Exception { + WorkflowJob p = j.jenkins.createProject(WorkflowJob.class, "p"); + CpsScmFlowDefinition def = new CpsScmFlowDefinition(new GitSCM("I don't care"), "Jenkinsfile"); + assertEquals("Expecting one SCM for definition", 1, def.getSCMs().size()); + p.setDefinition(def); + assertEquals("Expecting one SCM", 1, p.getSCMs().size()); + } + + @Issue("JENKINS-38669") + @Test public void neverBuiltSCMBasedJobMustBeTriggerableByHook() throws Exception { + sampleRepo.init(); + sampleRepo.write("Jenkinsfile", "echo 'first version'"); + sampleRepo.git("add", "Jenkinsfile"); + sampleRepo.git("commit", "-m", "init"); + WorkflowJob p = j.jenkins.createProject(WorkflowJob.class, "p"); + p.addTrigger(new SCMTrigger("")); + p.setDefinition(new CpsScmFlowDefinition(new GitSCM(sampleRepo.toString()), "Jenkinsfile")); + j.jenkins.setQuietPeriod(0); + j.createWebClient().getPage(new WebRequest(j.createWebClient().createCrumbedUrl(p.getUrl() + "polling"), HttpMethod.POST)); + j.waitUntilNoActivity(); + WorkflowRun b1 = p.getLastBuild(); + assertEquals(1, b1.getNumber()); + j.assertLogContains("first version", b1); + } + @Test public void addAction() throws Exception { WorkflowJob p = j.jenkins.createProject(WorkflowJob.class, "p");