# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. services: # These reuse Arrow's images for simplicity. You won't be able to # build the image from here. ############################### C#/.NET ###################################### csharp-dist: image: mcr.microsoft.com/dotnet/sdk:8.0 volumes: - .:/adbc:delegated command: | /adbc/ci/scripts/csharp_pack.sh /adbc ################################ C/C++ ####################################### # Build/test with latest Clang cpp-clang-latest: image: ${REPO}:${ARCH}-cpp-clang-latest-adbc build: context: . dockerfile: ci/docker/cpp-clang-latest.dockerfile args: GO: ${GO} volumes: - .:/adbc:delegated environment: ADBC_CMAKE_ARGS: "-DADBC_CXXFLAGS=-Wdocumentation -DADBC_BUILD_WARNING_LEVEL=CHECKIN" command: "bash -c 'git config --global --add safe.directory /adbc && /adbc/ci/scripts/cpp_build.sh /adbc /adbc/build/clang-latest && env BUILD_ALL=0 BUILD_DRIVER_MANAGER=1 BUILD_DRIVER_SQLITE=1 /adbc/ci/scripts/cpp_test.sh /adbc/build/clang-latest'" cpp-gcc-latest: image: ${REPO}:${ARCH}-cpp-gcc-latest-adbc build: context: . dockerfile: ci/docker/cpp-gcc-latest.dockerfile args: GCC: 15 GO: ${GO} volumes: - .:/adbc:delegated environment: ADBC_CMAKE_ARGS: "-DADBC_BUILD_WARNING_LEVEL=CHECKIN" command: "bash -c 'git config --global --add safe.directory /adbc && /adbc/ci/scripts/cpp_build.sh /adbc /adbc/build/gcc-latest && env BUILD_ALL=0 BUILD_DRIVER_MANAGER=1 BUILD_DRIVER_SQLITE=1 /adbc/ci/scripts/cpp_test.sh /adbc/build/gcc-latest'" # Build and dynamically load shared drivers missing the common entrypoints cpp-shared-no-common-entrypoints-test: image: ${REPO}:${ARCH}-cpp-clang-latest-adbc volumes: - .:/adbc:delegated command: "bash -c 'git config --global --add safe.directory /adbc && /adbc/ci/scripts/cpp_shared_no_common_entrypoints_test.sh /adbc /adbc/build/shared-test/build /adbc/build/shared-test/local'" # Test building and installing the static libraries, then try linking to them. cpp-static-test: image: ${REPO}:${ARCH}-cpp-clang-latest-adbc volumes: - .:/adbc:delegated command: "bash -c 'git config --global --add safe.directory /adbc && /adbc/ci/scripts/cpp_static_test.sh /adbc /adbc/build/static-test/build /adbc/build/static-test/local'" ############################ Documentation ################################### docs: image: condaforge/miniforge3:latest volumes: - .:/adbc:delegated environment: ADBC_USE_ASAN: "0" ADBC_USE_UBSAN: "0" CGO_ENABLED: "1" command: | /bin/bash -c 'git config --global --add safe.directory /adbc && source /opt/conda/etc/profile.d/conda.sh && mamba create -y -n adbc -c conda-forge go --file /adbc/ci/conda_env_cpp.txt --file /adbc/ci/conda_env_docs.txt --file /adbc/ci/conda_env_java.txt --file /adbc/ci/conda_env_python.txt && conda activate adbc && /adbc/ci/scripts/cpp_build.sh /adbc /adbc/build && /adbc/ci/scripts/go_build.sh /adbc /adbc/build && /adbc/ci/scripts/python_build.sh /adbc /adbc/build && /adbc/ci/scripts/r_build.sh /adbc && /adbc/ci/scripts/docs_build.sh /adbc' ################################### Java ################################### java-dist: image: ${ARCH}/maven:${MAVEN}-eclipse-temurin-${JDK} volumes: - .:/adbc:delegated # N.B. never run JNI tests as we won't have the drivers built command: "/bin/bash -c '/adbc/ci/scripts/java_build.sh /adbc /adbc/dist && env BUILD_JNI=OFF /adbc/ci/scripts/java_test.sh /adbc'" # Build the JNI and driver libraries java-jni: image: ${REPO}:${ARCH}-python-${PYTHON}-wheel-manylinux-${MANYLINUX}-vcpkg-${VCPKG}-adbc volumes: - .:/adbc:delegated command: "/bin/bash -c 'env CMAKE_BUILD_TYPE=Release /adbc/ci/scripts/java_jni_build.sh /adbc /adbc/dist /adbc/local'" ############################### Python ##################################### python-venv: image: ${ARCH}/python:${PYTHON} volumes: - .:/adbc:delegated command: "/bin/bash -c 'apt update && apt install -y libsqlite3-dev build-essential cmake git && git config --global --add safe.directory /adbc && env BUILD_ALL=0 BUILD_DRIVER_SQLITE=1 ADBC_BUILD_TESTS=OFF ADBC_USE_ASAN=OFF ADBC_USE_UBSAN=OFF /adbc/ci/scripts/cpp_build.sh /adbc /adbc/build/venv && /adbc/ci/scripts/python_venv_test.sh /adbc /adbc/build/venv-test /adbc/build/venv/driver/sqlite/libadbc_driver_sqlite.so'" ############################ Python conda ################################## # Must be run as docker compose run -e HOST_USER_ID=$(id -u) python-conda python-conda: image: condaforge/linux-anvil-cos7-x86_64 volumes: - .:/adbc:delegated command: "/bin/bash -c 'conda config --remove channels defaults && /adbc/ci/scripts/python_conda_build.sh /adbc ${ARCH_CONDA_FORGE}.yaml /adbc/build'" python-conda-test: image: condaforge/mambaforge volumes: - .:/adbc:delegated command: "/bin/bash -c '/adbc/ci/scripts/python_conda_test.sh /adbc /adbc/build'" python-debug: image: ${REPO}:${ARCH}-python-debug-adbc build: context: . cache_from: - ${REPO}:${ARCH}-python-debug-adbc dockerfile: ci/docker/python-debug.dockerfile args: ARCH: ${ARCH} GO: ${GO} volumes: - .:/adbc:delegated command: /adbc/ci/docker/python-debug.sh ############################ Python sdist ################################## python-sdist: image: ${ARCH}/python:${PYTHON} volumes: - .:/adbc:delegated command: "/bin/bash -c 'git config --global --add safe.directory /adbc && source /adbc/ci/scripts/python_sdist_build.sh /adbc'" python-sdist-test: image: ${REPO}:${ARCH}-python-${PYTHON}-wheel-manylinux-${MANYLINUX}-vcpkg-${VCPKG}-adbc build: context: . cache_from: - ${REPO}:${ARCH}-python-${PYTHON}-wheel-manylinux-${MANYLINUX}-vcpkg-${VCPKG}-adbc dockerfile: ci/docker/python-wheel-manylinux.dockerfile args: ARCH: ${ARCH} GO: ${GO} MANYLINUX: ${MANYLINUX} PYTHON: ${PYTHON} REPO: ${REPO} VCPKG: ${VCPKG} volumes: - .:/adbc:delegated command: "'git config --global --add safe.directory /adbc && source /adbc/ci/scripts/python_sdist_test.sh ${ARCH} /adbc'" ############################ Python wheels ################################## # We build on a different image to use an older base image/glibc, then # relocate on a separate image so that we can use a newer docker for cibuildwheel python-wheel-manylinux-build: image: ghcr.io/apache/arrow-adbc:manylinux${MANYLINUX}-go${GO}-python${PYTHON}-vcpkg${VCPKG} build: context: . dockerfile: ci/docker/python-wheel-manylinux.dockerfile args: GO: ${GO} MANYLINUX: ${MANYLINUX} PYTHON: ${PYTHON} VCPKG: ${VCPKG} platforms: - linux/amd64 - linux/arm64 volumes: - .:/adbc # Must set safe.directory so go/miniver won't error when calling git command: "'git config --global --add safe.directory /adbc && /adbc/ci/scripts/python_wheel_unix_build.sh ${ARCH} /adbc /adbc/build'" python-wheel-manylinux-relocate: image: ghcr.io/apache/arrow-adbc:python${PYTHON} build: context: . dockerfile: ci/docker/python-wheel-manylinux-relocate.dockerfile platforms: - linux/amd64 - linux/arm64 volumes: - /var/run/docker.sock:/var/run/docker.sock - .:/adbc # Must set safe.directory so go/miniver won't error when calling git command: "bash -c 'git config --global --add safe.directory /adbc && python -m venv /venv && source /venv/bin/activate && /adbc/ci/scripts/python_wheel_unix_relocate.sh ${ARCH} /adbc /adbc/build'" python-wheel-manylinux-test: image: ${ARCH}/python:${PYTHON}-slim platform: ${PLATFORM} volumes: - .:/adbc:delegated command: /adbc/ci/scripts/python_wheel_unix_test.sh /adbc python-wheel-manylinux-freethreaded-test: image: ghcr.io/astral-sh/uv:trixie-slim platform: ${PLATFORM} volumes: - .:/adbc:delegated command: bash -c 'uv venv --python ${PYTHON} && source ./.venv/bin/activate && python -m ensurepip && PYTHON_GIL=0 /adbc/ci/scripts/python_wheel_unix_test.sh /adbc' ###################### Test database environments ############################ dremio: container_name: adbc-dremio image: dremio/dremio-oss:latest environment: DREMIO_JAVA_EXTRA_OPTS: "-Ddebug.addDefaultUser=true -Ddremio.eula.disabled=true" healthcheck: test: [ "CMD", "curl", "--fail", "http://localhost:9047" ] interval: 10s timeout: 10s retries: 5 start_period: 40s ports: - "9047:9047" - "32010:32010" - "31010:31010" - "45678:45678" dremio-init: container_name: adbc-dremio-init image: ${REPO}:adbc-dremio-init build: context: . cache_from: - ${REPO}:adbc-dremio-init dockerfile: ci/docker/dremio-init.dockerfile environment: dremio_url: http://dremio:9047 depends_on: dremio: condition: service_healthy entrypoint: "/init/bootstrap.sh" volumes: - "./ci/scripts/integration/dremio:/init" flightsql-test: image: ${REPO}:adbc-flightsql-test build: context: . cache_from: - ${REPO}:adbc-flightsql-test dockerfile: ci/docker/flightsql-test.dockerfile args: GO: ${GO} healthcheck: test: ["CMD", "curl", "--http2-prior-knowledge", "-XPOST", "-H", "content-type: application/grpc", "localhost:41414"] interval: 5s timeout: 30s retries: 3 start_period: 5m ports: - "41414:41414" volumes: - .:/adbc:delegated command: >- /bin/bash -c "cd /adbc/go/adbc && go run ./driver/flightsql/cmd/testserver -host 0.0.0.0 -port 41414" flightsql-sqlite-test: image: ${REPO}:golang-${GO}-sqlite-flightsql build: context: . cache_from: - ${REPO}:golang-${GO}-sqlite-flightsql dockerfile: ci/docker/golang-flightsql-sqlite.dockerfile args: GO: ${GO} ARROW_MAJOR_VERSION: ${ARROW_MAJOR_VERSION} ports: - 8080:8080 mssql-test: container_name: adbc_mssql_test image: mcr.microsoft.com/mssql/server:2022-latest environment: ACCEPT_EULA: "Y" MSSQL_SA_PASSWORD: "Password1!" ports: - "1433:1433" postgres-test: container_name: adbc_postgres_test image: postgres:${POSTGRES_VERSION:-latest} environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password healthcheck: test: ["CMD-SHELL", "pg_isready"] interval: 10s timeout: 5s retries: 5 ports: - "5432:5432" spiceai-test: container_name: adbc-spiceai build: context: . dockerfile: ci/docker/spiceai-init.dockerfile healthcheck: test: ["CMD", "curl", "--fail", "http://localhost:8090/v1/ready"] interval: 10s timeout: 5s retries: 5 ports: - "50051:50051" - "8090:8090" ################################ Verification ################################ verify-all-ubuntu: image: ubuntu:${UBUNTU} volumes: - .:/adbc:delegated command: | /adbc/ci/scripts/verify_ubuntu.sh /adbc