| | 1 | |
| | 2 | This page contains some design notes about the proposal of a bot to help automating the WPT import of tests inside WebKit. |
| | 3 | |
| | 4 | For reference check: https://lists.webkit.org/pipermail/webkit-dev/2020-March/031121.html |
| | 5 | |
| | 6 | ---- |
| | 7 | |
| | 8 | Config file: |
| | 9 | |
| | 10 | {{{ |
| | 11 | # X => days since last sucessful try to start a new one |
| | 12 | # Y => days since patch ready to say "ping.. please do anything" |
| | 13 | }}} |
| | 14 | |
| | 15 | State diagram: |
| | 16 | |
| | 17 | - Print internal state (prints WebKitBuild/$FileInternalState) |
| | 18 | - Clean all |
| | 19 | - Read WebKitBuild/$FileInternalState |
| | 20 | - lastBug has tag == SUCCESS and $date for $lastBug < X days: |
| | 21 | - print: "not doing anything because last bug $lastBug is less than X days" |
| | 22 | - return: green |
| | 23 | - NOT EXISTS $FileInternalState OR ($lastBug has tag != WORKING) |
| | 24 | - Open bug $currentBug |
| | 25 | - Create git branch bug-$currentBug |
| | 26 | - Get last WPT version from https://github.com/web-platform-tests/wpt.git |
| | 27 | - Update WPT version at LayoutTests/imported/w3c/resources/TestRepositories |
| | 28 | - Run script: Tools/Scripts/import-w3c-tests -v |
| | 29 | - Commit changes locally |
| | 30 | - Generate changelog |
| | 31 | - Commit changes locally (git) |
| | 32 | - Upload all changes (patch/HEAD) to $currentBug |
| | 33 | - Check that the upload worked (query bug; see patch attached) |
| | 34 | - Save $date and $currentBug in WebKitBuild/$FileInternalState with tag WORKING |
| | 35 | - return: green |
| | 36 | - $lastBug has tag == WORKING |
| | 37 | - Check bug state: |
| | 38 | - Closed and landed |
| | 39 | - Modify $FileInternalState and change the tag for $bug to SUCCESS |
| | 40 | - return: green. |
| | 41 | - Still open |
| | 42 | - Apply patch from bug $currentBug: Tools/Scripts/webkit-patch apply-from-bug --no-clean --no-update $currentBug |
| | 43 | - not applies |
| | 44 | - Close $currentBug saying that bug closed due to patch not longer applying. A new attempt will be made in other bug. |
| | 45 | - Modify $FileInternalState and change the tag for $bug to FAILURE |
| | 46 | - return: red (patch not longer applies) |
| | 47 | - applies: |
| | 48 | - Check EWS state for patch: |
| | 49 | - EWS: Still working |
| | 50 | - bot-comment: "EWS $foo $bar still working, not doing anything" |
| | 51 | - return: green |
| | 52 | - EWS: All green |
| | 53 | - Patch has r-: |
| | 54 | - comment: "i don't know how to handle an r-, sorry.. I will attempt a new update on a new bug" |
| | 55 | - Modify $FileInternalState and change the tag for $bug to FAILURE |
| | 56 | - return: red (patch had r-) |
| | 57 | - Patch has r? or r+ |
| | 58 | - if older than Y days: ping, saying the patch still applies, please (if r+ say one thing, if r? say other) |
| | 59 | - return: green. |
| | 60 | - Patch does not have r? |
| | 61 | - CC list of reviewers |
| | 62 | - Set r? on patch and aks for review. |
| | 63 | - If there is a $lastBug in $FileInternalState: |
| | 64 | - comment on $lastBug that the next attempt is ready for review in $currentBug |
| | 65 | - add $lastBug to "see also" of $currentBug |
| | 66 | - return: green. |
| | 67 | - EWS: Some red |
| | 68 | - Apply patch from bug $currentBug |
| | 69 | - clean-unwantend-files: remove .rej files and changes on changelogs |
| | 70 | - Update results/expectations from EWS: run script update-test-expectations-from-bugzilla |
| | 71 | - QA: this step should fail if no changes are done. return: red (EWS red, but no changes to expectations) |
| | 72 | - QA: match expectation files against patterns that may suggest a broken import, like "Can't find variable:" |
| | 73 | - if it matches: return red (Requires manual intervention, seems the import broke something) |
| | 74 | - Generate changelog |
| | 75 | - Upload all changes (patch) to bug |
| | 76 | - return: green |
| | 77 | |
| | 78 | Notes: When checking EWS status is useful to use a while-list to only check for test-bots. For example: it would be ok to ignore a red on the check-style bot. |