feat(mysql): add mysql-rsa feature for non-TLS RSA auth #5593
Workflow file for this run
This file contains hidden or 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: SQLx | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| - "*-dev" | |
| jobs: | |
| format: | |
| name: Format | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - run: rustup component add rustfmt | |
| - run: cargo fmt --all -- --check | |
| check: | |
| name: Check | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| # Note: because `async-std` is deprecated, we only check it in a single job to save CI time. | |
| runtime: [ async-std, async-global-executor, smol, tokio ] | |
| tls: [ native-tls, rustls, none ] | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| # Swatinem/rust-cache recommends setting up the rust toolchain first because it's used in cache keys | |
| - name: Setup Rust | |
| # https://blog.rust-lang.org/2025/03/02/Rustup-1.28.0.html | |
| run: | | |
| rustup show active-toolchain || rustup toolchain install | |
| rustup component add clippy | |
| rustup toolchain install beta | |
| rustup component add --toolchain beta clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: > | |
| cargo clippy | |
| --no-default-features | |
| --features all-databases,_unstable-all-types,sqlite-preupdate-hook,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }},macros | |
| -- -D warnings | |
| # Run beta for new warnings but don't break the build. | |
| # Use a subdirectory of `target` to avoid clobbering the cache. | |
| - run: > | |
| cargo +beta clippy | |
| --no-default-features | |
| --features all-databases,_unstable-all-types,sqlite-preupdate-hook,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }},macros | |
| --target-dir target/beta/ | |
| check-minimal-versions: | |
| name: Check build using minimal versions | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Setup Rust | |
| run: | | |
| rustup show active-toolchain || rustup toolchain install | |
| rustup toolchain install nightly | |
| - name: Setup Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: "stable" | |
| - name: Install cmake | |
| run: sudo apt-get update && sudo apt-get install -y cmake | |
| - run: cargo +nightly generate-lockfile -Z minimal-versions | |
| - name: Build non-FIPS (minimal versions) | |
| run: > | |
| cargo build | |
| --no-default-features | |
| --features all-databases,_unstable-all-types,macros,migrate,sqlx-toml,runtime-async-std,tls-rustls-aws-lc-rs,sqlite-preupdate-hook | |
| - name: Build FIPS (minimal versions) | |
| run: > | |
| cargo build | |
| --no-default-features | |
| --features mysql-auth-rsa-aws-lc-rs-fips,macros,sqlx-toml,runtime-async-std,tls-rustls-aws-lc-rs-fips | |
| test: | |
| name: Unit Tests | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| # https://blog.rust-lang.org/2025/03/02/Rustup-1.28.0.html | |
| - name: Setup Rust | |
| run: rustup show active-toolchain || rustup toolchain install | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Test sqlx-core (ring) | |
| run: > | |
| cargo test | |
| -p sqlx-core | |
| --features _tls-native-tls,_tls-rustls-ring-webpki,_tls-rustls-ring-native-roots,offline,migrate,sqlx-toml,json | |
| - name: Test sqlx-core (aws-lc-rs non-FIPS) | |
| run: > | |
| cargo test | |
| -p sqlx-core | |
| --features _tls-native-tls,_tls-rustls-aws-lc-rs,offline,migrate,sqlx-toml,json | |
| - name: Setup Go (FIPS) | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: "stable" | |
| - name: Install cmake (FIPS) | |
| run: sudo apt-get update && sudo apt-get install -y cmake | |
| - name: Test sqlx-core (FIPS) | |
| run: > | |
| cargo test | |
| -p sqlx-core | |
| --features _tls-rustls-aws-lc-rs-fips,offline,migrate,sqlx-toml,json | |
| - name: Test sqlx-mysql (rsa default) | |
| run: > | |
| cargo test | |
| -p sqlx-mysql | |
| --lib | |
| - name: Test sqlx-mysql (aws-lc-rs) | |
| run: > | |
| cargo test | |
| -p sqlx-mysql | |
| --no-default-features | |
| --features rsa-aws-lc-rs | |
| --lib | |
| - name: Test sqlx-mysql (aws-lc-rs FIPS) | |
| run: > | |
| cargo test | |
| -p sqlx-mysql | |
| --no-default-features | |
| --features rsa-aws-lc-rs-fips | |
| --lib | |
| - name: Test sqlx-postgres | |
| run: > | |
| cargo test | |
| -p sqlx-postgres | |
| --all-features | |
| - name: Test sqlx-sqlite | |
| run: > | |
| cargo test | |
| -p sqlx-sqlite | |
| --all-features | |
| - name: Test sqlx-macros-core (non-FIPS) | |
| run: > | |
| cargo test | |
| -p sqlx-macros-core | |
| --no-default-features | |
| --features macros,derive,migrate,postgres,mysql,sqlite,sqlx-toml,_tls-native-tls,_tls-rustls-aws-lc-rs | |
| - name: Test sqlx-macros-core (FIPS) | |
| run: > | |
| cargo test | |
| -p sqlx-macros-core | |
| --no-default-features | |
| --features macros,derive,migrate,postgres,mysql,sqlite,sqlx-toml,_tls-rustls-aws-lc-rs-fips | |
| # Note: use `--lib` to not run integration tests that require a DB | |
| - name: Test sqlx (non-FIPS) | |
| run: > | |
| cargo test | |
| -p sqlx | |
| --lib | |
| --no-default-features | |
| --features all-databases,macros,migrate,json,sqlx-toml,runtime-async-std,tls-rustls-aws-lc-rs | |
| - name: Test sqlx (FIPS) | |
| run: > | |
| cargo test | |
| -p sqlx | |
| --lib | |
| --no-default-features | |
| --features mysql-auth-rsa-aws-lc-rs-fips,macros,migrate,json,sqlx-toml,runtime-async-std,tls-rustls-aws-lc-rs-fips | |
| sqlite: | |
| name: SQLite | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| runtime: [ async-global-executor, smol, tokio ] | |
| linking: [ sqlite, sqlite-unbundled ] | |
| needs: check | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - run: mkdir /tmp/sqlite3-lib && wget -O /tmp/sqlite3-lib/ipaddr.so https://github.com/nalgeon/sqlean/releases/download/0.15.2/ipaddr.so | |
| # https://blog.rust-lang.org/2025/03/02/Rustup-1.28.0.html | |
| - name: Setup Rust | |
| run: rustup show active-toolchain || rustup toolchain install | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Install system sqlite library | |
| if: ${{ matrix.linking == 'sqlite-unbundled' }} | |
| run: sudo apt-get install -y libsqlite3-dev | |
| - run: echo "using ${DATABASE_URL}" | |
| # Create data dir for offline mode | |
| - run: mkdir .sqlx | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --features any,macros,migrate,${{ matrix.linking }},_unstable-all-types,runtime-${{ matrix.runtime }},${{ matrix.linking == 'sqlite' && 'sqlite-preupdate-hook' || ''}} | |
| -- | |
| --test-threads=1 | |
| env: | |
| DATABASE_URL: sqlite:tests/sqlite/sqlite.db | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: --cfg sqlite_ipaddr --cfg sqlite_test_sqlcipher | |
| LD_LIBRARY_PATH: /tmp/sqlite3-lib | |
| # Run the `test-attr` test again to cover cleanup. | |
| # The `sqlite-test-attr` test requires the `sqlite` feature. | |
| - if: ${{ matrix.linking == 'sqlite' }} | |
| run: > | |
| cargo test | |
| --test sqlite-test-attr | |
| --no-default-features | |
| --features any,macros,migrate,${{ matrix.linking }},_unstable-all-types,runtime-${{ matrix.runtime }},${{ matrix.linking == 'sqlite' && 'sqlite-preupdate-hook' || ''}} | |
| -- | |
| --test-threads=1 | |
| env: | |
| DATABASE_URL: sqlite:tests/sqlite/sqlite.db | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: --cfg sqlite_ipaddr --cfg sqlite_test_sqlcipher | |
| LD_LIBRARY_PATH: /tmp/sqlite3-lib | |
| # Remove test artifacts | |
| - run: cargo clean -p sqlx | |
| # Build the macros-test in offline mode (omit DATABASE_URL) | |
| - run: > | |
| cargo build | |
| --no-default-features | |
| --test sqlite-macros | |
| --features any,macros,${{ matrix.linking }},_unstable-all-types,runtime-${{ matrix.runtime }} | |
| env: | |
| SQLX_OFFLINE: true | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: -D warnings --cfg sqlite_ipaddr | |
| LD_LIBRARY_PATH: /tmp/sqlite3-lib | |
| # Test macros in offline mode (still needs DATABASE_URL to run) | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --test sqlite-macros | |
| --features any,macros,${{ matrix.linking }},_unstable-all-types,runtime-${{ matrix.runtime }} | |
| env: | |
| DATABASE_URL: sqlite://tests/sqlite/sqlite.db | |
| SQLX_OFFLINE: true | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: --cfg sqlite_ipaddr | |
| LD_LIBRARY_PATH: /tmp/sqlite3-lib | |
| postgres: | |
| name: Postgres | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| postgres: [ 17, 13 ] | |
| runtime: [ async-global-executor, smol, tokio ] | |
| tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] | |
| needs: check | |
| timeout-minutes: 45 | |
| env: | |
| # NOTE: rustsec_2024_0363 and test_pg_copy_chunked run in dedicated jobs to avoid repeating heavy tests across the matrix. | |
| SQLX_PG_TEST_SKIP_ARGS: --skip rustsec_2024_0363 --skip test_pg_copy_chunked | |
| SQLX_PG_TEST_THREADS_ARGS: ${{ (matrix.runtime == 'async-global-executor' || matrix.runtime == 'smol') && (matrix.tls == 'rustls-ring' || matrix.tls == 'rustls-aws-lc-rs') && '--test-threads=1' || '' }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Setup Rust | |
| run: rustup show active-toolchain || rustup toolchain install | |
| - uses: Swatinem/rust-cache@v2 | |
| - env: | |
| RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}" | |
| run: > | |
| cargo build | |
| --no-default-features | |
| --features postgres,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }},macros,migrate | |
| - run: | | |
| docker compose -f tests/docker-compose.yml run -d -p 5432:5432 --name postgres_${{ matrix.postgres }} postgres_${{ matrix.postgres }} | |
| - run: | | |
| docker exec postgres_${{ matrix.postgres }} bash -c "until pg_isready; do sleep 1; done" | |
| # Create data dir for offline mode | |
| - run: mkdir .sqlx | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --features any,postgres,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| -- ${SQLX_PG_TEST_SKIP_ARGS} ${SQLX_PG_TEST_THREADS_ARGS} | |
| env: | |
| DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}" | |
| # Run the `test-attr` test again to cover cleanup. | |
| - run: > | |
| cargo test | |
| --test postgres-test-attr | |
| --no-default-features | |
| --features any,postgres,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| env: | |
| DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}" | |
| - if: ${{ matrix.tls != 'none' }} | |
| run: > | |
| cargo test | |
| --no-default-features | |
| --features any,postgres,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| -- ${SQLX_PG_TEST_SKIP_ARGS} ${SQLX_PG_TEST_THREADS_ARGS} | |
| env: | |
| DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx?sslmode=verify-ca&sslrootcert=.%2Ftests%2Fcerts%2Fca.crt | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}" | |
| # Remove test artifacts | |
| - run: cargo clean -p sqlx | |
| # Build the macros-test in offline mode (omit DATABASE_URL) | |
| - run: > | |
| cargo build | |
| --no-default-features | |
| --test postgres-macros | |
| --features any,postgres,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| env: | |
| SQLX_OFFLINE: true | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}" | |
| # Test macros in offline mode (still needs DATABASE_URL to run) | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --test postgres-macros | |
| --features any,postgres,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| env: | |
| DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx | |
| SQLX_OFFLINE: true | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}" | |
| postgres-ssl-auth: | |
| name: Postgres SSL Auth | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| postgres: [ 13, 17 ] | |
| runtime: [ async-std, tokio ] | |
| tls: [ native-tls, rustls-aws-lc-rs, rustls-ring ] | |
| needs: check | |
| timeout-minutes: 45 | |
| env: | |
| SQLX_PG_TEST_SKIP_ARGS: --skip test_pg_copy_chunked | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Setup Rust | |
| run: rustup show active-toolchain || rustup toolchain install | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: | | |
| docker compose -f tests/docker-compose.yml run -d -p 5432:5432 --name postgres_${{ matrix.postgres }}_client_ssl postgres_${{ matrix.postgres }}_client_ssl | |
| - run: | | |
| docker exec postgres_${{ matrix.postgres }}_client_ssl bash -c "until pg_isready; do sleep 1; done" | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --features any,postgres,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| -- ${SQLX_PG_TEST_SKIP_ARGS} | |
| env: | |
| DATABASE_URL: postgres://postgres@localhost:5432/sqlx?sslmode=verify-ca&sslrootcert=.%2Ftests%2Fcerts%2Fca.crt&sslkey=.%2Ftests%2Fcerts%2Fkeys%2Fclient.key&sslcert=.%2Ftests%2Fcerts%2Fclient.crt | |
| RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}" | |
| postgres-copy-chunked: | |
| name: Postgres COPY Chunked | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| postgres: [ 13 ] | |
| runtime: [ async-global-executor, tokio ] | |
| tls: [ rustls-aws-lc-rs, rustls-ring ] | |
| needs: check | |
| timeout-minutes: 45 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Setup Rust | |
| run: rustup show active-toolchain || rustup toolchain install | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: | | |
| docker compose -f tests/docker-compose.yml run -d -p 5432:5432 --name postgres_${{ matrix.postgres }}_copy_chunked postgres_${{ matrix.postgres }} | |
| - run: | | |
| docker exec postgres_${{ matrix.postgres }}_copy_chunked bash -c "until pg_isready; do sleep 1; done" | |
| # Create data dir for offline mode | |
| - run: mkdir .sqlx | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --test postgres | |
| --features any,postgres,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| -- --exact test_pg_copy_chunked --test-threads=1 | |
| env: | |
| DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx?sslmode=verify-ca&sslrootcert=.%2Ftests%2Fcerts%2Fca.crt | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}" | |
| mysql: | |
| name: MySQL | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| mysql: [ 8 ] | |
| runtime: [ async-global-executor, smol, tokio ] | |
| tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] | |
| needs: check | |
| timeout-minutes: 45 | |
| env: | |
| SQLX_MYSQL_TEST_SKIP_ARGS: --skip rustsec_2024_0363 | |
| SQLX_MYSQL_TEST_THREADS_ARGS: ${{ (matrix.runtime == 'async-global-executor' || matrix.runtime == 'smol') && (matrix.tls == 'rustls-ring' || matrix.tls == 'rustls-aws-lc-rs') && '--test-threads=1' || '' }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Setup Rust | |
| run: rustup show active-toolchain || rustup toolchain install | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo build --features mysql,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| - run: docker compose -f tests/docker-compose.yml run -d -p 3306:3306 --name mysql_${{ matrix.mysql }} mysql_${{ matrix.mysql }} | |
| - run: | | |
| docker exec mysql_${{ matrix.mysql }} bash -c ' | |
| until (command -v mysqladmin >/dev/null && mysqladmin ping -uroot -ppassword --silent) || \ | |
| (command -v mariadb-admin >/dev/null && mariadb-admin ping -uroot -ppassword --silent); do | |
| sleep 2 | |
| done | |
| ' | |
| # Create data dir for offline mode | |
| - run: mkdir .sqlx | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| -- ${SQLX_MYSQL_TEST_SKIP_ARGS} ${SQLX_MYSQL_TEST_THREADS_ARGS} | |
| env: | |
| DATABASE_URL: mysql://root:password@localhost:3306/sqlx?ssl-mode=disabled | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: --cfg mysql_${{ matrix.mysql }} | |
| # Run the `test-attr` test again to cover cleanup. | |
| - run: > | |
| cargo test | |
| --test mysql-test-attr | |
| --no-default-features | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| env: | |
| DATABASE_URL: mysql://root:password@localhost:3306/sqlx?ssl-mode=disabled | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: --cfg mysql_${{ matrix.mysql }} | |
| # MySQL 5.7 supports TLS but not TLSv1.3 as required by RusTLS. | |
| - if: ${{ !(matrix.mysql == '5_7' && matrix.tls == 'rustls') }} | |
| run: > | |
| cargo test | |
| --no-default-features | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| -- ${SQLX_MYSQL_TEST_SKIP_ARGS} | |
| env: | |
| DATABASE_URL: mysql://root:password@localhost:3306/sqlx | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: --cfg mysql_${{ matrix.mysql }} | |
| # Remove test artifacts | |
| - run: cargo clean -p sqlx | |
| # Build the macros-test in offline mode (omit DATABASE_URL) | |
| - run: > | |
| cargo build | |
| --no-default-features | |
| --test mysql-macros | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| env: | |
| SQLX_OFFLINE: true | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: -D warnings --cfg mysql_${{ matrix.mysql }} | |
| # Test macros in offline mode (still needs DATABASE_URL to run) | |
| # MySQL 5.7 supports TLS but not TLSv1.3 as required by RusTLS. | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --test mysql-macros | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| env: | |
| DATABASE_URL: mysql://root:password@localhost:3306/sqlx | |
| SQLX_OFFLINE: true | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: --cfg mysql_${{ matrix.mysql }} | |
| # client SSL authentication | |
| - if: ${{ matrix.tls != 'none' }} | |
| run: | | |
| docker stop mysql_${{ matrix.mysql }} | |
| docker compose -f tests/docker-compose.yml run -d -p 3306:3306 --name mysql_${{ matrix.mysql }}_client_ssl mysql_${{ matrix.mysql }}_client_ssl | |
| docker exec mysql_${{ matrix.mysql }}_client_ssl bash -c ' | |
| until (command -v mysqladmin >/dev/null && mysqladmin ping -uroot --silent) || \ | |
| (command -v mariadb-admin >/dev/null && mariadb-admin ping -uroot --silent); do | |
| sleep 2 | |
| done | |
| ' | |
| - if: ${{ matrix.tls != 'none' }} | |
| run: > | |
| cargo test | |
| --no-default-features | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| -- ${SQLX_MYSQL_TEST_SKIP_ARGS} ${SQLX_MYSQL_TEST_THREADS_ARGS} | |
| env: | |
| DATABASE_URL: mysql://root@localhost:3306/sqlx?sslmode=verify_ca&ssl-ca=.%2Ftests%2Fcerts%2Fca.crt&ssl-key=.%2Ftests%2Fcerts%2Fkeys%2Fclient.key&ssl-cert=.%2Ftests%2Fcerts%2Fclient.crt | |
| RUSTFLAGS: --cfg mysql_${{ matrix.mysql }} | |
| mariadb: | |
| name: MariaDB | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| mariadb: [ verylatest, 11_8, 11_4, 10_11, 10_6 ] | |
| runtime: [ async-global-executor, smol, tokio ] | |
| tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ] | |
| needs: check | |
| timeout-minutes: 45 | |
| env: | |
| SQLX_MYSQL_TEST_SKIP_ARGS: --skip rustsec_2024_0363 | |
| SQLX_MYSQL_TEST_THREADS_ARGS: ${{ (matrix.runtime == 'async-global-executor' || matrix.runtime == 'smol') && (matrix.tls == 'rustls-ring' || matrix.tls == 'rustls-aws-lc-rs') && '--test-threads=1' || '' }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Setup Rust | |
| run: rustup show active-toolchain || rustup toolchain install | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo build --features mysql,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| - run: docker compose -f tests/docker-compose.yml run -d -p 3306:3306 --name mariadb_${{ matrix.mariadb }} mariadb_${{ matrix.mariadb }} | |
| - run: | | |
| docker exec mariadb_${{ matrix.mariadb }} bash -c ' | |
| until (command -v mysqladmin >/dev/null && mysqladmin ping -uroot -ppassword --silent) || \ | |
| (command -v mariadb-admin >/dev/null && mariadb-admin ping -uroot -ppassword --silent); do | |
| sleep 2 | |
| done | |
| ' | |
| # Create data dir for offline mode | |
| - run: mkdir .sqlx | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| -- ${SQLX_MYSQL_TEST_SKIP_ARGS} ${SQLX_MYSQL_TEST_THREADS_ARGS} | |
| env: | |
| DATABASE_URL: mysql://root:password@localhost:3306/sqlx | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: --cfg mariadb="${{ matrix.mariadb }}" | |
| # Run the `test-attr` test again to cover cleanup. | |
| - run: > | |
| cargo test | |
| --test mysql-test-attr | |
| --no-default-features | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| env: | |
| DATABASE_URL: mysql://root:password@localhost:3306/sqlx | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: --cfg mariadb="${{ matrix.mariadb }}" | |
| # Remove test artifacts | |
| - run: cargo clean -p sqlx | |
| # Build the macros-test in offline mode (omit DATABASE_URL) | |
| - run: > | |
| cargo build | |
| --no-default-features | |
| --test mysql-macros | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| env: | |
| SQLX_OFFLINE: true | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: -D warnings --cfg mariadb="${{ matrix.mariadb }}" | |
| # Test macros in offline mode (still needs DATABASE_URL to run) | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --test mysql-macros | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| env: | |
| DATABASE_URL: mysql://root:password@localhost:3306/sqlx | |
| SQLX_OFFLINE: true | |
| SQLX_OFFLINE_DIR: .sqlx | |
| RUSTFLAGS: --cfg mariadb="${{ matrix.mariadb }}" | |
| # client SSL authentication | |
| - if: ${{ matrix.tls != 'none' }} | |
| run: | | |
| docker stop mariadb_${{ matrix.mariadb }} | |
| docker compose -f tests/docker-compose.yml run -d -p 3306:3306 --name mariadb_${{ matrix.mariadb }}_client_ssl mariadb_${{ matrix.mariadb }}_client_ssl | |
| docker exec mariadb_${{ matrix.mariadb }}_client_ssl bash -c ' | |
| until (command -v mysqladmin >/dev/null && mysqladmin ping -uroot --silent) || \ | |
| (command -v mariadb-admin >/dev/null && mariadb-admin ping -uroot --silent); do | |
| sleep 2 | |
| done | |
| ' | |
| - if: ${{ matrix.tls != 'none' }} | |
| run: > | |
| cargo test | |
| --no-default-features | |
| --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
| -- ${SQLX_MYSQL_TEST_SKIP_ARGS} ${SQLX_MYSQL_TEST_THREADS_ARGS} | |
| env: | |
| DATABASE_URL: mysql://root@localhost:3306/sqlx?sslmode=verify_ca&ssl-ca=.%2Ftests%2Fcerts%2Fca.crt&ssl-key=.%2Ftests%2Fcerts%2Fkeys%2Fclient.key&ssl-cert=.%2Ftests%2Fcerts%2Fclient.crt | |
| RUSTFLAGS: --cfg mariadb="${{ matrix.mariadb }}" | |
| rustsec-mysql: | |
| name: RustSec Regression Tests (MySQL) | |
| runs-on: ubuntu-24.04 | |
| needs: check | |
| strategy: | |
| matrix: | |
| include: | |
| - name: rsa | |
| features: any,mysql,macros,migrate,_unstable-all-types,runtime-tokio,tls-none | |
| test_target: mysql-rustsec | |
| - name: aws-lc-rs | |
| features: any,mysql-auth-rsa-aws-lc-rs,macros,migrate,_unstable-all-types,runtime-tokio,tls-none | |
| test_target: mysql-rustsec-aws-lc-rs | |
| - name: aws-lc-rs-fips | |
| features: any,mysql-auth-rsa-aws-lc-rs-fips,macros,migrate,_unstable-all-types,runtime-tokio,tls-none | |
| test_target: mysql-rustsec-aws-lc-rs-fips | |
| timeout-minutes: 45 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Setup Rust | |
| run: rustup show active-toolchain || rustup toolchain install | |
| - name: Setup Go (FIPS) | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: "stable" | |
| - name: Install cmake (FIPS) | |
| run: sudo apt-get update && sudo apt-get install -y cmake | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: docker compose -f tests/docker-compose.yml run -d -p 3306:3306 --name mysql_8_rustsec mysql_8 | |
| - run: | | |
| docker exec mysql_8_rustsec bash -c ' | |
| until (command -v mysqladmin >/dev/null && mysqladmin ping -uroot -ppassword --silent) || \ | |
| (command -v mariadb-admin >/dev/null && mariadb-admin ping -uroot -ppassword --silent); do | |
| sleep 2 | |
| done | |
| ' | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --test ${{ matrix.test_target }} | |
| --features ${{ matrix.features }} | |
| env: | |
| DATABASE_URL: mysql://root:password@localhost:3306/sqlx?ssl-mode=disabled | |
| rustsec-postgres-sqlite: | |
| name: RustSec Regression Tests (Postgres + SQLite) | |
| runs-on: ubuntu-24.04 | |
| needs: check | |
| timeout-minutes: 45 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Setup Rust | |
| run: rustup show active-toolchain || rustup toolchain install | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: docker compose -f tests/docker-compose.yml run -d -p 5432:5432 --name postgres_17_rustsec postgres_17 | |
| - run: | | |
| docker exec postgres_17_rustsec bash -c "until pg_isready; do sleep 1; done" | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --test postgres-rustsec | |
| --features any,postgres,macros,migrate,_unstable-all-types,runtime-tokio,tls-none | |
| env: | |
| DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx | |
| - run: > | |
| cargo test | |
| --no-default-features | |
| --test sqlite-rustsec | |
| --features any,sqlite,macros,migrate,_unstable-all-types,runtime-tokio,tls-none | |
| env: | |
| DATABASE_URL: sqlite://tests/sqlite/sqlite.db |