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

  1. The included recommended tools are: Ngspice, OpenVAF

  2. The included recommended PDKs are: SKY130, IHP-Open-PDK

  3. Test dependencies are: Selenium with Chromium

  4. 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.