Commit b5051ef
committed
453dd48 ci(testing): split unit checks and merge docker e2e flow (Jose Celano)
735fe19 ci(testing): normalize sqlite qBittorrent e2e invocation (Jose Celano)
245e6a3 ci(testing): collapse stable and nightly into matrix job (Jose Celano)
51998dd fix(postgres): address Copilot PR review suggestions (Jose Celano)
40ed669 chore(issues): archive closed issue specs to docs/issues/closed (Jose Celano)
33e5820 ci(testing): collapse matrix jobs into test-nightly and test-stable (Jose Celano)
661bbd9 ci(os-compatibility): extract build matrix into dedicated workflow (Jose Celano)
87d458c docs(readme): add workflow badges for db-compatibility and db-benchmarking (Jose Celano)
8fb55e9 ci(db-benchmarking): add persistence benchmark smoke workflow (Jose Celano)
517b42e ci(db-compatibility): extract database compatibility workflow (Jose Celano)
3c9264c docs(issues): mark task 9 complete in 1723 spec (Jose Celano)
3ef0707 docs(containers): document PostgreSQL runtime configuration (Jose Celano)
b0a654e chore(repo): remove legacy compose file references (Jose Celano)
248df3d ci(container): isolate compose build paths from storage (Jose Celano)
aee2efb docs(tracker-core): add 2026-05-01 benchmark run with PostgreSQL baseline (Jose Celano)
e0d0a87 fix(tracker-core): wait for single postgres ready log in benchmark runner (Jose Celano)
74f5c8a feat(ci): extend qBittorrent E2E runner with MySQL and PostgreSQL (Jose Celano)
54210f3 ci(testing): add postgres compatibility job (Jose Celano)
15af1e0 fix(tracker-core): correct postgres key timestamp column (Jose Celano)
a0f9c00 feat(tracker-core): add PostgreSQL database driver (Jose Celano)
cd665bf docs(issues): update 1723-1525-08 spec with user answers and implementation summary (Jose Celano)
b06ee0f docs(issues): prefix 1525-08 spec with issue number (Jose Celano)
Pull request description:
# PostgreSQL Driver for Torrust Tracker
Implements subissue 1525-08 of the persistence overhaul (#1525): add a PostgreSQL database driver to complement the existing SQLite3 and MySQL backends.
Spec: [docs/issues/1723-1525-08-add-postgresql-driver.md](docs/issues/1723-1525-08-add-postgresql-driver.md)
Closes #1723.
## Summary
Adds full PostgreSQL support across the tracker's persistence layer:
- Configuration package (new `Driver::PostgreSQL` variant)
- Internal driver implementation with connection pooling and schema migrations
- Automated schema migrations using `sqlx::migrate!()`
- Driver tests with testcontainers
- Container deployment configs and entry script support
- E2E and benchmark runner integrations
- CI compatibility matrix
## Tasks
- [x] Task 1 — Add `Driver::PostgreSQL` to configuration package
- [x] Task 2 — Add `Driver::PostgreSQL` variant to internal driver enum and factory
- [x] Task 3 — Implement PostgreSQL driver (`packages/tracker-core/src/databases/driver/postgres/mod.rs`)
- [x] Task 4 — Add PostgreSQL migration files
- [x] Task 5 — Extend Cargo.toml with `postgres` feature and implement driver tests
- [x] Task 6 — Extend persistence benchmark runner with PostgreSQL support
- [x] Task 7 — Add `--db-driver` flag and PostgreSQL support to qBittorrent E2E runner
- [x] Task 8 — Extend `.github/workflows/testing.yaml` with PostgreSQL compatibility matrix
- [x] Task 9 — Add container configs, update entry script, and rename/add compose files
## Status
- [x] Specification written and reviewed
- [x] User answers recorded
- [x] Implementation plan finalized
- [x] Code readiness analysis complete
- [x] Implementation in progress
ACKs for top commit:
josecelano:
ACK 453dd48
Tree-SHA512: 3f51daee0e37ba0a6405c588209412a8cd376dbb362bc42b7a9961924d356f7440068efe992d48983359e4de52aa76742986e21a2f3bc2e12ef0bc687aaabd5e
58 files changed
Lines changed: 2475 additions & 352 deletions
File tree
- .github
- skills/dev/planning/cleanup-completed-issues
- workflows
- contrib/dev-tools/debugging/qbt
- docs
- issues
- closed
- packages
- configuration/src/v2_0_0
- tracker-core
- docs/benchmarking
- machine
- runs/2026-05-01
- migrations/postgresql
- src
- bin/persistence_benchmark
- driver_bench/database
- databases
- driver
- postgres
- src
- bin
- console/ci/qbittorrent_e2e
- tracker
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 40 additions & 35 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
| 6 | + | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | | - | |
14 | | - | |
15 | | - | |
| 13 | + | |
16 | 14 | | |
17 | | - | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
18 | 20 | | |
19 | | - | |
| 21 | + | |
| 22 | + | |
20 | 23 | | |
21 | | - | |
22 | | - | |
23 | | - | |
| 24 | + | |
24 | 25 | | |
25 | | - | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
26 | 29 | | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
31 | 34 | | |
32 | 35 | | |
33 | 36 | | |
| |||
36 | 39 | | |
37 | 40 | | |
38 | 41 | | |
39 | | - | |
| 42 | + | |
40 | 43 | | |
41 | 44 | | |
42 | 45 | | |
| |||
45 | 48 | | |
46 | 49 | | |
47 | 50 | | |
48 | | - | |
49 | | - | |
| 51 | + | |
| 52 | + | |
50 | 53 | | |
51 | 54 | | |
52 | 55 | | |
53 | | - | |
| 56 | + | |
54 | 57 | | |
55 | 58 | | |
56 | 59 | | |
57 | | - | |
| 60 | + | |
58 | 61 | | |
59 | 62 | | |
60 | | - | |
61 | | - | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
62 | 66 | | |
63 | 67 | | |
64 | 68 | | |
65 | 69 | | |
66 | 70 | | |
67 | 71 | | |
68 | | - | |
| 72 | + | |
69 | 73 | | |
70 | 74 | | |
71 | | - | |
| 75 | + | |
72 | 76 | | |
73 | 77 | | |
74 | 78 | | |
75 | 79 | | |
76 | | - | |
77 | | - | |
78 | | - | |
| 80 | + | |
79 | 81 | | |
80 | | - | |
81 | | - | |
82 | | - | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
83 | 86 | | |
84 | | - | |
| 87 | + | |
85 | 88 | | |
86 | | - | |
87 | | - | |
88 | | - | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
53 | | - | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
54 | 79 | | |
55 | 80 | | |
56 | 81 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
0 commit comments