From f400004760bc97de1f60dd0539f9de187095ba9a Mon Sep 17 00:00:00 2001 From: silverqx Date: Thu, 11 Apr 2024 17:41:01 +0200 Subject: [PATCH] workflows drivers for msvc2022 Qt6 --- .github/workflows/msvc2022-qt6-drivers.yml | 257 +++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 .github/workflows/msvc2022-qt6-drivers.yml diff --git a/.github/workflows/msvc2022-qt6-drivers.yml b/.github/workflows/msvc2022-qt6-drivers.yml new file mode 100644 index 000000000..421caeeed --- /dev/null +++ b/.github/workflows/msvc2022-qt6-drivers.yml @@ -0,0 +1,257 @@ +# MySQL +# --- +# Forces TLS connections with the caching_sha2_password and certificate validation, also validates +# issuer == CN=MySQL_Server_TinyORM_Auto_Generated_CA_Certificate and +# subject == CN=MySQL_Server_TinyORM_Auto_Generated_Client_Certificate. + +# PostgreSQL +# --- +# Forces TLS connections with the certificate authentication and full certificate validation +# using the clientname=DN map=dn in the pg_hba.conf, so the username is matched against +# the entire Distinguished Name (DN) of the client certificate and sslmode=verify-full +# on the libpq client side, so the the server host name is matched against the CN (Common Name) +# stored in the server certificate. + +name: MSVC2022 Qt6.7 TinyDrivers + +on: + push: + branches: + - main + - gh-actions + - silverqx-develop + +# I will not remove the build folders before a job execution it's not necessary and +# it will be faster this way. I can still remove them manually if needed or +# if something goes wrong. + +jobs: + + build: + name: cmake build / ctest + + # Self-hosted runner is Windows 11 (Release Preview channel - 23H2) + runs-on: [self-hosted, windows] + + strategy: + matrix: + build-type: + - key: debug + name: Debug + + - key: release + name: Release + + steps: + - uses: actions/checkout@v4 + with: + path: main + + - name: TinyORM prepare environment + run: | + $runnerWorkPath = Resolve-Path -Path '${{ runner.workspace }}/..' + "TinyRunnerWorkPath=$runnerWorkPath" >> $env:GITHUB_ENV + + $mysqlExePath = (Get-Command -Name mysql.exe).Source + $mysqlInstallationPath = Split-Path -Parent -Path (Split-Path -Parent -Path $mysqlExePath) + "TinyMySQLInstallationPath=$mysqlInstallationPath" >> $env:GITHUB_ENV + + "TinyParallel=5" >> $env:GITHUB_ENV + + $tinyormPath = Resolve-Path -Path ./main + "TinyORMPath=$tinyormPath" >> $env:GITHUB_ENV + env: + DB_SQLITE_DATABASE: ${{ secrets.DB_SQLITE_DATABASE }} + + - name: MySQL add libmysql.dll on the $env:Path, INCLUDE, and LIB + run: | + '${{ env.TinyMySQLInstallationPath }}\lib' >> $env:GITHUB_PATH + # Needed by the lastest FindMySQL.cmake module, it stopped working without this + 'INCLUDE=${{ env.TinyMySQLInstallationPath }}\include' >> $env:GITHUB_ENV + 'LIB=${{ env.TinyMySQLInstallationPath }}\lib' >> $env:GITHUB_ENV + + - name: MySQL service check status + run: | + $serviceName = 'MySQL83' + + Write-Output '::group::Get-Service' + $mysqlService = Get-Service $serviceName + Write-Output $mysqlService + Write-Output '::endgroup::' + + Write-Output '::group::Service running check' + $mysqlService.status.ToString() -ceq 'Running' -or ` + $(throw "$serviceName service is not running") > $null + Write-Output '::endgroup::' + + # Write-Output '::group::Ping' + # mysqladmin.exe --user=$env:DB_MYSQL_USERNAME --password=$env:DB_MYSQL_PASSWORD ping + # Write-Output '::endgroup::' + env: + DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD_SELF }} + DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME_SELF }} + + - name: Print MySQL database versions + run: | + Write-Output '::group::MySQL version' + mysql.exe --version + Write-Output '::endgroup::' + + - name: Ninja install latest version + uses: seanmiddleditch/gha-setup-ninja@master + with: + destination: ${{ env.TinyRunnerWorkPath }}/ninja-build + + - name: Visual Studio 2022 pwsh shell setup + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: x64 + + # Don't use the default CCACHE_DIR path on self-hosted runners + - name: Ccache prepare environment + run: | + $ccacheDirPath = Join-Path -Path '${{ runner.workspace }}' -ChildPath ccache + "CCACHE_DIR=$ccacheDirPath" >> $env:GITHUB_ENV + + # I'm managing the ccache configuration manually on self-hosted runners using the ccache.conf + # because it's used by more actions. + + - name: Ccache print version and configuration + run: | + Write-Output '::group::Print version' + ccache.exe --version + Write-Output '::endgroup::' + + Write-Output '::group::Print ccache config' + ccache.exe --show-config + Write-Output '::endgroup::' + + # Must be after the ilammy/msvc-dev-cmd@v1 because vcvars64 overrides the VCPKG_ROOT + - name: vcpkg prepare environment + run: | + "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" >> $env:GITHUB_ENV + 'VCPKG_DEFAULT_TRIPLET=x64-windows' >> $env:GITHUB_ENV + 'VCPKG_MAX_CONCURRENCY=2' >> $env:GITHUB_ENV + + - name: Self-hosted runner prepare environment + run: | + 'C:\Program Files\CMake\bin' >> $env:GITHUB_PATH + "$env:VCPKG_INSTALLATION_ROOT" >> $env:GITHUB_PATH + "$env:TINY_QT_ROOT\6.7.0\msvc2019_64\bin" >> $env:GITHUB_PATH + + - name: CMake print version + run: | + cmake.exe --version + + - name: vcpkg print version + run: | + vcpkg.exe --version + + - name: TinyORM create build folder (TinyDrivers-msvc-${{ matrix.build-type.key }}) + run: >- + $buildTreesPath = + '../TinyORM-builds-cmake/TinyDrivers-msvc-${{ matrix.build-type.key }}' + + if (-not (Test-Path $buildTreesPath)) { + New-Item -Type Directory $buildTreesPath + } + + - name: Ccache clear statistics + run: | + ccache.exe --zero-stats + + - name: TinyORM cmake configure (TinyDrivers-msvc-${{ matrix.build-type.key }}) + working-directory: ${{ env.TinyORMPath }} + run: >- + cmake.exe + -S . + -B '${{ runner.workspace }}/TinyORM-builds-cmake/TinyDrivers-msvc-${{ matrix.build-type.key }}' + -G Ninja + -D CMAKE_CXX_COMPILER_LAUNCHER:FILEPATH='C:/ProgramData/chocolatey/bin/ccache.exe' + -D CMAKE_TOOLCHAIN_FILE:FILEPATH="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" + -D CMAKE_DISABLE_PRECOMPILE_HEADERS:BOOL=ON + -D CMAKE_EXPORT_PACKAGE_REGISTRY:BOOL=OFF + -D CMAKE_BUILD_TYPE:STRING=${{ matrix.build-type.name }} + -D CMAKE_CXX_SCAN_FOR_MODULES:BOOL=OFF + -D VCPKG_APPLOCAL_DEPS:BOOL=OFF + -D VERBOSE_CONFIGURE:BOOL=ON + -D MATCH_EQUAL_EXPORTED_BUILDTREE:BOOL=ON + -D MYSQL_PING:BOOL=ON + -D BUILD_TESTS:BOOL=ON + -D ORM:BOOL=ON + -D TOM:BOOL=ON + -D TOM_EXAMPLE:BOOL=ON + -D BUILD_DRIVERS:BOOL=ON + -D DRIVERS_TYPE:STRING=Shared + + - name: TinyORM cmake build ✨ (TinyDrivers-msvc-${{ matrix.build-type.key }}) + working-directory: >- + ../TinyORM-builds-cmake/TinyDrivers-msvc-${{ matrix.build-type.key }} + run: | + cmake.exe --build . --target all --parallel ${{ env.TinyParallel }} + + - name: Ccache print statistics + run: | + ccache.exe --show-stats -vv + + # Used migrate:fresh instead (is safer) + - name: Create and Seed tables for unit tests 🎉 + working-directory: >- + ../TinyORM-builds-cmake/TinyDrivers-msvc-${{ matrix.build-type.key }}/tests/testdata_tom + run: | + $env:Path = '..\..;' + $env:Path + + .\tom_testdata.exe migrate:fresh --database=tinyorm_testdata_tom_mysql --seed --no-ansi + env: + DB_MYSQL_CHARSET: ${{ secrets.DB_MYSQL_CHARSET }} + DB_MYSQL_COLLATION: ${{ secrets.DB_MYSQL_COLLATION }} + DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }} + DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST_SELF }} + DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD_SELF }} + DB_MYSQL_SSL_CA: ${{ secrets.DB_MYSQL_DATA_SELF }}/ca.pem + DB_MYSQL_SSL_CERT: ${{ secrets.DB_MYSQL_DATA_SELF }}/client-cert.pem + DB_MYSQL_SSL_KEY: ${{ secrets.DB_MYSQL_DATA_SELF }}/client-key.pem + DB_MYSQL_SSL_MODE: ${{ secrets.DB_MYSQL_SSL_MODE }} + DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME_SELF }} + TOM_TESTDATA_ENV: testing + + - name: TinyORM execute ctest 🔥 + working-directory: ../TinyORM-builds-cmake/TinyDrivers-msvc-${{ matrix.build-type.key }} + run: | + ctest.exe --output-on-failure + env: + DB_MYSQL_CHARSET: ${{ secrets.DB_MYSQL_CHARSET }} + DB_MYSQL_COLLATION: ${{ secrets.DB_MYSQL_COLLATION }} + DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }} + DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST_SELF }} + DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD_SELF }} + DB_MYSQL_SSL_CA: ${{ secrets.DB_MYSQL_DATA_SELF }}/ca.pem + DB_MYSQL_SSL_CERT: ${{ secrets.DB_MYSQL_DATA_SELF }}/client-cert.pem + DB_MYSQL_SSL_KEY: ${{ secrets.DB_MYSQL_DATA_SELF }}/client-key.pem + DB_MYSQL_SSL_MODE: ${{ secrets.DB_MYSQL_SSL_MODE }} + DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME_SELF }} + TOM_TESTS_ENV: testing + + # - name: Tom example test some commands (MySQL) 🚀 + # working-directory: >- + # ../TinyORM-builds-cmake/TinyDrivers-msvc-${{ matrix.build-type.key }}/examples/tom + # run: | + # $env:Path = '..\..;' + $env:Path + + # .\tom.exe migrate:install --database=tinyorm_tom_mysql --no-ansi + # .\tom.exe migrate:status --database=tinyorm_tom_mysql --no-ansi + # .\tom.exe migrate --database=tinyorm_tom_mysql --seed --no-ansi + # .\tom.exe migrate:refresh --database=tinyorm_tom_mysql --seed --no-ansi + # .\tom.exe migrate:status --database=tinyorm_tom_mysql --no-ansi + # env: + # DB_MYSQL_CHARSET: ${{ secrets.DB_MYSQL_CHARSET }} + # DB_MYSQL_COLLATION: ${{ secrets.DB_MYSQL_COLLATION }} + # DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }} + # DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST_SSL }} + # DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }} + # DB_MYSQL_SSL_CA: ${{ env.TinyRunnerWorkPath }}/mysql/data/ca.pem + # DB_MYSQL_SSL_CERT: ${{ env.TinyRunnerWorkPath }}/mysql/data/client-cert.pem + # DB_MYSQL_SSL_KEY: ${{ env.TinyRunnerWorkPath }}/mysql/data/client-key.pem + # DB_MYSQL_SSL_MODE: ${{ secrets.DB_MYSQL_SSL_MODE }} + # DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }} + # TOM_EXAMPLE_ENV: testing