Roadmap - waffle-ops/waffle GitHub Wiki

Note: The roadmap for all branches is subject to change over time. This is really a place to document where we are at and where we are going and it is still somewhat fluid at the moment. The 0.x branch taught us a lot of lessons and we are going to break ground on a 1.x branch that uses a somewhat different architecture that will allow us to implement and test features more quickly.


0.x Roadmap

Upcoming Changes:

No new features :disappointed:

Waffle was created out of necessity to help wrangle in a bunch of projects and it did its job well! However, new features are very difficult to add since Waffle is intended to support such a wide range of use cases. Waffle started out as a proof of concept and grew too quickly. We never really added a unit test suite (or even considered making Waffle unit testable) so implementing new features is difficult as changes have to verified manually. So the 0.x branch is now in maintenance mode. Critical bug fixes will be released, but nothing new will be coming to the 0.x branch.

Deprecations

Some of the features implemented in 0.x were not thought out completely, never fully supported, or are no longer needed. As such, we will be revisiting these items in 1.x and removing / updating them as necessary which will create breaking changes. These will be noted and flagged in a future 0.x release as they are confirmed. Features likely to be deprecated

  • The iterate command.
    • This was originally added so let us run updates on multiple projects at the same time because Composer 1.x was pretty slow. Composer 2.x is much faster and made this feature more or less moot for its original purpose.

1.x Roadmap

Partial Rewrite :disappointed: (to support unit tests :smile:)

Starting over is almost never a good idea, but in this case I think it is needed. We don't intend on adopting TDD in its truest form, but we really need to get some test coverage on Waffle so that we can be sure we are not breaking for any of the use cases we officially support.

Waffle is essentially a task runner with some predefined tasks built-in. These built-in tasks execute commands from other tools like Composer, Drush, and WP-CLI. Waffle waits for immediate feedback as each task runs and will try to handle exceptions where they occur. The built-in tasks are often chained together and are dependent on the success of the previous task.

The new architecture will take a slightly different approach such that every task that needs to run will be added to a queue. The queue will be processed before Waffle exits. This will give us the ability to inspect the queue as part of our unit tests. It will also give us the ability to perform dry runs of Waffle commands which could be useful for debugging local sites when Waffle does something unexpected.

Unit Tests

See above! We need unit tests if we are going to support these third-party tools. The tools are already difficult enough to manage as they do not use consistent error codes. We want to get to a point where we check that Waffle is constructing a command for these third-party tools and then passing that command off to be executed. Ideally we will care less about the result of the command (though we will monitor the exist code and allow the user to choose what happens in the case of errors). We can easily write unit tests to ensure Waffle is generating the correct commands given a provided .waffle.yml file.

Scaffolding

We think it would be great if Waffle had a feature where some project scaffolding could be added (or reapplied) to a project. This could be useful for setting up standardized README files or keeping git hooks in sync.

Hooks

It would be great if there was a hook system in place where you could tell Waffle to run a custom task before of after some other Waffle task.

CI Integration

Eventually we would like to have Waffle run tests and perform deployments in CI layers. Deployments could potentially rely on Deployer, or perhaps we will come up with something completely different.