Skip to content

Commit 7c60da3

Browse files
committed
workflows drivers for msvc2022 Qt6
1 parent 98b67a5 commit 7c60da3

File tree

1 file changed

+261
-0
lines changed

1 file changed

+261
-0
lines changed
+261
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,261 @@
1+
# MySQL
2+
# ---
3+
# Forces TLS connections with the caching_sha2_password and certificate validation, also validates
4+
# issuer == CN=MySQL_Server_TinyORM_Auto_Generated_CA_Certificate and
5+
# subject == CN=MySQL_Server_TinyORM_Auto_Generated_Client_Certificate.
6+
7+
# PostgreSQL
8+
# ---
9+
# Forces TLS connections with the certificate authentication and full certificate validation
10+
# using the clientname=DN map=dn in the pg_hba.conf, so the username is matched against
11+
# the entire Distinguished Name (DN) of the client certificate and sslmode=verify-full
12+
# on the libpq client side, so the the server host name is matched against the CN (Common Name)
13+
# stored in the server certificate.
14+
15+
name: MSVC2022 Qt6.7 TinyDrivers
16+
17+
on:
18+
push:
19+
branches:
20+
- main
21+
- gh-actions
22+
- silverqx-develop
23+
24+
# I will not remove the build folders before a job execution it's not necessary and
25+
# it will be faster this way. I can still remove them manually if needed or
26+
# if something goes wrong.
27+
28+
jobs:
29+
30+
build:
31+
name: cmake build / ctest
32+
33+
# Self-hosted runner is Windows 11 (Release Preview channel - 23H2)
34+
runs-on: [self-hosted, windows]
35+
36+
strategy:
37+
matrix:
38+
drivers-type: [Shared, Loadable]
39+
build-type:
40+
- key: debug
41+
name: Debug
42+
43+
- key: release
44+
name: Release
45+
46+
steps:
47+
- uses: actions/checkout@v4
48+
with:
49+
path: main
50+
51+
- name: TinyORM prepare environment
52+
run: |
53+
$runnerWorkPath = Resolve-Path -Path '${{ runner.workspace }}/..'
54+
"TinyRunnerWorkPath=$runnerWorkPath" >> $env:GITHUB_ENV
55+
56+
$mysqlExePath = (Get-Command -Name mysql.exe).Source
57+
$mysqlInstallationPath = Split-Path -Parent -Path (Split-Path -Parent -Path $mysqlExePath)
58+
"TinyMySQLInstallationPath=$mysqlInstallationPath" >> $env:GITHUB_ENV
59+
60+
"TinyParallel=5" >> $env:GITHUB_ENV
61+
62+
$tinyormPath = Resolve-Path -Path ./main
63+
"TinyORMPath=$tinyormPath" >> $env:GITHUB_ENV
64+
65+
$tinyormBuildFolder = 'Drivers-msvc-${{ matrix.drivers-type }}-${{ matrix.build-type.key }}'
66+
"TinyORMBuildFolder=$tinyormBuildFolder" >> $env:GITHUB_ENV
67+
68+
$tinyormBuildTree = Join-Path -Path '${{ runner.workspace }}' TinyORM-builds-cmake `
69+
$tinyormBuildFolder
70+
"TinyORMBuildTree=$tinyormBuildTree" >> $env:GITHUB_ENV
71+
env:
72+
DB_SQLITE_DATABASE: ${{ secrets.DB_SQLITE_DATABASE }}
73+
74+
- name: MySQL add libmysql.dll on the $env:Path, INCLUDE, and LIB
75+
run: |
76+
'${{ env.TinyMySQLInstallationPath }}\lib' >> $env:GITHUB_PATH
77+
# Needed by the lastest FindMySQL.cmake module, it stopped working without this
78+
'INCLUDE=${{ env.TinyMySQLInstallationPath }}\include' >> $env:GITHUB_ENV
79+
'LIB=${{ env.TinyMySQLInstallationPath }}\lib' >> $env:GITHUB_ENV
80+
81+
- name: MySQL service check status
82+
run: |
83+
$serviceName = 'MySQL83'
84+
85+
Write-Output '::group::Get-Service'
86+
$mysqlService = Get-Service $serviceName
87+
Write-Output $mysqlService
88+
Write-Output '::endgroup::'
89+
90+
Write-Output '::group::Service running check'
91+
$mysqlService.status.ToString() -ceq 'Running' -or `
92+
$(throw "$serviceName service is not running") > $null
93+
Write-Output '::endgroup::'
94+
95+
# Write-Output '::group::Ping'
96+
# mysqladmin.exe --user=$env:DB_MYSQL_USERNAME --password=$env:DB_MYSQL_PASSWORD ping
97+
# Write-Output '::endgroup::'
98+
env:
99+
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD_SELF }}
100+
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME_SELF }}
101+
102+
- name: Print MySQL database versions
103+
run: |
104+
Write-Output '::group::MySQL version'
105+
mysql.exe --version
106+
Write-Output '::endgroup::'
107+
108+
- name: Ninja install latest version
109+
uses: seanmiddleditch/gha-setup-ninja@master
110+
with:
111+
destination: ${{ env.TinyRunnerWorkPath }}/ninja-build
112+
113+
- name: Visual Studio 2022 pwsh shell setup
114+
uses: ilammy/msvc-dev-cmd@v1
115+
with:
116+
arch: x64
117+
118+
# Don't use the default CCACHE_DIR path on self-hosted runners
119+
- name: Ccache prepare environment
120+
run: |
121+
$ccacheDirPath = Join-Path -Path '${{ runner.workspace }}' -ChildPath ccache
122+
"CCACHE_DIR=$ccacheDirPath" >> $env:GITHUB_ENV
123+
124+
# I'm managing the ccache configuration manually on self-hosted runners using the ccache.conf
125+
# because it's used by more actions.
126+
127+
- name: Ccache print version and configuration
128+
run: |
129+
Write-Output '::group::Print version'
130+
ccache.exe --version
131+
Write-Output '::endgroup::'
132+
133+
Write-Output '::group::Print ccache config'
134+
ccache.exe --show-config
135+
Write-Output '::endgroup::'
136+
137+
# Must be after the ilammy/msvc-dev-cmd@v1 because vcvars64 overrides the VCPKG_ROOT
138+
- name: vcpkg prepare environment
139+
run: |
140+
"VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" >> $env:GITHUB_ENV
141+
'VCPKG_DEFAULT_TRIPLET=x64-windows' >> $env:GITHUB_ENV
142+
'VCPKG_MAX_CONCURRENCY=2' >> $env:GITHUB_ENV
143+
144+
- name: Self-hosted runner prepare environment
145+
run: |
146+
'C:\Program Files\CMake\bin' >> $env:GITHUB_PATH
147+
"$env:VCPKG_INSTALLATION_ROOT" >> $env:GITHUB_PATH
148+
"$env:TINY_QT_ROOT\6.7.0\msvc2019_64\bin" >> $env:GITHUB_PATH
149+
150+
- name: CMake print version
151+
run: |
152+
cmake.exe --version
153+
154+
- name: vcpkg print version
155+
run: |
156+
vcpkg.exe --version
157+
158+
- name: TinyORM create build folder (${{ env.TinyORMBuildFolder }})
159+
run: >-
160+
if (-not (Test-Path '${{ env.TinyORMBuildTree }}')) {
161+
New-Item -Type Directory '${{ env.TinyORMBuildTree }}'
162+
}
163+
164+
- name: Ccache clear statistics
165+
run: |
166+
ccache.exe --zero-stats
167+
168+
- name: TinyORM cmake configure (${{ env.TinyORMBuildFolder }})
169+
working-directory: ${{ env.TinyORMPath }}
170+
run: >-
171+
cmake.exe
172+
-S .
173+
-B '${{ env.TinyORMBuildTree }}'
174+
-G Ninja
175+
-D CMAKE_CXX_COMPILER_LAUNCHER:FILEPATH='C:/ProgramData/chocolatey/bin/ccache.exe'
176+
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
177+
-D CMAKE_DISABLE_PRECOMPILE_HEADERS:BOOL=ON
178+
-D CMAKE_EXPORT_PACKAGE_REGISTRY:BOOL=OFF
179+
-D CMAKE_BUILD_TYPE:STRING=${{ matrix.build-type.name }}
180+
-D CMAKE_CXX_SCAN_FOR_MODULES:BOOL=OFF
181+
-D VCPKG_APPLOCAL_DEPS:BOOL=OFF
182+
-D VERBOSE_CONFIGURE:BOOL=ON
183+
-D MATCH_EQUAL_EXPORTED_BUILDTREE:BOOL=ON
184+
-D MYSQL_PING:BOOL=ON
185+
-D BUILD_TESTS:BOOL=ON
186+
-D ORM:BOOL=ON
187+
-D TOM:BOOL=ON
188+
-D TOM_EXAMPLE:BOOL=ON
189+
-D BUILD_DRIVERS:BOOL=ON
190+
-D DRIVERS_TYPE:STRING=${{ matrix.drivers-type }}
191+
192+
- name: TinyORM cmake build ✨ (${{ env.TinyORMBuildFolder }})
193+
working-directory: ${{ env.TinyORMBuildTree }}
194+
run: |
195+
cmake.exe --build . --target all --parallel ${{ env.TinyParallel }}
196+
197+
- name: Ccache print statistics
198+
run: |
199+
ccache.exe --show-stats -vv
200+
201+
# Used migrate:fresh instead (is safer)
202+
- name: Create and Seed tables for unit tests 🎉
203+
working-directory: ${{ env.TinyORMBuildTree }}/tests/testdata_tom
204+
run: |
205+
$env:Path = '..\..;' + $env:Path
206+
207+
.\tom_testdata.exe migrate:fresh --database=tinyorm_testdata_tom_mysql --seed --no-ansi
208+
env:
209+
DB_MYSQL_CHARSET: ${{ secrets.DB_MYSQL_CHARSET }}
210+
DB_MYSQL_COLLATION: ${{ secrets.DB_MYSQL_COLLATION }}
211+
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
212+
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST_SELF }}
213+
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD_SELF }}
214+
DB_MYSQL_SSL_CA: ${{ secrets.DB_MYSQL_DATA_SELF }}/ca.pem
215+
DB_MYSQL_SSL_CERT: ${{ secrets.DB_MYSQL_DATA_SELF }}/client-cert.pem
216+
DB_MYSQL_SSL_KEY: ${{ secrets.DB_MYSQL_DATA_SELF }}/client-key.pem
217+
DB_MYSQL_SSL_MODE: ${{ secrets.DB_MYSQL_SSL_MODE }}
218+
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME_SELF }}
219+
TOM_TESTDATA_ENV: testing
220+
221+
- name: TinyORM execute ctest 🔥
222+
working-directory: ${{ env.TinyORMBuildTree }}
223+
run: |
224+
ctest.exe --output-on-failure
225+
env:
226+
DB_MYSQL_CHARSET: ${{ secrets.DB_MYSQL_CHARSET }}
227+
DB_MYSQL_COLLATION: ${{ secrets.DB_MYSQL_COLLATION }}
228+
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
229+
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST_SELF }}
230+
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD_SELF }}
231+
DB_MYSQL_SSL_CA: ${{ secrets.DB_MYSQL_DATA_SELF }}/ca.pem
232+
DB_MYSQL_SSL_CERT: ${{ secrets.DB_MYSQL_DATA_SELF }}/client-cert.pem
233+
DB_MYSQL_SSL_KEY: ${{ secrets.DB_MYSQL_DATA_SELF }}/client-key.pem
234+
DB_MYSQL_SSL_MODE: ${{ secrets.DB_MYSQL_SSL_MODE }}
235+
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME_SELF }}
236+
TOM_TESTS_ENV: testing
237+
238+
- name: Tom example test some commands (MySQL) 🚀
239+
working-directory: ${{ env.TinyORMBuildTree }}/examples/tom
240+
run: |
241+
$env:Path = '..\..;' + $env:Path
242+
243+
.\tom.exe migrate:reset --database=tinyorm_tom_mysql --no-ansi
244+
.\tom.exe migrate:uninstall --reset --database=tinyorm_tom_mysql --no-ansi
245+
.\tom.exe migrate:install --database=tinyorm_tom_mysql --no-ansi
246+
.\tom.exe migrate:status --database=tinyorm_tom_mysql --no-ansi
247+
.\tom.exe migrate --database=tinyorm_tom_mysql --seed --no-ansi
248+
.\tom.exe migrate:refresh --database=tinyorm_tom_mysql --seed --no-ansi
249+
.\tom.exe migrate:status --database=tinyorm_tom_mysql --no-ansi
250+
env:
251+
DB_MYSQL_CHARSET: ${{ secrets.DB_MYSQL_CHARSET }}
252+
DB_MYSQL_COLLATION: ${{ secrets.DB_MYSQL_COLLATION }}
253+
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
254+
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST_SELF }}
255+
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD_SELF }}
256+
DB_MYSQL_SSL_CA: ${{ secrets.DB_MYSQL_DATA_SELF }}/ca.pem
257+
DB_MYSQL_SSL_CERT: ${{ secrets.DB_MYSQL_DATA_SELF }}/client-cert.pem
258+
DB_MYSQL_SSL_KEY: ${{ secrets.DB_MYSQL_DATA_SELF }}/client-key.pem
259+
DB_MYSQL_SSL_MODE: ${{ secrets.DB_MYSQL_SSL_MODE }}
260+
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME_SELF }}
261+
TOM_EXAMPLE_ENV: testing

0 commit comments

Comments
 (0)