What's your idea?
On October 18th, 2007, Chad (hummonk) Phillips made an initial commit to the ‘Project Issue File Test’ module, with the description “initial commit of an integrated file testing platform for project issue module”. This kicked off the pursuit of automated testing integration between drupal.org and qa.d.o (then referred to as test.drupal.org). In 2009, Jimmy (boombatower) Berry performed a significant overhaul and redesign of the system, introducing a number of structural and architectural changes.
By the time Drupal 8 is launched, we’ll have been running for 5 years on the current architecture, and almost 6½ years on the project. In that time it has served us well; but has not kept up with technology and the changing needs of the Drupal community. As such, we need to start planning for the next iteration of Drupal’s Continuous Integration tools.
Currently, we have a single-purposed 'Simpletest' testing architecture stack. I envision the next generation of testing infrastructure breaking away from this model, and instead serving as more of a generic job dispatcher for a large assortment of automation tasks ... with the flexibility to support a variety of different job runners, so that it can evolve to support the changing requirements of the community in the future. (For example, a PIFR plugin for simpletest, a PHPUnit-only plugin, a Travis.CI integration plugin, etc.)
With a generic job dispatcher, worker functionality need not be restricted to testing purposes. We could have plugins for patch conflict detection, automatic rerolls, Drupal CodeSniffer assessments, etc. Worker plugin selection and/or environment specific arguments could be passed to the dispatcher in the job description (referential array or .travis.yml like file).
The dispatcher itself may be fully custom, or just a skin interfacing with something like jenkins on the back-end.
I also envision an upgrade to the simpletest worker environment, supporting on-demand turn-up/down of workers to deal with dynamic capacity requirements, "fast-fail" logic, preliminary (during testing) results, etc.
What are the benefits?
- Opportunity to break today's environment/plugin coupling, and test all supported environments
- New testing feature functionality
- Support changing testing requirements as the community/project evolves
What are the risks?
- Scope of work
- Maintaining stability of existing environment while implementing the new
How can we measure the impact of this idea? (metrics)
- Core testing suite run time
- Number of nasty testbot cursing tweets per month. ;)
Who directly benefits from / will use this improvement? (target audiences)
- Core and contrib developers / maintainers
Are additional resources available for discovery/implementation? (volunteer effort, financial backing, etc.)
I'll definitely make myself available as much as possible, and willing to contribute as much as able on both the overall architecture and project coordination angles ... though I can't quantify how much 'as able' is (from a weekend warrior perspective).
Comments
We definitely have hit the
We definitely have hit the outer limits of the current testing architecture, so +12837923 for this general idea. I also like that it leaves the question of dog-fooding it or not off the table, so we can discuss this idea on its own merits .
I have a number of questions about this...
1) How much (if any) of Jimmy's work on the D7 version of testing tools would be applicable here?
2) How close would something "off the shelf" like Travis CI get us there? I'm seeing a lot of support generally in the highest-rated proposals of letting other people solve these types of problems for us, and we handle the integration (PIFT or PIFR, I can never keep those two straight :P).
3) I get that this is "High difficulty," but I guess I'm wondering if this is a 24 month project or a 2 month project (assuming the DA dedicated staff time to help with implementation, which it may or may not be able to). It might be that it's literally impossible to say, but even a ballpark would help us figure out where in the roadmap something like this could go.
Jenkins?
Regarding dogfooding...
Would it be possible to base the architecture on an existing job scheduling system like Jenkins? It seems as though Jenkins was developed for exactly this purpose: automating job runs. In fact, I think it was set up for automating software builds, and running tests on every uploaded patch seems like exactly the type of thing it's set up to do.
And of course we are already using Jenkins for many other d.o infra tasks, such as cron runs, software updates, etc., so it seems as though we probably have some in-house expertise in using it.
Drupal programmer - http://poplarware.com
Drupal author - http://shop.oreilly.com/product/0636920034612.do
Drupal contributor - https://www.drupal.org/u/jhodgdon