Add numeric default aliases and document tagged usage #91
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| jobs: | |
| tests-gcc: | |
| runs-on: ubuntu-latest | |
| env: | |
| DS_MYSQL_TEST_HOST: 127.0.0.1 | |
| DS_MYSQL_TEST_PORT: 3306 | |
| DS_MYSQL_TEST_DATABASE: ds_mysql_test | |
| DS_MYSQL_TEST_USER: ds_mysql_test_user | |
| DS_MYSQL_TEST_PASSWORD: ds_mysql_test_password | |
| services: | |
| mysql: | |
| image: mysql:8.0 | |
| env: | |
| MYSQL_ROOT_PASSWORD: root | |
| MYSQL_DATABASE: ds_mysql_test | |
| MYSQL_USER: ds_mysql_test_user | |
| MYSQL_PASSWORD: ds_mysql_test_password | |
| ports: | |
| - 3306/tcp | |
| options: >- | |
| --health-cmd="mysqladmin ping -h 127.0.0.1 --protocol=tcp" | |
| --health-interval=5s | |
| --health-timeout=10s | |
| --health-retries=10 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Export mapped MySQL service port | |
| run: echo "DS_MYSQL_TEST_PORT=${{ job.services.mysql.ports['3306'] }}" >> "$GITHUB_ENV" | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -q | |
| sudo apt-get install -y --no-install-recommends software-properties-common ca-certificates gpg wget | |
| # Kitware APT repo for CMake 3.31+ | |
| wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc \ | |
| | gpg --dearmor \ | |
| | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg > /dev/null | |
| echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ noble main' \ | |
| | sudo tee /etc/apt/sources.list.d/kitware.list | |
| sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y | |
| sudo apt-get update -q | |
| sudo apt-get install -y --no-install-recommends cmake ninja-build g++-15 gcc-15 \ | |
| libmysqlclient-dev pkg-config | |
| - name: Configure | |
| run: cmake --preset release -DSKIP_DOCKER_MANAGEMENT=ON | |
| env: | |
| CXX: g++-15 | |
| CC: gcc-15 | |
| - name: Build | |
| run: cmake --build --preset release -j4 | |
| - name: Unit tests | |
| run: ctest --preset release -R tests_unit_ds_mysql | |
| - name: Integration tests | |
| run: ctest --preset release -R tests_integration_ds_mysql | |
| tests-clang: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -q | |
| sudo apt-get install -y software-properties-common ca-certificates gpg wget | |
| # Kitware APT repo for CMake 3.31+ | |
| wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc \ | |
| | gpg --dearmor \ | |
| | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg > /dev/null | |
| echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ noble main' \ | |
| | sudo tee /etc/apt/sources.list.d/kitware.list | |
| wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key \ | |
| | gpg --dearmor \ | |
| | sudo tee /usr/share/keyrings/llvm-archive-keyring.gpg > /dev/null | |
| UBUNTU_CODENAME="$(. /etc/os-release && echo "$VERSION_CODENAME")" | |
| echo "deb [signed-by=/usr/share/keyrings/llvm-archive-keyring.gpg] https://apt.llvm.org/${UBUNTU_CODENAME}/ llvm-toolchain-${UBUNTU_CODENAME}-20 main" \ | |
| | sudo tee /etc/apt/sources.list.d/llvm.list | |
| sudo apt-get update -q | |
| sudo apt-get install -y cmake ninja-build clang-20 \ | |
| libmysqlclient-dev pkg-config | |
| - name: Configure | |
| run: cmake --preset release -DSKIP_DOCKER_MANAGEMENT=ON -DBUILD_INTEGRATION_TESTS=OFF -DBUILD_EXAMPLES=OFF | |
| env: | |
| CXX: clang++-20 | |
| CC: clang-20 | |
| - name: Build | |
| run: cmake --build --preset release -j4 | |
| - name: Unit tests | |
| run: ctest --preset release -R tests_unit_ds_mysql | |
| package-consumer-smoke: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -q | |
| sudo apt-get install -y software-properties-common ca-certificates gpg wget | |
| wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc \ | |
| | gpg --dearmor \ | |
| | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg > /dev/null | |
| echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ noble main' \ | |
| | sudo tee /etc/apt/sources.list.d/kitware.list | |
| sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y | |
| sudo apt-get update -q | |
| sudo apt-get install -y cmake ninja-build g++-15 gcc-15 libmysqlclient-dev pkg-config libboost-dev | |
| - name: Configure (install enabled) | |
| run: | | |
| cmake --preset release \ | |
| -DSKIP_DOCKER_MANAGEMENT=ON \ | |
| -DBUILD_TESTING=OFF \ | |
| -DBUILD_INTEGRATION_TESTS=OFF \ | |
| -DBUILD_EXAMPLES=OFF \ | |
| -DDSMYSQL_ENABLE_INSTALL=ON | |
| env: | |
| CXX: g++-15 | |
| CC: gcc-15 | |
| - name: Build and install | |
| run: | | |
| cmake --build --preset release -j4 | |
| cmake --install build/release --prefix "$RUNNER_TEMP/dsmysql-install" | |
| - name: External consumer smoke test | |
| run: | | |
| mkdir -p "$RUNNER_TEMP/consumer" | |
| cat > "$RUNNER_TEMP/consumer/CMakeLists.txt" << 'EOF' | |
| cmake_minimum_required(VERSION 3.25) | |
| project(ds_mysql_consumer LANGUAGES CXX) | |
| set(CMAKE_CXX_STANDARD 23) | |
| find_package(ds_mysql CONFIG REQUIRED) | |
| add_executable(consumer main.cpp) | |
| target_link_libraries(consumer PRIVATE ds_mysql::ds_mysql) | |
| EOF | |
| cat > "$RUNNER_TEMP/consumer/main.cpp" << 'EOF' | |
| #include <ds_mysql/version.hpp> | |
| int main() { | |
| return static_cast<int>(ds_mysql::version::major); | |
| } | |
| EOF | |
| cmake -S "$RUNNER_TEMP/consumer" -B "$RUNNER_TEMP/consumer/build" \ | |
| -DCMAKE_PREFIX_PATH="$RUNNER_TEMP/dsmysql-install" | |
| cmake --build "$RUNNER_TEMP/consumer/build" -j4 | |
| tests-msvc: | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install dependencies | |
| run: | | |
| choco install cmake ninja --no-progress -y | |
| shell: pwsh | |
| - name: Ensure MySQL is installed | |
| shell: pwsh | |
| run: | | |
| $mysqlCmd = Get-Command mysql -ErrorAction SilentlyContinue | |
| if (-not $mysqlCmd) { | |
| choco install mysql --no-progress -y | |
| } | |
| - name: Detect MySQL root | |
| shell: pwsh | |
| run: | | |
| $candidateRoots = @() | |
| if (Test-Path "C:\Program Files\MySQL") { | |
| $candidateRoots += (Get-ChildItem "C:\Program Files\MySQL" -Directory -ErrorAction SilentlyContinue | | |
| Where-Object { $_.Name -like "MySQL Server *" } | | |
| Sort-Object Name -Descending | | |
| ForEach-Object { $_.FullName }) | |
| } | |
| $candidateRoots += (Get-ChildItem "C:\ProgramData\chocolatey\lib" -Directory -ErrorAction SilentlyContinue | | |
| Where-Object { $_.Name -like "mysql*" } | | |
| ForEach-Object { | |
| $toolsDir = Join-Path $_.FullName "tools" | |
| if (Test-Path $toolsDir) { | |
| Get-ChildItem $toolsDir -Directory -ErrorAction SilentlyContinue | ForEach-Object { $_.FullName } | |
| } | |
| }) | |
| $candidateRoots = $candidateRoots | Select-Object -Unique | |
| $root = $null | |
| foreach ($candidate in $candidateRoots) { | |
| $includeFile = Join-Path $candidate "include\mysql.h" | |
| $libFile = Join-Path $candidate "lib\libmysql.lib" | |
| if ((Test-Path $includeFile) -and (Test-Path $libFile)) { | |
| $root = $candidate | |
| break | |
| } | |
| } | |
| if (-not $root) { | |
| throw "MySQL installation not found with include/mysql.h and lib/libmysql.lib" | |
| } | |
| Write-Host "Detected MYSQL_ROOT_DIR: $root" | |
| echo "MYSQL_ROOT_DIR=$root" >> $env:GITHUB_ENV | |
| echo "$root\lib" >> $env:GITHUB_PATH | |
| - name: Configure | |
| shell: pwsh | |
| run: | | |
| cmake -B build ` | |
| -G "Visual Studio 17 2022" -A x64 ` | |
| -DBUILD_INTEGRATION_TESTS=OFF ` | |
| -DBUILD_EXAMPLES=OFF ` | |
| "-DMYSQL_ROOT_DIR=$env:MYSQL_ROOT_DIR" | |
| - name: Build | |
| run: cmake --build build --config Release -j4 | |
| - name: Unit tests | |
| run: ctest --test-dir build -C Release -R tests_unit_ds_mysql --output-on-failure |