Continuous integration/Workflow specification
High level overview 
It's important to understand what the tools we have are used for and in which order we assess and process their results.
- Linting (php-lint, jshint, ..)
Static analysis for common mistakes, syntax errors, code quality etc. For example references to APIs not available in old IE, trailing commas that crash IE etc, loose comparison that can lead to side effects etc.
- Server-side unit testing (PHPUnit)
Assert server-side modules works as expected on the unit level.
- Client-side unit testing (QUnit)
Assert client-side modules works as expected on the unit level.
- ... webkit
- ... browser matrix (TODO)
This will distribute the QUnit tests to the browser matrix (through TestSwarm and BrowserStack, or with Grunt and Saucelabs).
- ... webkit
- Integration tests (Selenium) (TODO)
Asserts high-level integration between different components and features that rely on OS interaction (creating an account and logging in, uploading files, drag and drop, editing/saving/reverting/recentchanges etc.). These are written in Selenium and ran semi-automatically via SauceLabs.
- These are run automatically from Jenkins before merging, deployed code passes this.
- This is being worked on and will be automatically from Jenkins before merging soon.
This example is for mediawiki/core.git, configured zuul-config/layout.yaml
Whenever a change is pushed for review, or approved (and needs to be merged), Zuul initiates the "test" pipeline (or "gate-and-submit" pipeline, which is the same for most projects):
- Zuul gets notified and starts the pipeline for project "mediawiki/core"
- Build steps:
- jenkins-bot leaves review on Gerrit.