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: | scripts\test_scripts\kill-test-processes.ps1 -Label stale -BuildDir "${{ github.workspace }}\build" - 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: | scripts\test_scripts\kill-test-processes.ps1 -Label leftover -BuildDir "${{ github.workspace }}\build" - 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: | bash scripts/test_scripts/kill-test-processes.sh stale "${{ github.workspace }}/build" - 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: | bash scripts/test_scripts/kill-test-processes.sh leftover "${{ github.workspace }}/build" - 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: | bash scripts/test_scripts/kill-test-processes.sh stale "${{ github.workspace }}/build" - 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: | bash scripts/test_scripts/kill-test-processes.sh leftover "${{ github.workspace }}/build" - 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'