Skip to content

Commit 2e956f8

Browse files
committed
Merge branch 'main' into sqlstr
2 parents a0b6739 + e627673 commit 2e956f8

File tree

282 files changed

+9326
-3991
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

282 files changed

+9326
-3991
lines changed

.github/workflows/examples.yml

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
--bin sqlx
2828
--release
2929
--no-default-features
30-
--features mysql,postgres,sqlite
30+
--features mysql,postgres,sqlite,sqlx-toml
3131
3232
- uses: actions/upload-artifact@v4
3333
with:
@@ -175,6 +175,49 @@ jobs:
175175
DATABASE_URL: postgres://postgres:password@localhost:5432/mockable-todos
176176
run: cargo run -p sqlx-example-postgres-mockable-todos
177177

178+
- name: Multi-Database (Setup)
179+
working-directory: examples/postgres/multi-database
180+
env:
181+
DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database
182+
ACCOUNTS_DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database-accounts
183+
PAYMENTS_DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database-payments
184+
run: |
185+
(cd accounts && sqlx db setup)
186+
(cd payments && sqlx db setup)
187+
sqlx db setup
188+
189+
- name: Multi-Database (Run)
190+
env:
191+
DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database
192+
ACCOUNTS_DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database-accounts
193+
PAYMENTS_DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database-payments
194+
run: cargo run -p sqlx-example-postgres-multi-database
195+
196+
- name: Multi-Tenant (Setup)
197+
working-directory: examples/postgres/multi-tenant
198+
env:
199+
DATABASE_URL: postgres://postgres:password@localhost:5432/multi-tenant
200+
run: |
201+
(cd accounts && sqlx db setup)
202+
(cd payments && sqlx migrate run)
203+
sqlx migrate run
204+
205+
- name: Multi-Tenant (Run)
206+
env:
207+
DATABASE_URL: postgres://postgres:password@localhost:5432/multi-tenant
208+
run: cargo run -p sqlx-example-postgres-multi-tenant
209+
210+
- name: Preferred-Crates (Setup)
211+
working-directory: examples/postgres/preferred-crates
212+
env:
213+
DATABASE_URL: postgres://postgres:password@localhost:5432/preferred-crates
214+
run: sqlx db setup
215+
216+
- name: Multi-Tenant (Run)
217+
env:
218+
DATABASE_URL: postgres://postgres:password@localhost:5432/preferred-crates
219+
run: cargo run -p sqlx-example-postgres-preferred-crates
220+
178221
- name: TODOs (Setup)
179222
working-directory: examples/postgres/todos
180223
env:

.github/workflows/sqlx-cli.yml

Lines changed: 231 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ jobs:
3333
--manifest-path sqlx-cli/Cargo.toml
3434
--target-dir target/beta/
3535
36-
test:
37-
name: Test
36+
integration-test:
37+
name: Integration Test
3838
runs-on: ${{ matrix.os }}
3939

4040
strategy:
@@ -57,6 +57,235 @@ jobs:
5757

5858
- run: cargo test --manifest-path sqlx-cli/Cargo.toml
5959

60+
test-mysql:
61+
name: Functional Test (MySQL)
62+
runs-on: ubuntu-latest
63+
# Deliberately not using `tests/docker-compose.yml` because that sets up the database automatically.
64+
services:
65+
mysql:
66+
image: mysql:8
67+
ports:
68+
- 3306:3306
69+
env:
70+
MYSQL_ROOT_PASSWORD: password
71+
env:
72+
BASE_URL: mysql://root:password@localhost
73+
74+
steps:
75+
- uses: actions/checkout@v4
76+
77+
- name: Setup Rust
78+
run: rustup show active-toolchain || rustup toolchain install
79+
80+
- uses: Swatinem/rust-cache@v2
81+
82+
- name: Install SQLx-CLI
83+
run:
84+
cargo install --locked --debug --path sqlx-cli
85+
86+
- name: Basic Test
87+
env:
88+
DATABASE_URL: ${{ env.BASE_URL }}/test1
89+
run: |
90+
sqlx db setup --source=tests/mysql/migrations
91+
92+
sqlx mig info --source=tests/mysql/migrations
93+
94+
sqlx db drop -y
95+
96+
- name: Test .env
97+
run: |
98+
echo "DATABASE_URL=${{ env.BASE_URL }}/test2" > .env
99+
100+
sqlx db setup --source=tests/mysql/migrations
101+
102+
sqlx mig info --source=tests/mysql/migrations
103+
104+
sqlx db drop -y
105+
106+
- name: Test --no-dotenv
107+
run: |
108+
# Allow subcommands to fail
109+
set +e
110+
111+
echo "DATABASE_URL=${{ env.BASE_URL }}/test3" > .env
112+
113+
ERROR=$(sqlx db setup --no-dotenv --source=tests/mysql/migrations)
114+
115+
if [[ "$ERROR" == *"--database-url"* ]]; then
116+
exit 0
117+
else
118+
echo "Unexpected error from sqlx-cli: $ERROR"
119+
exit 1
120+
fi
121+
122+
- name: Test Reversible Migrations
123+
env:
124+
DATABASE_URL: ${{ env.BASE_URL }}/test4
125+
run: |
126+
sqlx db setup --source=tests/mysql/migrations_reversible
127+
128+
INFO_BEFORE=$(sqlx mig info --source=tests/mysql/migrations_reversible)
129+
130+
sqlx mig revert --target-version=0 --source=tests/mysql/migrations_reversible
131+
132+
INFO_AFTER=$(sqlx mig info --source=tests/mysql/migrations_reversible)
133+
134+
if [[ "$INFO_BEFORE" == "$INFO_AFTER" ]]; then
135+
echo "Error: migration info is identical before and after migrating: $INFO_BEFORE"
136+
exit 1
137+
fi
138+
139+
test-postgres:
140+
name: Functional Test (PostgreSQL)
141+
runs-on: ubuntu-latest
142+
# Deliberately not using `tests/docker-compose.yml` because that sets up the database automatically.
143+
services:
144+
mysql:
145+
image: postgres:17
146+
ports:
147+
- 5432:5432
148+
env:
149+
POSTGRES_PASSWORD: password
150+
env:
151+
BASE_URL: postgres://postgres:password@localhost
152+
153+
steps:
154+
- uses: actions/checkout@v4
155+
156+
- name: Setup Rust
157+
run: rustup show active-toolchain || rustup toolchain install
158+
159+
- uses: Swatinem/rust-cache@v2
160+
161+
- name: Install SQLx-CLI
162+
run:
163+
cargo install --locked --debug --path sqlx-cli
164+
165+
- name: Basic Test
166+
env:
167+
DATABASE_URL: ${{ env.BASE_URL }}/test1
168+
run: |
169+
sqlx db setup --source=tests/postgres/migrations
170+
171+
sqlx mig info --source=tests/postgres/migrations
172+
173+
sqlx db drop -y
174+
175+
- name: Test .env
176+
run: |
177+
echo "DATABASE_URL=${{ env.BASE_URL }}/test2" > .env
178+
179+
sqlx db setup --source=tests/postgres/migrations
180+
181+
sqlx mig info --source=tests/postgres/migrations
182+
183+
sqlx db drop -y
184+
185+
- name: Test --no-dotenv
186+
run: |
187+
# Allow subcommands to fail
188+
set +e
189+
190+
echo "DATABASE_URL=${{ env.BASE_URL }}/test3" > .env
191+
192+
ERROR=$(sqlx db setup --no-dotenv --source=tests/postgres/migrations)
193+
194+
if [[ "$ERROR" == *"--database-url"* ]]; then
195+
exit 0
196+
else
197+
echo "Unexpected error from sqlx-cli: $ERROR"
198+
exit 1
199+
fi
200+
201+
- name: Test Reversible Migrations
202+
env:
203+
DATABASE_URL: ${{ env.BASE_URL }}/test4
204+
run: |
205+
sqlx db setup --source=tests/postgres/migrations_reversible
206+
207+
INFO_BEFORE=$(sqlx mig info --source=tests/postgres/migrations_reversible)
208+
209+
sqlx mig revert --target-version=0 --source=tests/postgres/migrations_reversible
210+
211+
INFO_AFTER=$(sqlx mig info --source=tests/postgres/migrations_reversible)
212+
213+
if [[ "$INFO_BEFORE" == "$INFO_AFTER" ]]; then
214+
echo "Error: migration info is identical before and after migrating: $INFO_BEFORE"
215+
exit 1
216+
fi
217+
218+
test-sqlite:
219+
name: Functional Test (SQLite)
220+
runs-on: ubuntu-latest
221+
env:
222+
BASE_URL: sqlite://.
223+
224+
steps:
225+
- uses: actions/checkout@v4
226+
227+
- name: Setup Rust
228+
run: rustup show active-toolchain || rustup toolchain install
229+
230+
- uses: Swatinem/rust-cache@v2
231+
232+
- name: Install SQLx-CLI
233+
run:
234+
cargo install --locked --debug --path sqlx-cli
235+
236+
- name: Basic Test
237+
env:
238+
DATABASE_URL: ${{ env.BASE_URL }}/test1
239+
run: |
240+
sqlx db setup --source=tests/sqlite/migrations
241+
242+
sqlx mig info --source=tests/sqlite/migrations
243+
244+
sqlx db drop -y
245+
246+
- name: Test .env
247+
run: |
248+
echo "DATABASE_URL=${{ env.BASE_URL }}/test2" > .env
249+
250+
sqlx db setup --source=tests/sqlite/migrations
251+
252+
sqlx mig info --source=tests/sqlite/migrations
253+
254+
sqlx db drop -y
255+
256+
- name: Test --no-dotenv
257+
run: |
258+
# Allow subcommands to fail
259+
set +e
260+
261+
echo "DATABASE_URL=${{ env.BASE_URL }}/test3" > .env
262+
263+
ERROR=$(sqlx db setup --no-dotenv --source=tests/sqlite/migrations)
264+
265+
if [[ "$ERROR" == *"--database-url"* ]]; then
266+
exit 0
267+
else
268+
echo "Unexpected error from sqlx-cli: $ERROR"
269+
exit 1
270+
fi
271+
272+
- name: Test Reversible Migrations
273+
env:
274+
DATABASE_URL: ${{ env.BASE_URL }}/test4
275+
run: |
276+
sqlx db setup --source=tests/sqlite/migrations_reversible
277+
278+
INFO_BEFORE=$(sqlx mig info --source=tests/sqlite/migrations_reversible)
279+
280+
sqlx mig revert --target-version=0 --source=tests/sqlite/migrations_reversible
281+
282+
INFO_AFTER=$(sqlx mig info --source=tests/sqlite/migrations_reversible)
283+
284+
if [[ "$INFO_BEFORE" == "$INFO_AFTER" ]]; then
285+
echo "Error: migration info is identical before and after migrating: $INFO_BEFORE"
286+
exit 1
287+
fi
288+
60289
build:
61290
name: Build
62291
runs-on: ${{ matrix.os }}

0 commit comments

Comments
 (0)