-
-
Notifications
You must be signed in to change notification settings - Fork 76
204 lines (199 loc) · 7.59 KB
/
test.yml
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
name: CI
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
push:
branches:
- "main"
pull_request:
branches:
- "*"
env:
LOG_LEVEL: info
jobs:
linux-unit:
strategy:
fail-fast: false
matrix:
swift-image:
- swift:5.9-jammy
- swift:5.10-noble
- swift:6.0-noble
- swiftlang/swift:nightly-main-jammy
container: ${{ matrix.swift-image }}
runs-on: ubuntu-latest
steps:
- name: Display OS and Swift versions
shell: bash
run: |
[[ -z "${SWIFT_PLATFORM}" ]] && SWIFT_PLATFORM="$(. /etc/os-release && echo "${ID}${VERSION_ID}")"
[[ -z "${SWIFT_VERSION}" ]] && SWIFT_VERSION="$(cat /.swift_tag 2>/dev/null || true)"
printf 'OS: %s\nTag: %s\nVersion:\n' "${SWIFT_PLATFORM}-${RUNNER_ARCH}" "${SWIFT_VERSION}"
swift --version
- name: Check out package
uses: actions/checkout@v4
- name: Run unit tests with Thread Sanitizer
run: |
swift test --filter='^(PostgresNIOTests|ConnectionPoolModuleTests)' --sanitize=thread --enable-code-coverage
- name: Submit code coverage
uses: vapor/[email protected]
with:
codecov_token: ${{ secrets.CODECOV_TOKEN }}
linux-integration-and-dependencies:
strategy:
fail-fast: false
matrix:
postgres-image:
- postgres:17
- postgres:15
- postgres:12
include:
- postgres-image: postgres:17
postgres-auth: scram-sha-256
- postgres-image: postgres:15
postgres-auth: md5
- postgres-image: postgres:12
postgres-auth: trust
container:
image: swift:5.10-noble
volumes: [ 'pgrunshare:/var/run/postgresql' ]
runs-on: ubuntu-latest
env:
# Unfortunately, fluent-postgres-driver details leak through here
POSTGRES_DB: 'test_database'
POSTGRES_DB_A: 'test_database'
POSTGRES_DB_B: 'test_database'
POSTGRES_USER: 'test_username'
POSTGRES_USER_A: 'test_username'
POSTGRES_USER_B: 'test_username'
POSTGRES_PASSWORD: 'test_password'
POSTGRES_PASSWORD_A: 'test_password'
POSTGRES_PASSWORD_B: 'test_password'
POSTGRES_HOSTNAME: 'psql-a'
POSTGRES_HOSTNAME_A: 'psql-a'
POSTGRES_HOSTNAME_B: 'psql-b'
POSTGRES_SOCKET: '/var/run/postgresql/.s.PGSQL.5432'
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.postgres-auth }}
services:
psql-a:
image: ${{ matrix.postgres-image }}
volumes: [ 'pgrunshare:/var/run/postgresql' ]
env:
POSTGRES_USER: 'test_username'
POSTGRES_DB: 'test_database'
POSTGRES_PASSWORD: 'test_password'
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.postgres-auth }}
POSTGRES_INITDB_ARGS: --auth-host=${{ matrix.postgres-auth }}
psql-b:
image: ${{ matrix.postgres-image }}
volumes: [ 'pgrunshare:/var/run/postgresql' ]
env:
POSTGRES_USER: 'test_username'
POSTGRES_DB: 'test_database'
POSTGRES_PASSWORD: 'test_password'
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.postgres-auth }}
POSTGRES_INITDB_ARGS: --auth-host=${{ matrix.postgres-auth }}
steps:
- name: Display OS and Swift versions
run: |
[[ -z "${SWIFT_PLATFORM}" ]] && SWIFT_PLATFORM="$(. /etc/os-release && echo "${ID}${VERSION_ID}")"
[[ -z "${SWIFT_VERSION}" ]] && SWIFT_VERSION="$(cat /.swift_tag 2>/dev/null || true)"
printf 'OS: %s\nTag: %s\nVersion:\n' "${SWIFT_PLATFORM}-${RUNNER_ARCH}" "${SWIFT_VERSION}" && swift --version
- name: Check out package
uses: actions/checkout@v4
with: { path: 'postgres-nio' }
- name: Run integration tests
run: swift test --package-path postgres-nio --filter=^IntegrationTests
- name: Check out postgres-kit dependent
uses: actions/checkout@v4
with: { repository: 'vapor/postgres-kit', path: 'postgres-kit' }
- name: Check out fluent-postgres-driver dependent
uses: actions/checkout@v4
with: { repository: 'vapor/fluent-postgres-driver', path: 'fluent-postgres-driver' }
- name: Use local package in dependents
run: |
swift package --package-path postgres-kit edit postgres-nio --path postgres-nio
swift package --package-path fluent-postgres-driver edit postgres-nio --path postgres-nio
- name: Run postgres-kit tests
run: swift test --package-path postgres-kit
- name: Run fluent-postgres-driver tests
run: swift test --package-path fluent-postgres-driver
macos-all:
strategy:
fail-fast: false
matrix:
postgres-formula:
# Only test one version on macOS, let Linux do the rest
- postgresql@16
postgres-auth:
# Only test one auth method on macOS, Linux tests will cover the others
- scram-sha-256
xcode-version:
- '~15'
include:
- xcode-version: '~15'
macos-version: 'macos-14'
runs-on: ${{ matrix.macos-version }}
env:
POSTGRES_HOSTNAME: 127.0.0.1
POSTGRES_USER: 'test_username'
POSTGRES_PASSWORD: 'test_password'
POSTGRES_DB: 'postgres'
POSTGRES_AUTH_METHOD: ${{ matrix.postgres-auth }}
POSTGRES_SOCKET: '/tmp/.s.PGSQL.5432'
POSTGRES_FORMULA: ${{ matrix.postgres-formula }}
steps:
- name: Select latest available Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.xcode-version }}
- name: Install Postgres, setup DB and auth, and wait for server start
run: |
export PATH="$(brew --prefix)/opt/${POSTGRES_FORMULA}/bin:$PATH" PGDATA=/tmp/vapor-postgres-test
# ** BEGIN ** Work around bug in both Homebrew and GHA
(brew upgrade [email protected] || true) && (brew link --force --overwrite [email protected] || true)
(brew upgrade [email protected] || true) && (brew link --force --overwrite [email protected] || true)
(brew upgrade || true)
# ** END ** Work around bug in both Homebrew and GHA
brew install --overwrite "${POSTGRES_FORMULA}"
brew link --overwrite --force "${POSTGRES_FORMULA}"
initdb --locale=C --auth-host "${POSTGRES_AUTH_METHOD}" -U "${POSTGRES_USER}" --pwfile=<(echo "${POSTGRES_PASSWORD}")
pg_ctl start --wait
timeout-minutes: 15
- name: Checkout code
uses: actions/checkout@v4
- name: Run all tests
run: swift test
api-breakage:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
container: swift:noble
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# https://github.com/actions/checkout/issues/766
- name: API breaking changes
run: |
git config --global --add safe.directory "${GITHUB_WORKSPACE}"
swift package diagnose-api-breaking-changes origin/main
# gh-codeql:
# if: ${{ false }}
# runs-on: ubuntu-latest
# container: swift:noble
# permissions: { actions: write, contents: read, security-events: write }
# steps:
# - name: Check out code
# uses: actions/checkout@v4
# - name: Mark repo safe in non-fake global config
# run: git config --global --add safe.directory "${GITHUB_WORKSPACE}"
# - name: Initialize CodeQL
# uses: github/codeql-action/init@v3
# with:
# languages: swift
# - name: Perform build
# run: swift build
# - name: Run CodeQL analyze
# uses: github/codeql-action/analyze@v3