buildkite / pipeline-schema

A JSON schema for Buildkite’s pipeline file format

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Step without commands passes validation, but fails API upload

toothbrush opened this issue · comments

I ran into an issue when my build pipeline accidentally included a named step that lacked a command or other body. I whittled it down to this MWE:

# .buildkite/pipeline.yml
---
steps:
  - name: foo

I use buildkite-signed-pipeline, and what it shows me is the following:

~~~ Running commands
$ trap 'kill -- $$' INT TERM QUIT; buildkite-signed-pipeline upload
2023/10/31 02:19:03 Using secret from AWS SM arn:aws:secretsmanager:us-east-2:123:secret:/buildkite-agent/non-production/signed_pipeline-xyz
2023/10/31 02:19:03 $ buildkite-agent pipeline upload --dry-run
2023-10-31 02:19:03 INFO   Searching for pipeline config...
2023-10-31 02:19:03 INFO   Found config file ".buildkite/pipeline.yml"
2023-10-31 02:19:03 INFO   Updating BUILDKITE_COMMIT to "d34db33f"
2023-10-31 02:19:03 INFO   Reading pipeline config from STDIN
2023-10-31 02:19:04 ERROR  Unrecoverable error, skipping retries
2023-10-31 02:19:04 FATAL  Failed to upload and process pipeline: Pipeline upload rejected: Step is missing a type `{"name":"foo"}`
2023/10/31 02:19:04 exit status 1

I thought i'd be clever and introduce a JSON schema validation step using the jv tool, however it seems that your JSON schema doesn't prohibit the situation i describe:

$ jv -output detailed https://raw.githubusercontent.com/buildkite/pipeline-schema/main/schema.json ./.buildkite/pipeline.yml
{
  "valid": true
}

Is this behaviour expected? I would think the JSON schema should reject a pipeline the API will reject.