summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Give actual error message when getting a change from Gerrit failsbaserock/sam/tweaksSam Thursfield2015-05-191-2/+2
| | | | | | | | | | | | | | | This makes it easier to debug configuration errors when using the `zuul` commandline tool. For example, if your zuul.conf points to an SSH key that doesn't exist, the error you would get before would be: zuul.rpcclient.RPCFailure: Invalid change: 37,1 The error you get after this patch is: zuul.rpcclient.RPCFailure: Invalid change: 37,1 ([Errno 2] No such file or directory: '/root/.ssh/id_rsa')
* Fix documentation generation with newer versions of SphinxSam Thursfield2015-05-191-1/+1
|
* Allow all zuul args to be set in zuul-clonerClark Boylan2015-05-151-1/+2
| | | | | | | | | Previously zuul-cloner required that no zuul-args be set. The intent was that all args be set or none be set and to disallow any partial setting of the zuul args. Add the condition to allow all zuul args to be set by allowing the length of the missing zuul args list to be 0. Change-Id: I944f12aa1148bce7d3998b400e8d6e86fd0164d5
* Merge "Simplify cloner required parameters"Jenkins2015-05-152-15/+14
|\
| * Simplify cloner required parametersClark Boylan2015-05-122-15/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Prior to this change you not only had to always supply zuul-* args or set ZUUL_* env vars but you had to also set zuul params that were unused. Trim down the required zuul params to only those that are used (branch, url, ref) and only require all of them if one is set. zuul-cloner is a useful tool for configuring git repos from a git cache even without zuul params, this change exposes that functionality. In particular this is handy if we ever want to run zuul-cloner outside of a CI context, for example on a developers laptop. Change-Id: I4f285b489df64007a6ec4c14522623f38939c74b
* | Merge "Replace ci.o.o links with docs.o.o/infra"Jenkins2015-05-151-1/+1
|\ \
| * | Replace ci.o.o links with docs.o.o/infraJeremy Stanley2015-05-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | The http://ci.openstack.org/ documentation site has been deprecated, replaced by redirects to corresponding paths within http://docs.openstack.org/infra/ where other Project Infrastructure documentation already resides. Change-Id: I765c42294c478d88076959462c5316a620a4f24a
* | | Fix git prune order in zuul-clonerClark Boylan2015-05-141-1/+6
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The prune() operation relies on `git branch -d -r` to remove remote branches that are not valid. `git branch` seems to require that the repo HEAD refer to something in refs/heads and explodes if it does not. Unfortunately the repo reset() operation in zuul sets HEAD to point to refs/remotes/origin/master which is not in refs/heads. This leads to prune() breaking if run after reset(). Example explosion: git.exc.GitCommandError: 'git branch -d -r origin/fetch_master' returned with exit code 128 stderr: 'fatal: HEAD not found below refs/heads!' Thankfully the fix is simple. We can prune() bad refs prior to reseting, at this point in time the value of HEAD is still valid for `git branch` allowing prune to do its job, then we reset to the origin ref. Change-Id: If97668f729db395fc697465d56c7d0667f994d0d
* | Merge "Merger: ensure_cloned() now looks for '.git'"Jenkins2015-05-122-1/+80
|\ \
| * | Merger: ensure_cloned() now looks for '.git'Antoine Musso2015-02-102-1/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | merger.Repo() would not clone a directory if the target path already exists, even though it might not have been cloned. Adjust the test to look whether '.git' exist (which can be either a directory or a file in the case of submodules). I came accross this issue when using Zuul cloner to clone two repositories, one having the other as a submodule. Given two repositories: - mediawiki/extension - mediawiki (having 'mediawiki/extension' has a submodule to /extension) We run: `zuul-cloner mediawiki mediawiki/extension` It first clone the mediawiki repository with a placeholder directory for the submodule. The directory structure is: . ├── .git/ └── mediawiki/ └── extension/ When cloning mediawiki/extension, ensure_cloned() would skip it since the directory exists. Looking for subpath '.git', we trick it in cloning the repository resulting in: . ├── .git/ │ └── modules/ │ └── extension/ └── mediawiki/ └── extension/ └── .git # note: a file, not a directory My use case is cloning a mediawiki/core branch which has several extensions registered as submodules that I am not going to initialize. Change-Id: I4fe67a1db31adc2e23e8baf57528fce76f282986
* | | Merge "Status: Move external dependencies into public_html/lib"Jenkins2015-05-113-11/+7
|\ \ \
| * | | Status: Move external dependencies into public_html/libTimo Tijhof2015-04-023-11/+7
| | | | | | | | | | | | | | | | Change-Id: Ib0cfdda5ded53af8e89aa239bd2f6e442f2537e3
* | | | Merge "Status: Use $DEST_DIR instead of $BASE_DIR/public_html"Jenkins2015-05-111-8/+9
|\ \ \ \ | |/ / /
| * | | Status: Use $DEST_DIR instead of $BASE_DIR/public_htmlTimo Tijhof2015-04-021-8/+9
| | | | | | | | | | | | | | | | Change-Id: Id3c47d4d5b70ff36098d1a9d1472e6a6fb2e89d3
* | | | Merge "Update the description for grey icons on status pg"Jenkins2015-05-111-1/+1
|\ \ \ \ | |_|_|/ |/| | |
| * | | Update the description for grey icons on status pgJoshua Hesketh2015-02-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When viewing the status page it makes sense that items with dependencies appear as children to those changes. As such hopefully make the grey dot description clearer that a change is only there to be tested by the child. Change-Id: Iadf9dee64dd143c9b6f0c4cf8786d3188a4df1d2
* | | | Merge "Adding doc reference of ZUUL_CHANGES"Jenkins2015-05-081-0/+4
|\ \ \ \
| * | | | Adding doc reference of ZUUL_CHANGESJulia Kreger2015-04-211-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adding a documentation entry describing the ZUUL_CHANGES parameter that is provided to builds associated with changes. Change-Id: I57be39b8b795edfb1f636db9469c18008afc14a5
* | | | | Status: Expose $.zuul object in zuul_start to allow extensionTimo Tijhof2015-05-081-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When embedding this into a branded dashboard with other pages it is preferable not to add custom hooks into these files but instead call zuul_start and be able to attach additional event handlers to zuul.app.on() or zuul.jq.on(). Used on https://integration.wikimedia.org/zuul/ and would likely be needed on http://status.openstack.org/zuul/ in the future as well. Change-Id: I77d935d67051d50d38db5a002f4bf766c4371731
* | | | | Fix race condition relating to change updatesJames E. Blair2015-05-071-10/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The gerrit event processing thread performs its own queries and updates of change objects outside of the main thread, possibly while those objects are being used in the main thread. Generally this is okay because typically only new data are being added to changes, and if any of the new data are relevant, the main thread will receive an event about it and update accordingly. However, in the process of updating changes in the event processing thread, some attributes of the change may be temporarily set to incorrect values, such as empty lists. Switch to atomic updates of those values so that if the main thread consults the change object, it has reasonably valid values. This may have caused sporadic failures of test_dependent_changes_dequeue, but is also capable of happening in production. Change-Id: I134d50fe2da8ef344ee8d4fb68a1eed0692b04e2
* | | | | Fix race in test_crd_check_duplicate moreJames E. Blair2015-05-071-6/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous fix was insufficient because multiple merge jobs could be run at once. Using the new orderedRelease method however should be sufficient, and it ensures only one job runs and finishes at a time. The previous code was more appropriate for a test of a gate pipeline and was probably copied from it. Change-Id: I0534c7ce6dd473cb71ba37c8c0fedef8e5ca72a5
* | | | | Merge "Fix race in test_crd_check_duplicate"Jenkins2015-05-071-6/+7
|\ \ \ \ \
| * | | | | Fix race in test_crd_check_duplicateJames E. Blair2015-05-071-6/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This test depends on an ordered build history, which means that we need to control when the builds are complete (with the worker), rather than when they start (with gearman). Change-Id: Ib667ddf2a60a473f02d0e85f227862997e459c3d
* | | | | | Merge "Fix timer jobs getting aborted from abandoning a change"Jenkins2015-05-073-2/+52
|\ \ \ \ \ \
| * | | | | | Fix timer jobs getting aborted from abandoning a changeSteve Varnau2015-04-033-2/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NullChange returned equal for any change in the project, now only returns equal for a NullChange (_id None) in the project. Also added test case for the issue. Change-Id: I4e43d1aa6cb040f775308f18333e090ff20e0dc0 Closes-Bug: 2000223
* | | | | | | Merge "web: Allow clients (browsers, proxies) to cache status.json"Jenkins2015-05-072-1/+9
|\ \ \ \ \ \ \ | |_|/ / / / / |/| | | | | |
| * | | | | | web: Allow clients (browsers, proxies) to cache status.jsonTimo Tijhof2015-04-042-1/+9
| | |_|_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Follows-up aa4f2e7. While we're sending Last-Modified already, that's purely informational and doesn't do much. In theory proxies could figure it out by observing or polling the backend (with rate limiting) but afaik that isn't generally implemented. Web browsers typically send If-Modified-Since. So for requests coming from the users directly, Response.conditional_response_app handles the If-Modified-Since header and returns early with HTTPNotModified if needed (and no body content). In addition Cache-Control/Expires headers allow clients/proxies to handle it themselves (without even a 304 rountrip). This is preferred and informs the client of the actual expiry instead of having it ask us every time whether or not a timestamp is too old. Response: 200 OK Cache-Control: public, must-revalidate, max-age=(seconds) Expires: (RFC 2822 timestamp + seconds) Last-Modified: (RFC 2822 timestamp) Request: GET If-Modified-Since: (RFC 2822 timestamp) Response: 304 Not Modified Expires: (RFC 2822 timestamp + seconds) http://docs.webob.org/en/1.1/modules/webob.html Change-Id: I51f31f9d7965d805e147fda4070feead528601ac
* | | | | | Update to gear 0.5.7James E. Blair2015-05-073-7/+11
| |_|/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is no API or behavioral change required, but gear 0.5.7 has significant performance improvements, enough so that it is required for OpenStack's installation, so bump the requirement here. Gear 0.5.6 has a regression that causes Zuul tests (but not actual operation) to fail. Also includes an unrelated test race fix: the order in which jobs completed in the test_crd_check_git_depends test was random. Switch to releasing them in sequence for easier comparison with the build history at the end. Change-Id: I281356a620c017a546ec04a0a767cf34c1fc62bf
* | | | | Merge "Update zuul-changes.py doc to match usage"Jenkins2015-04-091-6/+4
|\ \ \ \ \ | |_|/ / / |/| | | |
| * | | | Update zuul-changes.py doc to match usageRamy Asselin2015-04-031-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | zuul-changes.py does not accept --review-host param since 574ec76a6085b13fb1f02697e68baea7cc0bb63b It's usage output is: usage: zuul-changes.py [-h] url pipeline_name Correct the docs to match. Change-Id: Iab8158f73f6b1611d088377e36a7d076907bf8f6
* | | | | Merge "Fix race in CRD duplicates test"Jenkins2015-04-031-1/+4
|\ \ \ \ \
| * | | | | Fix race in CRD duplicates testClark Boylan2015-03-021-1/+4
| | |_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The CRD duplicates test was removing the job hold flag which meant all FakeBuild threads were racing each other to update the FakeWorker history. Avoid this by releasing jobs for one change at a time and letting them settle before checking the job history list. Change-Id: I86ee058546d2f0b833106725b419a8adcb1b7508
* | | | | Merge "Fix checking all builds are waiting in tests"Jenkins2015-04-032-18/+16
|\ \ \ \ \
| * | | | | Fix checking all builds are waiting in testsJames E. Blair2015-04-022-18/+16
| | |/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The check for whether all outstanding builds are waiting (which means the system is stable and may be examined) did not account for builds which may have just started running but had not reported their start back to Zuul. This means that the test system could determine the system had settled while a job start packet was in-flight. This has been seen to cause the test_abandoned_gate test to fail due to the inconsistent state. Since this race can occur in reality, also update the launcher itself to more gracefully handle this condition. Change-Id: I734094514db294564f6526e42b801a7e1d22a021
* | | | | Delay Gerrit events by 5sJames E. Blair2015-04-023-4/+14
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When querying a change immediately after a patchset upload, Gerrit may return incorrect data about dependent changes. In order to avoid this, ensure at least 5 seconds have elapsed before delivering any Gerrit events to Zuul. Change-Id: I95c459f52562556ca1722878e32388d51033e86c
* | | | Add commit needed-byJames E. Blair2015-04-024-2/+123
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In order to find reverse dependencies specified by cross-repo "Depends-On" headers, search for the occurance of a given change-id in commit messages, and then filter the result set for "Depends-On" headers. Add those cross-repo reverse dependencies to the already supplied Gerrit git reverse dependencies. This should cause behaviors such as automatic enqueuing of reverse dependencies on merges to apply to CRD as well as git-dependencies. When collecting reverse CRD, update cached Zuul change records. This corrects a bug where if change A depends on B in a different repo, and change B is updated with a new patchset, Zuul's cached record for change A will still point to the old patchset of change B. This change corrects that by causing B to trigger a refresh of A when the reverse CRD is noted. Change-Id: I1bcf1f0fa0ea1c20b01ea478a83f179b612a0ae9
* | | Log merger job uuidsJames E. Blair2015-03-121-2/+2
| | | | | | | | | | | | | | | | | | | | | When a merger receives a job, log the uuid for better correlation with the zuul server. Change-Id: I589c0435b17ed4f85e33cc2049c88e695e20d764
* | | Improve merge client loggingJames E. Blair2015-03-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | When submitting a job to the mergers, log more information about the job. Specifically the UUID will now be included for easier cross-correlation with completion events. Change-Id: Id92ae0c73f725da23761c59c97f0d39d64e802a9
* | | Merge "Reset & clean workspace repo for better hygiene"Jenkins2015-03-051-1/+1
|\ \ \
| * | | Reset & clean workspace repo for better hygieneOri Livneh2015-01-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Rather than just updating the repository, have zuul.Cloner update, reset to remote HEAD, and remove untracked files. Change-Id: I6813c84ebf7ce5fc87ffea390e035fd19597d71c
* | | | Merge "Fix int conversion in swift"Jenkins2015-03-051-1/+3
|\ \ \ \
| * | | | Fix int conversion in swiftJames E. Blair2015-02-271-1/+3
| | |/ / | |/| | | | | | | | | | Change-Id: I1e07978f12341214301f1e4b01f0b57047794728
* | | | Merge "Update zuul-changes to use the enqueue command"Jenkins2015-03-051-10/+11
|\ \ \ \
| * | | | Update zuul-changes to use the enqueue commandJames E. Blair2015-03-031-10/+11
| |/ / / | | | | | | | | | | | | Change-Id: I990cd0282f8e6d7706dc1bb6b6573b929623a171
* | | | Merge "Only format swift string parameters"Jenkins2015-03-031-0/+2
|\ \ \ \ | |/ / / |/| | |
| * | | Only format swift string parametersClark Boylan2015-02-201-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some swift parameters are integer in type and they do not support the string format operation. Only format parameters if they are a string and pass integers (and other types) through as is. Change-Id: I8d7a5bb25f7be00a5cb02b81292a548f033cad8a
* | | | Merge "Remove job parameters from status.json"Jenkins2015-02-263-5/+0
|\ \ \ \
| * | | | Remove job parameters from status.jsonJames E. Blair2015-02-253-5/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | They don't have anything particularly sensitive now, but they might in the future, and they can be quite large (thus making status.json large). Since the zuul client command uses the same data, remove the parameters column from its output. Change-Id: I681c576a25012a6fb0733f468778576d6003c088
* | | | | Merge "Don't report on non-live changes dequeueing"Jenkins2015-02-261-4/+5
|\ \ \ \ \
| * | | | | Don't report on non-live changes dequeueingJames E. Blair2015-02-181-4/+5
| | |/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a non-live change was removed from the queue because one of its dependencies was removed, do not report on that change. The live change will eventually be removed for the same reason and it will report. Once is all that is needed. This should not normally happen, but we have seen it occur when dependencies have somehow changed behind zuul's back, possible because of an error in Gerrit. Change-Id: Ibb8daafb064e841606083d648b81389966d5333e