commit | e8fea2b15cf1a90f1a51847af31e54971d184fb8 | [log] [tgz] |
---|---|---|
author | Aviv Keshet <akeshet@chromium.org> | Mon Apr 29 19:17:21 2019 -0700 |
committer | Commit Bot <commit-bot@chromium.org> | Fri Jun 14 21:07:48 2019 +0000 |
tree | 9d61be77ba11067f1944c9d294aa955a6408b0b4 | |
parent | 5ca32c67b85ed0d4492a655c9f6c7a1ab7cd5340 [diff] |
test_stages: use skylab create-suite/wait-task for hwtests Cherrypicked to address crbug.com/973654 Use `skylab create-suite` and `skylab wait-task` to trigger skylab hwtests and collect their results. Do not land this until https://chromium-review.googlesource.com/c/infra/infra/+/1593690 is pushed to prod. BUG=chromium:957805 TEST=tryjob at https://cros-goldeneye.corp.google.com/chromeos/healthmonitoring/buildDetails?buildbucketId=8914633363238609216 shows both passing and failing suites are handled correctly Change-Id: I1328b09d717af558379483944f9cb2fe9c3522a0 Reviewed-on: https://chromium-review.googlesource.com/1589146 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: Aviv Keshet <akeshet@chromium.org> Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org> Reviewed-by: Aviv Keshet <akeshet@chromium.org> (cherry picked from commit ae4c830cc69e9774361a94bb2b72780132f97ee3) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1658751 Reviewed-by: Bernie Thompson <bhthompson@chromium.org> Commit-Queue: Aviv Keshet <akeshet@chromium.org>
This doc tries to give an overview and head start to anyone just starting out on Chromite development.
Before you get started on Chromite, we recommend that you go through ChromeOS developer guides at external (first) and then goto/chromeos-building for internal. The Gerrit starter guide may also be helpful. You should flash a built image on a test device (Ask around for one!).
Chromite was intended to be the unified codebase for anything related to building ChromeOS/ChromiumOS. Currently, it is the codebase responsible for several things including: building the OS from the requisite packages for the necessary board (parallel_emerge
), driving the infrastructure build workflow (CBuildBot), hosting a Google App Engine App, and providing utility functions for various scripts scattered around ChromeOS repositories. It is written for the most part in Python with some Bash sprinkled in.
You can use Code Search to lookup things in Chromite or ChromeOS in general. You can add a ChromeOS filter to only show files from CrOS repositories by going to CS Settings and adding a new Saved query: “package:^chromeos
” named “chromeos”.
chromite/api
The Chromite API for the CI system. The API exposes a subset of the chromite functionality that needs to be strictly maintained as much as possible.
chromite/cbuildbot
CBuildBot is the collection of entire code that runs on both the parent and the child build machines. It kicks off the individual stages in a particular build. It is a configurable bot that builds ChromeOS. More details on CBuildBot can be found in this tech talk (slides).
chromite/cbuildbot/builders
This folder contains configurations of the different builders in use. Each has its own set of stages to run usually called under RunStages function. Most builders used regularly are derived from SimpleBuilder class.
chromite/cbuildbot/stages
Each file here has implementations of stages in the build process grouped by similarity. Each stage usually has PerformStage as its primary function.
chromite/lib
Code here is expected to be imported whenever necessary throughout Chromite.
chromite/scripts
Unlike lib, code in scripts will not and should not be imported anywhere. Instead they are executed as required in the build process. Each executable is linked to either wrapper.py
or virtualenv_wrapper.py
. Some of these links are in chromite/bin
. The wrapper figures out the directory of the executable script and the $PYTHONPATH
. Finally, it invokes the correct Python installation by moving up the directory structure to find which git repo is making the call.
chromite/service
These files act as the centralized business logic for processes, utilizing lib for the implementation details. Any process that's implemented in chromite should generally have an entry point somewhere in a service such that it can be called from a script, the API, or anywhere else in lib where the process may be useful.
chromite/third_party
This folder contains all the third_party python libraries required by Chromite. You need a very strong reason to add any library to the current list. Please confirm with the owners beforehand.
chromite/utils
This folder contains smaller, generic utility functionality that is not tied to any specific entities in the codebase that would make them more at home in a lib module.
chromite/infra
This folder contains the chromite-specific infra repos.
chromite/*
There are smaller folders with miscellaneous functions like config, licencing, cidb, etc.
Before any testing, you should check your code for lint errors with:
$ cros lint <filename>
Every Python file in Chromite is accompanied by a corresponding filename_unittest.py
file. More on unit tests here. Once written, the unit tests can be run using ./run_tests
command in the Chromite directory. To test a specific file (say lib/triage_lib.py
), use
~/trunk/chromite $ ./run_tests lib/triage_lib_unittest
Run_tests without any argument runs all unit tests in Chromite. These unit tests are run in tryjobs, preCQ and CQ as well.
If you have to create a new Python file in Chromite, you should also create a {filename}_unittest.py
in the same directory with all the unit tests. Also make a link called {filename}_unittest
to /mnt/host/source/chromite/scripts/wrapper.py
. See the other unittest files around if unclear.
You can also fire a build on a server (or even locally) to have an entire build happen similar to how it would in Commit Queue.
$ cros tryjob -g <gerrit-change-id> <trybot-config> $ cros tryjob -h -> for help on more options
Add --hwtest
to add hardware testing to your tryjob. You can use the link provided by the command to check the status of your tryjob. Alternatively, you can go to the CI UI tryjobs page and filter results by your email.
Once you mark your CL as Commit-Queue +1 on Chromium Gerrit, the PreCQ will pick up your change and fire few preset config runs as a precursor to CQ. Currently, it doesn’t include any hardware or VM testing (for now!).
This is the final step in getting your change pushed. CQ is the most comprehensive of all tests. There are a multitude of CL's being validated in the same CQ. Once a CL is verified by CQ, it is merged into the codebase.
Refer to these talk slides on ChromeOS Build Overview.