chore: Get most of the rpc tests working #5388
Workflow file for this run
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
name: GlareDB CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
workflow_dispatch: | |
concurrency: | |
group: build-ci-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
name: Build | |
runs-on: ubuntu-latest-8-cores | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: toolchain cache | |
with: | |
path: | | |
~/.rustup/toolchains/ | |
key: ${{ runner.os }}-toolchain-${{ hashFiles('**/rust-toolchain.toml') }} | |
- uses: actions/cache@v4 | |
name: cargo cache | |
with: | |
path: | | |
~/.cargo/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- uses: actions/cache@v4 | |
name: build cache | |
with: | |
path: | | |
target/ | |
!target/**/glaredb | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- uses: actions/cache@v4 | |
name: glaredb cache | |
with: | |
path: target/debug/glaredb | |
key: ${{ github.run_id }} | |
- name: build | |
run: just build | |
static-analysis: | |
name: Lint and Format | |
runs-on: ubuntu-latest-8-cores | |
needs: ["build"] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: toolchain cache | |
with: | |
path: | | |
~/.rustup/toolchains/ | |
key: ${{ runner.os }}-toolchain-${{ hashFiles('**/rust-toolchain.toml') }} | |
- uses: actions/cache@v4 | |
name: cargo cache | |
with: | |
path: | | |
~/.cargo/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: clippy | |
run: just clippy | |
- name: format | |
run: just fmt-check | |
unit-tests: | |
name: Unit Tests | |
runs-on: ubuntu-latest-8-cores | |
needs: ["build"] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: toolchain cache | |
with: | |
path: | | |
~/.rustup/toolchains/ | |
key: ${{ runner.os }}-toolchain-${{ hashFiles('**/rust-toolchain.toml') }} | |
- uses: actions/cache@v4 | |
name: cargo cache | |
with: | |
path: | | |
~/.cargo/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: run tests | |
run: just unit-tests | |
python-binding-tests: | |
name: Python Binding Tests | |
runs-on: ubuntu-latest-8-cores | |
needs: ["build"] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: toolchain cache | |
with: | |
path: | | |
~/.rustup/toolchains/ | |
key: ${{ runner.os }}-toolchain-${{ hashFiles('**/rust-toolchain.toml') }} | |
- uses: actions/cache@v4 | |
name: cargo cache | |
with: | |
path: | | |
~/.cargo/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- uses: actions/cache@v4 | |
name: build cache | |
with: | |
path: | | |
target/ | |
!target/**/glaredb | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: build python bindings | |
run: just python build | |
- name: run python binding tests | |
run: just python test | |
nodejs-bindings-tests: | |
name: Node.js Binding Tests | |
runs-on: ubuntu-latest-8-cores | |
needs: ["build"] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: toolchain cache | |
with: | |
path: | | |
~/.rustup/toolchains/ | |
key: ${{ runner.os }}-toolchain-${{ hashFiles('**/rust-toolchain.toml') }} | |
- uses: actions/cache@v4 | |
name: cargo cache | |
with: | |
path: | | |
~/.cargo/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- uses: actions/cache@v4 | |
name: build cache | |
with: | |
path: | | |
target/ | |
!target/**/glaredb | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: build node.js bindings | |
run: just js build-debug | |
- name: run node.js binding tests | |
run: just js test | |
pg-protocol: | |
name: PG Protocol Tests | |
runs-on: ubuntu-latest-8-cores | |
needs: ["build"] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: toolchain cache | |
with: | |
path: | | |
~/.rustup/toolchains/ | |
key: ${{ runner.os }}-toolchain-${{ hashFiles('**/rust-toolchain.toml') }} | |
- uses: actions/cache@v4 | |
name: cargo cache | |
with: | |
path: | | |
~/.cargo/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- uses: actions/cache@v4 | |
name: build cache | |
with: | |
path: | | |
target/ | |
!target/**/glaredb | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: pg protocol test (script) | |
run: | | |
PROTOC=`just protoc && just --evaluate PROTOC` ./scripts/protocol-test.sh | |
- name: pg protocol tests (slt runner) | |
run: just slt-bin-debug 'pgproto/*' | |
sql-logic-tests: | |
name: SQL Logic Tests | |
runs-on: ubuntu-latest-8-cores | |
needs: ["build"] | |
strategy: | |
matrix: | |
protocol: ["postgres", "flightsql", "rpc"] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: glaredb cache | |
with: | |
path: target/debug/glaredb | |
key: ${{ github.run_id }} | |
- name: public sql logic tests DEBUG | |
if: ${{ env.ACTIONS_STEP_DEBUG == 'true' }} | |
run: | | |
if [[ "${{ matrix.protocol }}" == "rpc" ]]; then | |
just rpc-tests | |
else | |
just slt-bin-debug --protocol=${{ matrix.protocol }} 'sqllogictests/*' | |
fi | |
- name: public sql logic tests | |
if: ${{ env.ACTIONS_STEP_DEBUG != 'true' }} | |
run: | | |
if [[ "${{ matrix.protocol }}" == "rpc" ]]; then | |
just rpc-tests | |
else | |
just slt-bin-debug --protocol=${{ matrix.protocol }} 'sqllogictests/*' | |
fi | |
process-integration-tests: | |
name: Process Integration Tests (pytest) | |
runs-on: ubuntu-latest-8-cores | |
needs: ["build"] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- name: install poetry | |
uses: snok/install-poetry@v1 | |
- name: install python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
cache: poetry | |
cache-dependency-path: tests/poetry.lock | |
- uses: actions/cache@v4 | |
name: toolchain cache | |
with: | |
path: | | |
~/.rustup/toolchains/ | |
key: ${{ runner.os }}-toolchain-${{ hashFiles('**/rust-toolchain.toml') }} | |
- uses: actions/cache@v4 | |
name: cargo cache | |
with: | |
path: | | |
~/.cargo/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- uses: actions/cache@v4 | |
name: build cache | |
with: | |
path: | | |
target/ | |
!target/**/glaredb | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- uses: actions/cache@v4 | |
name: glaredb cache | |
with: | |
path: target/debug/glaredb | |
key: ${{ github.run_id }} | |
- uses: actions/cache@v4 | |
name: py cache | |
with: | |
path: | | |
tests/.venv/ | |
key: ${{ runner.os }}-poetry-${{ hashFiles('**/Cargo.lock') }} | |
- name: setup pytest | |
run: just pytest-setup | |
- name: run pytest | |
run: just pytest | |
service-integration-tests: | |
name: Service Integration Tests (SLT) | |
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.owner.login == 'GlareDB' | |
runs-on: ubuntu-latest-8-cores | |
needs: ["build"] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: glaredb cache | |
with: | |
path: target/debug/glaredb | |
key: ${{ github.run_id }} | |
- name: GCP authenticate | |
uses: google-github-actions/auth@v2 | |
with: | |
credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_JSON }} | |
- name: setup GCP | |
uses: google-github-actions/setup-gcloud@v2 | |
- name: prepare testdata | |
run: ./scripts/prepare-testdata.sh | |
- name: run tests (slt) | |
env: | |
GCP_SERVICE_ACCOUNT_KEY: ${{ secrets.GCP_SERVICE_ACCOUNT_JSON }} | |
GCP_PROJECT_ID: glaredb-artifacts | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
AZURE_ACCESS_KEY: ${{ secrets.AZURE_ACCESS_KEY }} | |
AZURE_ACCOUNT: ${{ secrets.AZURE_ACCOUNT }} | |
MINIO_ACCESS_KEY: glaredb | |
MINIO_SECRET_KEY: glaredb_test | |
TEST_BUCKET: glaredb-test-bucket | |
run: | | |
# Prepare SLT (BigQuery) | |
if ./scripts/files-changed-in-branch.sh \ | |
"scripts/prepare-testdata.sh" \ | |
"scripts/create-test-bigquery-db.sh" \ | |
"testdata/sqllogictests_datasources_common/data" \ | |
"testdata/sqllogictests_bigquery/data" | |
then | |
export GCP_PROJECT_ID=glaredb-dev-playground | |
export BIGQUERY_DATASET_ID=$(./scripts/create-test-bigquery-db.sh) | |
else | |
export BIGQUERY_DATASET_ID=glaredb_test | |
fi | |
# Prepare SLT (Object store) | |
export GCS_BUCKET_NAME=glaredb-test | |
export AWS_S3_REGION=us-east-1 | |
export AWS_S3_BUCKET_NAME=glaredb-test | |
# Unset application default credentials. We don't want to unknowingly | |
# depend on this. | |
unset GOOGLE_APPLICATION_CREDENTIALS | |
# Prepare SLT (Postgres) | |
POSTGRES_TEST_DB=$(./scripts/create-test-postgres-db.sh) | |
export POSTGRES_CONN_STRING=$(echo "$POSTGRES_TEST_DB" | sed -n 1p) | |
export POSTGRES_TUNNEL_SSH_CONN_STRING=$(echo "$POSTGRES_TEST_DB" | sed -n 2p) | |
# Prepare SLT (MinIO) | |
./scripts/create-test-minio-store.sh | |
# Prepare SLT (fake GCS server) | |
./scripts/create-test-gcs-store.sh | |
echo "-------------------------------- WITHOUT TUNNEL TEST --------------------------------" | |
# Run all data source tests without running tunnel tests or the basic | |
# SLT tests. | |
just slt-bin --exclude 'sqllogictests/*' \ | |
--exclude '*/tunnels/ssh' \ | |
--exclude 'sqllogictests_snowflake/*' \ | |
--exclude 'sqllogictests_cassandra/*' \ | |
--exclude 'sqllogictests_clickhouse/*' \ | |
--exclude 'sqllogictests_sqlserver/*' \ | |
--exclude 'sqllogictests_mongodb/*' \ | |
--exclude 'sqllogictests_mysql/*' \ | |
echo "-------------------------------- WITH TUNNEL TEST --------------------------------" | |
# SSH tests are prone to fail if we make a lot of connections at the | |
# same time. Hence, it makes sense to run all the SSH tests one-by-one | |
# in order to test the SSH tunnels (which is our aim). | |
just slt-bin --jobs=1 '*/tunnels/ssh' --exclude 'sqllogictests_mysql/*' | |
# TODO: move these into the datasource-integration-tests job | |
echo "-------------------------------- RPC TESTS --------------------------------" | |
echo "-------------------------- BigQuery -------------------------- " | |
just slt-bin --protocol=rpc 'sqllogictests_bigquery/*' | |
echo "-------------------------- Iceberg -------------------------- " | |
just slt-bin --protocol=rpc 'sqllogictests_iceberg/*' | |
echo "-------------------------- Native -------------------------- " | |
just slt-bin --protocol=rpc 'sqllogictests_native/*' | |
echo "-------------------------- Object Store -------------------------- " | |
just slt-bin --protocol=rpc 'sqllogictests_object_store/*' | |
echo "-------------------------- Postgres -------------------------- " | |
just slt-bin --protocol=rpc --exclude '*/tunnels/ssh' 'sqllogictests_postgres/*' | |
echo "-------------------------- Fake GCS server with a subdirectory -------------------------- " | |
just slt-bin -l gs://$TEST_BUCKET/path/to/folder/1 -o service_account_path=/tmp/fake-gcs-creds.json 'sqllogictests_native/*' | |
just slt-bin -l gs://$TEST_BUCKET/path/to/folder/2 -o service_account_path=/tmp/fake-gcs-creds.json 'sqllogictests_native/*' | |
minio-integration-tests: | |
name: MinIO Integration Tests (SLT::MinIO) | |
runs-on: ubuntu-latest-8-cores | |
needs: ["build"] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: glaredb cache | |
with: | |
path: target/debug/glaredb | |
key: ${{ github.run_id }} | |
- name: run tests (slt) | |
env: | |
MINIO_ACCESS_KEY: glaredb | |
MINIO_SECRET_KEY: glaredb_test | |
TEST_BUCKET: glaredb-test-bucket | |
run: | | |
# prepare testdata | |
./scripts/prepare-testdata.sh | |
# Prepare SLT (MinIO) | |
./scripts/create-test-minio-store.sh | |
echo "-------------------------- MinIO (S3) -------------------------- " | |
# PG protocol | |
just slt-bin --location http://localhost:9100 \ | |
--option access_key_id=$MINIO_ACCESS_KEY \ | |
--option secret_access_key=$MINIO_SECRET_KEY \ | |
--option bucket=$TEST_BUCKET \ | |
'sqllogictests/*' \ | |
'sqllogictests_native/*' | |
# Flight protocol | |
just slt-bin --location http://localhost:9100 \ | |
--option access_key_id=$MINIO_ACCESS_KEY \ | |
--option secret_access_key=$MINIO_SECRET_KEY \ | |
--option bucket=$TEST_BUCKET \ | |
'sqllogictests/*' \ | |
'sqllogictests_native/*' \ | |
--protocol=flightsql | |
echo "-------------------------- MinIO (S3) With a sub-directory -------------------------- " | |
# PG protocol | |
just slt-bin -l http://localhost:9100/$TEST_BUCKET/path/to/folder \ | |
-o access_key_id=$MINIO_ACCESS_KEY \ | |
-o secret_access_key=$MINIO_SECRET_KEY \ | |
'sqllogictests/*' | |
# Flight protocol | |
just slt-bin -l http://localhost:9100/$TEST_BUCKET/path/to/folder \ | |
-o access_key_id=$MINIO_ACCESS_KEY \ | |
-o secret_access_key=$MINIO_SECRET_KEY \ | |
'sqllogictests/*' \ | |
--protocol=flightsql | |
datasource-integration-tests: | |
name: Datasource Integration (${{matrix.settings.name}}) | |
strategy: | |
matrix: | |
settings: | |
- name: Clickhouse | |
path: "sqllogictests_clickhouse/*" | |
prepare: | | |
./scripts/prepare-testdata.sh | |
source ./scripts/ci-install-clickhouse.sh | |
export CLICKHOUSE_CONN_STRING=$(./scripts/create-test-clickhouse-db.sh) | |
- name: Cassandra | |
path: "sqllogictests_cassandra/*" | |
prepare: | | |
export CASSANDRA_CONN_STRING=$(./scripts/create-test-cassandra-db.sh | tail -n 1) | |
- name: Mysql | |
path: "sqllogictests_mysql/*" | |
prepare: | | |
./scripts/prepare-testdata.sh | |
export MYSQL_CONN_STRING=$(./scripts/create-test-mysql-db.sh) | |
export MYSQL_TUNNEL_SSH_CONN_STRING=$(echo "$MYSQL_CONN_STRING" | sed -n 2p) | |
export MYSQL_CONN_STRING=$(echo "$MYSQL_CONN_STRING" | sed -n 1p) | |
- name: MongoDB | |
path: "sqllogictests_mongodb/*" | |
prepare: | | |
./scripts/prepare-testdata.sh | |
export MONGO_CONN_STRING=$(./scripts/create-test-mongo-db.sh) | |
- name: Sqlserver | |
path: "sqllogictests_sqlserver/*" | |
prepare: | | |
./scripts/prepare-testdata.sh | |
export SQL_SERVER_CONN_STRING=$(./scripts/create-test-sqlserver-db.sh) | |
runs-on: ubuntu-latest-8-cores | |
needs: ["build"] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: glaredb cache | |
with: | |
path: target/debug/glaredb | |
key: ${{ github.run_id }} | |
- name: run tests (slt) | |
run: | | |
${{matrix.settings.prepare}} | |
just slt-bin ${{matrix.settings.path}} | |
just slt-bin --protocol=rpc --exclude '*/tunnels/ssh' ${{matrix.settings.path}} | |
# Run flight SLTs for everything except clickhouse. | |
# | |
# <https://github.com/GlareDB/glaredb/issues/2389> | |
if [[ "${{ matrix.settings.name }}" != 'Clickhouse' ]]; then | |
just slt-bin --protocol=flightsql --exclude '*/tunnels/ssh' ${{matrix.settings.path}} | |
fi | |
service-integration-tests-snowflake: | |
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.owner.login == 'GlareDB' | |
name: Snowflake Service Integration Tests (SLT::Snowflake) | |
runs-on: ubuntu-latest-8-cores | |
needs: ["service-integration-tests"] | |
concurrency: | |
group: snowflake-integration-tests | |
cancel-in-progress: false | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: extractions/setup-just@v1 | |
with: | |
just-version: "1.23.0" | |
- uses: actions/cache@v4 | |
name: glaredb cache | |
with: | |
path: target/debug/glaredb | |
key: ${{ github.run_id }} | |
- name: snowflake setup (SnowSQL) | |
run: | | |
curl -o snowsql.bash \ | |
https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/1.2/linux_x86_64/snowsql-1.2.24-linux_x86_64.bash | |
mkdir -p ~/bin | |
SNOWSQL_DEST=~/bin SNOWSQL_LOGIN_SHELL=~/.profile bash snowsql.bash | |
- name: prepare testdata | |
run: ./scripts/prepare-testdata.sh | |
- name: run tests (slt) | |
env: | |
SNOWFLAKE_USERNAME: ${{ secrets.SNOWFLAKE_USERNAME }} | |
SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }} | |
run: | | |
# Prepare SLT (Snowflake) | |
export PATH="$HOME/bin:$PATH" | |
if ./scripts/files-changed-in-branch.sh \ | |
"scripts/prepare-testdata.sh" \ | |
"scripts/create-test-snowflake-db.sh" \ | |
"testdata/sqllogictests_datasources_common/data" \ | |
"testdata/sqllogictests_snowflake/data" | |
then | |
export SNOWFLAKE_DATABASE=$(./scripts/create-test-snowflake-db.sh) | |
else | |
export SNOWFLAKE_DATABASE=glaredb_test | |
fi | |
just slt-bin 'sqllogictests_snowflake/*' | |
just slt-bin --protocol=rpc 'sqllogictests_snowflake/*' |