-
Bug
-
Resolution: Fixed
-
Minor
-
workflow-cps 2.80
-
-
workflow-cps 3520.va_8fc49e2f96f
As described in https://stackoverflow.com/questions/61420959/jenkins-interpretation-of-multiple-object-declarations-on-one-line, CPS-transformed assignment expressions evaluate to null instead of the value of the RHS of the expression. Here is an example:
def a = b = c = 1
In a Pipeline, after executing that expression a == null, b == null, and c == 1.
In regular Groovy, after executing that expression, a, b, and c, are all equal to 1.
Here is a (failing) workflow-cps test case (for CpsFlowDefinition2Test) that demonstrates the bug:
@Test public void assignmentExprsReturnRhs() throws Exception { WorkflowJob p = jenkins.createProject(WorkflowJob.class); p.setDefinition(new CpsFlowDefinition( "def a = b = c = 1\n" + "println([a, b, c].toString())", true)); WorkflowRun b = jenkins.buildAndAssertSuccess(p); jenkins.assertLogContains("[1, 1, 1]", b); // Actual output today is "[null, null, 1]". }
I think the relevant code is AssignmentBlock in groovy-cps. In particular, I think that assignAndDone needs to create a new continuation to pass to lhs.set that calls k.receive(rhs) internally.
- links to