Ambiguity of "type: manual" steps

If you set a pipeline to the following YAML:

steps:
  - "input"
  - command: echo "hi mom"

then using the API for “Get Pipeline”, I see the "steps": [{"type": "manual", "label": null}, ...] and when I run the pipeline, I see the two steps run in parallel (e.g. no dependency between the two). :+1:

Then, let’s set the pipeline to:

steps:
  - "block"
  - command: echo "hi mom"

then using the API, I see the "steps": [{"type": "manual", "label": null}, ...] and when I run the pipeline, I see the the second step blocked by the first.

Which means the pipeline itself is doing the right thing, but "type": "manual" in the API is ambiguous. Is it a Block step or is it an Input step?

(as a bonus test I tried a pipeline with - "manual" and when run it looks like its a Block step, so I think `- “input” likely should be coerced to an input step?)

This is also true for:

steps:
  - type: input

Ohh it gets juicier!

Both of these:

steps:
  - type: manual
    input: foobar
steps:
  - type: manual
    block: foobar

produces:

[
  {
    "type": "manual",
    "label": "foobar"
  }
]

I think the thing-that-coerces-for-API-sake is just shoving all the inputs into a type: manual which loses the nuance of Input/Block steps

Because this pipeline:

steps:
  - block: label
    blocked_state: "failed"

turns into:

[
  {
    "type": "manual",
    "label": "label"
  }
]

Hi @thejcannon👋 thank you for raising this!

It’s interesting how Buildkite’s API keeps things simple by treating all manual steps the same way. This makes the API easier to understand and use, which is always a plus for developers! By using a single field for all manual steps, the API stays consistent and avoids getting too complicated. This also makes it easier for Buildkite to add new types of manual steps in the future without causing problems for existing integrations.

Basically, the API focuses on the main idea of manual steps – needing a person to do something – while letting the specific details be handled in the YAML. This keeps things clean and user-friendly for everyone!

For more detailed information on Input and Block Steps, feel free to refer to Buildkite’s official documentation: