Skip to content

bump version to TinyORM v0.36.2 #336

bump version to TinyORM v0.36.2

bump version to TinyORM v0.36.2 #336

Workflow file for this run

# 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: Linux GCC/Clang Qt6.2
on:
push:
branches:
- main
- gh-actions
jobs:
build:
name: cmake build / ctest
runs-on: ubuntu-22.04
strategy:
matrix:
compiler:
- key: clang17
apt: [ clang-17, lld-17 ]
command: clang++-17
- key: gcc12
apt: [ g++-12 ]
command: g++-12
steps:
- uses: actions/checkout@v4
- name: TinyORM prepare environment
run: |
runnerWorkPath=$(realpath '${{ runner.workspace }}/..')
echo "TinyRunnerWorkPath=$runnerWorkPath" >> $GITHUB_ENV
sqlitePath="$runnerWorkPath/SQLite/$DB_SQLITE_DATABASE"
echo "TinySQLitePath=$sqlitePath" >> $GITHUB_ENV
env:
DB_SQLITE_DATABASE: ${{ secrets.DB_SQLITE_DATABASE }}
- name: Hosts add PostgreSQL server hostname
run: >-
sudo -- sh -c "echo '127.0.0.1\t$DB_PGSQL_HOST' >> /etc/hosts"
env:
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST_SSL }}
- name: PostgreSQL service start
run: |
sudo systemctl start postgresql.service
- name: PostgreSQL prepare environment
id: databases-initialize-postgresql
run: |
pgConfigFile=$(sudo --user=postgres --login -- \
psql --command='show config_file;' --no-align --tuples-only)
pgConfigPath=$(dirname "$pgConfigFile")
echo "PgConfigPath=$pgConfigPath" >> $GITHUB_OUTPUT
pgDataPath=$(sudo --user=postgres --login -- \
psql --command='show data_directory;' --no-align --tuples-only)
echo "PgDataPath=$pgDataPath" >> $GITHUB_OUTPUT
- name: PostgreSQL initialize configuration
working-directory: .github/resources/postgresql
run: |
sudo --user=postgres -- cp --recursive --target-directory="$pg_config_path" ./
echo "\
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
" | \
sudo tee --append "$pg_config_path/conf.d/90-crystal.conf" > /dev/null
env:
pg_config_path: ${{ steps.databases-initialize-postgresql.outputs.PgConfigPath }}
- name: PostgreSQL SSL certificates initialize
id: openssl-initialize-postgresql-certificates
run: |
folderPath='${{ env.TinyRunnerWorkPath }}/tiny-postgresql-certificates'
# Create an empty folder for generating certificates
sudo mkdir "$folderPath"
sudo chown runner:docker "$folderPath"
echo "FolderPath=$folderPath" >> $GITHUB_OUTPUT
# This hash invalidates the PostgreSQL certificates cache every month
hash=$(date +%4Y%2m)
echo "Hash=$hash" >> $GITHUB_OUTPUT
- name: PostgreSQL SSL certificates restore cache
uses: actions/cache/restore@v3
id: openssl-cache-postgresql-certificates
with:
path: |
${{ env.folder_path }}/*.crt
${{ env.folder_path }}/*.key
key: ${{ runner.os }}-openssl-${{ env.cache_name }}-${{ env.cache_hash }}
env:
# This hash invalidates this certificates cache every month
cache_hash: ${{ steps.openssl-initialize-postgresql-certificates.outputs.Hash }}
cache_name: postgresql-certificates
folder_path: ${{ steps.openssl-initialize-postgresql-certificates.outputs.FolderPath }}
- name: PostgreSQL SSL certificates generate
if: steps.openssl-cache-postgresql-certificates.outputs.cache-hit != 'true'
working-directory: ${{ steps.openssl-initialize-postgresql-certificates.outputs.FolderPath }}
run: |
echo '::group::Print openssl version'
openssl version -a
echo '::endgroup::'
echo '::group::CA certificate'
# -days 32 is important, -days 30 is not enough
openssl req -new -x509 -nodes -subj "$DB_PGSQL_SSL_SUBJECT_CA" -days 32 \
-keyout ./root.key -out ./root.crt
echo '::endgroup::'
echo '::group::Server certificate'
openssl req -new -nodes -subj "$DB_PGSQL_SSL_SUBJECT_SERVER" -keyout ./server.key -out \
./server.csr
OPENSSL_SAN="DNS:${DB_PGSQL_HOST}" \
openssl x509 -req -CA ./root.crt -CAkey ./root.key -days 32 -set_serial 01 \
-extfile "$extfile" -in ./server.csr -out ./server.crt
echo '::endgroup::'
echo '::group::Client certificate'
openssl req -new -nodes -subj "$DB_PGSQL_SSL_SUBJECT_CLIENT" -keyout ./postgresql.key \
-out ./postgresql.csr
OPENSSL_SAN="DNS:${DB_PGSQL_USERNAME}" \
openssl x509 -req -CA ./root.crt -CAkey ./root.key -days 32 -set_serial 02 \
-extfile "$extfile" -in ./postgresql.csr -out ./postgresql.crt
echo '::endgroup::'
env:
extfile: ${{ github.workspace }}/.github/resources/openssl/usr_cert.cnf
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST_SSL }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_PGSQL_SSL_SUBJECT_CA: ${{ secrets.DB_PGSQL_SSL_SUBJECT_CA }}
DB_PGSQL_SSL_SUBJECT_SERVER: ${{ secrets.DB_PGSQL_SSL_SUBJECT_SERVER }}
DB_PGSQL_SSL_SUBJECT_CLIENT: ${{ secrets.DB_PGSQL_SSL_SUBJECT_CLIENT }}
- name: PostgreSQL SSL certificates print
working-directory: ${{ steps.openssl-initialize-postgresql-certificates.outputs.FolderPath }}
run: |
echo '::group::CA certificate'
openssl x509 -noout -text -in ./root.crt
echo '::endgroup::'
echo '::group::Server certificate'
openssl x509 -noout -text -in ./server.crt
echo '::endgroup::'
echo '::group::Client certificate'
openssl x509 -noout -text -in ./postgresql.crt
echo '::endgroup::'
# Always verify, regardless if certificates were newly generated or restored from the cache
- name: PostgreSQL SSL certificates verify
working-directory: ${{ steps.openssl-initialize-postgresql-certificates.outputs.FolderPath }}
run: |
openssl verify -CAfile ./root.crt ./server.crt ./postgresql.crt
# Save the cache only if certificates were newly generated
# The actions/cache/save allows to use the Move-Item during the install step
- name: PostgreSQL SSL certificates save cache
if: steps.openssl-cache-postgresql-certificates.outputs.cache-hit != 'true'
uses: actions/cache/save@v3
with:
path: |
${{ env.folder_path }}/*.crt
${{ env.folder_path }}/*.key
key: ${{ steps.openssl-cache-postgresql-certificates.outputs.cache-primary-key }}
env:
folder_path: ${{ steps.openssl-initialize-postgresql-certificates.outputs.FolderPath }}
- name: PostgreSQL SSL certificates install
working-directory: ${{ steps.openssl-initialize-postgresql-certificates.outputs.FolderPath }}
run: |
echo '::group::Install server certificates'
sudo cp --target-directory="$pg_data_path" ./root.crt
sudo mv --target-directory="$pg_data_path" ./server.{crt,key}
sudo chown postgres:postgres "$pg_data_path"/server.{crt,key} "$pg_data_path/root.crt"
sudo chmod 600 "$pg_data_path/server.key"
sudo chmod 640 "$pg_data_path"/{root,server}.crt
echo '::endgroup::'
echo '::group::Install client certificates'
folderPath=~/.postgresql
mkdir "$folderPath"
mv --target-directory="$folderPath" ./postgresql.{crt,key} ./root.crt
chmod 600 "$folderPath/postgresql.key"
chmod 640 "$folderPath"/{postgresql,root}.crt
echo '::endgroup::'
env:
pg_data_path: ${{ steps.databases-initialize-postgresql.outputs.PgDataPath }}
- name: PostgreSQL change ${{ secrets.DB_PGSQL_ROOT_USERNAME }} password
run: >-
sudo --user=postgres --login --
psql --command="alter user \"$DB_PGSQL_ROOT_USERNAME\"
with password '$DB_PGSQL_ROOT_PASSWORD';"
env:
DB_PGSQL_ROOT_PASSWORD: ${{ secrets.DB_PGSQL_ROOT_PASSWORD }}
DB_PGSQL_ROOT_USERNAME: ${{ secrets.DB_PGSQL_ROOT_USERNAME }}
- name: PostgreSQL create TinyORM user
run: >-
sudo --user=postgres --login --
psql --command="create user \"$DB_PGSQL_USERNAME\"
with createdb password '$DB_PGSQL_PASSWORD';"
env:
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
- name: PostgreSQL create TinyORM database
run: >-
sudo --user=postgres --login --
createdb --owner="$DB_PGSQL_USERNAME" "$DB_PGSQL_DATABASE"
env:
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
- name: PostgreSQL initialize client authentication
run: |
# Create the $PGDATA/tinyorm_dbs file with databases list
tinyormDbsPath="$pg_config_path/tinyorm_dbs"
databasesArr=("$DB_PGSQL_DATABASE" "$TINYORM_DATABASE_TESTS_SCHEMABUILDER")
(IFS=$'\n'; echo "${databasesArr[*]}") | \
sudo --user=postgres -- tee --append "$tinyormDbsPath" > /dev/null
sudo chmod 640 "$tinyormDbsPath"
pgHbaConf="$pg_config_path/pg_hba.conf"
pgHbaTmplTmpl='\\n\
# crystal\
hostssl @tinyorm_dbs %s 127.0.0.1\/32 cert clientname=DN map=dn'
pgHbaTmpl=$(printf "$pgHbaTmplTmpl" "$DB_PGSQL_USERNAME")
sudo sed --regexp-extended "s/(# +TYPE +DATABASE +USER +ADDRESS +METHOD)/\1$pgHbaTmpl/" \
--in-place "$pgHbaConf"
pgIdentConf="$pg_config_path/pg_ident.conf"
printf 'dn "/^%s$" %s' "$DB_PGSQL_SSL_DN" "$DB_PGSQL_USERNAME" | \
sudo tee --append "$pgIdentConf" > /dev/null
env:
pg_config_path: ${{ steps.databases-initialize-postgresql.outputs.PgConfigPath }}
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_SSL_DN: ${{ secrets.DB_PGSQL_SSL_DN }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
TINYORM_DATABASE_TESTS_SCHEMABUILDER: ${{ secrets.TINYORM_DATABASE_TESTS_SCHEMABUILDER }}
- name: PostgreSQL service restart
run: |
sudo systemctl restart postgresql.service
- name: PostgreSQL service check status
run: |
echo '::group::Service status'
systemctl status postgresql.service
echo '::endgroup::'
echo '::group::pg_isready'
pg_isready
echo '::endgroup::'
- name: Hosts add MySQL server hostname
run: >-
sudo -- sh -c "echo '127.0.0.1\t$DB_MYSQL_HOST' >> /etc/hosts"
env:
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST_SSL }}
- name: MySQL initialize crystal_mysqld.cnf configuration
working-directory: .github/resources/linux
run: |
sudo mv ./crystal_mysqld_ssl.cnf /etc/mysql/mysql.conf.d/crystal_mysqld.cnf
- name: MySQL initialize crystal_client.cnf configuration (global)
working-directory: .github/resources/linux
run: >-
cat ./crystal_client_ssl.template.cnf |
sed 's/{SSL_CERTIFICATES_PATH}/\/usr\/local\/share\/crystal-mysql/' |
sed "s/{MYSQL_HOST}/$DB_MYSQL_HOST/" |
sudo tee /etc/mysql/conf.d/crystal_client.cnf > /dev/null
env:
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST_SSL }}
- name: MySQL generate SSL certificates
run: |
# It's enough to remove only these three certificate-related files
sudo --user=mysql -- rm /var/lib/mysql/{ca,server-cert,server-key}.pem
sudo mysql_ssl_rsa_setup --suffix=TinyORM --uid=mysql
- name: MySQL copy SSL certificates for runner user
run: |
crystalMySqlPath=/usr/local/share/crystal-mysql
sudo mkdir --parents "$crystalMySqlPath"
cd "$crystalMySqlPath"
sudo cp --target-directory="$crystalMySqlPath" \
/var/lib/mysql/{ca,client-cert,client-key}.pem
sudo chown --recursive root:root "$crystalMySqlPath"
sudo chmod 444 "$crystalMySqlPath"/{ca,client-cert,client-key}.pem
- name: MySQL service start
run: |
sudo systemctl start mysql.service
- name: MySQL change ${{ secrets.DB_MYSQL_ROOT_USERNAME }} password
run: >-
echo "
alter user '$DB_MYSQL_ROOT_USERNAME'@'localhost'
identified with caching_sha2_password by '$DB_MYSQL_ROOT_PASSWORD'
require issuer '/CN=MySQL_Server_TinyORM_Auto_Generated_CA_Certificate' and
subject '/CN=MySQL_Server_TinyORM_Auto_Generated_Client_Certificate';" |
mysql --user="$DB_MYSQL_ROOT_USERNAME" --password="$DB_MYSQL_ROOT_PASSWORD_DEFAULT"
env:
DB_MYSQL_ROOT_PASSWORD: ${{ secrets.DB_MYSQL_ROOT_PASSWORD }}
DB_MYSQL_ROOT_PASSWORD_DEFAULT: ${{ secrets.DB_MYSQL_ROOT_PASSWORD_DEFAULT }}
DB_MYSQL_ROOT_USERNAME: ${{ secrets.DB_MYSQL_ROOT_USERNAME }}
- name: MySQL populate time zone tables πŸ‘Œ
run: >-
mysql_tzinfo_to_sql /usr/share/zoneinfo |
mysql --user="$DB_MYSQL_ROOT_USERNAME" --password="$DB_MYSQL_ROOT_PASSWORD" mysql
sudo systemctl restart mysql.service
env:
DB_MYSQL_ROOT_PASSWORD: ${{ secrets.DB_MYSQL_ROOT_PASSWORD }}
DB_MYSQL_ROOT_USERNAME: ${{ secrets.DB_MYSQL_ROOT_USERNAME }}
- name: MySQL service check status
run: |
echo '::group::Service status'
systemctl status mysql.service
echo '::endgroup::'
echo '::group::Service is-active check'
systemctl is-active --quiet mysql.service
echo '::endgroup::'
echo '::group::Ping'
mysqladmin --user="$DB_MYSQL_ROOT_USERNAME" --password="$DB_MYSQL_ROOT_PASSWORD" ping
echo '::endgroup::'
env:
DB_MYSQL_ROOT_PASSWORD: ${{ secrets.DB_MYSQL_ROOT_PASSWORD }}
DB_MYSQL_ROOT_USERNAME: ${{ secrets.DB_MYSQL_ROOT_USERNAME }}
- name: MySQL create TinyORM database
run: >-
echo "
create database if not exists \`$DB_MYSQL_DATABASE\`
default character set $DB_MYSQL_CHARSET
default collate $DB_MYSQL_COLLATION;" |
mysql --user="$DB_MYSQL_ROOT_USERNAME" --password="$DB_MYSQL_ROOT_PASSWORD"
env:
DB_MYSQL_CHARSET: ${{ secrets.DB_MYSQL_CHARSET }}
DB_MYSQL_COLLATION: ${{ secrets.DB_MYSQL_COLLATION }}
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_ROOT_PASSWORD: ${{ secrets.DB_MYSQL_ROOT_PASSWORD }}
DB_MYSQL_ROOT_USERNAME: ${{ secrets.DB_MYSQL_ROOT_USERNAME }}
- name: MySQL create TinyORM user
run: >-
echo "
create user '$DB_MYSQL_USERNAME'@'%'
identified with caching_sha2_password by '$DB_MYSQL_PASSWORD'
require issuer '/CN=MySQL_Server_TinyORM_Auto_Generated_CA_Certificate' and
subject '/CN=MySQL_Server_TinyORM_Auto_Generated_Client_Certificate';
grant all privileges on \`tinyorm\\_%\`.* to '$DB_MYSQL_USERNAME'@'%';
grant select on \`mysql\`.\`time_zone_name\` to '$DB_MYSQL_USERNAME'@'%';
flush privileges;" |
mysql --user="$DB_MYSQL_ROOT_USERNAME" --password="$DB_MYSQL_ROOT_PASSWORD"
env:
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_ROOT_PASSWORD: ${{ secrets.DB_MYSQL_ROOT_PASSWORD }}
DB_MYSQL_ROOT_USERNAME: ${{ secrets.DB_MYSQL_ROOT_USERNAME }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: SQLite create TinyORM database
run: |
mkdir --parents "$(dirname "${{ env.TinySQLitePath }}")"
touch '${{ env.TinySQLitePath }}'
- name: Print MySQL, SQLite, PostgreSQL database versions
run: |
mysql --version
pg_config --version
sqlite3 --version
- name: add-apt-repository Clang 17
if: matrix.compiler.key == 'clang17'
run: >-
wget -O- https://apt.llvm.org/llvm-snapshot.gpg.key |
sudo tee /etc/apt/trusted.gpg.d/llvm-17.asc > /dev/null
sudo add-apt-repository --yes
--sourceslist 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main'
- name: apt update
run: |
sudo apt update
- name: apt install ${{ join(matrix.compiler.apt, ', ') }}, and Qt 6.2.4 base
run: >-
sudo apt install --yes ${{ join(matrix.compiler.apt, ' ') }}
qt6-base-dev libqt6sql6-mysql libqt6sql6-sqlite libqt6sql6-psql
- name: Ninja install latest version
uses: seanmiddleditch/gha-setup-ninja@master
with:
destination: ${{ env.TinyRunnerWorkPath }}/ninja-build
- name: Ccache initialize download
id: downloads-initialize-ccache
run: |
filename=$(basename "$URL_CCACHE_LINUX_X64")
echo "Filename=$filename" >> $GITHUB_OUTPUT
filepath="${{ runner.temp }}/$filename"
echo "Filepath=$filepath" >> $GITHUB_OUTPUT
hash=$(wget "$URL_CACHE_HASH_LINUX" -O- --no-verbose --quiet)
echo "Hash=$hash" >> $GITHUB_OUTPUT
env:
URL_CACHE_HASH_LINUX: ${{ secrets.URL_CACHE_HASH_LINUX }}
URL_CCACHE_LINUX_X64: ${{ secrets.URL_CCACHE_LINUX_X64 }}
- name: Ccache restore cache (download)
uses: actions/cache@v3
id: downloads-cache-ccache
with:
path: ${{ env.archive_filepath }}
key: ${{ runner.os }}-caches-${{ env.cache_name }}-${{ env.cache_hash }}
env:
archive_filepath: ${{ steps.downloads-initialize-ccache.outputs.Filepath }}
cache_hash: ${{ steps.downloads-initialize-ccache.outputs.Hash }}
cache_name: ccache
- name: Ccache download
if: steps.downloads-cache-ccache.outputs.cache-hit != 'true'
run: |
wget "$URL_CCACHE_LINUX_X64" --output-document="$archive_filepath" --no-verbose
env:
archive_filepath: ${{ steps.downloads-initialize-ccache.outputs.Filepath }}
URL_CCACHE_LINUX_X64: ${{ secrets.URL_CCACHE_LINUX_X64 }}
- name: Ccache install
run: |
echo '::group::Extract archive'
tar xJvf "$archive_filepath" --directory '${{ runner.temp }}'
echo '::endgroup::'
echo '::group::Install'
extractedFolder=$(basename --suffix='.tar.xz' "$archive_filename")
cd "${{ runner.temp }}/$extractedFolder"
sudo make install
echo '::endgroup::'
echo '::group::Print version'
ccache --version
echo '::endgroup::'
env:
archive_filename: ${{ steps.downloads-initialize-ccache.outputs.Filename }}
archive_filepath: ${{ steps.downloads-initialize-ccache.outputs.Filepath }}
- name: Ccache initialize
id: ccache-initialize-cache
run: |
cachePath=$(ccache --get-config cache_dir)
echo "CachePath=$cachePath" >> $GITHUB_OUTPUT
echo "ImageOS=$ImageOS" >> $GITHUB_OUTPUT
- name: Ccache restore cache πŸ•Ί
uses: actions/cache@v3
with:
path: ${{ env.cache_path }}
key: ${{ runner.os }}-${{ env.image_os }}-ccache-${{ env.cache_name }}-${{ github.run_id }}
restore-keys: |
${{ runner.os }}-${{ env.image_os }}-ccache-${{ env.cache_name }}-
env:
cache_name: ${{ matrix.compiler.key }}-qt62
cache_path: ${{ steps.ccache-initialize-cache.outputs.CachePath }}
image_os: ${{ steps.ccache-initialize-cache.outputs.ImageOS }}
- name: Ccache prepare configuration πŸ₯³
run: |
# gcc: ~ 165 * 3 + 100 ; clang: ~ 100 * 3 + 100
ccache --set-config max_size=${{ matrix.compiler.key == 'gcc12' && '600M' || '400M' }}
ccache --set-config sloppiness=pch_defines,time_macros
- name: Ccache print version and configuration
run: |
echo '::group::Print version'
ccache --version
echo '::endgroup::'
echo '::group::Print ccache config'
ccache --show-config
echo '::endgroup::'
- name: vcpkg prepare environment
run: |
echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV
echo 'VCPKG_DEFAULT_TRIPLET=x64-linux-dynamic' >> $GITHUB_ENV
echo 'VCPKG_MAX_CONCURRENCY=2' >> $GITHUB_ENV
- name: CMake print version
run: |
cmake --version
- name: TinyORM create build folder (${{ matrix.compiler.key }}-cmake-debug)
run: |
mkdir --parents '../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug'
- name: Ccache clear statistics
run: |
ccache --zero-stats
- name: TinyORM cmake configure (${{ matrix.compiler.key }}-cmake-debug)
run: >-
cmake
-S .
-B ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
-G Ninja
-D CMAKE_CXX_COMPILER_LAUNCHER:FILEPATH=/usr/local/bin/ccache
-D CMAKE_CXX_COMPILER:FILEPATH='/usr/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_EXPORT_PACKAGE_REGISTRY:BOOL=OFF
-D CMAKE_BUILD_TYPE:STRING=Debug
-D VCPKG_APPLOCAL_DEPS:BOOL=OFF
-D VERBOSE_CONFIGURE: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
- name: TinyORM cmake build ✨ (${{ matrix.compiler.key }}-cmake-debug)
run: >-
cmake --build ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
--target all --parallel 2
- name: Ccache print statistics
run: |
ccache --show-stats -vv
- name: Create and Seed tables for unit tests πŸŽ‰
working-directory: ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug/tests/testdata_tom
run: >-
export LD_LIBRARY_PATH=../..${LD_LIBRARY_PATH:+:}"$LD_LIBRARY_PATH"
./tom_testdata migrate
--database=tinyorm_testdata_tom_mysql,tinyorm_testdata_tom_postgres,tinyorm_testdata_tom_sqlite
--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_SSL }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_SSL_CA: /usr/local/share/crystal-mysql/ca.pem
DB_MYSQL_SSL_CERT: /usr/local/share/crystal-mysql/client-cert.pem
DB_MYSQL_SSL_KEY: /usr/local/share/crystal-mysql/client-key.pem
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
DB_PGSQL_CHARSET: ${{ secrets.DB_PGSQL_CHARSET }}
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST_SSL }}
DB_PGSQL_SEARCHPATH: ${{ secrets.DB_PGSQL_SEARCHPATH }}
DB_PGSQL_SSLMODE: ${{ secrets.DB_PGSQL_SSLMODE }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_SQLITE_DATABASE: ${{ env.TinySQLitePath }}
TOM_TESTDATA_ENV: testing
- name: TinyORM execute ctest πŸ”₯
working-directory: ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
run: |
ctest --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_SSL }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_SSL_CA: /usr/local/share/crystal-mysql/ca.pem
DB_MYSQL_SSL_CERT: /usr/local/share/crystal-mysql/client-cert.pem
DB_MYSQL_SSL_KEY: /usr/local/share/crystal-mysql/client-key.pem
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
DB_PGSQL_CHARSET: ${{ secrets.DB_PGSQL_CHARSET }}
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST_SSL }}
DB_PGSQL_SEARCHPATH: ${{ secrets.DB_PGSQL_SEARCHPATH }}
DB_PGSQL_SSLMODE: ${{ secrets.DB_PGSQL_SSLMODE }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_SQLITE_DATABASE: ${{ env.TinySQLitePath }}
TOM_TESTS_ENV: testing
- name: Tom example test some commands (MySQL) πŸš€
working-directory: ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug/examples/tom
run: |
export LD_LIBRARY_PATH=../..${LD_LIBRARY_PATH:+:}"$LD_LIBRARY_PATH"
./tom migrate:install --database=tinyorm_tom_mysql --no-ansi
./tom migrate:status --database=tinyorm_tom_mysql --no-ansi
./tom migrate --database=tinyorm_tom_mysql --seed --no-ansi
./tom migrate:refresh --database=tinyorm_tom_mysql --seed --no-ansi
./tom 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: /usr/local/share/crystal-mysql/ca.pem
DB_MYSQL_SSL_CERT: /usr/local/share/crystal-mysql/client-cert.pem
DB_MYSQL_SSL_KEY: /usr/local/share/crystal-mysql/client-key.pem
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
TOM_EXAMPLE_ENV: testing
- name: Tom example test some commands (PostgreSQL) πŸ™Œ
working-directory: ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug/examples/tom
run: |
export LD_LIBRARY_PATH=../..${LD_LIBRARY_PATH:+:}"$LD_LIBRARY_PATH"
./tom migrate:install --database=tinyorm_tom_postgres --no-ansi
./tom migrate:status --database=tinyorm_tom_postgres --no-ansi
./tom migrate --database=tinyorm_tom_postgres --seed --no-ansi
./tom migrate:refresh --database=tinyorm_tom_postgres --seed --no-ansi
./tom migrate:status --database=tinyorm_tom_postgres --no-ansi
env:
DB_PGSQL_CHARSET: ${{ secrets.DB_PGSQL_CHARSET }}
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST_SSL }}
DB_PGSQL_SEARCHPATH: ${{ secrets.DB_PGSQL_SEARCHPATH }}
DB_PGSQL_SSLMODE: ${{ secrets.DB_PGSQL_SSLMODE }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
TOM_EXAMPLE_ENV: testing
- name: Tom example test some commands (SQLite) 🏁
working-directory: ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug/examples/tom
run: |
export LD_LIBRARY_PATH=../..${LD_LIBRARY_PATH:+:}"$LD_LIBRARY_PATH"
./tom migrate:install --database=tinyorm_tom_sqlite --no-ansi
./tom migrate:status --database=tinyorm_tom_sqlite --no-ansi
./tom migrate --database=tinyorm_tom_sqlite --seed --no-ansi
./tom migrate:refresh --database=tinyorm_tom_sqlite --seed --no-ansi
./tom migrate:status --database=tinyorm_tom_sqlite --no-ansi
env:
DB_SQLITE_DATABASE: ${{ env.TinySQLitePath }}
TOM_EXAMPLE_ENV: testing