Add support for Concourse 5.x in_parallel step
Resolves #300. Because `in_parallel` is a drop-in replacement for `aggregate`, the code has been designed to mimic `aggregate` exactly.
This commit is contained in:
@@ -361,17 +361,20 @@ public class PipelineYmlSchema implements YamlSchema {
|
||||
YBeanType aggregateStep = f.ybean("AggregateStep");
|
||||
YBeanType doStep = f.ybean("DoStep");
|
||||
YBeanType tryStep = f.ybean("TryStep");
|
||||
YBeanType inParallelStep = f.ybean("InParallelStep");
|
||||
|
||||
YBeanType[] stepTypes = {
|
||||
getStep,
|
||||
putStep,
|
||||
taskStep,
|
||||
aggregateStep,
|
||||
inParallelStep,
|
||||
doStep,
|
||||
tryStep
|
||||
};
|
||||
YBeanUnionType step = f.yBeanUnion("Step", stepTypes);
|
||||
addProp(aggregateStep, "aggregate", f.yseq(step));
|
||||
addProp(inParallelStep, "in_parallel", f.yseq(step));
|
||||
addProp(doStep, "do", f.yseq(step));
|
||||
addProp(tryStep, "try", step);
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<p>Performs the given steps in parallel.</p><p>If any sub-steps in an in_parallel result in an error, the in_parallel step as a
|
||||
whole is considered to have errored.</p><p>Similarly, when aggregating <a href="task-step.html"><code>task</code></a> steps, if any
|
||||
<em>fail</em>, the in_parallel step will fail. This is useful for build matrixes:</p><div class="highlight"><pre class="verbatim"><span class="t"></span><span class="t"></span><span class="t"></span><span class="nv"></span><span class="py">plan</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"></span><span class="t"></span><span class="t">
|
||||
</span><span class="t"></span><span class="pi">-</span><span class="t"></span><span class="t"> </span><span class="t"></span><span class="nv"></span><span class="py">get</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">some-repo</span><span class="t">
|
||||
</span><span class="t"></span><span class="t"></span><span class="t"></span><span class="pi">-</span><span class="t"></span><span class="t"> </span><span class="t"></span><span class="nv"></span><span class="py">in_parallel</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"></span><span class="t"></span><span class="t">
|
||||
</span><span class="t"> </span><span class="pi">-</span><span class="t"></span><span class="t"> </span><span class="t"></span><span class="nv"></span><span class="py">task</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">unit-windows</span><span class="t">
|
||||
</span><span class="t"> </span><span class="t"></span><span class="t"></span><span class="t"></span><span class="t"></span><span class="nv"></span><span class="py">file</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">some-repo/ci/windows.yml</span><span class="t">
|
||||
</span><span class="t"> </span><span class="nv">-</span><span class="sp"> </span><span class="py">task</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">unit-linux</span><span class="t">
|
||||
</span><span class="t"> </span><span class="py">file</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">some-repo/ci/linux.yml</span><span class="t">
|
||||
</span><span class="t"> </span><span class="nv">-</span><span class="sp"> </span><span class="py">task</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">unit-darwin</span><span class="t">
|
||||
</span><span class="t"> </span><span class="py">file</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">some-repo/ci/darwin.yml</span></pre></div><p>The <code>in_parallel</code> step is also useful for performing arbitrary steps in
|
||||
parallel, for the sake of speeding up the build. It is often used to fetch
|
||||
all dependent resources together:</p><div class="highlight"><pre class="verbatim"><span class="t"></span><span class="t"></span><span class="t"></span><span class="nv"></span><span class="py">plan</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"></span><span class="t"></span><span class="t">
|
||||
</span><span class="t"></span><span class="pi">-</span><span class="t"></span><span class="t"> </span><span class="t"></span><span class="nv"></span><span class="py">in_parallel</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"></span><span class="t"></span><span class="t">
|
||||
</span><span class="t"> </span><span class="pi">-</span><span class="t"></span><span class="t"> </span><span class="t"></span><span class="nv"></span><span class="py">get</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">component-a</span><span class="t">
|
||||
</span><span class="t"> </span><span class="t"></span><span class="t"></span><span class="pi">-</span><span class="t"></span><span class="t"> </span><span class="t"></span><span class="nv"></span><span class="py">get</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">component-b</span><span class="t">
|
||||
</span><span class="t"> </span><span class="t"></span><span class="t"></span><span class="pi">-</span><span class="t"></span><span class="t"> </span><span class="t"></span><span class="nv"></span><span class="py">get</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">integration-suite</span><span class="t">
|
||||
</span><span class="t"></span><span class="t"></span><span class="t"></span><span class="pi">-</span><span class="t"></span><span class="t"> </span><span class="t"></span><span class="nv"></span><span class="py">task</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">integration</span><span class="t">
|
||||
</span><span class="t"> </span><span class="t"></span><span class="t"></span><span class="t"></span><span class="t"></span><span class="nv"></span><span class="py">file</span><span class="t"></span><span class="pi">:</span><span class="t"></span><span class="t"> </span><span class="nv"></span><span class="nv">integration-suite/task.yml</span></pre></div>
|
||||
@@ -313,6 +313,9 @@ public class ConcourseEditorTest {
|
||||
, // ==============
|
||||
"get: <*>"
|
||||
, // ==============
|
||||
"in_parallel:\n" +
|
||||
" - <*>"
|
||||
, // ==============
|
||||
"put: <*>"
|
||||
, // ==============
|
||||
"task: <*>"
|
||||
@@ -349,6 +352,8 @@ public class ConcourseEditorTest {
|
||||
" - do: []\n" +
|
||||
" - aggregate:\n" +
|
||||
" - task: perform-something\n" +
|
||||
" - in_parallel:\n" +
|
||||
" - task: perform-something\n" +
|
||||
" - try:\n" +
|
||||
" put: test-logs\n"
|
||||
);
|
||||
@@ -356,6 +361,7 @@ public class ConcourseEditorTest {
|
||||
editor.assertHoverContains("get", "Fetches a resource");
|
||||
editor.assertHoverContains("put", "Pushes to the given [Resource]");
|
||||
editor.assertHoverContains("aggregate", "Performs the given steps in parallel");
|
||||
editor.assertHoverContains("in_parallel", "Performs the given steps in parallel");
|
||||
editor.assertHoverContains("task", "Executes a [Task]");
|
||||
editor.assertHoverContains("do", "performs the given steps serially");
|
||||
editor.assertHoverContains("try", "Performs the given step, swallowing any failure");
|
||||
@@ -500,6 +506,21 @@ public class ConcourseEditorTest {
|
||||
editor.assertHoverContains("aggregate", "Performs the given steps in parallel");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inParallelStepHovers() throws Exception {
|
||||
Editor editor;
|
||||
|
||||
editor = harness.newEditor(
|
||||
"jobs:\n" +
|
||||
"- name: some-job\n" +
|
||||
" plan:\n" +
|
||||
" - in_parallel:\n" +
|
||||
" - get: some-resource\n"
|
||||
);
|
||||
|
||||
editor.assertHoverContains("in_parallel", "Performs the given steps in parallel");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void reconcileSimpleTypes() throws Exception {
|
||||
Editor editor;
|
||||
@@ -3714,6 +3735,7 @@ public class ConcourseEditorTest {
|
||||
"- aggregate",
|
||||
"- do",
|
||||
"- get",
|
||||
"- in_parallel",
|
||||
"- put",
|
||||
"- task",
|
||||
"- try",
|
||||
@@ -4143,6 +4165,22 @@ public class ConcourseEditorTest {
|
||||
" - aggregate:\n" +
|
||||
" - <*>"
|
||||
);
|
||||
|
||||
editor = harness.newEditor(
|
||||
"jobs:\n" +
|
||||
"- name: build-docker-image\n" +
|
||||
" serial: true\n" +
|
||||
" plan:\n" +
|
||||
" in_"
|
||||
);
|
||||
editor.assertCompletionWithLabel("- in_parallel",
|
||||
"jobs:\n" +
|
||||
"- name: build-docker-image\n" +
|
||||
" serial: true\n" +
|
||||
" plan:\n" +
|
||||
" - in_parallel:\n" +
|
||||
" - <*>"
|
||||
);
|
||||
}
|
||||
|
||||
@Test public void relaxedContentAssist_primary_properties() throws Exception{
|
||||
|
||||
Reference in New Issue
Block a user