sqlx-exasol 0.9.2

Exasol driver for the SQLx framework.
Documentation
name: Publish

on:
  push:
    tags:
      - "*"

env:
  EXASOL_VERSION: latest-7.1
  NUM_NODES: 4
  TESTS_TIMEOUT: 15
  EXA_CLUSTER_SETUP_TIMEOUT: 15

jobs:
  io_tests:
    name: IO tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Free disk space
        uses: ./.github/actions/free-space

      - name: Create Exasol cluster
        timeout-minutes: ${{ fromJSON(env.EXA_CLUSTER_SETUP_TIMEOUT) }}
        id: exa-cluster
        uses: ./.github/actions/exa-cluster
        with:
          exasol-version: ${{ env.EXASOL_VERSION }}
          num-nodes: ${{ env.NUM_NODES }}

      - uses: dtolnay/rust-toolchain@1.86.0
      - uses: Swatinem/rust-cache@v2

      - name: Test IO combos (no TLS, no compression)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --features runtime-tokio,etl -- it_works_with_io_combo --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true
          
      - name: Test IO combos (no TLS, with compression)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --features runtime-tokio,etl,compression -- it_works_with_io_combo --ignored  --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true
          
      - name: Test IO combos (NativeTLS, no compression)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --features runtime-tokio,etl,tls-native-tls -- it_works_with_io_combo --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true
          
      - name: Test IO combos (NativeTLS, with compression)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --features runtime-tokio,etl,tls-native-tls,compression -- it_works_with_io_combo --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true
          
      - name: Test IO combos (Rustls, no compression)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --features runtime-tokio,etl,tls-rustls-aws-lc-rs -- it_works_with_io_combo --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true
          
      - name: Test IO combos (Rustls, with compression)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --features runtime-tokio,etl,tls-rustls-aws-lc-rs,compression -- it_works_with_io_combo --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true
          
  io_tests_latest:
    name: IO tests on latest Exasol (TLS only)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Free disk space
        uses: ./.github/actions/free-space

      - name: Create Exasol cluster
        timeout-minutes: ${{ fromJSON(env.EXA_CLUSTER_SETUP_TIMEOUT) }}
        id: exa-cluster
        uses: ./.github/actions/exa-cluster
        with:
          exasol-version: latest
          num-nodes: 1

      - uses: dtolnay/rust-toolchain@1.86.0
      - uses: Swatinem/rust-cache@v2
          
      - name: Test IO combos (NativeTLS, no compression)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --features runtime-tokio,etl,tls-native-tls -- it_works_with_io_combo_tls --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true
          
      - name: Test IO combos (NativeTLS, with compression)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --features runtime-tokio,etl,tls-native-tls,compression -- it_works_with_io_combo_tls --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true
          
      - name: Test IO combos (Rustls, no compression)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --features runtime-tokio,etl,tls-rustls-aws-lc-rs -- it_works_with_io_combo_tls --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true
          
      - name: Test IO combos (Rustls, with compression)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --features runtime-tokio,etl,tls-rustls-aws-lc-rs,compression -- it_works_with_io_combo_tls --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true

  driver_tests:
    name: Driver tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Free disk space
        uses: ./.github/actions/free-space

      - name: Create Exasol cluster
        timeout-minutes: ${{ fromJSON(env.EXA_CLUSTER_SETUP_TIMEOUT) }}
        id: exa-cluster
        uses: ./.github/actions/exa-cluster
        with:
          exasol-version: ${{ env.EXASOL_VERSION }}
          num-nodes: ${{ env.NUM_NODES }}

      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2

      - name: Drop database (non-existent)
        run: cargo run -p sqlx-exasol-cli -- database drop -y
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}/test

      - name: Setup database
        run: cargo run -p sqlx-exasol-cli -- database create
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}/test

      - name: Run migrations
        run: cargo run -p sqlx-exasol-cli -- migrate run --source tests/migrations_compile_time
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}/test

      - name: Run prepare
        run: cargo run -p sqlx-exasol-cli -- prepare -- --tests --all-features
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}/test

      - name: Run tests (preferred crates)
        run: cargo test --features runtime-tokio,bigdecimal,time,uuid -- test_compile_time --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}/test

      - name: Run tests (chrono)
        run: cargo test --features runtime-tokio,chrono -- test_compile_time_chrono --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}/test

      - name: Run tests (rust_decimal)
        run: cargo test --features runtime-tokio,rust_decimal -- test_compile_time_rust_decimal --ignored --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}/test

      - name: Unit tests
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test -p sqlx-exasol-impl --features migrate -- --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}/test

      - name: Integration connection tests
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: cargo test --all-features -- --nocapture
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}/test?ssl-mode=disabled&compression=disabled

      - name: Drop database (existent)
        run: cargo run -p sqlx-exasol-cli -- database drop -y
        env:
          DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}/test

  etl_tests:
    name: ETL tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Free disk space
        uses: ./.github/actions/free-space

      - name: Create Exasol cluster
        timeout-minutes: ${{ fromJSON(env.EXA_CLUSTER_SETUP_TIMEOUT) }}
        id: exa-cluster
        uses: ./.github/actions/exa-cluster
        with:
          exasol-version: ${{ env.EXASOL_VERSION }}
          num-nodes: ${{ env.NUM_NODES }}

      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2

      - name: ETL tests (no TLS)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: |
          export DATABASE_URL="$BASE_DATABASE_URL?ssl-mode=disabled"
          cargo test --features runtime-tokio,compression,etl -- test_etl --ignored --nocapture
        env:
          BASE_DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true

      - name: ETL tests (NativeTLS)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: |
          export DATABASE_URL="$BASE_DATABASE_URL?ssl-mode=required"
          cargo test --features runtime-tokio,compression,etl,tls-native-tls -- test_etl --ignored --nocapture
        env:
          BASE_DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true

      - name: ETL tests (Rustls)
        timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
        run: |
          export DATABASE_URL="$BASE_DATABASE_URL?ssl-mode=required"
          cargo test --features runtime-tokio,compression,etl,tls-rustls-aws-lc-rs -- test_etl --ignored --nocapture
        env:
          BASE_DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
          SQLX_OFFLINE: true

  publish:
    name: Publish
    needs: [io_tests, io_tests_latest, driver_tests, etl_tests]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - uses: dtolnay/rust-toolchain@nightly

      - name: Cargo publish
        run: cargo +nightly publish --workspace --token ${{ secrets.CRATES_IO_TOKEN }}