name: Manual Test Run env: XMAKE_VERSION: 2.9.9 WINDOWS_SDK_VERSION: 22621 XMAKE_GLOBALDIR: ${{ github.workspace }}/../.xmake_shared on: workflow_dispatch: inputs: platform: description: 'Platform to test on' required: true type: choice options: - windows - linux - macos - all default: 'windows' malloc: description: 'Memory allocator override (runtime --malloc flag passed to test binaries)' type: choice options: - default - stomp - mimalloc - rpmalloc default: 'default' sanitizer: description: 'Sanitizer to enable (triggers full rebuild)' type: choice options: - none - asan - tsan - msan default: 'none' test_suite: description: 'Test suite to run (core, store, server, integration, http, util, remotestore, all)' type: string default: 'all' extra_args: description: 'Extra arguments passed to test runners (after --)' type: string default: '' jobs: windows-test: name: Test Windows if: ${{ inputs.platform == 'windows' || inputs.platform == 'all' }} runs-on: [windows, x64, zen] timeout-minutes: 40 steps: - name: Checkout uses: actions/checkout@v4 - name: Trust workspace run: git config --global --add safe.directory "${{ github.workspace }}" - name: Setup xmake uses: ue-foundation/github-action-setup-xmake@v1.2.2 with: xmake-version: ${{ env.XMAKE_VERSION }} - name: Config run: | $SanitizerFlag = "" if ("${{ inputs.sanitizer }}" -ne "none") { $SanitizerFlag = "--${{ inputs.sanitizer }}=y" } xmake config -vD -y -m debug --arch=x64 --zensentry=no $SanitizerFlag - name: Clean reports run: if (Test-Path build/reports) { Remove-Item -Recurse -Force build/reports } - name: Kill stale test processes shell: powershell run: | $buildDir = "${{ github.workspace }}\build" foreach ($name in @('zenserver', 'minio', 'nomad', 'consul')) { $procs = Get-Process -Name $name -ErrorAction SilentlyContinue | Where-Object { $_.Path -and $_.Path.StartsWith($buildDir, [System.StringComparison]::OrdinalIgnoreCase) } foreach ($p in $procs) { Write-Host "Killing stale $name (PID $($p.Id)): $($p.Path)" $p | Stop-Process -Force -ErrorAction SilentlyContinue } } - name: Build & Test run: | $ExtraArgs = @() if ("${{ inputs.malloc }}" -ne "default") { $ExtraArgs += "--malloc=${{ inputs.malloc }}" } $UserArgs = "${{ inputs.extra_args }}" if ($UserArgs) { $ExtraArgs += $UserArgs -split ' ' } $Cmd = "xmake test -v -y --run=${{ inputs.test_suite }} --junit" if ($ExtraArgs.Count -gt 0) { $Cmd += " -- " + ($ExtraArgs -join ' ') } Write-Host "Running: $Cmd" Invoke-Expression $Cmd - name: Kill test processes if: always() shell: powershell run: | $buildDir = "${{ github.workspace }}\build" foreach ($name in @('zenserver', 'minio', 'nomad', 'consul')) { $procs = Get-Process -Name $name -ErrorAction SilentlyContinue | Where-Object { $_.Path -and $_.Path.StartsWith($buildDir, [System.StringComparison]::OrdinalIgnoreCase) } foreach ($p in $procs) { Write-Host "Killing leftover $name (PID $($p.Id)): $($p.Path)" $p | Stop-Process -Force -ErrorAction SilentlyContinue } } - name: Upload report if: failure() || success() uses: actions/upload-artifact@v3-node20 with: name: reports-win64-${{ inputs.sanitizer }}-${{ inputs.malloc }} path: build/reports/*.xml - name: Test Report if: failure() || success() uses: ue-foundation/test-reporter@v2 with: name: Test Results (win64, ${{ inputs.sanitizer }}, malloc=${{ inputs.malloc }}) path: build/reports/*.xml reporter: java-junit list-tests: 'failed' linux-test: name: Test Linux if: ${{ inputs.platform == 'linux' || inputs.platform == 'all' }} runs-on: [linux, x64, zen] timeout-minutes: 40 steps: - name: Checkout uses: actions/checkout@v4 - name: Install UE Toolchain run: | rm -rf ./.tmp-ue-toolchain ./scripts/ue_build_linux/get_ue_toolchain.sh ./.tmp-ue-toolchain - name: Setup xmake uses: ue-foundation/github-action-setup-xmake@v1.2.2 with: xmake-version: ${{ env.XMAKE_VERSION }} - name: Config run: | SANITIZER_FLAG="" if [ "${{ inputs.sanitizer }}" != "none" ]; then SANITIZER_FLAG="--${{ inputs.sanitizer }}=y" fi xmake config -v -y -m debug --arch=x86_64 --zensentry=no --toolchain=ue-clang --sdk=${{ github.workspace }}/.tmp-ue-toolchain $SANITIZER_FLAG - name: Clean reports run: rm -rf build/reports - name: Kill stale test processes run: | build_dir="${{ github.workspace }}/build" for name in zenserver minio nomad consul; do pgrep -a "$name" 2>/dev/null | while read -r pid cmd; do if [[ "$cmd" == "$build_dir"* ]]; then echo "Killing stale $name (PID $pid): $cmd" kill -9 "$pid" 2>/dev/null || true fi done || true done - name: Build & Test run: | set -x EXTRA_ARGS="" MALLOC_ARG="" if [ "${{ inputs.malloc }}" != "default" ]; then MALLOC_ARG="--malloc=${{ inputs.malloc }}" fi USER_ARGS="${{ inputs.extra_args }}" if [ -n "$MALLOC_ARG" ] || [ -n "$USER_ARGS" ]; then EXTRA_ARGS="-- $MALLOC_ARG $USER_ARGS" fi xmake test -v -y --run=${{ inputs.test_suite }} --junit $EXTRA_ARGS - name: Kill test processes if: always() run: | build_dir="${{ github.workspace }}/build" for name in zenserver minio nomad consul; do pgrep -a "$name" 2>/dev/null | while read -r pid cmd; do if [[ "$cmd" == "$build_dir"* ]]; then echo "Killing leftover $name (PID $pid): $cmd" kill -9 "$pid" 2>/dev/null || true fi done || true done - name: Upload report if: failure() || success() uses: actions/upload-artifact@v3-node20 with: name: reports-linux-${{ inputs.sanitizer }}-${{ inputs.malloc }} path: build/reports/*.xml - name: Test Report if: failure() || success() uses: ue-foundation/test-reporter@v2 with: name: Test Results (linux, ${{ inputs.sanitizer }}, malloc=${{ inputs.malloc }}) path: build/reports/*.xml reporter: java-junit list-tests: 'failed' macos-test: name: Test macOS if: ${{ inputs.platform == 'macos' || inputs.platform == 'all' }} runs-on: [macos, x64, zen] timeout-minutes: 40 steps: - name: Checkout uses: actions/checkout@v4 - name: Setup xmake uses: ue-foundation/github-action-setup-xmake@v1.2.2 with: xmake-version: ${{ env.XMAKE_VERSION }} - name: Config run: | SANITIZER_FLAG="" if [ "${{ inputs.sanitizer }}" != "none" ]; then SANITIZER_FLAG="--${{ inputs.sanitizer }}=y" fi xmake config -v -y -m debug --arch=x86_64 --zensentry=no $SANITIZER_FLAG - name: Clean reports run: rm -rf build/reports - name: Kill stale test processes run: | build_dir="${{ github.workspace }}/build" for name in zenserver minio nomad consul; do pgrep -a "$name" 2>/dev/null | while read -r pid cmd; do if [[ "$cmd" == "$build_dir"* ]]; then echo "Killing stale $name (PID $pid): $cmd" kill -9 "$pid" 2>/dev/null || true fi done || true done - name: Build & Test run: | set -x EXTRA_ARGS="" MALLOC_ARG="" if [ "${{ inputs.malloc }}" != "default" ]; then MALLOC_ARG="--malloc=${{ inputs.malloc }}" fi USER_ARGS="${{ inputs.extra_args }}" if [ -n "$MALLOC_ARG" ] || [ -n "$USER_ARGS" ]; then EXTRA_ARGS="-- $MALLOC_ARG $USER_ARGS" fi xmake test -v -y --run=${{ inputs.test_suite }} --junit $EXTRA_ARGS - name: Kill test processes if: always() run: | build_dir="${{ github.workspace }}/build" for name in zenserver minio nomad consul; do pgrep -a "$name" 2>/dev/null | while read -r pid cmd; do if [[ "$cmd" == "$build_dir"* ]]; then echo "Killing leftover $name (PID $pid): $cmd" kill -9 "$pid" 2>/dev/null || true fi done || true done - name: Upload report if: failure() || success() uses: actions/upload-artifact@v3-node20 with: name: reports-macos-${{ inputs.sanitizer }}-${{ inputs.malloc }} path: build/reports/*.xml - name: Test Report if: failure() || success() uses: ue-foundation/test-reporter@v2 with: name: Test Results (macos, ${{ inputs.sanitizer }}, malloc=${{ inputs.malloc }}) path: build/reports/*.xml reporter: java-junit list-tests: 'failed'