CI Documentation¶
Components¶
The OpenLane CI uses Nix and PIP to produce the following components:
Python Package → Uploaded to PyPI
Installable via
pip3 install openlane
Cached Linux Binaries -> Uploaded to Cachix
Usable by invoking
nix-shell
on the OpenLane repositoryDerivative: Docker Image → Uploaded to GHCR
Usable by using the Python package and adding
--dockerized
at the beginning of an invocation, no Nix needed
Cached macOS Binaries -> Uploaded to Cachix
Usable by invoking
nix-shell
on the OpenLane repository
All aforementioned products have their inputs linted for code-standards and have a smoke-test of some kind run on them before publishing. Additionally, the Python package build is attempted on all supported Python versions to account for API breaks (admittedly, the test is not comprehensive.)
Design Testing¶
In addition to the products, once the cached Linux binaries are produced, a test suite involving multiple designs is run using these binaries. A fast (~15-20 minute) test suite is run on every push and PR, and an extended test suite (~1h30m) is run nightly.
Failing tests will bar a PR from being merged unless this requirement is waived by a repository administrator.
Note
Do note that a commit pushed to main
with a new tag, even if it does have
failing design tests, will ultimately still publish a new release. This is done
for several reasons, but chiefly because this gives administrators the discretion
to publish critical fixes even if a couple designs fail.