Continuous integration/Quibble

Quibble is a Python script for setting up a MediaWiki instance and running various tests against it.

It works by cloning MediaWiki core and several extensions, installing dependencies, creating the database, and running one or more test commands.

Creating and deploying a new Quibble release
This is moderately fiddly and stressful, and should be done when you have a fair amount of time free and CI is relatively quiet; Fridays are commonly picked.

Creating the release
See RELEASE.rst  in the repository.

Creating images
This covers the creation of Docker images using the Quibble git tag (example)


 * 1) In integration-config's   directory, manually edit the   for the primary quibble image or images to specify the new version (as of 2020-06-04, this is for   and  ).
 * 2) Use docker-pkg to create the appropriate cascade of   updates, e.g.
 * 3) Build the images locally to ensure they still build:
 * 4) Check the locally-built images to ensure that quibble correctly updated:   and then   and see that the correct version number is shown.
 * 5) Create this update as a change, submit it to code review, and wait for it to be merged.
 * 6) Create and publish the new images on the CI production server:   (remember to   this action in IRC) – 🐌 this will take a while, perhaps half an hour or more

Update Jeknins jobs
Switch CI jobs over to the new image (example)


 * 1) In integration-config's  directory, update the Jenkins job-builder YAML files to specify the new docker images:
 * 2) Verify that these jobs build correctly:
 * 3) Get a list of all jobs which will be updated by the change; there will be around 150 as of 2020-06-04.
 * 4) Push these updates as a commit to code review.
 * 5) Based on your knowledge of the changes in quibble, pick a likely simple, infrequent, fast-running job to manually change over, and push it:
 * 6) Manually trigger run a run of this job through the Jenkins Web interface, and carefully watch the output to ensure it works as it used to where it should, and in a different way where quibble's changes should change things.
 * 7) If you spot an error, rollback the job to the definition in master immediately rather than debugging live; remember that other people's workflows depend on CI continuing to work.
 * 8) Repeat this with increasingly major/high-profile jobs until you are satisfied that you or someone else on IRC would have noticed if the jobs were broken.
 * 9) Update the rest of the jobs in your list.
 * 10) Merge the commit as deployed.
 * 11) Continue to monitor CI for a while, in case things blow up despite your hard work. If it does, revert everything.