Skip to content

feat(ci): run backend and frontend unit tests in GitHub Actions - #17

Merged
giggsoff merged 4 commits into
develop/4.4.0/4.5.0.3from
feat/ci-unit-tests
Sep 29, 2026
Merged

giggsoff merged 4 commits into
develop/4.4.0/4.5.0.3from
feat/ci-unit-tests

Conversation

@giggsoff

@giggsoff giggsoff commented Sep 21, 2026 •

Copy link
Copy Markdown
Collaborator

Runs the backend and frontend unit tests that need no minicluster on GitHub-hosted runners.

The build environment (dependencies, JDK 21, Maven, the Arenadata Hadoop/Hive components, the native toolchain) is a prebuilt image published to GHCR and rebuilt only when its inputs change; each stage runs in a container of it with the checkout bind-mounted. The workflow steps are one-line calls to scripts in docker/ci/, which work the same way on a workstation. A run takes about 30 minutes with that image and the ccache warm (1 min pull, 10 min build, 13 min tests), and about 50 minutes when the image has to be rebuilt first.

Not everything runs: tests that need HDFS, a running impalad, Kudu, HBase, Ranger, HMS events or the functional test data are skipped — 9 of 153 backend test binaries and 64 of 110 frontend test classes, each listed with a reason in docker/ci/be-tests-exclude.txt and docker/ci/fe-tests-exclude.txt. Every frontend class that is not listed runs, so a new one that needs a cluster turns CI red until it is added. docker/ci/README.md explains how to read a failure, when to skip a test and when to fix the environment instead, and how to reproduce either locally.

Also in this PR: java/pom.xml resolves Arenadata artifacts from the public maven.arenadata.io (no GitHub credentials needed for a build), docker/daemon_entrypoint.sh detects Java 21, UdfExecutorTest compares doubles within a few ULPs, and pip_download.py fetches package files from files.pythonhosted.org instead of the pypi.org redirect to it, which answers 503 while unhealthy and leaves every download retrying against a dead endpoint.

@giggsoff
giggsoff marked this pull request as draft September 21, 2026 17:13
The "arenadata" repository now points at Arenadata's public Maven repository
instead of GitHub Packages, so builds need no GitHub credentials for it.
The frontend compiles with --release 21 (fe/pom.xml), but the entrypoint only
looked for Java 8, 11 and 17 and refused to start otherwise.
Math.log and friends may differ from StrictMath by one ULP per call (see the
java.lang.Math javadoc), so an expected value such as Math.log(3) / Math.log(10)
lands 2 ULPs away from Hive's UDFLog result and the exact comparison failed.
@giggsoff
giggsoff force-pushed the feat/ci-unit-tests branch 5 times, most recently from 9d1f8f1 to 3f3ed27 Compare September 23, 2026 12:10
@giggsoff
giggsoff marked this pull request as ready for review September 23, 2026 13:14
Comment thread docker/ci/run-unit-tests.sh Outdated
Builds Impala and runs the unit tests that need no minicluster inside a prebuilt
environment image (docker/ci/env.Dockerfile, published to GHCR under a hash of
its inputs), with the checkout bind-mounted into a container of it. The image
also carries the Python packages buildall.sh needs, whose tarballs are gitignored
and would otherwise be downloaded from PyPI on every run. The workflow steps only
call scripts in docker/ci/, which work the same way locally; see
docker/ci/README.md for the test selection and how to read a failure.
@giggsoff
giggsoff merged commit 51bab13 into develop/4.4.0/4.5.0.3 Sep 29, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants