Prepare v2.6.0 SDK validation #1
Workflow file for this run
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: Release check | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - dev | |
| - release/** | |
| paths: | |
| - ".github/workflows/RELEASE_CHECK.yml" | |
| - ".github/workflows/release.yml" | |
| - "CMakeLists.txt" | |
| - "cmake/**" | |
| - "config/**" | |
| - "examples/**" | |
| - "tests/**" | |
| - "modules/**" | |
| - "scripts/**" | |
| - ".gitmodules" | |
| - "vcpkg.json" | |
| - "README.md" | |
| - "CHANGELOG.md" | |
| pull_request: | |
| branches: | |
| - main | |
| - dev | |
| - release/** | |
| paths: | |
| - ".github/workflows/RELEASE_CHECK.yml" | |
| - ".github/workflows/release.yml" | |
| - "CMakeLists.txt" | |
| - "cmake/**" | |
| - "config/**" | |
| - "examples/**" | |
| - "tests/**" | |
| - "modules/**" | |
| - "scripts/**" | |
| - ".gitmodules" | |
| - "vcpkg.json" | |
| - "README.md" | |
| - "CHANGELOG.md" | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: release-check-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| release-check: | |
| name: check (${{ matrix.vixos }} / ${{ matrix.arch }}) | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-24.04 | |
| vixos: linux | |
| arch: x86_64 | |
| - os: ubuntu-24.04-arm | |
| vixos: linux | |
| arch: aarch64 | |
| - os: macos-15-intel | |
| vixos: macos | |
| arch: x86_64 | |
| - os: macos-14 | |
| vixos: macos | |
| arch: aarch64 | |
| - os: windows-2022 | |
| vixos: windows | |
| arch: x86_64 | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - name: Setup CMake | |
| uses: lukka/get-cmake@latest | |
| - name: Install deps (Linux x86_64) | |
| if: runner.os == 'Linux' && matrix.arch == 'x86_64' | |
| shell: bash | |
| run: | | |
| set -euxo pipefail | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| pkg-config \ | |
| ninja-build \ | |
| ca-certificates \ | |
| git \ | |
| curl \ | |
| nlohmann-json3-dev \ | |
| libssl-dev \ | |
| zlib1g-dev \ | |
| libsqlite3-dev \ | |
| libbrotli-dev \ | |
| libspdlog-dev \ | |
| libfmt-dev | |
| - name: Setup Linux aarch64 toolchain | |
| if: runner.os == 'Linux' && matrix.arch == 'aarch64' | |
| shell: bash | |
| run: | | |
| set -euxo pipefail | |
| sudo dpkg --add-architecture arm64 | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| gcc-aarch64-linux-gnu \ | |
| g++-aarch64-linux-gnu \ | |
| pkg-config \ | |
| ninja-build \ | |
| ca-certificates \ | |
| git \ | |
| curl \ | |
| nlohmann-json3-dev:arm64 \ | |
| libssl-dev:arm64 \ | |
| zlib1g-dev:arm64 \ | |
| libsqlite3-dev:arm64 \ | |
| libbrotli-dev:arm64 \ | |
| libspdlog-dev \ | |
| libfmt-dev | |
| cat > toolchain-aarch64.cmake <<'EOF' | |
| set(CMAKE_SYSTEM_NAME Linux) | |
| set(CMAKE_SYSTEM_PROCESSOR aarch64) | |
| set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) | |
| set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) | |
| set(CMAKE_FIND_ROOT_PATH | |
| /usr/aarch64-linux-gnu | |
| /usr/lib/aarch64-linux-gnu | |
| /usr/include/aarch64-linux-gnu | |
| /usr | |
| ) | |
| set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) | |
| set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) | |
| set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) | |
| set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) | |
| list(APPEND CMAKE_PREFIX_PATH | |
| /usr/lib/x86_64-linux-gnu/cmake | |
| /usr/lib/cmake | |
| /lib/x86_64-linux-gnu/cmake | |
| ) | |
| set(PKG_CONFIG_EXECUTABLE /usr/bin/pkg-config) | |
| set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig") | |
| set(ENV{PKG_CONFIG_PATH} "") | |
| EOF | |
| - name: Install deps (macOS) | |
| if: runner.os == 'macOS' | |
| shell: bash | |
| run: | | |
| set -euxo pipefail | |
| brew update | |
| brew install pkg-config openssl@3 spdlog fmt | |
| - name: Setup vcpkg (Windows) | |
| if: runner.os == 'Windows' | |
| shell: pwsh | |
| run: | | |
| git clone https://github.com/microsoft/vcpkg $env:GITHUB_WORKSPACE\vcpkg | |
| "VCPKG_ROOT=$env:GITHUB_WORKSPACE\vcpkg" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| cd $env:GITHUB_WORKSPACE\vcpkg | |
| .\bootstrap-vcpkg.bat | |
| - name: Configure (Unix) | |
| if: runner.os != 'Windows' | |
| shell: bash | |
| run: | | |
| set -euxo pipefail | |
| CMAKE_ARGS=( | |
| -S . -B build -G Ninja | |
| -DCMAKE_BUILD_TYPE=Release | |
| -DVIX_ENABLE_INSTALL=OFF | |
| -DVIX_DB_USE_MYSQL=OFF | |
| -DVIX_CORE_WITH_MYSQL=OFF | |
| -DVIX_ENABLE_HTTP_COMPRESSION=OFF | |
| ) | |
| if [ "${{ runner.os }}" = "Linux" ] && [ "${{ matrix.arch }}" = "aarch64" ]; then | |
| CMAKE_ARGS+=( | |
| -DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}/toolchain-aarch64.cmake" | |
| ) | |
| fi | |
| if [ "${{ runner.os }}" = "macOS" ]; then | |
| BREW_PREFIX="$(brew --prefix)" | |
| BREW_SSL="$(brew --prefix openssl@3 2>/dev/null || true)" | |
| if [ -n "$BREW_SSL" ] && [ -d "$BREW_SSL" ]; then | |
| CMAKE_ARGS+=(-DOPENSSL_ROOT_DIR="$BREW_SSL") | |
| CMAKE_ARGS+=(-DCMAKE_PREFIX_PATH="$BREW_PREFIX") | |
| fi | |
| fi | |
| : > cmake_output.log | |
| cmake "${CMAKE_ARGS[@]}" 2>&1 | tee -a cmake_output.log | |
| - name: Build (Unix) | |
| if: runner.os != 'Windows' | |
| shell: bash | |
| run: | | |
| set -euxo pipefail | |
| : > build_output.log | |
| cmake --build build -j 2 2>&1 | tee -a build_output.log | |
| - name: Package and validate (Unix) | |
| if: runner.os != 'Windows' | |
| shell: bash | |
| run: | | |
| set -euxo pipefail | |
| BIN="" | |
| for p in "build/vix" "build/bin/vix" "build/Release/vix"; do | |
| if [ -f "$p" ]; then | |
| BIN="$p" | |
| break | |
| fi | |
| done | |
| if [ -z "$BIN" ]; then | |
| echo "::error::Expected vix binary not found" | |
| find build -maxdepth 6 -type f -name vix -print || true | |
| exit 1 | |
| fi | |
| mkdir -p dist smoke | |
| cp "$BIN" dist/vix | |
| chmod +x dist/vix | |
| ASSET="vix-${{ matrix.vixos }}-${{ matrix.arch }}.tar.gz" | |
| tar -C dist -czf "dist/$ASSET" vix | |
| rm -f dist/vix | |
| tar -xzf "dist/$ASSET" -C smoke | |
| file smoke/vix | |
| if [ "${{ matrix.vixos }}" = "linux" ] && [ "${{ matrix.arch }}" = "x86_64" ]; then | |
| ldd smoke/vix || true | |
| smoke/vix --version | |
| fi | |
| if [ "${{ matrix.vixos }}" = "macos" ]; then | |
| smoke/vix --version | |
| fi | |
| - name: Vcpkg install (Windows) | |
| if: runner.os == 'Windows' | |
| shell: pwsh | |
| run: | | |
| cd $env:GITHUB_WORKSPACE | |
| & "$env:VCPKG_ROOT\vcpkg.exe" install --triplet x64-windows --x-manifest-root "$env:GITHUB_WORKSPACE" | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| - name: Configure (Windows) | |
| if: runner.os == 'Windows' | |
| shell: pwsh | |
| run: | | |
| "" | Out-File -FilePath cmake_output.log -Encoding utf8 | |
| cmake -S . -B build -A x64 ` | |
| -DVIX_ENABLE_INSTALL=OFF ` | |
| -DVIX_DB_USE_MYSQL=OFF ` | |
| -DVIX_CORE_WITH_MYSQL=OFF ` | |
| -DVIX_ENABLE_HTTP_COMPRESSION=OFF ` | |
| -DVCPKG_TARGET_TRIPLET=x64-windows ` | |
| -DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_ROOT\scripts\buildsystems\vcpkg.cmake" 2>&1 | Tee-Object -FilePath cmake_output.log -Append | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| - name: Build (Windows) | |
| if: runner.os == 'Windows' | |
| shell: pwsh | |
| run: | | |
| "" | Out-File -FilePath build_output.log -Encoding utf8 | |
| cmake --build build --config Release 2>&1 | Tee-Object -FilePath build_output.log -Append | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| - name: Package and validate (Windows) | |
| if: runner.os == 'Windows' | |
| shell: pwsh | |
| run: | | |
| $candidates = @( | |
| "build\vix.exe", | |
| "build\Release\vix.exe", | |
| "build\bin\vix.exe", | |
| "build\Release\bin\vix.exe" | |
| ) | |
| $bin = $null | |
| foreach ($p in $candidates) { | |
| if (Test-Path $p) { | |
| $bin = $p | |
| break | |
| } | |
| } | |
| if (!$bin) { | |
| Write-Host "::error::Expected vix.exe not found" | |
| if (Test-Path "build") { | |
| Get-ChildItem -Recurse build | Select-Object FullName | |
| } | |
| exit 1 | |
| } | |
| New-Item -ItemType Directory -Force -Path dist | Out-Null | |
| Copy-Item $bin dist\vix.exe | |
| $asset = "vix-windows-${{ matrix.arch }}.zip" | |
| Compress-Archive -Path dist\vix.exe -DestinationPath "dist\$asset" -Force | |
| New-Item -ItemType Directory -Force -Path smoke | Out-Null | |
| Expand-Archive -Path "dist\$asset" -DestinationPath smoke -Force | |
| .\smoke\vix.exe --version | |
| - name: Collect logs | |
| if: always() | |
| shell: bash | |
| run: | | |
| set +e | |
| OUT="logs/${{ matrix.vixos }}-${{ matrix.arch }}" | |
| mkdir -p "$OUT" | |
| test -f cmake_output.log && cp -f cmake_output.log "$OUT/" || true | |
| test -f build_output.log && cp -f build_output.log "$OUT/" || true | |
| if [ -d build ]; then | |
| find build -maxdepth 4 -type f \ | |
| \( -name "CMakeCache.txt" -o -name "CMakeError.log" -o -name "CMakeOutput.log" -o -name "CMakeConfigureLog.yaml" \) \ | |
| -exec cp -f {} "$OUT/" \; || true | |
| fi | |
| - name: Upload logs | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: release-check-logs-${{ matrix.vixos }}-${{ matrix.arch }} | |
| path: logs/${{ matrix.vixos }}-${{ matrix.arch }}/* | |
| if-no-files-found: warn | |
| - name: Upload checked package | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: release-check-dist-${{ matrix.vixos }}-${{ matrix.arch }} | |
| path: dist/* | |
| if-no-files-found: error |