Fix handling of deferred constraints #3227
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: SQLx | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
- '*-dev' | |
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] | |
tls: [native-tls, rustls, none] | |
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 json,offline,migrate,_rt-${{ matrix.runtime }},_tls-${{ matrix.tls }} | |
env: | |
RUSTFLAGS: -D warnings | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: check | |
args: > | |
--no-default-features | |
--features all-databases,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }},macros | |
env: | |
RUSTFLAGS: -D warnings | |
test: | |
name: Unit Test | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
runtime: [async-std, tokio] | |
tls: [native-tls, rustls, none] | |
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 json,_rt-${{ matrix.runtime }},_tls-${{ matrix.tls }} | |
cli-test: | |
name: CLI Unit Test | |
runs-on: ubuntu-20.04 | |
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-cli/Cargo.toml | |
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] | |
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 }} | |
- run: echo "using ${DATABASE_URL}" | |
# Create data dir for offline mode | |
- run: mkdir .sqlx | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--features any,macros,sqlite,_unstable-all-types,runtime-${{ matrix.runtime }} | |
-- | |
--test-threads=1 | |
env: | |
DATABASE_URL: sqlite:tests/sqlite/sqlite.db | |
SQLX_OFFLINE_DIR: .sqlx | |
RUSTFLAGS: --cfg sqlite_ipaddr | |
LD_LIBRARY_PATH: /tmp/sqlite3-lib | |
# Remove test artifacts | |
- run: cargo clean -p sqlx | |
# Build the macros-test in offline mode (omit DATABASE_URL) | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
args: > | |
--no-default-features | |
--test sqlite-macros | |
--features any,macros,sqlite,_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) | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--test sqlite-macros | |
--features any,macros,sqlite,_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-20.04 | |
strategy: | |
matrix: | |
postgres: [15, 11] | |
runtime: [async-std, tokio] | |
tls: [native-tls, rustls, none] | |
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: -D warnings --cfg postgres_${{ matrix.postgres }} | |
with: | |
command: build | |
args: > | |
--features postgres,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ 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" | |
# Create data dir for offline mode | |
- run: mkdir .sqlx | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--features any,postgres,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
env: | |
DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx | |
SQLX_OFFLINE_DIR: .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 | |
if: matrix.tls != 'none' | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--features any,postgres,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
env: | |
DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx?sslmode=verify-ca&sslrootcert=.%2Ftests%2Fcerts%2Fca.crt | |
SQLX_OFFLINE_DIR: .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 }} | |
# Remove test artifacts | |
- run: cargo clean -p sqlx | |
# Build the macros-test in offline mode (omit DATABASE_URL) | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
args: > | |
--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 | |
# FIXME: needed to disable `ltree` tests in Postgres 9.6 | |
# but `PgLTree` should just fall back to text format | |
RUSTFLAGS: -D warnings --cfg postgres_${{ matrix.postgres }} | |
# Test macros in offline mode (still needs DATABASE_URL to run) | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
args: > | |
--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 | |
# FIXME: needed to disable `ltree` tests in Postgres 9.6 | |
# but `PgLTree` should just fall back to text format | |
RUSTFLAGS: --cfg postgres_${{ matrix.postgres }} | |
# client SSL authentication | |
- run: | | |
docker stop postgres_${{ matrix.postgres }} | |
docker-compose -f tests/docker-compose.yml run -d -p 5432:5432 --name postgres_${{ matrix.postgres }}_client_ssl postgres_${{ matrix.postgres }}_client_ssl | |
docker exec postgres_${{ matrix.postgres }}_client_ssl bash -c "until pg_isready; do sleep 1; done" | |
- uses: actions-rs/cargo@v1 | |
if: matrix.tls != 'none' | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--features any,postgres,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
env: | |
DATABASE_URL: postgres://postgres@localhost:5432/sqlx?sslmode=verify-ca&sslrootcert=.%2Ftests%2Fcerts%2Fca.crt&sslkey=.%2Ftests%2Fkeys%2Fclient.key&sslcert=.%2Ftests%2Fcerts%2Fclient.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 }}_client_ssl | |
mysql: | |
name: MySQL | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
mysql: [8, 5_7] | |
runtime: [async-std, tokio] | |
tls: [native-tls, rustls, none] | |
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,_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: sleep 60 | |
# Create data dir for offline mode | |
- run: mkdir .sqlx | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--features any,mysql,macros,_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. | |
- uses: actions-rs/cargo@v1 | |
if: ${{ !(matrix.mysql == '5_7' && matrix.tls == 'rustls') }} | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--features any,mysql,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
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) | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
args: > | |
--no-default-features | |
--test mysql-macros | |
--features any,mysql,macros,_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. | |
- uses: actions-rs/cargo@v1 | |
if: ${{ !(matrix.mysql == '5_7' && matrix.tls == 'rustls') }} | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--test mysql-macros | |
--features any,mysql,macros,_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 | |
- 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 | |
sleep 60 | |
# 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') && matrix.tls != 'none' }} | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--features any,mysql,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
env: | |
DATABASE_URL: mysql://root@localhost:3306/sqlx?sslmode=verify_ca&ssl-ca=.%2Ftests%2Fcerts%2Fca.crt&ssl-key=.%2Ftests%2Fkeys%2Fclient.key&ssl-cert=.%2Ftests%2Fcerts%2Fclient.crt | |
RUSTFLAGS: --cfg mysql_${{ matrix.mysql }} | |
mariadb: | |
name: MariaDB | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
mariadb: [verylatest, 10_11, 10_4] | |
runtime: [async-std, tokio] | |
tls: [native-tls, rustls, none] | |
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,_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: sleep 30 | |
# Create data dir for offline mode | |
- run: mkdir .sqlx | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--features any,mysql,macros,_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) | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
args: > | |
--no-default-features | |
--test mysql-macros | |
--features any,mysql,macros,_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) | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--test mysql-macros | |
--features any,mysql,macros,_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 | |
- 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 | |
sleep 60 | |
- uses: actions-rs/cargo@v1 | |
if: matrix.tls != 'none' | |
with: | |
command: test | |
args: > | |
--no-default-features | |
--features any,mysql,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }} | |
env: | |
DATABASE_URL: mysql://root@localhost:3306/sqlx?sslmode=verify_ca&ssl-ca=.%2Ftests%2Fcerts%2Fca.crt&ssl-key=.%2Ftests%2Fkeys%2Fclient.key&ssl-cert=.%2Ftests%2Fcerts%2Fclient.crt | |
RUSTFLAGS: --cfg mariadb_${{ matrix.mariadb }} |