2020-07: Pipeline Architecture

Context

As the complexity of code generation grew, and with a partial view of the complexity yet to come, it became clear that we were facing a challenge. Each additional required function was making integration and testing progressively more difficult.

We also have the requirement to support a parallel pipeline that generates code appropriate for CrossPlane integration, and have a strong desire for an approach that minimizes the amount of ongoing maintenance.

Introducing a formal pipeline architecture, where each function forms a distinct pipeline stage, solves these problems.

  • Each pipeline stage can (in theory, at least) be tested independently, improving our confidence in the functionality

  • Dependencies between stages can be explicitly declared, allowing the validity of the pipeline to be checked

  • A single factory method can create both required pipeline variants

Decision

Adopted.

Status

Pipeline introduced in PR#171.

Stage prerequisites introduced in PR#366 and postrequisites in PR#1541.

Consequences

Individual pipeline stages are independently tested, but some require considerable set up to create the expected initial state required for execution. The addition of mini-pipelines in PR#1649 partially mitigates this.

References

Pipeline (software) on Wikipedia