Skip to content

Commit 2cc10e8

Browse files
authored
Update package for Sendable, and other cleanup (#217)
* Package structure updates, remove obsolete files, update CI, bump minimum Swift to 5.8, fixup docs and logo * Sendable correctness, minor cleanup, use only debug logging in a library * Make the tests Sendable and async, use singleton MTELG and thread pool, don't use benchmarker's DB for tests
1 parent 3c83e48 commit 2cc10e8

20 files changed

+443
-398
lines changed

.api-breakage/allowlist-branch-fix-deprecations.txt

-18
This file was deleted.

.api-breakage/allowlist-branch-update-for-new-pnio.txt

-8
This file was deleted.

.github/CONTRIBUTING.md

-46
This file was deleted.

.github/workflows/api-docs.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ jobs:
1111
with:
1212
package_name: fluent-postgres-driver
1313
modules: FluentPostgresDriver
14-
pathsToInvalidate: /fluentpostgresdriver
14+
pathsToInvalidate: /fluentpostgresdriver/*

.github/workflows/test.yml

+51-60
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ env:
1212
POSTGRES_HOSTNAME: 'psql-a'
1313
POSTGRES_HOSTNAME_A: 'psql-a'
1414
POSTGRES_HOSTNAME_B: 'psql-b'
15-
POSTGRES_DB: 'test_database'
16-
POSTGRES_DB_A: 'test_database'
17-
POSTGRES_DB_B: 'test_database'
15+
POSTGRES_DB: 'test_database_a'
16+
POSTGRES_DB_A: 'test_database_a'
17+
POSTGRES_DB_B: 'test_database_b'
1818
POSTGRES_USER: 'test_username'
1919
POSTGRES_USER_A: 'test_username'
2020
POSTGRES_USER_B: 'test_username'
@@ -24,108 +24,99 @@ env:
2424

2525
jobs:
2626
api-breakage:
27-
if: ${{ !(github.event.pull_request.draft || false) }}
27+
if: ${{ github.event_name == 'pull_request' && !(github.event.pull_request.draft || false) }}
2828
runs-on: ubuntu-latest
29-
container: swift:5.8-jammy
29+
container: swift:jammy
3030
steps:
31-
- name: Check out package
32-
uses: actions/checkout@v3
31+
- name: Checkout
32+
uses: actions/checkout@v4
3333
with: { 'fetch-depth': 0 }
34-
- name: Run API breakage check action
35-
uses: vapor/ci/.github/actions/ci-swift-check-api-breakage@reusable-workflows
34+
- name: API breaking changes
35+
run: |
36+
git config --global --add safe.directory "${GITHUB_WORKSPACE}"
37+
swift package diagnose-api-breaking-changes origin/main
3638
3739
linux-all:
3840
if: ${{ !(github.event.pull_request.draft || false) }}
3941
strategy:
4042
fail-fast: false
4143
matrix:
4244
include:
43-
- {dbimage: 'postgres:11', dbauth: 'trust', swiftver: 'swift:5.7-focal'}
44-
- {dbimage: 'postgres:13', dbauth: 'md5', swiftver: 'swift:5.7-jammy'}
45-
- {dbimage: 'postgres:15', dbauth: 'scram-sha-256', swiftver: 'swift:5.8-jammy'}
46-
- {dbimage: 'postgres:15', dbauth: 'scram-sha-256', swiftver: 'swiftlang/swift:nightly-5.9-jammy'}
47-
- {dbimage: 'postgres:15', dbauth: 'scram-sha-256', swiftver: 'swiftlang/swift:nightly-main-jammy'}
48-
container: ${{ matrix.swiftver }}
45+
- postgres-image-a: 'postgres:13'
46+
postgres-image-b: 'postgres:14'
47+
postgres-auth: 'trust'
48+
swift-image: 'swift:5.8-focal'
49+
- postgres-image-a: 'postgres:15'
50+
postgres-image-b: 'postgres:16'
51+
postgres-auth: 'md5'
52+
swift-image: 'swift:5.10-jammy'
53+
- postgres-image-a: 'postgres:15'
54+
postgres-image-b: 'postgres:16'
55+
postgres-auth: 'scram-sha-256'
56+
swift-image: 'swiftlang/swift:nightly-6.0-jammy'
57+
container: ${{ matrix.swift-image }}
4958
runs-on: ubuntu-latest
5059
services:
5160
psql-a:
52-
image: ${{ matrix.dbimage }}
61+
image: ${{ matrix.postgres-image-a }}
5362
env:
5463
POSTGRES_USER: 'test_username'
55-
POSTGRES_DB: 'test_database'
64+
POSTGRES_DB: 'test_database_a'
5665
POSTGRES_PASSWORD: 'test_password'
57-
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.dbauth }}
58-
POSTGRES_INITDB_ARGS: --auth-host=${{ matrix.dbauth }}
66+
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.postgres-auth }}
67+
POSTGRES_INITDB_ARGS: --auth-host=${{ matrix.postgres-auth }}
5968
psql-b:
60-
image: ${{ matrix.dbimage }}
69+
image: ${{ matrix.postgres-image-b }}
6170
env:
6271
POSTGRES_USER: 'test_username'
63-
POSTGRES_DB: 'test_database'
72+
POSTGRES_DB: 'test_database_b'
6473
POSTGRES_PASSWORD: 'test_password'
65-
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.dbauth }}
66-
POSTGRES_INITDB_ARGS: --auth-host=${{ matrix.dbauth }}
74+
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.postgres-auth }}
75+
POSTGRES_INITDB_ARGS: --auth-host=${{ matrix.postgres-auth }}
6776
steps:
68-
- name: Display versions
69-
shell: bash
70-
run: |
71-
echo POSTGRES_VERSION='${{ matrix.dbimage }}' >> $GITHUB_ENV
72-
echo POSTGRES_AUTH_METHOD='${{ matrix.dbauth }}' >> $GITHUB_ENV
73-
if [[ '${{ contains(matrix.container, 'nightly') }}' == 'true' ]]; then
74-
SWIFT_PLATFORM="$(source /etc/os-release && echo "${ID}${VERSION_ID}")" SWIFT_VERSION="$(cat /.swift_tag)"
75-
printf 'SWIFT_PLATFORM=%s\nSWIFT_VERSION=%s\n' "${SWIFT_PLATFORM}" "${SWIFT_VERSION}" >>"${GITHUB_ENV}"
76-
fi
77-
printf 'OS: %s\nTag: %s\nVersion:\n' "${SWIFT_PLATFORM}-${RUNNER_ARCH}" "${SWIFT_VERSION}" && swift --version
7877
- name: Check out package
79-
uses: actions/checkout@v3
78+
uses: actions/checkout@v4
8079
- name: Run all tests
8180
run: swift test --sanitize=thread --enable-code-coverage
8281
- name: Submit coverage report to Codecov.io
83-
uses: vapor/swift-codecov-action@v0.2
82+
uses: vapor/swift-codecov-action@v0.3
8483
with:
85-
cc_env_vars: 'SWIFT_VERSION,SWIFT_PLATFORM,RUNNER_OS,RUNNER_ARCH,POSTGRES_VERSION,POSTGRES_AUTH_METHOD'
86-
cc_fail_ci_if_error: false
84+
codecov_token: ${{ secrets.CODECOV_TOKEN }}
8785

8886
macos-all:
8987
if: ${{ !(github.event.pull_request.draft || false) }}
9088
strategy:
9189
fail-fast: false
9290
matrix:
9391
include:
94-
- dbimage: postgresql@14
95-
dbauth: scram-sha-256
96-
macos: macos-13
97-
xcode: latest-stable
98-
runs-on: ${{ matrix.macos }}
92+
- macos-version: macos-13
93+
xcode-version: '~14.3'
94+
- macos-version: macos-14
95+
xcode-version: latest
96+
runs-on: ${{ matrix.macos-version }}
9997
env:
10098
LOG_LEVEL: debug
10199
POSTGRES_HOSTNAME: 127.0.0.1
102100
POSTGRES_HOSTNAME_A: 127.0.0.1
103101
POSTGRES_HOSTNAME_B: 127.0.0.1
104-
POSTGRES_DB: 'test_database_a'
105-
POSTGRES_DB_A: 'test_database_a'
106-
POSTGRES_DB_B: 'test_database_b'
107-
POSTGRES_USER: 'test_username_a'
108-
POSTGRES_USER_A: 'test_username_a'
109-
POSTGRES_USER_B: 'test_username_b'
110102
steps:
111103
- name: Select latest available Xcode
112104
uses: maxim-lobanov/setup-xcode@v1
113105
with:
114-
xcode-version: ${{ matrix.xcode }}
106+
xcode-version: ${{ matrix.xcode-version }}
115107
- name: Install Postgres, setup DB and auth, and wait for server start
116108
run: |
117-
export PATH="$(brew --prefix)/opt/${{ matrix.dbimage }}/bin:$PATH" PGDATA=/tmp/vapor-postgres-test PGUSER=postgres
118-
(brew unlink postgresql || true) && brew install ${{ matrix.dbimage }} && brew link --force ${{ matrix.dbimage }}
119-
initdb --locale=C --auth-host ${{ matrix.dbauth }} --username=postgres --pwfile=<(echo postgres)
109+
brew upgrade || true
110+
export PATH="$(brew --prefix)/opt/postgresql@16/bin:$PATH" PGDATA=/tmp/vapor-postgres-test PGUSER="${POSTGRES_USER_A}"
111+
(brew unlink postgresql@14 || true) && brew install postgresql@16 && brew link --force postgresql@16
112+
initdb --locale=C --auth-host "scram-sha-256" -U "${POSTGRES_USER_A}" --pwfile=<(echo "${POSTGRES_PASSWORD_A}")
120113
pg_ctl start --wait
121-
psql postgres <<<"CREATE ROLE $POSTGRES_USER_A LOGIN PASSWORD '$POSTGRES_PASSWORD_A';"
122-
psql postgres <<<"CREATE ROLE $POSTGRES_USER_B LOGIN PASSWORD '$POSTGRES_PASSWORD_B';"
123-
psql postgres <<<"CREATE DATABASE $POSTGRES_DB_A OWNER = $POSTGRES_USER_A;"
124-
psql postgres <<<"CREATE DATABASE $POSTGRES_DB_B OWNER = $POSTGRES_USER_B;"
125-
psql $POSTGRES_DB_A <<<"ALTER SCHEMA public OWNER TO $POSTGRES_USER_A;"
126-
psql $POSTGRES_DB_B <<<"ALTER SCHEMA public OWNER TO $POSTGRES_USER_B;"
127-
timeout-minutes: 2
114+
PGPASSWORD="${POSTGRES_PASSWORD_A}" createdb -w -O "${POSTGRES_USER_A}" "${POSTGRES_DB_A}"
115+
PGPASSWORD="${POSTGRES_PASSWORD_A}" createdb -w -O "${POSTGRES_USER_B}" "${POSTGRES_DB_B}"
116+
PGPASSWORD="${POSTGRES_PASSWORD_A}" psql -w "${POSTGRES_DB_A}" <<<"ALTER SCHEMA public OWNER TO ${POSTGRES_USER_A};"
117+
PGPASSWORD="${POSTGRES_PASSWORD_A}" psql -w "${POSTGRES_DB_B}" <<<"ALTER SCHEMA public OWNER TO ${POSTGRES_USER_B};"
118+
timeout-minutes: 15
128119
- name: Checkout code
129-
uses: actions/checkout@v3
120+
uses: actions/checkout@v4
130121
- name: Run all tests
131122
run: swift test --sanitize=thread

Package.swift

+26-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// swift-tools-version:5.7
1+
// swift-tools-version:5.8
22
import PackageDescription
33

44
let package = Package(
@@ -18,15 +18,30 @@ let package = Package(
1818
.package(url: "https://github.com/vapor/postgres-kit.git", from: "2.11.4"),
1919
],
2020
targets: [
21-
.target(name: "FluentPostgresDriver", dependencies: [
22-
.product(name: "AsyncKit", package: "async-kit"),
23-
.product(name: "FluentKit", package: "fluent-kit"),
24-
.product(name: "FluentSQL", package: "fluent-kit"),
25-
.product(name: "PostgresKit", package: "postgres-kit"),
26-
]),
27-
.testTarget(name: "FluentPostgresDriverTests", dependencies: [
28-
.product(name: "FluentBenchmark", package: "fluent-kit"),
29-
.target(name: "FluentPostgresDriver"),
30-
]),
21+
.target(
22+
name: "FluentPostgresDriver",
23+
dependencies: [
24+
.product(name: "AsyncKit", package: "async-kit"),
25+
.product(name: "FluentKit", package: "fluent-kit"),
26+
.product(name: "FluentSQL", package: "fluent-kit"),
27+
.product(name: "PostgresKit", package: "postgres-kit"),
28+
],
29+
swiftSettings: swiftSettings
30+
),
31+
.testTarget(
32+
name: "FluentPostgresDriverTests",
33+
dependencies: [
34+
.product(name: "FluentBenchmark", package: "fluent-kit"),
35+
.target(name: "FluentPostgresDriver"),
36+
],
37+
swiftSettings: swiftSettings
38+
),
3139
]
3240
)
41+
42+
var swiftSettings: [SwiftSetting] { [
43+
.enableUpcomingFeature("ConciseMagicFile"),
44+
.enableUpcomingFeature("ForwardTrailingClosures"),
45+
.enableUpcomingFeature("DisableOutwardActorInference"),
46+
.enableExperimentalFeature("StrictConcurrency=complete"),
47+
] }

[email protected]

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// swift-tools-version:5.9
2+
import PackageDescription
3+
4+
let package = Package(
5+
name: "fluent-postgres-driver",
6+
platforms: [
7+
.macOS(.v10_15),
8+
.iOS(.v13),
9+
.watchOS(.v6),
10+
.tvOS(.v13),
11+
],
12+
products: [
13+
.library(name: "FluentPostgresDriver", targets: ["FluentPostgresDriver"]),
14+
],
15+
dependencies: [
16+
.package(url: "https://github.com/vapor/async-kit.git", from: "1.17.0"),
17+
.package(url: "https://github.com/vapor/fluent-kit.git", from: "1.43.0"),
18+
.package(url: "https://github.com/vapor/postgres-kit.git", from: "2.11.4"),
19+
],
20+
targets: [
21+
.target(
22+
name: "FluentPostgresDriver",
23+
dependencies: [
24+
.product(name: "AsyncKit", package: "async-kit"),
25+
.product(name: "FluentKit", package: "fluent-kit"),
26+
.product(name: "FluentSQL", package: "fluent-kit"),
27+
.product(name: "PostgresKit", package: "postgres-kit"),
28+
],
29+
swiftSettings: swiftSettings
30+
),
31+
.testTarget(
32+
name: "FluentPostgresDriverTests",
33+
dependencies: [
34+
.product(name: "FluentBenchmark", package: "fluent-kit"),
35+
.target(name: "FluentPostgresDriver"),
36+
],
37+
swiftSettings: swiftSettings
38+
),
39+
]
40+
)
41+
42+
var swiftSettings: [SwiftSetting] { [
43+
.enableUpcomingFeature("ExistentialAny"),
44+
.enableUpcomingFeature("ConciseMagicFile"),
45+
.enableUpcomingFeature("ForwardTrailingClosures"),
46+
.enableUpcomingFeature("DisableOutwardActorInference"),
47+
.enableExperimentalFeature("StrictConcurrency=complete"),
48+
] }

0 commit comments

Comments
 (0)