Fix getting columns and add more tests #6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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. | |
name: Native Libraries (Unix) | |
on: | |
pull_request: | |
branches: | |
- main | |
paths: | |
- "adbc.h" | |
- "c/**" | |
- "ci/**" | |
- "docs/**" | |
- "glib/**" | |
- "go/**" | |
- "python/**" | |
- "ruby/**" | |
- ".github/workflows/native-unix.yml" | |
push: | |
paths: | |
- "adbc.h" | |
- "c/**" | |
- "ci/**" | |
- "docs/**" | |
- "glib/**" | |
- "go/**" | |
- "python/**" | |
- "ruby/**" | |
- ".github/workflows/native-unix.yml" | |
concurrency: | |
group: ${{ github.repository }}-${{ github.ref }}-${{ github.workflow }} | |
cancel-in-progress: true | |
permissions: | |
contents: read | |
env: | |
# Increment this to reset cache manually | |
CACHE_NUMBER: "1" | |
jobs: | |
# ------------------------------------------------------------ | |
# Common build (builds libraries used in GLib, Python, Ruby) | |
# ------------------------------------------------------------ | |
drivers-build-conda: | |
name: "Common Libraries (Conda/${{ matrix.os }})" | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: ["macos-latest", "ubuntu-latest"] | |
env: | |
# Required for macOS | |
# https://conda-forge.org/docs/maintainer/knowledge_base.html#newer-c-features-with-old-sdk | |
CXXFLAGS: "-D_LIBCPP_DISABLE_AVAILABILITY" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Get Date | |
id: get-date | |
shell: bash | |
run: | | |
echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT | |
- name: Cache Conda | |
uses: actions/cache@v4 | |
with: | |
path: ~/conda_pkgs_dir | |
key: conda-${{ runner.os }}-${{ steps.get-date.outputs.today }}-${{ env.CACHE_NUMBER }}-${{ hashFiles('ci/**') }} | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
miniforge-variant: Mambaforge | |
miniforge-version: latest | |
use-only-tar-bz2: false | |
use-mamba: true | |
- name: Install Dependencies | |
shell: bash -l {0} | |
run: | | |
mamba install -c conda-forge \ | |
--file ci/conda_env_cpp.txt | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.19.13 | |
check-latest: true | |
cache: true | |
cache-dependency-path: go/adbc/go.sum | |
- name: Build and Install (No ASan) | |
shell: bash -l {0} | |
run: | | |
# Python and others need something that don't use the ASAN runtime | |
rm -rf "$(pwd)/build" | |
export BUILD_ALL=1 | |
export ADBC_BUILD_TESTS=OFF | |
export ADBC_USE_ASAN=OFF | |
export ADBC_USE_UBSAN=OFF | |
export PATH=$RUNNER_TOOL_CACHE/go/1.19.13/x64/bin:$PATH | |
export ADBC_CMAKE_ARGS="-DCMAKE_UNITY_BUILD=ON" | |
./ci/scripts/cpp_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
- name: Go Build | |
shell: bash -l {0} | |
env: | |
CGO_ENABLED: "1" | |
run: | | |
export PATH=$RUNNER_TOOL_CACHE/go/1.19.13/x64/bin:$PATH | |
./ci/scripts/go_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: driver-manager-${{ matrix.os }} | |
retention-days: 3 | |
path: | | |
~/local | |
# ------------------------------------------------------------ | |
# C/C++ (builds and tests) | |
# ------------------------------------------------------------ | |
drivers-test-conda: | |
name: "C/C++ (Conda/${{ matrix.os }})" | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: ["macos-latest", "ubuntu-latest"] | |
env: | |
# Required for macOS | |
# https://conda-forge.org/docs/maintainer/knowledge_base.html#newer-c-features-with-old-sdk | |
CXXFLAGS: "-D_LIBCPP_DISABLE_AVAILABILITY" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Get Date | |
id: get-date | |
shell: bash | |
run: | | |
echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT | |
- name: Cache Conda | |
uses: actions/cache@v4 | |
with: | |
path: ~/conda_pkgs_dir | |
key: conda-${{ runner.os }}-${{ steps.get-date.outputs.today }}-${{ env.CACHE_NUMBER }}-${{ hashFiles('ci/**') }} | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
miniforge-variant: Mambaforge | |
miniforge-version: latest | |
use-only-tar-bz2: false | |
use-mamba: true | |
- name: Install Dependencies | |
shell: bash -l {0} | |
run: | | |
mamba install -c conda-forge \ | |
--file ci/conda_env_cpp.txt | |
- name: Build | |
shell: bash -l {0} | |
env: | |
ADBC_CMAKE_ARGS: "-DCMAKE_UNITY_BUILD=ON" | |
BUILD_ALL: "0" | |
BUILD_DRIVER_MANAGER: "1" | |
BUILD_DRIVER_POSTGRESQL: "1" | |
BUILD_DRIVER_SQLITE: "1" | |
run: | | |
./ci/scripts/cpp_build.sh "$(pwd)" "$(pwd)/build" | |
- name: Test | |
shell: bash -l {0} | |
env: | |
BUILD_ALL: "0" | |
BUILD_DRIVER_MANAGER: "1" | |
# PostgreSQL is explicitly not tested here since we don't spawn | |
# Postgres; see integration.yml | |
BUILD_DRIVER_POSTGRESQL: "0" | |
BUILD_DRIVER_SQLITE: "1" | |
run: | | |
./ci/scripts/cpp_test.sh "$(pwd)/build" | |
clang-tidy-conda: | |
name: "clang-tidy" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Get Date | |
id: get-date | |
shell: bash | |
run: | | |
echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT | |
- name: Cache Conda | |
uses: actions/cache@v4 | |
with: | |
path: ~/conda_pkgs_dir | |
key: conda-${{ runner.os }}-${{ steps.get-date.outputs.today }}-${{ env.CACHE_NUMBER }}-${{ hashFiles('ci/**') }} | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
miniforge-variant: Mambaforge | |
miniforge-version: latest | |
use-only-tar-bz2: false | |
use-mamba: true | |
- name: Install Dependencies | |
shell: bash -l {0} | |
run: | | |
mamba install -c conda-forge \ | |
--file ci/conda_env_cpp.txt \ | |
--file ci/conda_env_cpp_lint.txt | |
- name: clang-tidy | |
shell: bash -l {0} | |
run: | | |
./ci/scripts/cpp_clang_tidy.sh "$(pwd)" "$(pwd)/build" | |
# ------------------------------------------------------------ | |
# GLib/Ruby | |
# ------------------------------------------------------------ | |
glib-conda: | |
name: "GLib/Ruby (Conda/${{ matrix.os }})" | |
runs-on: ${{ matrix.os }} | |
needs: | |
- drivers-build-conda | |
strategy: | |
matrix: | |
os: ["macos-latest", "ubuntu-latest"] | |
env: | |
# Required for macOS | |
# https://conda-forge.org/docs/maintainer/knowledge_base.html#newer-c-features-with-old-sdk | |
CXXFLAGS: "-D_LIBCPP_DISABLE_AVAILABILITY" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Get Date | |
id: get-date | |
shell: bash | |
run: | | |
echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT | |
- name: Cache Conda | |
uses: actions/cache@v4 | |
with: | |
path: ~/conda_pkgs_dir | |
key: conda-${{ runner.os }}-${{ steps.get-date.outputs.today }}-${{ env.CACHE_NUMBER }}-${{ hashFiles('ci/**') }} | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
miniforge-variant: Mambaforge | |
miniforge-version: latest | |
use-only-tar-bz2: false | |
use-mamba: true | |
- name: Install Dependencies | |
shell: bash -l {0} | |
run: | | |
mamba install -c conda-forge \ | |
'arrow-c-glib>=10.0.1' \ | |
--file ci/conda_env_cpp.txt \ | |
--file ci/conda_env_glib.txt | |
- uses: actions/download-artifact@v3 | |
with: | |
name: driver-manager-${{ matrix.os }} | |
path: ~/local | |
- name: Build GLib Driver Manager | |
shell: bash -l {0} | |
run: | | |
env BUILD_ALL=0 BUILD_DRIVER_MANAGER=1 ./ci/scripts/glib_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
- name: Test GLib/Ruby Driver Manager | |
shell: bash -l {0} | |
run: | | |
env BUILD_ALL=0 BUILD_DRIVER_MANAGER=1 ./ci/scripts/glib_test.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
# ------------------------------------------------------------ | |
# Go | |
# ------------------------------------------------------------ | |
go-no-cgo: | |
name: "Go (No CGO) (${{ matrix.os }})" | |
env: | |
CGO_ENABLED: "0" | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: ["macos-latest", "ubuntu-latest", "windows-latest"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- uses: actions/setup-go@v5 | |
with: | |
go-version-file: 'go/adbc/go.mod' | |
check-latest: true | |
cache: true | |
cache-dependency-path: go/adbc/go.sum | |
- name: Install staticcheck | |
run: go install honnef.co/go/tools/cmd/[email protected] | |
- name: Go Build | |
run: | | |
./ci/scripts/go_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
- name: Run Staticcheck | |
run: | | |
pushd go/adbc | |
staticcheck -f stylish ./... | |
popd | |
- name: Go Test | |
env: | |
SNOWFLAKE_DATABASE: ADBC_TESTING | |
SNOWFLAKE_URI: ${{ secrets.SNOWFLAKE_URI }} | |
run: | | |
./ci/scripts/go_test.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
go-conda: | |
name: "Go (CGO) (Conda/${{ matrix.os }})" | |
runs-on: ${{ matrix.os }} | |
needs: | |
- drivers-build-conda | |
strategy: | |
matrix: | |
os: ["macos-latest", "ubuntu-latest"] | |
env: | |
CGO_ENABLED: "1" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Get Date | |
id: get-date | |
shell: bash | |
run: | | |
echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT | |
- name: Cache Conda | |
uses: actions/cache@v4 | |
with: | |
path: ~/conda_pkgs_dir | |
key: conda-${{ runner.os }}-${{ steps.get-date.outputs.today }}-${{ env.CACHE_NUMBER }}-${{ hashFiles('ci/**') }} | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
miniforge-variant: Mambaforge | |
miniforge-version: latest | |
use-only-tar-bz2: false | |
use-mamba: true | |
- name: Install Dependencies | |
shell: bash -l {0} | |
run: | | |
mamba install -c conda-forge \ | |
--file ci/conda_env_cpp.txt | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.19.13 | |
check-latest: true | |
cache: true | |
cache-dependency-path: go/adbc/go.sum | |
- name: Install staticcheck | |
shell: bash -l {0} | |
if: ${{ !contains('macos-latest', matrix.os) }} | |
run: go install honnef.co/go/tools/cmd/[email protected] | |
- uses: actions/download-artifact@v3 | |
with: | |
name: driver-manager-${{ matrix.os }} | |
path: ~/local | |
- name: Go Build | |
shell: bash -l {0} | |
run: | | |
export PATH=$RUNNER_TOOL_CACHE/go/1.19.13/x64/bin:$PATH | |
./ci/scripts/go_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
- name: Run Staticcheck | |
if: ${{ !contains('macos-latest', matrix.os) }} | |
shell: bash -l {0} | |
run: | | |
pushd go/adbc | |
staticcheck -f stylish ./... | |
popd | |
- name: Go Test | |
shell: bash -l {0} | |
env: | |
SNOWFLAKE_URI: ${{ secrets.SNOWFLAKE_URI }} | |
run: | | |
export PATH=$RUNNER_TOOL_CACHE/go/1.19.13/x64/bin:$PATH | |
./ci/scripts/go_test.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
# ------------------------------------------------------------ | |
# Python/doctests | |
# ------------------------------------------------------------ | |
python-conda: | |
name: "Python ${{ matrix.python }} (Conda/${{ matrix.os }})" | |
runs-on: ${{ matrix.os }} | |
needs: | |
- drivers-build-conda | |
strategy: | |
matrix: | |
os: ["macos-latest", "ubuntu-latest"] | |
python: ["3.9", "3.11"] | |
env: | |
# Required for macOS | |
# https://conda-forge.org/docs/maintainer/knowledge_base.html#newer-c-features-with-old-sdk | |
CXXFLAGS: "-D_LIBCPP_DISABLE_AVAILABILITY" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Get Date | |
id: get-date | |
shell: bash | |
run: | | |
echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT | |
- name: Cache Conda | |
uses: actions/cache@v4 | |
with: | |
path: ~/conda_pkgs_dir | |
key: conda-${{ runner.os }}-${{ steps.get-date.outputs.today }}-${{ env.CACHE_NUMBER }}-${{ hashFiles('ci/**') }} | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
miniforge-variant: Mambaforge | |
miniforge-version: latest | |
use-only-tar-bz2: false | |
use-mamba: true | |
- name: Install Dependencies | |
shell: bash -l {0} | |
run: | | |
mamba install -c conda-forge \ | |
python=${{ matrix.python }} \ | |
--file ci/conda_env_cpp.txt \ | |
--file ci/conda_env_python.txt | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.19.13 | |
check-latest: true | |
cache: true | |
cache-dependency-path: go/adbc/go.sum | |
- uses: actions/download-artifact@v3 | |
with: | |
name: driver-manager-${{ matrix.os }} | |
path: ~/local | |
- name: Build | |
shell: bash -l {0} | |
env: | |
BUILD_ALL: "1" | |
ADBC_USE_ASAN: "0" | |
ADBC_USE_UBSAN: "0" | |
run: | | |
./ci/scripts/python_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
- name: Build Panic Dummy | |
shell: bash -l {0} | |
run: | | |
if [[ $(uname) = "Darwin" ]]; then | |
make -C ./go/adbc/pkg libadbc_driver_panicdummy.dylib | |
else | |
make -C ./go/adbc/pkg libadbc_driver_panicdummy.so | |
fi | |
- name: Test Python Driver Manager | |
shell: bash -l {0} | |
run: | | |
if [[ $(uname) = "Darwin" ]]; then | |
export PANICDUMMY_LIBRARY_PATH=$(pwd)/go/adbc/pkg/libadbc_driver_panicdummy.dylib | |
else | |
export PANICDUMMY_LIBRARY_PATH=$(pwd)/go/adbc/pkg/libadbc_driver_panicdummy.so | |
fi | |
env BUILD_ALL=0 BUILD_DRIVER_MANAGER=1 ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
- name: Test Python Driver Flight SQL | |
shell: bash -l {0} | |
run: | | |
# Can't use Docker on macOS | |
pushd $(pwd)/go/adbc | |
go build -o testserver ./driver/flightsql/cmd/testserver | |
popd | |
$(pwd)/go/adbc/testserver -host 0.0.0.0 -port 41414 & | |
while ! curl --http2-prior-knowledge -H "content-type: application/grpc" -v localhost:41414 -XPOST; | |
do | |
echo "Waiting for test server..." | |
jobs | |
sleep 5 | |
done | |
export ADBC_TEST_FLIGHTSQL_URI=grpc://localhost:41414 | |
env BUILD_ALL=0 BUILD_DRIVER_FLIGHTSQL=1 ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
kill %1 | |
- name: Test Python Driver PostgreSQL | |
shell: bash -l {0} | |
run: | | |
env BUILD_ALL=0 BUILD_DRIVER_POSTGRESQL=1 ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
- name: Test Python Driver SQLite | |
shell: bash -l {0} | |
run: | | |
env BUILD_ALL=0 BUILD_DRIVER_SQLITE=1 ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
- name: Test Python Driver Snowflake | |
shell: bash -l {0} | |
run: | | |
env BUILD_ALL=0 BUILD_DRIVER_SNOWFLAKE=1 ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
- name: Typecheck Python | |
shell: bash -l {0} | |
run: | | |
./ci/scripts/python_typecheck.sh "$(pwd)" | |
python-docs: | |
name: "Documentation ${{ matrix.python }} (Conda/${{ matrix.os }})" | |
runs-on: ${{ matrix.os }} | |
needs: | |
- drivers-build-conda | |
strategy: | |
matrix: | |
os: ["ubuntu-latest"] | |
python: ["3.11"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Get Date | |
id: get-date | |
shell: bash | |
run: | | |
echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT | |
- name: Cache Conda | |
uses: actions/cache@v4 | |
with: | |
path: ~/conda_pkgs_dir | |
key: conda-${{ runner.os }}-${{ steps.get-date.outputs.today }}-${{ env.CACHE_NUMBER }}-${{ hashFiles('ci/**') }} | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
miniforge-variant: Mambaforge | |
miniforge-version: latest | |
use-only-tar-bz2: false | |
use-mamba: true | |
- name: Install Dependencies | |
shell: bash -l {0} | |
run: | | |
mamba install -c conda-forge \ | |
python=${{ matrix.python }} \ | |
--file ci/conda_env_docs.txt \ | |
--file ci/conda_env_python.txt | |
- uses: actions/download-artifact@v3 | |
with: | |
name: driver-manager-${{ matrix.os }} | |
path: ~/local | |
- name: Build Python | |
shell: bash -l {0} | |
env: | |
BUILD_ALL: "1" | |
ADBC_USE_ASAN: "0" | |
ADBC_USE_UBSAN: "0" | |
run: | | |
./ci/scripts/python_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local" | |
# Docs requires Python packages since it runs doctests | |
- name: Build Docs | |
shell: bash -l {0} | |
run: | | |
./ci/scripts/docs_build.sh "$(pwd)" | |
- name: Archive docs | |
uses: actions/upload-artifact@v3 | |
with: | |
name: docs | |
retention-days: 2 | |
path: | | |
docs/build/html | |
- name: Test Recipes (C++) | |
shell: bash -l {0} | |
run: | | |
./ci/scripts/cpp_recipe.sh $(pwd) ~/local build/recipe | |
- name: Test Recipes (Python) | |
shell: bash -l {0} | |
env: | |
ADBC_POSTGRESQL_TEST_URI: "postgres://localhost:5432/postgres?user=postgres&password=password" | |
ADBC_DREMIO_FLIGHTSQL_URI: "grpc+tcp://localhost:32010" | |
ADBC_DREMIO_FLIGHTSQL_USER: "dremio" | |
ADBC_DREMIO_FLIGHTSQL_PASS: "dremio123" | |
ADBC_SQLITE_FLIGHTSQL_URI: "grpc+tcp://localhost:8080" | |
run: | | |
docker compose up --detach --wait dremio dremio-init flightsql-sqlite-test postgres-test | |
pytest -vvs docs/source/tests/ |