Velox Backend CI

August 15, 2026 ยท View on GitHub

GitHub Actions (GHA) workflows are defined under .github/workflows/.

Docker Build

A weekly job defined in docker_image.yml builds the Docker images used for CI verification. The Dockerfiles (under dev/docker/) and their corresponding images are listed below:

fileimagescomments
Dockerfile.centos7-gcc13-static-buildapache/gluten:vcpkg-centos-7-gcc13centos 7, static link, jdk8
Dockerfile.centos8-gcc13-static-buildapache/gluten:vcpkg-centos-8-gcc13centos 8, static link, jdk8
Dockerfile.centos8-dynamic-buildapache/gluten:centos-8-jdk8centos 8, dynamic link, jdk8
Dockerfile.centos8-dynamic-buildapache/gluten:centos-8-jdk11centos 8, dynamic link, jdk11
Dockerfile.centos8-dynamic-buildapache/gluten:centos-8-jdk17centos 8, dynamic link, jdk17
cudf/Dockerfile.centos-9-jdk17-cuda13.1-cudfapache/gluten:centos-9-jdk17-cuda13.1-cudfcentos 9, dynamic link, jdk17

The Docker images can be found at https://hub.docker.com/r/apache/gluten/tags.

Vcpkg Caching

The Gluten main branch is pulled during the static build in Docker, and vcpkg caches binary data for all dependencies defined under dev/vcpkg. This binary data is cached into /var/cache/vcpkg, and CI jobs can reuse it in later builds. Setting VCPKG_BINARY_SOURCES=clear in the environment disables reuse of the vcpkg cache.

Arrow Libs Pre-installation

Arrow libs are pre-installed in the Docker image, since they don't change often and don't need to be rebuilt on every run.

.M2 Cache

Dependency libraries are pre-installed into /root/.m2 via mvn dependency:go-offline. Spark is set to 3.5 by default.

Ccache

Since the Docker image is rebuilt weekly, the ccache is mostly outdated, so it is removed from the image.

Updating the Docker Image

The GitHub secrets DOCKERHUB_USER and DOCKERHUB_TOKEN are used to push Docker images to Docker Hub. Note that GitHub secrets are not accessible in PRs from forked repos.

Delta Spark UT

delta_spark_ut.yml runs delta-io/delta's own spark test suite against a Gluten Velox bundle, so Gluten is validated against a real Delta release. A number of those tests fail today. Not because Gluten declines to offload a plan -- that should fall back to vanilla Spark and the test should still pass. Some are real gaps (fallback not happening where it should, metrics that differ from vanilla, native-side bugs), and some are expected: a test that asserts on the query plan sees a different plan once the scan or operators are offloaded, which is by design rather than a defect. So the job does not gate on "any failure": it compares each run against a committed baseline of known failures in .github/workflows/util/delta-spark-ut/known-failures.txt and fails on a new failure, or on a baseline test that starts passing (which means the baseline needs updating). It also fails outright if a run produced no usable results -- missing or truncated JUnit reports, or fewer shards than expected -- rather than passing on partial data.

It runs per PR only when Delta-relevant paths change (gluten-delta/**, backends-velox/src-delta*/**, or the pipeline's own files), nightly at 05:00 UTC for full coverage, and on demand via workflow_dispatch -- use the manual run to check a Velox/core change against Delta before merging.

To refresh the baseline after fixing something, run the workflow with update_baseline=true, download the delta-spark-ut-known-failures artifact, and use the known-failures.txt it contains to replace .github/workflows/util/delta-spark-ut/known-failures.txt in the repo. See .github/workflows/util/delta-spark-ut/README.md for the gate, the flaky-test quarantine and baseline bootstrapping. Open follow-ups are tracked in #12743.