mirror of
https://github.com/launchbadge/sqlx.git
synced 2025-12-30 05:11:13 +00:00
* Add extension support for SQLite While SQLite supports loading extensions at run-time via either the C API or the SQL interface, they strongly recommend [1] only enabling the C API so that SQL injections don't allow attackers to run arbitrary extension code. Here we take the most conservative approach, we enable only the C function, and then only when the user requests extensions be loaded in their `SqliteConnectOptions`, and disable it again once we're done loading those requested modules. We don't add any support for loading extensions via environment variables or connection strings. Extensions in the options are stored as an IndexMap as the load order can have side effects, they will be loaded in the order they are supplied by the caller. Extensions with custom entry points are supported, but a default API is exposed as most users will interact with extensions using the defaults. [1]: https://sqlite.org/c3ref/enable_load_extension.html * Add extension testing for SQlite Extends x.py to download an appropriate shared object file for supported operating systems, and uses wget to fetch one into the GitHub Actions context for use by CI. Overriding LD_LIBRARY_PATH for only this specific DB minimises the impact on the rest of the suite.
362 lines
10 KiB
YAML
362 lines
10 KiB
YAML
name: SQLx
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
format:
|
|
name: Format
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
|
|
# this is cheaper than requesting the non-minimal profile
|
|
- run: rustup component add rustfmt
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: fmt
|
|
args: --all -- --check
|
|
|
|
check:
|
|
name: Check
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
runtime: [async-std, tokio, actix]
|
|
tls: [native-tls, rustls]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: ${{ runner.os }}-check-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: check
|
|
args: >
|
|
--manifest-path sqlx-core/Cargo.toml
|
|
--no-default-features
|
|
--features offline,all-databases,all-types,migrate,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: check
|
|
args: >
|
|
--no-default-features
|
|
--features offline,all-databases,all-types,migrate,runtime-${{ matrix.runtime }}-${{ matrix.tls }},macros
|
|
|
|
test:
|
|
name: Unit Test
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
runtime: [async-std, tokio, actix]
|
|
tls: [native-tls, rustls]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: ${{ runner.os }}-test
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: test
|
|
args: >
|
|
--manifest-path sqlx-core/Cargo.toml
|
|
--features offline,all-databases,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
cli:
|
|
name: CLI Binaries
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, windows-latest]#, macOS-latest]
|
|
include:
|
|
- os: ubuntu-latest
|
|
target: x86_64-unknown-linux-musl
|
|
args: --features openssl-vendored
|
|
bin: target/debug/cargo-sqlx
|
|
- os: windows-latest
|
|
target: x86_64-pc-windows-msvc
|
|
bin: target/debug/cargo-sqlx.exe
|
|
# FIXME: macOS build fails because of missing pin-project-internal
|
|
# - os: macOS-latest
|
|
# target: x86_64-apple-darwin
|
|
# bin: target/debug/cargo-sqlx
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
target: ${{ matrix.target }}
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: ${{ runner.os }}-cli
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: build
|
|
args: --manifest-path sqlx-cli/Cargo.toml --bin cargo-sqlx ${{ matrix.args }}
|
|
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: cargo-sqlx-${{ matrix.target }}
|
|
path: ${{ matrix.bin }}
|
|
|
|
sqlite:
|
|
name: SQLite
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
runtime: [async-std, tokio, actix]
|
|
tls: [native-tls, rustls]
|
|
needs: check
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- run: mkdir /tmp/sqlite3-lib && wget -O /tmp/sqlite3-lib/ipaddr.so https://github.com/nalgeon/sqlean/releases/download/0.15.2/ipaddr.so
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: ${{ runner.os }}-sqlite-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: test
|
|
args: >
|
|
--no-default-features
|
|
--features any,macros,migrate,sqlite,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
--
|
|
--test-threads=1
|
|
env:
|
|
DATABASE_URL: sqlite://tests/sqlite/sqlite.db
|
|
RUSTFLAGS: --cfg sqlite_ipaddr
|
|
LD_LIBRARY_PATH: /tmp/sqlite3-lib
|
|
|
|
postgres:
|
|
name: Postgres
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
postgres: [14, 10]
|
|
runtime: [async-std, tokio, actix]
|
|
tls: [native-tls, rustls]
|
|
needs: check
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: ${{ runner.os }}-postgres-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
env:
|
|
# FIXME: needed to disable `ltree` tests in Postgres 9.6
|
|
# but `PgLTree` should just fall back to text format
|
|
RUSTFLAGS: --cfg postgres_${{ matrix.postgres }}
|
|
with:
|
|
command: build
|
|
args: >
|
|
--features postgres,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
- run: |
|
|
docker-compose -f tests/docker-compose.yml run -d -p 5432:5432 --name postgres_${{ matrix.postgres }} postgres_${{ matrix.postgres }}
|
|
docker exec postgres_${{ matrix.postgres }} bash -c "until pg_isready; do sleep 1; done"
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: test
|
|
args: >
|
|
--no-default-features
|
|
--features any,postgres,macros,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
env:
|
|
DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx
|
|
# FIXME: needed to disable `ltree` tests in Postgres 9.6
|
|
# but `PgLTree` should just fall back to text format
|
|
RUSTFLAGS: --cfg postgres_${{ matrix.postgres }}
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: test
|
|
args: >
|
|
--no-default-features
|
|
--features any,postgres,macros,migrate,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
env:
|
|
DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx?sslmode=verify-ca&sslrootcert=.%2Ftests%2Fcerts%2Fca.crt
|
|
# FIXME: needed to disable `ltree` tests in Postgres 9.6
|
|
# but `PgLTree` should just fall back to text format
|
|
RUSTFLAGS: --cfg postgres_${{ matrix.postgres }}
|
|
|
|
mysql:
|
|
name: MySQL
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
mysql: [8, 5_7]
|
|
runtime: [async-std, tokio, actix]
|
|
tls: [native-tls, rustls]
|
|
needs: check
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: ${{ runner.os }}-mysql-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: build
|
|
args: >
|
|
--features mysql,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
- run: docker-compose -f tests/docker-compose.yml run -d -p 3306:3306 mysql_${{ matrix.mysql }}
|
|
- run: sleep 60
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: test
|
|
args: >
|
|
--no-default-features
|
|
--features any,mysql,macros,migrate,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
env:
|
|
DATABASE_URL: mysql://root:password@localhost:3306/sqlx?ssl-mode=disabled
|
|
|
|
# MySQL 5.7 supports TLS but not TLSv1.3 as required by RusTLS.
|
|
- uses: actions-rs/cargo@v1
|
|
if: ${{ !(matrix.mysql == '5_7' && matrix.tls == 'rustls') }}
|
|
with:
|
|
command: test
|
|
args: >
|
|
--no-default-features
|
|
--features any,mysql,macros,migrate,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
env:
|
|
DATABASE_URL: mysql://root:password@localhost:3306/sqlx
|
|
|
|
mariadb:
|
|
name: MariaDB
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
mariadb: [10_6, 10_3]
|
|
runtime: [async-std, tokio, actix]
|
|
tls: [native-tls, rustls]
|
|
needs: check
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: ${{ runner.os }}-mysql-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: build
|
|
args: >
|
|
--features mysql,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
- run: docker-compose -f tests/docker-compose.yml run -d -p 3306:3306 mariadb_${{ matrix.mariadb }}
|
|
- run: sleep 30
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: test
|
|
args: >
|
|
--no-default-features
|
|
--features any,mysql,macros,migrate,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
env:
|
|
DATABASE_URL: mysql://root:password@localhost:3306/sqlx
|
|
|
|
mssql:
|
|
name: MSSQL
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
mssql: [2019, 2017]
|
|
runtime: [async-std, tokio, actix]
|
|
tls: [native-tls, rustls]
|
|
needs: check
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: ${{ runner.os }}-mssql-${{ matrix.runtime }}-${{ matrix.tls }}-${{ hashFiles('**/Cargo.lock') }}
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: build
|
|
args: >
|
|
--features mssql,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
|
|
- run: docker-compose -f tests/docker-compose.yml run -d -p 1433:1433 mssql_${{ matrix.mssql }}
|
|
- run: sleep 80 # MSSQL takes a "bit" to startup
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: test
|
|
args: >
|
|
--no-default-features
|
|
--features any,mssql,macros,migrate,all-types,runtime-${{ matrix.runtime }}-${{ matrix.tls }}
|
|
env:
|
|
DATABASE_URL: mssql://sa:Password123!@localhost/sqlx
|