Update on DAG implementation: wait steps are back!

Over the last couple of months since it was first announced we’ve been making improvements to the DAG behaviour, and to ease the migration path.

You still need to enable it with dag: true in your YAML/JSON step definition, either in the UI or during a step upload.

We also still don’t have any UI changes – though this now is being worked on. We think it might look something like this:

The big change from the previous post is that wait steps now work as they do in existing non-DAG builds, creating automatic dependencies based on the order steps are defined in. This should make it much easier to experiment with, and transition to, a partially DAG-based pipeline: you can continue using your current pipeline definition as-is, and then insert additional dependencies via depends_on where needed.

As an example, given an existing pipeline that looks like this:

steps:
  - command: "bin/build-docker"
  - wait
  - command: "bundle exec rubocop"
  - command: "bundle exec rspec"
  - wait
  - command: "bin/coverage"

You can now replace only the later wait with a narrower depends_on, while leaving the rest of the pipeline unchanged:

dag: true
steps:
  - command: "bin/build-docker"
  - wait
  - command: "bundle exec rubocop"
  - key: rspec
    command: "bundle exec rspec"
  - command: "bin/coverage"
    depends_on: "rspec"

With that change, the coverage step will no longer wait for rubocop to finish, and can instead start as soon as rspec is completed.