Containers & continuous integration
For containerization and continuous integration, Docker and GitHub Actions are used.
Container image |
ordec-base |
ordec |
|---|---|---|
Purpose |
testing, development, building |
for users |
ORDeC installation |
❌ no |
✅ included |
Recommended tools (1) |
✅ included |
✅ included |
Recommended PDKs (2) |
✅ included |
✅ included |
Runtime dependencies |
✅ included |
✅ included |
Test dependencies (3) |
✅ included |
❌ no |
Build dependencies (4) |
✅ included |
❌ no |
Image size |
~ 2 GB |
~ 1 GB |
Base image |
Debian |
Debian + ordec-base |
Release cycle |
manual, commit hash as version |
synchronized to ORDeC / PyPI versions |
Build script |
/base.Dockerfile |
/Dockerfile |
The included recommended tools are: Ngspice, OpenVAF
The included recommended PDKs are: SKY130, IHP-Open-PDK
Test dependencies are: Selenium with Chromium
Build dependencies are: Npm
ordec-base Docker image
The custom base image ordec-base is used for building and testing ORDeC. It contains most build and runtime dependencies. It also includes an environment with a custom Ngspice build, PDKs and OpenVAF.
This base image prevents having to recompile the fixed environment too often. It is a bit optimized for size (e.g., build dependencies of ngspice are not in final image).
This image is automatically built through .github/workflows/base.yaml using base.Dockerfile. It can of course also be built manually using base.Dockerfile.
ordec Docker image
The ordec image is built on top of ordec-base. It contains an installation of ORDeC that can be run by users through a single docker command, as described in the Readme.
This image is automatically built through .github/workflows/build.yaml using Dockerfile. It can also be built manually using this Dockerfile.
In the future, ordec Docker images should be released in sync with the PyPI package ordec, both using git version tags (vX.Y.Z).
Automated pytest runs
Pytest is run automatically through .github/workflows/tests.yaml. Here, ordec-base is used as container in which the tests are run.
There are some slight mismatches between this GitHub action and the ordec-base image (maybe this can be addressed in the future):
While ordec-base uses the app user, GitHub actions seem to only work properly as the root user inside of a container.
The user venv /home/app/venv, where parts of the dependencies are installed, is reused by root.
The directory /home/app/ordec, where ORDeC is “supposed to go” in the logic of ordec-base, is ignored here.