CI-tron: The testing gateway

The CI-tron project started in 2020 to provide an easier-to-use infrastructure for bare-metal testing than existing solutions by:

  • Providing a plug-and-play experience by automating best practices and minimizing manual configuration;

  • Using containers rather than rootfses for test environments;

  • Allowing both interactive and CI sessions.

This enables developers and power users to share their local devices, either for development or CI. The project’s documentation is located at https://gfx-ci.pages.freedesktop.org/ci-tron/.

Installation

First, get a CI-tron dedicated gateway. To install CI-tron in the gateway, follow the instructions in https://pmos.ci-tron.dev/.

Warning

Due to a bug in CI-tron, it might be possible that the graphical UI boots to an error related to Cage. You can retry by pressing Ctrl+C, only if your gateway has GPU support. This can always be workarounded by logging through SSH to the root user.

After installation, and until integration of the build image is more ready, you need to modify /config/mars_db.yaml to remove the freedesktop gitlab instance and add the postmarketOS one like below:

gitlab:
  pmos:
    expose_runners: true
    expose_all_runners_by_default: true
    exposed_priorities:
      default:
        acl: null
    url: https://gitlab.postmarketos.org/
    registration_token: <set token>
    runner_type: project_type
    group_id: null
    # 226 is postmarketos/pmaports
    project_id: 226
    access_token: <set token>
    maximum_timeout: 21600

You need to set both access_token and registration_token, and can modify other parameters depending on the access you want to give to your runners. You can find more details about MarsDB configuration, including the scopes and permissions to give to the tokens, here.

Warning

Release 2025-12-08.1 of CI-tron has a bug where postmarketOS PDU gets reset recurrently and makes using our devices unusable. Unfortunately, release 2026-02-04.1 has been rolled back due to some regressions. If you want to use CI-tron before a new release is made, you have to clone the repo and deploy it to your gateway running make live-provision TARGET=$ip from the root of the repo, where $ip is the address of the gateway.

Adding devices under test to your gateway

Once you followed the previous steps, if your device is already supported (OP6 and OP6T), then it’s as simple as conecting the PDU to the gateway, and then moving over in the dashboard and clicking DISCOVER. The device should automatically be detected, start training, and eventually appear as a runner in gitlab.

If your device is not yet supported, you will need to add support for it to CI-tron. You can find an example in https://gitlab.freedesktop.org/gfx-ci/ci-tron/-/merge_requests/1051. You can do the changes in your CI-tron checkout and then deploy them with make live-provision TAGS=executor TARGET=$ip, or configure the device directly in your gateway by creating a /config/boots_db.yml.j2 file with the corresponding details.