CI#

An overview of the environments and the virtual, and physical resources utilized for the xNVMe CI is illustrated below.

xNVMe CI Resource Overview

xNVMe CI environments and resources#

Infrastructure#

The main logical infrastructure component for the xNVMe CI is GitHUB Actions (GHA). GHA handles events occuring on the following repositories:

And decides what to execute and where. In other words GHA is utilized as a resource-scheduler and pipeline-engine. The executor role is delegated to CIJOE for details, then have a look at CIJOE in xNVMe.

The motivation for this separation is to make it simpler to reproduce build, test, and verfication issues occuring during a CI run, using locally available resources, by executing the CIJOE in xNVMe workflows and scripts.

Jobs#

The jobs performed by the xNVMe CI catch the following issues during integration of changes / contributions:

  • Code format issues

    • Linting and code-formating

    • clang-format for C

    • clippy for Rust

    • black / ruff for Python

  • Build issues

    • On a rich collection of Linux Distributions

    • macOS 12, 13

    • Windows 2022

  • Functional regressions

    • Running logical tests exercising all code-paths

    • Using a naive “ramdisk” backend

    • Using emulated NVMe devices via qemu

In addition to cathing issues, then the CI is also utilized for:

  • Benchmarking of xNVMe

    • Using physical machines

    • Measure peak IOPS for a single physical CPU core

    • Specifically for the integration of xNVMe in SPDK (bdev_xnvme)

  • Statically Analyze the C code-base

    • CodeQL via GitHUB

    • Coverity

  • Produce and deploy documentation

    • Run all example commands (.cmd files) and collect their output in .out files

    • Render the Sphinx-doc documentation as HTML

    • Upload rendered documentation to xnvme.io via GitHUB-pages

These following sections provide system-setup notes and other details for the various CI jobs.