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 repository

    • Derivative: 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.