@@ -70,25 +70,11 @@ jobs:
7070
7171 # ───────────────────────────────────────────────────────────────────────────
7272 # 2. SQL Server integration tests
73- # Uses GitHub Actions service container — Linux only .
73+ # Connects to Mac via frpc tunnel on VPS (no service container) .
7474 # ───────────────────────────────────────────────────────────────────────────
7575 test-mssql :
7676 name : SQL Server integration tests
7777 runs-on : ubuntu-24.04
78- services :
79- mssql :
80- image : mcr.microsoft.com/mssql/server:2022-latest
81- env :
82- ACCEPT_EULA : " Y"
83- SA_PASSWORD : " aBCD111!"
84- MSSQL_PID : Developer
85- ports :
86- - 1433:1433
87- options : >-
88- --health-cmd "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P 'aBCD111!' -Q 'SELECT 1' -C"
89- --health-interval 10s
90- --health-timeout 5s
91- --health-retries 15
9278 steps :
9379 - name : Checkout
9480 uses : actions/checkout@v4
@@ -101,6 +87,16 @@ jobs:
10187 - name : Install SQLite
10288 run : sudo apt-get install -y libsqlite3-dev
10389
90+ - name : Install sqlcmd
91+ run : |
92+ curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \
93+ | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
94+ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-prod.gpg] \
95+ https://packages.microsoft.com/ubuntu/24.04/prod noble main" \
96+ | sudo tee /etc/apt/sources.list.d/mssql-release.list
97+ sudo apt-get update -q
98+ sudo ACCEPT_EULA=Y apt-get install -y sqlcmd
99+
104100 - name : Cache SPM
105101 uses : actions/cache@v4
106102 with :
@@ -111,52 +107,33 @@ jobs:
111107
112108 - name : Create test database
113109 run : |
114- container_id=$(docker ps --filter "ancestor=mcr.microsoft.com/mssql/server:2022-latest" \
115- --format "{{.ID}}" | head -1)
116- for i in $(seq 1 30); do
117- docker exec "$container_id" /opt/mssql-tools18/bin/sqlcmd \
118- -S localhost -U sa -P 'aBCD111!' -C \
119- -Q "IF DB_ID('MSSQLNioTestDb') IS NULL CREATE DATABASE MSSQLNioTestDb" \
120- 2>/dev/null && echo "SQL Server ready." && break
121- echo "Waiting for SQL Server... ($i/30)"; sleep 5
122- done
110+ sqlcmd -S "${{ secrets.DB_HOST }},1433" -U sa \
111+ -P "${{ secrets.MSSQL_TEST_PASS }}" \
112+ --trust-server-certificate \
113+ -Q "IF DB_ID('MSSQLNioTestDb') IS NULL CREATE DATABASE MSSQLNioTestDb"
123114
124115 - name : Seed SQL Server database
125116 run : |
126- container_id=$(docker ps --filter "ancestor=mcr.microsoft.com/mssql/server:2022-latest" \
127- --format "{{.ID}}" | head -1)
128- docker cp Tests/Resources/mssql_seed.sql "$container_id:/tmp/seed.sql"
129- docker exec "$container_id" /opt/mssql-tools18/bin/sqlcmd \
130- -S localhost -U sa -P 'aBCD111!' -C -i /tmp/seed.sql
117+ sqlcmd -S "${{ secrets.DB_HOST }},1433" -U sa \
118+ -P "${{ secrets.MSSQL_TEST_PASS }}" \
119+ --trust-server-certificate \
120+ -i Tests/Resources/mssql_seed.sql
131121
132122 - name : Run MSSQL tests
133123 env :
134- MSSQL_TEST_HOST : " 127.0.0.1 "
135- MSSQL_TEST_PASS : " aBCD111! "
124+ MSSQL_TEST_HOST : ${{ secrets.DB_HOST }}
125+ MSSQL_TEST_PASS : ${{ secrets.MSSQL_TEST_PASS }}
136126 MSSQL_TEST_DB : " MSSQLNioTestDb"
137127 MSSQL_TEST_USER : " sa"
138128 run : swift test --filter MSSQLNioTests 2>&1
139129
140130 # ───────────────────────────────────────────────────────────────────────────
141131 # 3. PostgreSQL integration tests
132+ # Connects to Mac via frpc tunnel on VPS (no service container).
142133 # ───────────────────────────────────────────────────────────────────────────
143134 test-postgres :
144135 name : PostgreSQL integration tests
145136 runs-on : ubuntu-24.04
146- services :
147- postgres :
148- image : postgres:16-alpine
149- env :
150- POSTGRES_DB : PostgresNioTestDb
151- POSTGRES_USER : pguser
152- POSTGRES_PASSWORD : pgPass123
153- ports :
154- - 5432:5432
155- options : >-
156- --health-cmd "pg_isready -U pguser"
157- --health-interval 5s
158- --health-timeout 3s
159- --health-retries 10
160137 steps :
161138 - name : Checkout
162139 uses : actions/checkout@v4
@@ -166,8 +143,8 @@ jobs:
166143 with :
167144 swift-version : ${{ env.SWIFT_VERSION }}
168145
169- - name : Install SQLite
170- run : sudo apt-get install -y libsqlite3-dev
146+ - name : Install SQLite and psql
147+ run : sudo apt-get install -y libsqlite3-dev postgresql-client
171148
172149 - name : Cache SPM
173150 uses : actions/cache@v4
@@ -179,38 +156,25 @@ jobs:
179156
180157 - name : Seed PostgreSQL database
181158 run : |
182- PGPASSWORD=pgPass123 psql -h 127.0.0.1 -U pguser -d PostgresNioTestDb \
159+ PGPASSWORD="${{ secrets.PG_TEST_PASS }}" psql \
160+ -h "${{ secrets.DB_HOST }}" -U pguser -d PostgresNioTestDb \
183161 -f Tests/Resources/postgres_seed.sql
184162
185163 - name : Run PostgreSQL tests
186164 env :
187- PG_TEST_HOST : " 127.0.0.1 "
165+ PG_TEST_HOST : ${{ secrets.DB_HOST }}
188166 PG_TEST_DB : PostgresNioTestDb
189167 PG_TEST_USER : pguser
190- PG_TEST_PASS : pgPass123
168+ PG_TEST_PASS : ${{ secrets.PG_TEST_PASS }}
191169 run : swift test --filter PostgresNioTests 2>&1
192170
193171 # ───────────────────────────────────────────────────────────────────────────
194172 # 4. MySQL integration tests
173+ # Connects to Mac via frpc tunnel on VPS (no service container).
195174 # ───────────────────────────────────────────────────────────────────────────
196175 test-mysql :
197176 name : MySQL integration tests
198177 runs-on : ubuntu-24.04
199- services :
200- mysql :
201- image : mysql:8
202- env :
203- MYSQL_DATABASE : MySQLNioTestDb
204- MYSQL_USER : mysqluser
205- MYSQL_PASSWORD : mysqlPass123
206- MYSQL_ROOT_PASSWORD : root
207- ports :
208- - 3306:3306
209- options : >-
210- --health-cmd "mysqladmin ping -u mysqluser -pmysqlPass123"
211- --health-interval 5s
212- --health-timeout 3s
213- --health-retries 15
214178 steps :
215179 - name : Checkout
216180 uses : actions/checkout@v4
@@ -220,8 +184,8 @@ jobs:
220184 with :
221185 swift-version : ${{ env.SWIFT_VERSION }}
222186
223- - name : Install SQLite
224- run : sudo apt-get install -y libsqlite3-dev
187+ - name : Install SQLite and mysql client
188+ run : sudo apt-get install -y libsqlite3-dev default-mysql-client
225189
226190 - name : Cache SPM
227191 uses : actions/cache@v4
@@ -233,14 +197,16 @@ jobs:
233197
234198 - name : Seed MySQL database
235199 run : |
236- mysql -h 127.0.0.1 -u mysqluser -pmysqlPass123 MySQLNioTestDb < Tests/Resources/mysql_seed.sql
200+ mysql -h "${{ secrets.DB_HOST }}" \
201+ -u mysqluser -p"${{ secrets.MYSQL_TEST_PASS }}" \
202+ MySQLNioTestDb < Tests/Resources/mysql_seed.sql
237203
238204 - name : Run MySQL tests
239205 env :
240- MYSQL_TEST_HOST : " 127.0.0.1 "
206+ MYSQL_TEST_HOST : ${{ secrets.DB_HOST }}
241207 MYSQL_TEST_DB : MySQLNioTestDb
242208 MYSQL_TEST_USER : mysqluser
243- MYSQL_TEST_PASS : mysqlPass123
209+ MYSQL_TEST_PASS : ${{ secrets.MYSQL_TEST_PASS }}
244210 run : swift test --filter MySQLNioTests 2>&1
245211
246212 # ───────────────────────────────────────────────────────────────────────────
0 commit comments