prplos/.gitlab
Petr Štetiar 5badc8a7d2
ci: add test execution timeouts with grace period for artifact collection
In commit 0c1a216ce82b ("ci: define time limits for runtime testing job
limits"), we've enabled time limits for runtime testing jobs to prevent
problematic test jobs from occupying precious testbed resources.

It turned out that the initial approach with the CI job limit wasn't
ideal, as it led to the immediate termination of CI jobs, preventing the
collection of useful artifacts like logs, thus making post-mortem
debugging of problematic tests impossible.

This commit introduces TEST_CUTOFF_TIMEOUT to limit test execution while
preserving time for artifact collection. The timeout is computed as:
CI_JOB_TIMEOUT - DUT_SLEEP_AFTER_BOOT - TEST_SETUP_TEARDOWN_DURATION
where TEST_SETUP_TEARDOWN_DURATION (6 minutes) reserves time for DUT
setup and artifact collection.

Two timeout mechanisms are implemented:

- CDRouter tests: custom timeout in testbed-cdrouter.py that monitors
  execution time and calls package_stop() for graceful termination when
  the deadline is reached, exiting with code 124 (used by `timeout`
  command).

- Testbed tests: The `timeout` command wraps test execution, sending a
  TERM signal at the deadline and a KILL signal after 10 seconds if
  needed.

Both approaches assure that artifact collection can proceed after test
execution is terminated, enabling debugging of timeout issues.

While at it, I've removed SimpleNamespace import in testbed-cdrouter.py
as reported by flake8.

References: PCF-2157
Link: https://gitlab.com/prpl-foundation/prplos/prplos/-/jobs/11818939729#L136
Link: https://gitlab.com/prpl-foundation/prplos/prplos/-/jobs/11882363749#L238
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2025-11-07 06:00:18 +00:00
..
cdrouter ci: cdrouter: ospv2: update phy and cypher expected mode 2025-10-29 11:10:55 +01:00
certs ci: ssh-server: add tests for pubkey auth and session features 2025-07-31 10:35:18 +00:00
docker ci: builder: Install required Swig package for U-Boot prereq 2025-10-09 18:05:06 +00:00
mockups ci: sync with current prplos branch state 2025-07-31 10:31:53 +00:00
scripts ci: add test execution timeouts with grace period for artifact collection 2025-11-07 06:00:18 +00:00
testbed ci: mxl25641-hdk-6: fix CDRouter LAN interface alias 2025-10-11 16:02:41 +00:00
tests ci: cram: obuspa: Add MCASTD 2025-10-30 14:50:46 +00:00
build.yml Revert "PROVISORY: ci: build: temporarily whitelist MxL ebtables hash to fix CI" 2025-10-23 09:26:06 +00:00
cdrouter.yml ci: add test execution timeouts with grace period for artifact collection 2025-11-07 06:00:18 +00:00
coverity.yml ci: coverity: fix build timeout failure by increasing the timeout to 6 hours 2025-07-31 15:23:34 +00:00
docker.yml ci: fix wasting of runtime testing resources after failed builds 2025-07-31 15:27:24 +00:00
prplmesh.yml ci: prplMesh: unbuffer python stdout 2025-10-15 10:06:24 +00:00
README.md profiles,ci: sunset webui profile 2025-07-31 10:33:15 +00:00
release.yml ci: release: turris: fix sysupgrade image filename 2025-10-12 15:04:28 +00:00
sdk.yml ci: ipq807x: fix filenames and references after target rename to qualcommax 2025-07-31 15:25:51 +00:00
testbed.yml ci: add test execution timeouts with grace period for artifact collection 2025-11-07 06:00:18 +00:00

Content

This directory contains stuff used on the GitLab CI.

docker

Contains definitions for Docker images.

testbed

Contains definitions for testbed related tests.

scripts

Contains scripts used on GitLab CI.

tests

Contains tests used on GitLab CI.

build.yml

Contains definition of the GitLab CI build test job templates used during build stage. Those templates can then be extended by other GitLab CI jobs in order to keep things DRY.

.build test config

Allows build testing of specific configurations defined in the profiles directory, using scripts/gen_config.py under the hood.

Example usage:

include:
 - local: .gitlab/build.yml

stages:
 - build

build test netgear-rax40 prpl:
  extends: .build test config

Which is going to build test prplOS with netgear-rax40 and prpl profiles.

Description of CI variables:

  • CI_BUILD_CONFIG_EXTRA - list of additional config options which should be enabled(prefixed with +) or disabled (prefixed with -), for example +BUILD_LOG -SDK would result in CONFIG_BUILD_LOG=y and CONFIG_SDK=y config symbols in .config file.

docker.yml

Provides support for building, tagging and pushing the Docker images to image registry.

For example let's build image foo.

Prerequisites:

  • Create directory for new Docker image mkdir -p .gitlab/docker/foo
  • Docker image description $EDITOR .gitlab/docker/foo/Dockefile

Then just put following into .gitlab/docker/foo/gitlab.yml

build Docker image foo:
  extends: .build Docker image

testbed.yml

Provides bits needed for runtime testing on real device using labgrid Python testing framework.

Supported devices:

  • Netgear RAX40

sdk.yml

Provides support for the OpenWrt SDK utilizing the Docker SDK container under the hood.

.build feed with SDK

Allows compile testing of packages using the SDK.

Example usage, build testing of safec3 package from Intel's feed_opensource_apps feed.

include:
  - remote: https://gitlab.com/prpl-foundation/prplOS/prplos/-/raw/prplos/.gitlab/sdk.yml

build:
  extends: .build feed with SDK
  variables:
    CI_SDK_INSTALL_FEEDS: feed_target_mips
    CI_SDK_BUILD_PACKAGES: safec3

Description of CI variables:

  • CI_SDK_INSTALL_FEEDS - list of feeds which should be installed prior to building packages.
  • CI_SDK_BUILD_PACKAGES - list of packages which should be compile tested.
  • CI_SDK_BUILD_PARALLEL - max number of threads to use for make (defaults to nproc if unset).

.generate SDK package build jobs

Generates sdk-package-jobs.yml with separate build jobs for every package so the builds of those packages can run in parallel. It's supposed to be executed by the child pipeline .execute SDK package build jobs.

.execute SDK package build jobs

It's supposed to execute jobs generated in sdk-package-jobs.yml generated by .generate SDK package build jobs job.