From deca166aea5482ed4dd55851b3ae1c1a4d360c67 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 13:07:52 +0100 Subject: [PATCH 01/12] ci: add riscv64 C++ CI job on RISE native runners Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index 3effb88b606e..462bfaa52bd5 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -102,6 +102,13 @@ jobs: runs-on: ubuntu-24.04-arm title: ARM64 Ubuntu 22.04 C++ ubuntu: 22.04 + - arch: riscv64 + clang-tools: 18 + image: ubuntu-cpp + llvm: 18 + runs-on: ubuntu-24.04-riscv + title: RISCV64 Ubuntu 24.04 C++ + ubuntu: 24.04 env: ARCH: ${{ matrix.arch }} ARROW_SIMD_LEVEL: ${{ matrix.simd-level }} @@ -128,7 +135,8 @@ jobs: python-version: 3 - name: Setup Python on self-hosted runner if: | - contains(matrix.runs-on, 'self-hosted') + contains(matrix.runs-on, 'self-hosted') || + contains(matrix.runs-on, 'ubuntu-24.04-riscv') run: | sudo apt update sudo apt install -y --no-install-recommends python3 python3-dev python3-pip From 5a14094329b753f4168e30c1f5acd7c491a47661 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 15:05:54 +0100 Subject: [PATCH 02/12] fix: add ~/.local/bin to PATH for pip-installed archery on RISE runners Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index 462bfaa52bd5..f8ec996afad4 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -136,11 +136,12 @@ jobs: - name: Setup Python on self-hosted runner if: | contains(matrix.runs-on, 'self-hosted') || - contains(matrix.runs-on, 'ubuntu-24.04-riscv') + matrix.runs-on == 'ubuntu-24.04-riscv' run: | sudo apt update sudo apt install -y --no-install-recommends python3 python3-dev python3-pip python3 -m pip install -U pip + echo "$HOME/.local/bin" >> $GITHUB_PATH - name: Setup Archery run: python3 -m pip install -e dev/archery[docker] - name: Execute Docker Build From eb80b0d59cf066096b3e135bd4d79801f4ffba4f Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 15:23:10 +0100 Subject: [PATCH 03/12] fix: install docker-compose-plugin on RISE runner Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index f8ec996afad4..71cec8924d57 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -139,7 +139,7 @@ jobs: matrix.runs-on == 'ubuntu-24.04-riscv' run: | sudo apt update - sudo apt install -y --no-install-recommends python3 python3-dev python3-pip + sudo apt install -y --no-install-recommends python3 python3-dev python3-pip docker-compose-plugin python3 -m pip install -U pip echo "$HOME/.local/bin" >> $GITHUB_PATH - name: Setup Archery From 8eba6113faa2a83e0af73cf933d9893e6009c08c Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 15:29:42 +0100 Subject: [PATCH 04/12] fix: install docker compose from GitHub release (not in Ubuntu riscv64 repos) Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index 71cec8924d57..d0d4e742b190 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -139,9 +139,18 @@ jobs: matrix.runs-on == 'ubuntu-24.04-riscv' run: | sudo apt update - sudo apt install -y --no-install-recommends python3 python3-dev python3-pip docker-compose-plugin + sudo apt install -y --no-install-recommends python3 python3-dev python3-pip python3 -m pip install -U pip echo "$HOME/.local/bin" >> $GITHUB_PATH + - name: Install Docker Compose plugin (RISE runner) + if: matrix.runs-on == 'ubuntu-24.04-riscv' + run: | + COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -oP '"tag_name": "\K[^"]+') + sudo mkdir -p /usr/local/lib/docker/cli-plugins + sudo curl -SL "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-riscv64" \ + -o /usr/local/lib/docker/cli-plugins/docker-compose + sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose + docker compose version - name: Setup Archery run: python3 -m pip install -e dev/archery[docker] - name: Execute Docker Build From 70b63e9e2071b83ef70fc3c21e5fffb11563ee17 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 16:16:18 +0100 Subject: [PATCH 05/12] fix: reset Docker daemon config and install compose on RISE runner Dump existing daemon.json for debugging, then reset to a clean config. Fixes 'Client sent an HTTP request to an HTTPS server' from misconfigured registry mirrors on the runner. Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index d0d4e742b190..ccafc1f89516 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -142,15 +142,29 @@ jobs: sudo apt install -y --no-install-recommends python3 python3-dev python3-pip python3 -m pip install -U pip echo "$HOME/.local/bin" >> $GITHUB_PATH - - name: Install Docker Compose plugin (RISE runner) + - name: Setup Docker on RISE runner if: matrix.runs-on == 'ubuntu-24.04-riscv' run: | + # Install Docker Compose plugin (not in Ubuntu riscv64 repos) COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -oP '"tag_name": "\K[^"]+') sudo mkdir -p /usr/local/lib/docker/cli-plugins sudo curl -SL "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-riscv64" \ -o /usr/local/lib/docker/cli-plugins/docker-compose sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose docker compose version + + # Fix Docker daemon config - remove any HTTP registry mirrors + # that cause "Client sent an HTTP request to an HTTPS server" + echo "Current daemon.json:" + sudo cat /etc/docker/daemon.json 2>/dev/null || echo "(none)" + sudo mkdir -p /etc/docker + sudo tee /etc/docker/daemon.json > /dev/null << 'DAEMONJSON' + { + "features": { "containerd-snapshotter": true } + } + DAEMONJSON + sudo systemctl restart docker || sudo service docker restart + docker info | head -20 - name: Setup Archery run: python3 -m pip install -e dev/archery[docker] - name: Execute Docker Build From cc2a07bc70abceb0b90a0380c6a9ae72acee80df Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 16:20:29 +0100 Subject: [PATCH 06/12] fix: disable BuildKit on RISE runner and add Docker debug info BuildKit causes 'HTTP request to HTTPS server' on RISE runner. No systemd available, so can't restart dockerd. Disable BuildKit for riscv64 (use legacy builder) and add debug output. Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index ccafc1f89516..e4affa95da26 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -109,6 +109,7 @@ jobs: runs-on: ubuntu-24.04-riscv title: RISCV64 Ubuntu 24.04 C++ ubuntu: 24.04 + buildkit: "0" env: ARCH: ${{ matrix.arch }} ARROW_SIMD_LEVEL: ${{ matrix.simd-level }} @@ -152,25 +153,16 @@ jobs: -o /usr/local/lib/docker/cli-plugins/docker-compose sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose docker compose version - - # Fix Docker daemon config - remove any HTTP registry mirrors - # that cause "Client sent an HTTP request to an HTTPS server" - echo "Current daemon.json:" - sudo cat /etc/docker/daemon.json 2>/dev/null || echo "(none)" - sudo mkdir -p /etc/docker - sudo tee /etc/docker/daemon.json > /dev/null << 'DAEMONJSON' - { - "features": { "containerd-snapshotter": true } - } - DAEMONJSON - sudo systemctl restart docker || sudo service docker restart - docker info | head -20 + # Debug Docker setup + docker info 2>&1 | head -30 + docker buildx ls 2>&1 - name: Setup Archery run: python3 -m pip install -e dev/archery[docker] - name: Execute Docker Build env: ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} + DOCKER_BUILDKIT: ${{ matrix.buildkit || '1' }} run: | # GH-40558: reduce ASLR to avoid ASAN/LSAN crashes sudo sysctl -w vm.mmap_rnd_bits=28 From 8176fd3caa52a6bc8682b539034f6068a5b23ae5 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 17:29:23 +0100 Subject: [PATCH 07/12] fix: handle unknown arch in install_minio.sh with set -u Use ${archs[$arch]:-} default value to avoid 'unbound variable' error when running on architectures not in the archs array (e.g. riscv64). The script already handles missing arches gracefully with exit 0, but set -eu causes it to crash before reaching that check. Signed-off-by: Bruno Verachten --- ci/scripts/install_minio.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/scripts/install_minio.sh b/ci/scripts/install_minio.sh index 5efa03e82e20..5a7d05fc11a4 100755 --- a/ci/scripts/install_minio.sh +++ b/ci/scripts/install_minio.sh @@ -34,7 +34,7 @@ archs=([x86_64]=amd64 [s390x]=s390x) arch=$(uname -m) -if [ -z "${archs[$arch]}" ]; then +if [ -z "${archs[$arch]:-}" ]; then echo "Unsupported architecture: ${arch}" exit 0 fi From 8cddd6044a6281c3f6a5bfa2c056378671cfa7b9 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 17:36:06 +0100 Subject: [PATCH 08/12] fix: address review comments - PEP 668, pin compose, use matrix.arch - Use --break-system-packages for pip (PEP 668 on Ubuntu 24.04) - Pin docker compose to v5.1.1 instead of floating latest - Use matrix.arch == 'riscv64' instead of matching on runner label - Remove debug output (docker info/buildx ls) Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index e4affa95da26..842205c4dcf6 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -137,27 +137,24 @@ jobs: - name: Setup Python on self-hosted runner if: | contains(matrix.runs-on, 'self-hosted') || - matrix.runs-on == 'ubuntu-24.04-riscv' + matrix.arch == 'riscv64' run: | sudo apt update sudo apt install -y --no-install-recommends python3 python3-dev python3-pip - python3 -m pip install -U pip + python3 -m pip install --break-system-packages -U pip echo "$HOME/.local/bin" >> $GITHUB_PATH - name: Setup Docker on RISE runner - if: matrix.runs-on == 'ubuntu-24.04-riscv' + if: matrix.arch == 'riscv64' run: | - # Install Docker Compose plugin (not in Ubuntu riscv64 repos) - COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -oP '"tag_name": "\K[^"]+') + # Install Docker Compose v2 plugin (not in Ubuntu riscv64 repos) + COMPOSE_VERSION="v5.1.1" sudo mkdir -p /usr/local/lib/docker/cli-plugins sudo curl -SL "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-riscv64" \ -o /usr/local/lib/docker/cli-plugins/docker-compose sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose docker compose version - # Debug Docker setup - docker info 2>&1 | head -30 - docker buildx ls 2>&1 - name: Setup Archery - run: python3 -m pip install -e dev/archery[docker] + run: python3 -m pip install --break-system-packages -e dev/archery[docker] - name: Execute Docker Build env: ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} From bd0cd25ab85c3564d917938d9d1a41cbe26c786b Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 19:49:12 +0100 Subject: [PATCH 09/12] fix: increase timeout to 180min for riscv64 C++ build Build reached 1223/2257 (54%) at 75min timeout. Estimated ~150min total for full build + tests on RISE runner. Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index 842205c4dcf6..1deba847539b 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -75,7 +75,7 @@ jobs: name: ${{ matrix.title }} runs-on: ${{ matrix.runs-on }} if: ${{ !contains(github.event.pull_request.title, 'WIP') }} - timeout-minutes: 75 + timeout-minutes: ${{ matrix.timeout || 75 }} strategy: fail-fast: false matrix: @@ -107,6 +107,7 @@ jobs: image: ubuntu-cpp llvm: 18 runs-on: ubuntu-24.04-riscv + timeout: 180 title: RISCV64 Ubuntu 24.04 C++ ubuntu: 24.04 buildkit: "0" From a0e31838eaa138a95b771a1ddd53dc2b0e07a40f Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 21:28:21 +0100 Subject: [PATCH 10/12] fix: use Docker 29.x from riscv64 apt repo instead of disabling BuildKit Install Docker 29.3.0 from gounthar/docker-for-riscv64 apt repository. This replaces the Ubuntu-packaged Docker 26.1.5 which had BuildKit issues. Re-enables BuildKit (removes DOCKER_BUILDKIT=0 workaround). Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index 1deba847539b..6757eb0892f7 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -110,7 +110,6 @@ jobs: timeout: 180 title: RISCV64 Ubuntu 24.04 C++ ubuntu: 24.04 - buildkit: "0" env: ARCH: ${{ matrix.arch }} ARROW_SIMD_LEVEL: ${{ matrix.simd-level }} @@ -144,23 +143,26 @@ jobs: sudo apt install -y --no-install-recommends python3 python3-dev python3-pip python3 -m pip install --break-system-packages -U pip echo "$HOME/.local/bin" >> $GITHUB_PATH - - name: Setup Docker on RISE runner + - name: Upgrade Docker on RISE runner if: matrix.arch == 'riscv64' run: | - # Install Docker Compose v2 plugin (not in Ubuntu riscv64 repos) - COMPOSE_VERSION="v5.1.1" - sudo mkdir -p /usr/local/lib/docker/cli-plugins - sudo curl -SL "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-riscv64" \ - -o /usr/local/lib/docker/cli-plugins/docker-compose - sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose + # Install Docker 29.x from riscv64 apt repo (runner has Ubuntu 26.x which lacks BuildKit support) + wget -qO- https://github.com/gounthar/docker-for-riscv64/releases/download/gpg-key/docker-riscv64.gpg | \ + sudo tee /usr/share/keyrings/docker-riscv64.gpg > /dev/null + echo "deb [arch=riscv64 signed-by=/usr/share/keyrings/docker-riscv64.gpg] https://gounthar.github.io/docker-for-riscv64 trixie main" | \ + sudo tee /etc/apt/sources.list.d/docker-riscv64.list + sudo apt update + sudo apt install -y docker.io docker-buildx-plugin docker-compose-plugin || true + docker version docker compose version + docker buildx version - name: Setup Archery run: python3 -m pip install --break-system-packages -e dev/archery[docker] - name: Execute Docker Build env: ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} - DOCKER_BUILDKIT: ${{ matrix.buildkit || '1' }} + DOCKER_BUILDKIT: "1" run: | # GH-40558: reduce ASLR to avoid ASAN/LSAN crashes sudo sysctl -w vm.mmap_rnd_bits=28 From c2413463f2c2870475d8c6b7d5247cd3f410fa74 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 21:28:54 +0100 Subject: [PATCH 11/12] fix: increase riscv64 timeout to 300min (5h) Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index 6757eb0892f7..359d4d3d94e7 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -107,7 +107,7 @@ jobs: image: ubuntu-cpp llvm: 18 runs-on: ubuntu-24.04-riscv - timeout: 180 + timeout: 300 title: RISCV64 Ubuntu 24.04 C++ ubuntu: 24.04 env: From 048b632d292fad5401dd07ec1a9dbd9ed753958c Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 22 Mar 2026 21:38:30 +0100 Subject: [PATCH 12/12] fix: revert to DOCKER_BUILDKIT=0 (can't restart daemon mid-job) Docker 29.x install doesn't help because the daemon can't be restarted without systemd. The running daemon stays at 26.x with the BuildKit HTTP/HTTPS bug. DOCKER_BUILDKIT=0 with legacy builder works (proven to 63% in previous run). Need Ludovic to update runner image for a proper fix. Signed-off-by: Bruno Verachten --- .github/workflows/cpp.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index 359d4d3d94e7..74747efad5b5 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -110,6 +110,7 @@ jobs: timeout: 300 title: RISCV64 Ubuntu 24.04 C++ ubuntu: 24.04 + buildkit: "0" env: ARCH: ${{ matrix.arch }} ARROW_SIMD_LEVEL: ${{ matrix.simd-level }} @@ -143,26 +144,25 @@ jobs: sudo apt install -y --no-install-recommends python3 python3-dev python3-pip python3 -m pip install --break-system-packages -U pip echo "$HOME/.local/bin" >> $GITHUB_PATH - - name: Upgrade Docker on RISE runner + - name: Setup Docker on RISE runner if: matrix.arch == 'riscv64' run: | - # Install Docker 29.x from riscv64 apt repo (runner has Ubuntu 26.x which lacks BuildKit support) - wget -qO- https://github.com/gounthar/docker-for-riscv64/releases/download/gpg-key/docker-riscv64.gpg | \ - sudo tee /usr/share/keyrings/docker-riscv64.gpg > /dev/null - echo "deb [arch=riscv64 signed-by=/usr/share/keyrings/docker-riscv64.gpg] https://gounthar.github.io/docker-for-riscv64 trixie main" | \ - sudo tee /etc/apt/sources.list.d/docker-riscv64.list - sudo apt update - sudo apt install -y docker.io docker-buildx-plugin docker-compose-plugin || true - docker version + # Install Docker Compose v2 plugin (not in Ubuntu riscv64 repos) + # Can't upgrade Docker daemon mid-job (no systemd to restart) + # so we disable BuildKit to work around the HTTP/HTTPS issue + COMPOSE_VERSION="v5.1.1" + sudo mkdir -p /usr/local/lib/docker/cli-plugins + sudo curl -SL "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-riscv64" \ + -o /usr/local/lib/docker/cli-plugins/docker-compose + sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose docker compose version - docker buildx version - name: Setup Archery run: python3 -m pip install --break-system-packages -e dev/archery[docker] - name: Execute Docker Build env: ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} - DOCKER_BUILDKIT: "1" + DOCKER_BUILDKIT: ${{ matrix.buildkit || '1' }} run: | # GH-40558: reduce ASLR to avoid ASAN/LSAN crashes sudo sysctl -w vm.mmap_rnd_bits=28