Page MenuHomePhabricator

Quibble initialize step should only clone the target repository
Open, Needs TriagePublic

Description

The first thing Quibble does is to clone all the repositories (mediawiki/core, potentially vendor and extension dependencies). It then cd to the repo that triggered the job and runs composer test and npm test. If one fails, that means we clone all the other repositories for nothing.

Quibble should just clone the ZUUL_PROJECT repo, run the linter then clone the rest.

Event Timeline

hashar created this task.Dec 11 2018, 4:33 PM
Restricted Application added a subscriber: Aklapper. · View Herald TranscriptDec 11 2018, 4:33 PM
awight added a subscriber: awight.Mon, May 20, 9:12 PM
awight added a comment.EditedSun, Jun 9, 8:41 AM

I wanted to give this a try, as a way to work through some questions that I've been stewing on regarding my Command object refactor. How to represent the higher-level stages? My suspicion is that stages are just a special case of dependency relationships between the fine-grained steps, and there should actually be several stages. One especially quirky point is that I don't want to plan the entire job until after cloning repos, because we can't analyze whether certain steps (e.g. npm run selenium-test) make any sense until the code is present. Here are some thoughts about the stages generally (bigger scope than this task):

  • Clone ZUUL_PROJECT
  • Analyze what steps can be taken to test this repo (look for composer.json, package.json...) and plan first stage.
  • First test stage (T211702), all steps in parallel
    • composer test
    • npm install && npm test
  • Clone all dependencies
  • Analyze what can be tested (e.g. look for tests/selenium in each repo) and plan second stage.
  • Second test stage, some steps can be in parallel
awight added a comment.Sun, Jun 9, 8:49 AM

I'm imagining we might specify the process dependency graph in terms of abstract job milestones, so rather than couple tasks directly e.g. (repo_npm_test && repo_composer test -> clone dependencies), we would say (repo_npm_test && repo_composer_test -> REPO_TESTS_DONE) and (REPO_TESTS_DONE -> clone dependencies -> ALL_TESTS_READY) then (ALL_TESTS_READY -> ext_skin_composer_test), etc.