Files
TinyORM/.github/workflows/mingw.yml
2022-05-12 13:38:49 +02:00

264 lines
9.6 KiB
YAML

name: MSYS2 UCRT64 GCC/Clang
on:
pull_request:
push:
branches:
- main
- gh-actions
jobs:
build:
name: cmake build / ctest
runs-on: windows-2022
strategy:
matrix:
compiler:
- key: clang
pacboy: [ 'clang:u', 'gcc:u' ]
command: clang++.exe
- key: gcc
pacboy: [ 'gcc:u' ]
command: g++.exe
steps:
- uses: actions/checkout@v2
- name: PostgreSQL start service
run: |
Set-Service -Name postgresql-x64-14 -StartupType Manual
Start-Service postgresql-x64-14
- name: PostgreSQL add on the $env:Path
run: |
Write-Output "$env:PGBIN" | Out-File -FilePath $env:GITHUB_PATH -Append
- name: PostgreSQL check service status
run: |
$pgsqlService = Get-Service postgresql-x64-14
Write-Output $pgsqlService
$pgsqlService.status.ToString() -ceq "Running" `
-or $(throw 'postgresql-x64-14 service is not running') > $null
pg_isready.exe
- name: PostgreSQL create TinyORM user
run: >-
psql.exe
--command="CREATE USER ${env:DB_PGSQL_USERNAME} PASSWORD '${env:DB_PGSQL_PASSWORD}'"
env:
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
- name: PostgreSQL create TinyORM database
run: |
createdb.exe --owner=$env:DB_PGSQL_USERNAME $env:DB_PGSQL_DATABASE
env:
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
- name: MySQL create data folder
run: |
New-Item -Type Directory '${{ runner.workspace }}/../mysql/data'
- name: MySQL initialize server and install/start service
run: |
Copy-Item .github/resources/my.ini C:/mysql
mysqld.exe --initialize-insecure --console --datadir='${{ runner.workspace }}/../mysql/data'
mysqld.exe --install MySQL --datadir='${{ runner.workspace }}/../mysql/data'
Start-Service MySQL
- name: MySQL change TinyORM password
run: >-
mysql.exe --host=$env:DB_MYSQL_HOST --user=$env:DB_MYSQL_USERNAME --skip-password
--execute="ALTER USER '${env:DB_MYSQL_USERNAME}'@'${env:DB_MYSQL_HOST}'
IDENTIFIED BY '${env:DB_MYSQL_PASSWORD}';"
env:
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: MySQL check service status
run: |
$mysqlService = Get-Service MySQL
Write-Output $mysqlService
$mysqlService.status.ToString() -ceq "Running" `
-or $(throw 'MySQL service is not running') > $null
mysqladmin.exe --bind-address=$env:DB_MYSQL_HOST --user=$env:DB_MYSQL_USERNAME `
--password=$env:DB_MYSQL_PASSWORD ping
env:
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: MySQL create TinyORM database
run: >-
echo "
create database if not exists $env:DB_MYSQL_DATABASE
default character set utf8mb4
default collate utf8mb4_0900_ai_ci;" |
mysql.exe --host=$env:DB_MYSQL_HOST --user=$env:DB_MYSQL_USERNAME
--password=$env:DB_MYSQL_PASSWORD
env:
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: SQLite create TinyORM database
run: |
touch "$env:DB_SQLITE_DATABASE"
env:
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}
- name: PHP enable PDO extensions (pdo_mysql, pdo_pgsql, pdo_sqlite)
run: |
Add-Content -Path "${env:PHPROOT}/php.ini" -Value `
"[PHP]
extension=pdo_mysql
extension=pdo_pgsql
extension=pdo_sqlite
"
- name: testdata composer install (illuminate/database)
uses: "ramsey/composer-install@v1"
with:
composer-options: >-
--working-dir=${{ github.workspace }}/tests/testdata
--prefer-dist --optimize-autoloader
- name: TinyORM create build folder (${{ matrix.compiler.key }}-cmake-debug)
run: |
mkdir -p ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
- name: |
MSYS2 UCRT64 setup (${{ join(matrix.compiler.pacboy, ', ') }}, lld:u, qt5-base:u, ccache:u)
uses: msys2/setup-msys2@v2
with:
msystem: ucrt64
path-type: minimal
update: true
install: |
git
pacboy: >-
${{ join(matrix.compiler.pacboy, ' ') }} lld:u
cmake:u ninja:u ccache:u
qt5-base:u
libmariadbclient:u postgresql:u
- name: ccache setup 🕺
uses: Chocobo1/setup-ccache-action@v1
with:
windows_compile_environment: msys2
prepend_symlinks_to_path: false
install_ccache: false
update_packager_index: false
ccache_options: |
compression = false
max_size = 3G
- name: vcpkg set-up environment
shell: msys2 {0}
run: |
echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV
echo 'VCPKG_DEFAULT_TRIPLET=x64-mingw-dynamic' >> $GITHUB_ENV
echo 'VCPKG_DEFAULT_HOST_TRIPLET=x64-mingw-dynamic' >> $GITHUB_ENV
echo 'VCPKG_MAX_CONCURRENCY=2' >> $GITHUB_ENV
- name: TinyORM cmake configure (${{ matrix.compiler.key }}-cmake-debug)
shell: msys2 {0}
run: >-
cmake
-S .
-B ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
-G Ninja
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache.exe
-D CMAKE_CXX_COMPILER:FILEPATH=/ucrt64/bin/${{ matrix.compiler.command }}
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
-D CMAKE_DISABLE_PRECOMPILE_HEADERS:BOOL=ON
-D CMAKE_BUILD_TYPE:BOOL=Debug
-D VERBOSE_CONFIGURE:BOOL=ON
-D CMAKE_VERBOSE_MAKEFILE:BOOL=OFF
-D MATCH_EQUAL_EXPORTED_BUILDTREE:BOOL=OFF
-D MYSQL_PING:BOOL=ON
-D BUILD_TESTS:BOOL=ON
-D ORM:BOOL=ON
-D TOM:BOOL=ON
-D TOM_EXAMPLE:BOOL=ON
- name: TinyORM cmake build ✨ (${{ matrix.compiler.key }}-cmake-debug)
shell: msys2 {0}
run: >-
cmake --build ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
--target all --parallel ${{ matrix.compiler.key == 'gcc' && 1 || 2 }}
- name: Create tables for unit tests 🎉 (MySQL only)
shell: msys2 {0}
working-directory: ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug/tests/testdata_tom
run: |
export PATH=../..${PATH:+:}$PATH
./tom_testdata.exe migrate --no-ansi
env:
DB_MYSQL_CHARSET: utf8mb4
DB_MYSQL_COLLATION: utf8mb4_0900_ai_ci
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
TOM_TESTDATA_ENV: testing
- name: Create and Seed tables for unit tests (MySQL (seed only), PostgreSQL, SQLite)
working-directory: tests/testdata
run: |
php.exe ./create_and_seed_database.php --skip-mysql-migrate
env:
DB_MYSQL_CHARSET: utf8mb4
DB_MYSQL_COLLATION: utf8mb4_0900_ai_ci
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
DB_PGSQL_CHARSET: utf8
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST }}
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}
- name: TinyORM execute ctest 🔥
shell: msys2 {0}
working-directory: ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
run: ctest
env:
DB_MYSQL_CHARSET: utf8mb4
DB_MYSQL_COLLATION: utf8mb4_0900_ai_ci
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
DB_PGSQL_CHARSET: utf8
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST }}
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}
TOM_TESTS_ENV: testing
- name: Tom example execute migrate:status 🚀
shell: msys2 {0}
working-directory: ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug/examples/tom
run: |
export PATH=../..${PATH:+:}$PATH
./tom.exe migrate:status --no-ansi
env:
DB_MYSQL_CHARSET: utf8mb4
DB_MYSQL_COLLATION: utf8mb4_0900_ai_ci
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
TOM_EXAMPLE_ENV: testing