diff --git a/.github/workflows/cpp-lint.yaml b/.github/workflows/cpp-lint.yaml index 0760564b48..21d56257f1 100644 --- a/.github/workflows/cpp-lint.yaml +++ b/.github/workflows/cpp-lint.yaml @@ -26,7 +26,7 @@ on: jobs: cpp-lint: - runs-on: ubuntu-22.04 + runs-on: qvac-ubuntu2204-x64 environment: release permissions: contents: read @@ -62,14 +62,14 @@ jobs: echo " HEAD_REPO=$HEAD_REPO" echo " HEAD_REF=$HEAD_REF" - - name: Setup build host - uses: tetherto/qvac/.github/actions/setup-build-host@df55c85d7b8004961e430557e85b6ec1b15cf170 - with: - platform: linux - arch: x64 + # - name: Setup build host + # uses: tetherto/qvac/.github/actions/setup-build-host@df55c85d7b8004961e430557e85b6ec1b15cf170 + # with: + # platform: linux + # arch: x64 - - name: Setup LLVM - uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c + # - name: Setup LLVM + # uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 @@ -93,19 +93,29 @@ jobs: platform: linux arch: x64 - - name: Setup Bare tooling - uses: tetherto/qvac/.github/actions/setup-bare-tooling@0bbdca93da303a0b1634ba14a89cec085621078d + # - name: Setup Bare tooling + # uses: tetherto/qvac/.github/actions/setup-bare-tooling@0bbdca93da303a0b1634ba14a89cec085621078d + + - name: Add bare tooling to PATH + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + + + # - if: ${{ inputs.include-vulkan-sdk }} + # name: Setup Vulkan SDK + # uses: tetherto/qvac/.github/actions/setup-vulkan-sdk@0bbdca93da303a0b1634ba14a89cec085621078d + # env: + # MODEL_S3_BUCKET: ${{ secrets.MODEL_S3_BUCKET }} + # with: + # platform: linux + # arch: x64 + # aws-role-to-assume: ${{ secrets.AWS_OIDC_ROLE_ARN }} + # aws-region: eu-central-1 - if: ${{ inputs.include-vulkan-sdk }} - name: Setup Vulkan SDK - uses: tetherto/qvac/.github/actions/setup-vulkan-sdk@0bbdca93da303a0b1634ba14a89cec085621078d - env: - MODEL_S3_BUCKET: ${{ secrets.MODEL_S3_BUCKET }} - with: - platform: linux - arch: x64 - aws-role-to-assume: ${{ secrets.AWS_OIDC_ROLE_ARN }} - aws-region: eu-central-1 + name: Set Vulkan SDK path in Linux x64 + shell: bash + run: | + echo "VULKAN_SDK=/opt/vulkansdk/x86_64" >> "$GITHUB_ENV" - name: Install npm dependencies shell: bash diff --git a/.github/workflows/cpp-test-coverage-bci-whispercpp.yml b/.github/workflows/cpp-test-coverage-bci-whispercpp.yml index 1be7353400..33072ecbc3 100644 --- a/.github/workflows/cpp-test-coverage-bci-whispercpp.yml +++ b/.github/workflows/cpp-test-coverage-bci-whispercpp.yml @@ -32,7 +32,7 @@ jobs: contents: read id-token: write checks: write - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: ${{ matrix.platform }}-${{ matrix.arch }}-cpp-tests strategy: @@ -42,6 +42,7 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 coverage: true env: VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}/vcpkg/cache,readwrite" @@ -55,33 +56,16 @@ jobs: token: ${{ secrets.PAT_TOKEN }} lfs: true - - name: Setup Node.js - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 - with: - node-version: lts/* - - - name: Install system dependencies (Linux) - if: matrix.platform == 'linux' - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh 19 all - - - name: Verify llvm-profdata and llvm-cov installation - if: matrix.platform == 'linux' - run: | - ls -l /usr/bin/llvm-profdata* || echo "llvm-profdata not found" - ls -l /usr/bin/llvm-cov* || echo "llvm-cov not found" - which llvm-profdata || echo "llvm-profdata not in PATH" - which llvm-profdata-19 || echo "llvm-profdata-19 not in PATH" - dpkg -l | grep llvm || echo "No LLVM packages found" - - name: Install NPM dependencies working-directory: ${{ env.WORKDIR }} run: | npm install - npm install -g bare bare-make + # npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: ${{ matrix.os == 'ubuntu-22.04' }} + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - if: ${{ matrix.os == 'ubuntu-22.04' }} name: Configure vcpkg in linux run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV diff --git a/.github/workflows/cpp-test-coverage-transcription-parakeet.yml b/.github/workflows/cpp-test-coverage-transcription-parakeet.yml index d55b5a2708..59f112e9db 100644 --- a/.github/workflows/cpp-test-coverage-transcription-parakeet.yml +++ b/.github/workflows/cpp-test-coverage-transcription-parakeet.yml @@ -21,7 +21,7 @@ jobs: contents: read id-token: write checks: write - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: ${{ matrix.platform }}-${{ matrix.arch }}-cpp-tests strategy: @@ -31,6 +31,7 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 coverage: true env: VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}/vcpkg/cache,readwrite" @@ -44,19 +45,10 @@ jobs: token: ${{ secrets.PAT_TOKEN }} lfs: true - - name: Setup Node.js - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 - with: - node-version: lts/* - - - name: Setup LLVM - if: matrix.platform == 'linux' - uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c - - name: Setup ccache if: matrix.platform == 'linux' run: | - sudo apt-get install -y ccache + # sudo apt-get install -y ccache ccache -z echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV @@ -73,32 +65,21 @@ jobs: working-directory: ${{ env.PKG_DIR }} run: | npm install - npm install -g bare bare-make + # npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: ${{ matrix.os == 'ubuntu-22.04' }} + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - if: ${{ matrix.os == 'ubuntu-22.04' }} name: Configure vcpkg in linux run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV - - name: Setup Vulkan SDK - uses: tetherto/qvac/.github/actions/setup-vulkan-sdk@0bbdca93da303a0b1634ba14a89cec085621078d - env: - MODEL_S3_BUCKET: ${{ secrets.MODEL_S3_BUCKET }} - with: - platform: ${{ matrix.platform }} - arch: ${{ matrix.arch }} - aws-role-to-assume: ${{ secrets.AWS_OIDC_ROLE_ARN }} - aws-region: eu-central-1 - - name: Generate and build unit tests working-directory: ${{ env.PKG_DIR }} run: | npm run coverage:cpp:build - - name: Setup Python (.nemo -> .gguf conversion) - uses: actions/setup-python@v5 - with: - python-version: '3.12' - # The C++ test suite only needs ONE GGUF pointed at by # QVAC_TEST_GGUF (see addon/tests/test_core.cpp::gguf_test_path). # Engine identity does not matter -- the comment there says diff --git a/.github/workflows/cpp-test-coverage-transcription-whispercpp.yml b/.github/workflows/cpp-test-coverage-transcription-whispercpp.yml index f750d3f145..108222e8e9 100644 --- a/.github/workflows/cpp-test-coverage-transcription-whispercpp.yml +++ b/.github/workflows/cpp-test-coverage-transcription-whispercpp.yml @@ -32,7 +32,7 @@ jobs: contents: read id-token: write checks: write - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner }} environment: release name: ${{ matrix.platform }}-${{ matrix.arch }}-cpp-tests strategy: @@ -42,6 +42,7 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 coverage: true env: VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}/vcpkg/cache,readwrite" @@ -55,25 +56,20 @@ jobs: token: ${{ secrets.PAT_TOKEN }} lfs: true - - name: Setup Node.js - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 - with: - node-version: lts/* - - - name: Setup LLVM - if: matrix.platform == 'linux' - uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c - - name: Install NPM dependencies working-directory: ${{ env.WORKDIR }} run: | npm install - npm install -g bare bare-make + # npm install -g bare bare-make - if: ${{ matrix.os == 'ubuntu-22.04' }} name: Configure vcpkg in linux run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV + - name: Add bare tooling to PATH (Linux x64) + if: ${{ matrix.os == 'ubuntu-22.04' }} + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - name: Generate and build unit tests working-directory: ${{ env.WORKDIR }} run: | diff --git a/.github/workflows/cpp-test-coverage-tts-ggml.yml b/.github/workflows/cpp-test-coverage-tts-ggml.yml index f1d4c3dbae..1cf0bc986d 100644 --- a/.github/workflows/cpp-test-coverage-tts-ggml.yml +++ b/.github/workflows/cpp-test-coverage-tts-ggml.yml @@ -24,7 +24,7 @@ jobs: contents: read id-token: write checks: write - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: ${{ matrix.platform }}-${{ matrix.arch }}-cpp-tests strategy: @@ -34,6 +34,7 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 coverage: true env: VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}/vcpkg/cache,readwrite" @@ -47,19 +48,10 @@ jobs: token: ${{ secrets.PAT_TOKEN }} lfs: true - - name: Setup Node.js - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 - with: - node-version: lts/* - - - name: Setup LLVM - if: matrix.platform == 'linux' - uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c - - name: Setup ccache if: matrix.platform == 'linux' run: | - sudo apt-get install -y ccache + # sudo apt-get install -y ccache ccache -z echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV @@ -76,32 +68,21 @@ jobs: working-directory: ${{ env.PKG_DIR }} run: | npm install - npm install -g bare bare-make + # npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: ${{ matrix.os == 'ubuntu-22.04' }} + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - if: ${{ matrix.os == 'ubuntu-22.04' }} name: Configure vcpkg in linux run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV - - name: Setup Vulkan SDK - uses: tetherto/qvac/.github/actions/setup-vulkan-sdk@0bbdca93da303a0b1634ba14a89cec085621078d - env: - MODEL_S3_BUCKET: ${{ secrets.MODEL_S3_BUCKET }} - with: - platform: ${{ matrix.platform }} - arch: ${{ matrix.arch }} - aws-role-to-assume: ${{ secrets.AWS_OIDC_ROLE_ARN }} - aws-region: eu-central-1 - - name: Generate and build C++ unit tests (with coverage) working-directory: ${{ env.PKG_DIR }} run: | npm run coverage:cpp:build - - name: Setup Python (HF -> .gguf conversion for QVAC_TEST_* gates) - uses: actions/setup-python@v5 - with: - python-version: '3.12' - # Mirrors parakeet's cpp-test-coverage flow. The C++ suite has two # tiers of tests: # - Pure validation / static-helper tests (no GGUF needed). diff --git a/.github/workflows/cpp-test-coverage-tts-onnx.yml b/.github/workflows/cpp-test-coverage-tts-onnx.yml index ce26df3eb0..8de98f963d 100644 --- a/.github/workflows/cpp-test-coverage-tts-onnx.yml +++ b/.github/workflows/cpp-test-coverage-tts-onnx.yml @@ -40,7 +40,7 @@ env: jobs: cpp-tests: - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: ${{ matrix.platform }}-${{ matrix.arch }}-cpp-tests permissions: @@ -55,6 +55,7 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 coverage: true env: @@ -62,14 +63,6 @@ jobs: WORKDIR: ${{ inputs.workdir || github.event.inputs.workdir || 'packages/tts-onnx' }} steps: - - if: ${{ matrix.os == 'ubuntu-22.04' }} - name: Maximize build space - run: | - sudo docker image prune --all --force - sudo rm -rf /opt/hostedtoolcache/CodeQL - sudo rm -rf /opt/ghc - sudo rm -rf /usr/share/dotnet - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -79,25 +72,20 @@ jobs: lfs: true fetch-depth: 0 - - name: Setup Node.js - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 - with: - node-version: lts/* - - - name: Setup LLVM - if: matrix.platform == 'linux' - uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c - - name: Install NPM dependencies working-directory: ${{ env.WORKDIR }} run: | npm install - npm install -g bare bare-make + # npm install -g bare bare-make - if: ${{ matrix.os == 'ubuntu-22.04' }} name: Configure vcpkg in linux run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV + - name: Add bare tooling to PATH (Linux x64) + if: ${{ matrix.os == 'ubuntu-22.04' }} + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - name: Generate and build unit tests working-directory: ${{ env.WORKDIR }} run: | diff --git a/.github/workflows/cpp-tests-diffusion.yml b/.github/workflows/cpp-tests-diffusion.yml index cf1b57b1c8..6602eb79b0 100644 --- a/.github/workflows/cpp-tests-diffusion.yml +++ b/.github/workflows/cpp-tests-diffusion.yml @@ -40,10 +40,11 @@ jobs: - os: ubuntu-24.04 platform: linux arch: x64 - runner: ai-run-linux-gpu - - os: windows-11 + runner: qvac-ubuntu2404-x64 + - os: windows-2025 platform: windows - runner: ai-run-windows11-gpu + runner: qvac-win25-x64 + arch: x64 runs-on: ${{ matrix.runner || matrix.os }} environment: release @@ -62,47 +63,15 @@ jobs: ref: ${{ inputs.ref || github.ref }} token: ${{ secrets.PAT_TOKEN }} - - if: ${{ matrix.os == 'ubuntu-24.04' || matrix.os == 'windows-11' }} - name: Setup LLVM - uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c - - - if: ${{ matrix.os == 'ubuntu-24.04' }} - name: Install pkg-config on Linux - run: sudo apt-get install -y pkg-config - - - if: ${{ matrix.os == 'ubuntu-24.04' }} - name: Install Vulkan SDK on Linux - working-directory: ${{ env.WORKDIR }} - run: | - sudo rm -f /etc/apt/sources.list.d/lunarg-vulkan-noble.list - sudo rm -f /etc/apt/sources.list.d/archive_uri-https_packages_lunarg_com_vulkan-*.list - sudo rm -f /etc/apt/trusted.gpg.d/lunarg.asc - - curl -fsSL https://packages.lunarg.com/lunarg-signing-key-pub.asc | gpg --dearmor | sudo tee /usr/share/keyrings/lunarg-archive-keyring.gpg > /dev/null - sudo chmod 644 /usr/share/keyrings/lunarg-archive-keyring.gpg - echo "deb [signed-by=/usr/share/keyrings/lunarg-archive-keyring.gpg] https://packages.lunarg.com/vulkan/ noble main" | sudo tee /etc/apt/sources.list.d/lunarg-vulkan-noble.list > /dev/null - sudo apt-get update - sudo apt-get install -y vulkan-sdk - - - if: ${{ matrix.os == 'windows-11' }} - name: Configure Windows runner - working-directory: ${{ env.WORKDIR }} - run: | - git config --system core.longpaths true - - - if: ${{ matrix.os == 'windows-11' }} - name: Install Vulkan SDK on Windows + - if: ${{ matrix.os == 'windows-2025' }} + name: Set Vulkan SDK Path on Windows Server 2025 working-directory: ${{ env.WORKDIR }} - run: | - $ProgressPreference = 'SilentlyContinue' - Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/latest/windows/vulkan-sdk.exe -OutFile vulkan-sdk.exe - ./vulkan-sdk.exe --root C:\VulkanSDK --accept-licenses --default-answer --confirm-command install - echo "VULKAN_SDK=C:\VulkanSDK" >> $Env:GITHUB_ENV + run: echo "VULKAN_SDK=C:\VulkanSDK" >> $Env:GITHUB_ENV - - if: ${{ matrix.os == 'windows-11' }} + - if: ${{ matrix.os == 'windows-2025' }} name: Clone and bootstrap vcpkg (Windows) run: | - git clone https://github.com/microsoft/vcpkg.git + git clone --branch 2025.12.12 --single-branch https://github.com/microsoft/vcpkg.git ./vcpkg/bootstrap-vcpkg.bat -disableMetrics echo ("VCPKG_ROOT=$env:GITHUB_WORKSPACE/vcpkg" -replace '\\', '/') >> $env:GITHUB_ENV @@ -118,21 +87,17 @@ jobs: echo "MACOSX_DEPLOYMENT_TARGET=14.0" >> $GITHUB_ENV - if: ${{ matrix.os == 'ubuntu-24.04' }} - name: Configure vcpkg in linux + name: Install vcpkg on linux + working-directory: ${{ env.WORKDIR }} shell: bash run: | - if [ -n "${VCPKG_INSTALLATION_ROOT:-}" ] && [ -d "$VCPKG_INSTALLATION_ROOT" ]; then - echo "Using pre-installed vcpkg at $VCPKG_INSTALLATION_ROOT" - echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> "$GITHUB_ENV" - else - sudo apt-get update - sudo apt-get install -y zip unzip tar curl - git clone --branch 2025.12.12 --single-branch https://github.com/microsoft/vcpkg.git /tmp/vcpkg - /tmp/vcpkg/bootstrap-vcpkg.sh -disableMetrics - echo "VCPKG_ROOT=/tmp/vcpkg" >> "$GITHUB_ENV" - fi + git clone --branch 2025.12.12 --single-branch https://github.com/microsoft/vcpkg.git vcpkg_microsoft + cd vcpkg_microsoft && ./bootstrap-vcpkg.sh -disableMetrics + VCPKG_ROOT="$(pwd)" + echo "VCPKG_ROOT=$VCPKG_ROOT" >> $GITHUB_ENV + echo "$VCPKG_ROOT" >> $GITHUB_PATH - - if: ${{ matrix.os == 'windows-11' }} + - if: ${{ matrix.os == 'windows-2025' }} name: Configure CMake generator on Windows shell: powershell working-directory: ${{ env.WORKDIR }} @@ -141,12 +106,12 @@ jobs: echo "CMAKE_GENERATOR_PLATFORM=x64" >> $env:GITHUB_ENV - name: Create vcpkg cache location (non-Windows) - if: ${{ matrix.os != 'windows-11' }} + if: ${{ matrix.os != 'windows-2025' }} working-directory: ${{ env.WORKDIR }} run: mkdir -p vcpkg/cache - name: Create vcpkg cache location (Windows) - if: ${{ matrix.os == 'windows-11' }} + if: ${{ matrix.os == 'windows-2025' }} shell: powershell working-directory: ${{ env.WORKDIR }} run: | @@ -160,6 +125,7 @@ jobs: restore-keys: cpp-tests-v4-${{ matrix.platform }}-${{ matrix.arch }}- - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* @@ -168,8 +134,16 @@ jobs: working-directory: ${{ env.WORKDIR }} run: | npm install + + - name: Install bare tooling (macos) + if: matrix.platform == 'darwin' + run: | npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: matrix.platform == 'linux' + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - if: ${{ matrix.os == 'ubuntu-24.04' || matrix.os == 'macos-14' }} name: Download SD2 model for C++ tests working-directory: ${{ env.WORKDIR }} @@ -182,7 +156,7 @@ jobs: cp "$MODEL_PATH" ./test/model/stable-diffusion-v2-1-Q8_0.gguf test -f ./test/model/stable-diffusion-v2-1-Q8_0.gguf - - if: ${{ matrix.os == 'windows-11' }} + - if: ${{ matrix.os == 'windows-2025' }} name: Download SD2 model for C++ tests (Windows) working-directory: ${{ env.WORKDIR }} shell: powershell diff --git a/.github/workflows/cpp-tests-embed.yml b/.github/workflows/cpp-tests-embed.yml index 2f907c56a8..fd9bd82034 100644 --- a/.github/workflows/cpp-tests-embed.yml +++ b/.github/workflows/cpp-tests-embed.yml @@ -44,16 +44,17 @@ jobs: - os: ubuntu-24.04 platform: linux arch: x64 + runner: qvac-ubuntu2404-x64 - os: macos-14 platform: darwin arch: arm64 - os: macos-15-intel platform: darwin arch: x64 - - os: windows-11 + - os: windows-2025 platform: windows arch: x64 - runner: ai-run-windows11-gpu + runner: qvac-win25-x64 env: WORKDIR: ${{ inputs.workdir }} @@ -74,15 +75,11 @@ jobs: echo "workdir=$INPUT_WORKDIR" - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - if: ${{ matrix.os == 'windows-11' }} - name: Configure Windows runner - run: | - git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -95,29 +92,21 @@ jobs: shell: bash run: | npm install + + - name: Set Bare tooling on MacOS + if: matrix.platform == 'darwin' + run: | npm install -g bare bare-make - - if: ${{ matrix.os == 'ubuntu-24.04' || matrix.os == 'windows-11' }} - name: Setup LLVM - uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c + - name: Add bare tooling to PATH (Linux x64) + if: ${{ matrix.os == 'ubuntu-24.04' }} + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH - - if: ${{ matrix.os == 'ubuntu-24.04' }} - name: Install Vulkan SDK on Linux - shell: bash - run: | - wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc > /dev/null - sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-noble.list http://packages.lunarg.com/vulkan/lunarg-vulkan-noble.list - sudo apt update - sudo apt install -y vulkan-sdk - - if: ${{ matrix.os == 'windows-11' }} - name: Install Vulkan SDK on Windows + - if: ${{ matrix.os == 'windows-2025' }} + name: Set Vulkan SDK Path on Windows Server 2025 working-directory: ${{ env.WORKDIR }} - run: | - $ProgressPreference = 'SilentlyContinue' - Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/latest/windows/vulkan-sdk.exe -OutFile vulkan-sdk.exe - ./vulkan-sdk.exe --root C:\VulkanSDK --accept-licenses --default-answer --confirm-command install - echo "VULKAN_SDK=C:\VulkanSDK" >> $Env:GITHUB_ENV + run: echo "VULKAN_SDK=C:\VulkanSDK" >> $Env:GITHUB_ENV - if: ${{ startsWith(matrix.os, 'macos') }} name: Install vcpkg on macOS @@ -131,18 +120,23 @@ jobs: echo "MACOSX_DEPLOYMENT_TARGET=14.0" >> $GITHUB_ENV - if: ${{ matrix.os == 'ubuntu-24.04' }} - name: Configure vcpkg in linux + name: Install vcpkg on linux shell: bash - run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV + run: | + git clone --branch 2025.12.12 --single-branch https://github.com/microsoft/vcpkg.git vcpkg_microsoft + cd vcpkg_microsoft && ./bootstrap-vcpkg.sh -disableMetrics + VCPKG_ROOT="$(pwd)" + echo "VCPKG_ROOT=$VCPKG_ROOT" >> $GITHUB_ENV + echo "$VCPKG_ROOT" >> $GITHUB_PATH - - if: ${{ matrix.os == 'windows-11' }} + - if: ${{ matrix.os == 'windows-2025' }} name: Clone and bootstrap vcpkg (Windows) run: | - git clone https://github.com/microsoft/vcpkg.git + git clone --branch 2025.12.12 --single-branch https://github.com/microsoft/vcpkg.git ./vcpkg/bootstrap-vcpkg.bat -disableMetrics echo ("VCPKG_ROOT=$env:GITHUB_WORKSPACE/vcpkg" -replace '\\', '/') >> $env:GITHUB_ENV - - if: ${{ matrix.os == 'windows-11' }} + - if: ${{ matrix.os == 'windows-2025' }} name: Configure CMake generator on Windows shell: powershell run: | @@ -161,10 +155,7 @@ jobs: hashFiles( format('{0}/vcpkg.json', inputs.workdir), format('{0}/vcpkg-configuration.json', inputs.workdir), - format('{0}/vcpkg/ports/**', inputs.workdir), - 'vcpkg.json', - 'vcpkg-configuration.json', - 'vcpkg/ports/**' + format('{0}/vcpkg/ports/**', inputs.workdir) ) }} path: ${{ github.workspace }}/${{ env.WORKDIR }}/vcpkg/cache @@ -206,7 +197,7 @@ jobs: working-directory: ${{ env.WORKDIR }} shell: bash env: - LSAN_OPTIONS: suppressions=${{ github.workspace }}/.lsan-suppressions.txt + LSAN_OPTIONS: suppressions=${{ github.workspace }}/${{ env.WORKDIR }}/.lsan-suppressions.txt run: | set -euo pipefail diff --git a/.github/workflows/cpp-tests-llm.yml b/.github/workflows/cpp-tests-llm.yml index e3dde7188c..6207806a9a 100644 --- a/.github/workflows/cpp-tests-llm.yml +++ b/.github/workflows/cpp-tests-llm.yml @@ -35,12 +35,15 @@ jobs: include: - os: ubuntu-24.04 platform: linux + runner: qvac-ubuntu2404-x64 + arch: x64 - os: macos-14 platform: darwin arch: arm64 - - os: windows-11 + - os: windows-2025 platform: windows - runner: ai-run-windows11-gpu + runner: qvac-win25-x64 + arch: x64 runs-on: ${{ matrix.runner || matrix.os }} environment: release @@ -60,38 +63,16 @@ jobs: ref: ${{ inputs.ref || github.ref }} token: ${{ secrets.PAT_TOKEN }} - - if: ${{ matrix.os == 'ubuntu-24.04' || matrix.os == 'windows-11' }} - name: Setup LLVM - uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c - - - if: ${{ matrix.os == 'ubuntu-24.04' }} - name: Install Vulkan SDK on Linux + - if: ${{ matrix.os == 'windows-2025' }} + name: Set Vulkan SDK Path on Windows working-directory: ${{ env.WORKDIR }} - run: | - wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc - sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-noble.list http://packages.lunarg.com/vulkan/lunarg-vulkan-noble.list - sudo apt update - sudo apt install vulkan-sdk + run: echo "VULKAN_SDK=C:\VulkanSDK" >> $Env:GITHUB_ENV - - if: ${{ matrix.os == 'windows-11' }} - name: Configure Windows runner - working-directory: ${{ env.WORKDIR }} - run: | - git config --system core.longpaths true - - - if: ${{ matrix.os == 'windows-11' }} - name: Install Vulkan SDK on Windows - working-directory: ${{ env.WORKDIR }} - run: | - $ProgressPreference = 'SilentlyContinue' - Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/latest/windows/vulkan-sdk.exe -OutFile vulkan-sdk.exe - ./vulkan-sdk.exe --root C:\VulkanSDK --accept-licenses --default-answer --confirm-command install - echo "VULKAN_SDK=C:\VulkanSDK" >> $Env:GITHUB_ENV - - if: ${{ matrix.os == 'windows-11' }} + - if: ${{ matrix.os == 'windows-2025' }} name: Clone and bootstrap vcpkg (Windows) run: | - git clone https://github.com/microsoft/vcpkg.git + git clone --branch 2025.12.12 --single-branch https://github.com/microsoft/vcpkg.git ./vcpkg/bootstrap-vcpkg.bat -disableMetrics echo ("VCPKG_ROOT=$env:GITHUB_WORKSPACE/vcpkg" -replace '\\', '/') >> $env:GITHUB_ENV @@ -108,11 +89,17 @@ jobs: echo "MACOSX_DEPLOYMENT_TARGET=14.0" >> $GITHUB_ENV - if: ${{ matrix.os == 'ubuntu-24.04' }} - name: Configure vcpkg in linux + name: Install vcpkg on linux working-directory: ${{ env.WORKDIR }} - run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV + shell: bash + run: | + git clone --branch 2025.12.12 --single-branch https://github.com/microsoft/vcpkg.git vcpkg_microsoft + cd vcpkg_microsoft & ./bootstrap-vcpkg.sh -disableMetrics + VCPKG_ROOT="$(pwd)" + echo "VCPKG_ROOT=$VCPKG_ROOT" >> $GITHUB_ENV + echo "$VCPKG_ROOT" >> $GITHUB_PATH - - if: ${{ matrix.os == 'windows-11' }} + - if: ${{ matrix.os == 'windows-2025' }} name: Configure CMake generator on Windows shell: powershell working-directory: ${{ env.WORKDIR }} @@ -122,12 +109,12 @@ jobs: # mkdir -p is not portable to pwsh; do per-OS - name: Create vcpkg cache location (non-Windows) - if: ${{ matrix.os != 'windows-11' }} + if: ${{ matrix.os != 'windows-2025' }} working-directory: ${{ env.WORKDIR }} run: mkdir -p vcpkg/cache - name: Create vcpkg cache location (Windows) - if: ${{ matrix.os == 'windows-11' }} + if: ${{ matrix.os == 'windows-2025' }} shell: powershell working-directory: ${{ env.WORKDIR }} run: | @@ -141,6 +128,7 @@ jobs: restore-keys: cpp-tests-v4-${{ matrix.platform }}-${{ matrix.arch || 'x64' }}- - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* @@ -221,8 +209,7 @@ jobs: shell: bash working-directory: ${{ env.WORKDIR }} env: - # keep as repo-root absolute path to avoid assuming it's copied into workdir - LSAN_OPTIONS: suppressions=${{ github.workspace }}/.lsan-suppressions.txt + LSAN_OPTIONS: suppressions=${{ github.workspace }}/${{ env.WORKDIR }}/.lsan-suppressions.txt run: | # Windows build will typically emit addon-test.exe; unix emits addon-test EXE="build/test/unit/addon-test" diff --git a/.github/workflows/integration-mobile-test-bci-whispercpp.yml b/.github/workflows/integration-mobile-test-bci-whispercpp.yml index 5405e9041e..a755c9dfb6 100644 --- a/.github/workflows/integration-mobile-test-bci-whispercpp.yml +++ b/.github/workflows/integration-mobile-test-bci-whispercpp.yml @@ -62,31 +62,12 @@ jobs: include: - platform: Android os: ubuntu-24.04 - runner: ai-run-linux + runner: qvac-ubuntu2404-x64 - platform: iOS os: macos-14 runner: macos-14 steps: - - name: Free up disk space - if: matrix.platform == 'Android' - run: | - echo "Disk space before cleanup:" - df -h - sudo rm -rf /usr/share/dotnet || true - sudo rm -rf /opt/ghc || true - sudo rm -rf /opt/hostedtoolcache/CodeQL || true - sudo rm -rf /opt/hostedtoolcache/go || true - sudo rm -rf /opt/hostedtoolcache/Python || true - sudo rm -rf /opt/hostedtoolcache/Ruby || true - sudo rm -rf /usr/local/lib/android/sdk/ndk || true - sudo rm -rf /usr/local/share/boost || true - sudo rm -rf /usr/share/swift || true - sudo docker image prune --all --force || true - sudo apt-get clean || true - echo "Disk space after cleanup:" - df -h - - name: Resolve prebuild source id: resolve_prebuild shell: bash @@ -135,11 +116,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest diff --git a/.github/workflows/integration-mobile-test-decoder-audio.yml b/.github/workflows/integration-mobile-test-decoder-audio.yml index fe0c8905b1..286ec5cd44 100644 --- a/.github/workflows/integration-mobile-test-decoder-audio.yml +++ b/.github/workflows/integration-mobile-test-decoder-audio.yml @@ -57,7 +57,7 @@ jobs: include: - platform: Android os: ubuntu-24.04 - runner: ubuntu-24.04 + runner: qvac-ubuntu2404-x64 - platform: iOS os: macos-14 runner: macos-14 @@ -104,11 +104,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest diff --git a/.github/workflows/integration-mobile-test-diffusion-cpp.yml b/.github/workflows/integration-mobile-test-diffusion-cpp.yml index 494c1c94d2..7ae2588c02 100644 --- a/.github/workflows/integration-mobile-test-diffusion-cpp.yml +++ b/.github/workflows/integration-mobile-test-diffusion-cpp.yml @@ -49,35 +49,13 @@ jobs: matrix: include: - platform: Android - os: ubuntu-24.04 - runner: ai-run-linux + os: ubuntu-22.04 + runner: qvac-ubuntu2204-x64 - platform: iOS os: macos-14 runner: macos-14 steps: - # Free up disk space on Ubuntu runner to prevent "No space left on device" errors - - name: Free up disk space - if: matrix.platform == 'Android' - run: | - echo "Disk space before cleanup:" - df -h - # Remove unnecessary software to free up disk space (|| true to handle self-hosted runners) - sudo rm -rf /usr/share/dotnet || true - sudo rm -rf /opt/ghc || true - sudo rm -rf /opt/hostedtoolcache/CodeQL || true - sudo rm -rf /opt/hostedtoolcache/go || true - sudo rm -rf /opt/hostedtoolcache/Python || true - sudo rm -rf /opt/hostedtoolcache/Ruby || true - sudo rm -rf /usr/local/lib/android/sdk/ndk || true - sudo rm -rf /usr/local/share/boost || true - sudo rm -rf /usr/share/swift || true - sudo docker image prune --all --force || true - # Clean APT cache - sudo apt-get clean || true - echo "Disk space after cleanup:" - df -h - - name: Checkout addon repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -97,11 +75,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest diff --git a/.github/workflows/integration-mobile-test-embed-llamacpp.yml b/.github/workflows/integration-mobile-test-embed-llamacpp.yml index ffdb69edbc..ccffc11177 100644 --- a/.github/workflows/integration-mobile-test-embed-llamacpp.yml +++ b/.github/workflows/integration-mobile-test-embed-llamacpp.yml @@ -52,33 +52,13 @@ jobs: matrix: include: - platform: Android - os: ubuntu-24.04 - runner: ai-run-linux + os: ubuntu-22.04 + runner: qvac-ubuntu2204-x64 - platform: iOS os: macos-14 runner: macos-14 steps: - # Free up disk space on Ubuntu runner to prevent "No space left on device" errors - - name: Free up disk space - if: matrix.platform == 'Android' - run: | - echo "Disk space before cleanup:" - df -h - sudo rm -rf /usr/share/dotnet || true - sudo rm -rf /opt/ghc || true - sudo rm -rf /opt/hostedtoolcache/CodeQL || true - sudo rm -rf /opt/hostedtoolcache/go || true - sudo rm -rf /opt/hostedtoolcache/Python || true - sudo rm -rf /opt/hostedtoolcache/Ruby || true - sudo rm -rf /usr/local/lib/android/sdk/ndk || true - sudo rm -rf /usr/local/share/boost || true - sudo rm -rf /usr/share/swift || true - sudo docker image prune --all --force || true - sudo apt-get clean || true - echo "Disk space after cleanup:" - df -h - - name: Checkout monorepo uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -111,10 +91,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} + - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest diff --git a/.github/workflows/integration-mobile-test-llm-llamacpp.yml b/.github/workflows/integration-mobile-test-llm-llamacpp.yml index db588f393f..b8f931bda6 100644 --- a/.github/workflows/integration-mobile-test-llm-llamacpp.yml +++ b/.github/workflows/integration-mobile-test-llm-llamacpp.yml @@ -79,8 +79,8 @@ jobs: matrix: include: - platform: Android - os: ubuntu-24.04 - runner: ai-run-linux + os: ubuntu-22.04 + runner: qvac-ubuntu2204-x64 - platform: iOS os: macos-14 runner: macos-14 @@ -95,28 +95,6 @@ jobs: exit 1 fi - # Free up disk space on Ubuntu runner to prevent "No space left on device" errors - - name: Free up disk space - if: matrix.platform == 'Android' - run: | - echo "Disk space before cleanup:" - df -h - # Remove unnecessary software to free up disk space (|| true to handle self-hosted runners) - sudo rm -rf /usr/share/dotnet || true - sudo rm -rf /opt/ghc || true - sudo rm -rf /opt/hostedtoolcache/CodeQL || true - sudo rm -rf /opt/hostedtoolcache/go || true - sudo rm -rf /opt/hostedtoolcache/Python || true - sudo rm -rf /opt/hostedtoolcache/Ruby || true - sudo rm -rf /usr/local/lib/android/sdk/ndk || true - sudo rm -rf /usr/local/share/boost || true - sudo rm -rf /usr/share/swift || true - sudo docker image prune --all --force || true - # Clean APT cache - sudo apt-get clean || true - echo "Disk space after cleanup:" - df -h - - name: Checkout addon repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -136,11 +114,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest diff --git a/.github/workflows/integration-mobile-test-ocr-onnx.yml b/.github/workflows/integration-mobile-test-ocr-onnx.yml index d9019bb2d0..210299074c 100644 --- a/.github/workflows/integration-mobile-test-ocr-onnx.yml +++ b/.github/workflows/integration-mobile-test-ocr-onnx.yml @@ -56,31 +56,12 @@ jobs: include: - platform: Android os: ubuntu-24.04 - runner: ai-run-linux + runner: qvac-ubuntu2404-x64 - platform: iOS os: macos-14 runner: macos-14 steps: - - name: Free up disk space - if: matrix.platform == 'Android' - run: | - echo "Disk space before cleanup:" - df -h - sudo rm -rf /usr/share/dotnet || true - sudo rm -rf /opt/ghc || true - sudo rm -rf /opt/hostedtoolcache/CodeQL || true - sudo rm -rf /opt/hostedtoolcache/go || true - sudo rm -rf /opt/hostedtoolcache/Python || true - sudo rm -rf /opt/hostedtoolcache/Ruby || true - sudo rm -rf /usr/local/lib/android/sdk/ndk || true - sudo rm -rf /usr/local/share/boost || true - sudo rm -rf /usr/share/swift || true - sudo docker image prune --all --force || true - sudo apt-get clean || true - echo "Disk space after cleanup:" - df -h - - name: Checkout addon repository (monorepo) uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -100,11 +81,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest @@ -937,20 +920,20 @@ jobs: run: | if [ "${{ matrix.platform }}" == "Android" ]; then BID="${{ env.APP_BUNDLE_ID }}" - cat > /tmp/wdio-config.js << 'WDIO_EOF' + cat > ${{ runner.temp }}/wdio-config.js << 'WDIO_EOF' exports.config={runner:"local",hostname:"127.0.0.1",port:4723,path:"/wd/hub",specs:["*.spec.js","*.test.js"],maxInstances:1,bail:0,capabilities:[{platformName:"Android","appium:automationName":"UiAutomator2","appium:appPackage":"__BUNDLE_ID__","appium:appActivity":"__BUNDLE_ID__.MainActivity","appium:newCommandTimeout":300,"appium:autoGrantPermissions":true,"appium:autoAcceptAlerts":true,"appium:noReset":true,"appium:dontStopAppOnReset":true,"appium:forceAppLaunch":false}],logLevel:"debug",waitforTimeout:120000,connectionRetryTimeout:30000,connectionRetryCount:3,services:[],framework:"mocha",reporters:["spec"],mochaOpts:{ui:"bdd",timeout:1800000,grep:"__MOCHA_GREP__"},before:async function(capabilities,specs,browser){const BUNDLE_ID="__BUNDLE_ID__";const TEST_FILTER="__TEST_FILTER__";global.appCrashed=false;global.checkAppCrash=async(stage)=>{try{const state=await browser.queryAppState(BUNDLE_ID);console.log("["+stage+"] App state: "+state+" (4=foreground,3=background,1=not running)");if(state<3){console.error("\n APP CRASHED at "+stage+"! State="+state);console.error("Check device logs for BareKit/native errors.\n");global.appCrashed=true;setTimeout(function(){process.exit(1);},5000);}return state;}catch(e){console.log("["+stage+"] queryAppState error: "+e.message);return-1;}};console.log("Checking initial app state...");await global.checkAppCrash("startup");console.log("Waiting for app to initialize...");await browser.pause(5000);await global.checkAppCrash("after-pause");const initText=await browser.$("android=new UiSelector().textContains(\"INITIALIZED\")");await initText.waitForDisplayed({timeout:60000});await global.checkAppCrash("after-init");if(TEST_FILTER!=="__TEST_FILTER__"){try{const b64=Buffer.from(TEST_FILTER).toString("base64");await browser.pushFile("/data/local/tmp/testFilter.txt",b64);console.log("Pushed test filter: "+TEST_FILTER);}catch(e){console.log("pushFile failed: "+e.message);}}console.log("App initialized, clicking Run Automated Tests...");const button=await browser.$("android=new UiSelector().textContains(\"Run Automated Tests\")");await button.waitForDisplayed({timeout:15000});await button.click();console.log("Button clicked!");await browser.pause(5000);await global.checkAppCrash("after-click");},afterTest:async function(test,context,{error}){if(global.appCrashed)return;await global.checkAppCrash("after-test:"+test.title);},after:async function(){console.log("[perf-extract] Starting extraction...");var BID="__BUNDLE_ID__";var pollShellPaths=["/sdcard/Android/data/"+BID+"/files/perf-report.json","/storage/emulated/0/Android/data/"+BID+"/files/perf-report.json","/data/local/tmp/perf-report.json","/tmp/perf-report.json","/data/data/"+BID+"/files/perf-report.json","/data/user/0/"+BID+"/files/perf-report.json"];var lastCnt=0;var stableCnt=0;var pollJson=null;for(var pw=0;pw<48;pw++){var pHit=false;for(var pp=0;pp10){var si2=sr.indexOf("{");if(si2>=0){var sj=sr.substring(si2);try{var sd=JSON.parse(sj);var cnt=sd.results?sd.results.length:0;console.log("[perf-extract] poll "+pw+": "+cnt+" results from "+pollShellPaths[pp]);if(cnt>0&&cnt===lastCnt){stableCnt++;}else{stableCnt=0;}lastCnt=cnt;pollJson=sj;pHit=true;break;}catch(pje){}}}}catch(se){}}if(!pHit&&pw%6===5){console.log("[perf-extract] poll "+pw+": no file found yet, still waiting...");}if(stableCnt>=6)break;await new Promise(function(r){setTimeout(r,5000);});}console.log("[perf-extract] poll done: "+lastCnt+" results (stable="+stableCnt+")");var outDir=process.env.DEVICEFARM_LOG_DIR||process.env.DEVICEFARM_TEST_PACKAGE_PATH||".";var outFile=outDir+"/perf-report-extract.json";var rj=pollJson;if(rj){console.log("[perf-extract] using poll result ("+lastCnt+" results, "+rj.length+"b)");}var paths=["@"+BID+"/files/perf-report.json","/sdcard/Android/data/"+BID+"/files/perf-report.json","/storage/emulated/0/Android/data/"+BID+"/files/perf-report.json","/data/user/0/"+BID+"/files/perf-report.json","/data/user/0/"+BID+"/cache/perf-report.json","/data/data/"+BID+"/files/perf-report.json","/data/data/"+BID+"/cache/perf-report.json","/tmp/perf-report.json","/data/local/tmp/perf-report.json"];for(var i=0;i10&&json[0]==="{"){console.log("[perf-extract] pullFile OK: "+paths[i]+" ("+json.length+"b)");rj=json;break;}console.log("[perf-extract] "+paths[i]+": not JSON ("+json.length+"b)");}catch(e){console.log("[perf-extract] "+paths[i]+": "+e.message);}}if(!rj){console.log("[perf-extract] pullFile failed, trying logcat...");try{var logs=await browser.getLogs("logcat");console.log("[perf-extract] logcat: "+logs.length+" entries");var all=logs.map(function(e){return(e&&e.message)||""}).join("\n");var si=all.lastIndexOf("[PERF_REPORT_START]");if(si>=0){var js=si+"[PERF_REPORT_START]".length;var ei=all.indexOf("[PERF_REPORT_END]",js);if(ei>=0){var raw=all.substring(js,ei).trim();try{JSON.parse(raw);rj=raw;console.log("[perf-extract] logcat OK ("+raw.length+"b)");}catch(pe){console.log("[perf-extract] logcat parse fail: "+pe.message);}}else{console.log("[perf-extract] logcat: START but no END");}}else{console.log("[perf-extract] logcat: no markers");}if(!rj){var cm={};for(var li=0;licm[cid].c[cix].length)cm[cid].c[cix]=cd;}}var ck=Object.keys(cm);for(var ki=0;ki0)cj=cj.substring(fb);try{JSON.parse(cj);rj=cj;console.log("[perf-extract] logcat chunks OK ("+cj.length+"b)");break;}catch(pe4){console.log("[perf-extract] chunk set "+ck[ki]+": parse fail: "+pe4.message);}}}}if(!rj&&ck.length>0){console.log("[perf-extract] logcat: found "+ck.length+" chunk sets but reassembly failed");}}catch(le){console.log("[perf-extract] getLogs error: "+le.message);}}if(!rj){console.log("[perf-extract] trying mobile:shell...");var sp=["/sdcard/Android/data/"+BID+"/files/perf-report.json","/storage/emulated/0/Android/data/"+BID+"/files/perf-report.json","/data/data/"+BID+"/files/perf-report.json","/data/user/0/"+BID+"/files/perf-report.json","/data/local/tmp/perf-report.json","/tmp/perf-report.json"];for(var k=0;k10){var ci=res.indexOf("{");if(ci>=0){var cl=res.substring(ci);try{JSON.parse(cl);rj=cl;console.log("[perf-extract] shell OK: "+sp[k]+" ("+cl.length+"b)");break;}catch(pe2){}}}}catch(se){console.log("[perf-extract] shell "+sp[k]+": "+se.message);}}}if(!rj){console.log("[perf-extract] trying run-as...");var rp=["files/perf-report.json","cache/perf-report.json"];for(var ri=0;ri10){var rc=rr.indexOf("{");if(rc>=0){var rl=rr.substring(rc);try{JSON.parse(rl);rj=rl;console.log("[perf-extract] run-as OK: "+rp[ri]+" ("+rl.length+"b)");break;}catch(pe5){}}}}catch(re){console.log("[perf-extract] run-as "+rp[ri]+": "+re.message);}}}if(rj){try{require("fs").writeFileSync(outFile,rj);console.log("[perf-extract] file: "+outFile);}catch(we){console.log("[perf-extract] write fail: "+we.message);}console.log("[PERF_REPORT_START]"+rj+"[PERF_REPORT_END]");}else{console.log("[perf-extract] ALL methods failed");}}}; WDIO_EOF - sed "s#__BUNDLE_ID__#${BID}#g" /tmp/wdio-config.js > /tmp/wdio-config-final.js - mv /tmp/wdio-config-final.js /tmp/wdio-config.js - echo "WDIO_CONFIG_FILE=/tmp/wdio-config.js" >> $GITHUB_OUTPUT + sed "s#__BUNDLE_ID__#${BID}#g" ${{ runner.temp }}/wdio-config.js > ${{ runner.temp }}/wdio-config-final.js + mv ${{ runner.temp }}/wdio-config-final.js ${{ runner.temp }}/wdio-config.js + echo "WDIO_CONFIG_FILE=${{ runner.temp }}/wdio-config.js" >> $GITHUB_OUTPUT else BID="${{ env.APP_BUNDLE_ID }}" - cat > /tmp/wdio-config.js << 'WDIO_EOF' + cat > ${{ runner.temp }}/wdio-config.js << 'WDIO_EOF' exports.config={runner:"local",hostname:"127.0.0.1",port:4723,path:"/wd/hub",specs:["*.spec.js","*.test.js"],maxInstances:1,bail:0,capabilities:[{platformName:"iOS","appium:automationName":"XCUITest","appium:bundleId":"__BUNDLE_ID__","appium:newCommandTimeout":300,"appium:noReset":true,"appium:forceAppLaunch":false,"appium:usePrebuiltWDA":true,"appium:wdaLocalPort":8100,"appium:showIOSLog":true,"appium:realDeviceLogger":"/usr/local/lib/node_modules/appium/node_modules/deviceconsole/deviceconsole"}],logLevel:"debug",waitforTimeout:120000,connectionRetryTimeout:30000,connectionRetryCount:3,services:[],framework:"mocha",reporters:["spec"],mochaOpts:{ui:"bdd",timeout:1800000,grep:"__MOCHA_GREP__"},before:async function(capabilities,specs,browser){const BUNDLE_ID="__BUNDLE_ID__";const TEST_FILTER="__TEST_FILTER__";global.appCrashed=false;global.flushBareLog=async function(reason){try{var _h=require("http");var lb64=await new Promise(function(ok,fail){var bd=JSON.stringify({path:"@"+BUNDLE_ID+":documents/bare_console.log"});var rq=_h.request({hostname:"127.0.0.1",port:4723,path:"/wd/hub/session/"+browser.sessionId+"/appium/device/pull_file",method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(bd)}},function(rs){var d="";rs.on("data",function(c){d+=c;});rs.on("end",function(){try{ok(JSON.parse(d).value);}catch(e){fail(e);}});});rq.on("error",fail);rq.write(bd);rq.end();});var logTxt=Buffer.from(lb64,"base64").toString();var logDir=process.env.DEVICEFARM_LOG_DIR||".";require("fs").writeFileSync(logDir+"/bare_console.log",logTxt);console.log("[bare-log] "+reason+" flush ok ("+logTxt.length+" bytes)");}catch(e){console.log("[bare-log] "+reason+" flush failed: "+e.message);}};global.checkAppCrash=async(stage)=>{try{const state=await browser.queryAppState(BUNDLE_ID);console.log("["+stage+"] App state: "+state+" (4=foreground,3=background,1=not running)");if(state<3){console.error("\n APP CRASHED at "+stage+"! State="+state);console.error("Check device logs for BareKit/native errors.\n");global.appCrashed=true;setTimeout(function(){process.exit(1);},5000);try{await browser.pause(1500);await Promise.race([global.flushBareLog("crash-"+stage),new Promise(function(_,rj){setTimeout(function(){rj(new Error("bare-log flush timed out"));},3000);})]);}catch(_){}}return state;}catch(e){console.log("["+stage+"] queryAppState error: "+e.message);return-1;}};console.log("Checking initial app state...");await global.checkAppCrash("startup");console.log("Waiting for app to initialize...");await browser.pause(5000);await global.checkAppCrash("after-pause");const initText=await browser.$("-ios predicate string:label CONTAINS \"INITIALIZED\"");await initText.waitForDisplayed({timeout:60000});await global.checkAppCrash("after-init");if(TEST_FILTER!=="__TEST_FILTER__"){try{const b64=Buffer.from(TEST_FILTER).toString("base64");await browser.pushFile("@"+BUNDLE_ID+":documents/testFilter.txt",b64);console.log("Pushed test filter: "+TEST_FILTER);}catch(e){console.log("pushFile failed: "+e.message);}}console.log("App initialized, clicking Run Automated Tests...");const button=await browser.$("-ios predicate string:label CONTAINS \"Run Automated Tests\"");await button.waitForDisplayed({timeout:15000});await button.click();console.log("Button clicked!");await browser.pause(5000);await global.checkAppCrash("after-click");},afterTest:async function(test,context,{error}){if(global.appCrashed)return;await global.checkAppCrash("after-test:"+test.title);},after:async function(){console.log("[perf-extract] Pulling perf-report.json from device...");var BID="__BUNDLE_ID__";var pullPaths=["@"+BID+":documents/perf-report.json","@"+BID+":library/perf-report.json"];for(var i=0;i /tmp/wdio-config-final.js - mv /tmp/wdio-config-final.js /tmp/wdio-config.js - echo "WDIO_CONFIG_FILE=/tmp/wdio-config.js" >> $GITHUB_OUTPUT + sed "s#__BUNDLE_ID__#${BID}#g" ${{ runner.temp }}/wdio-config.js > ${{ runner.temp }}/wdio-config-final.js + mv ${{ runner.temp }}/wdio-config-final.js ${{ runner.temp }}/wdio-config.js + echo "WDIO_CONFIG_FILE=${{ runner.temp }}/wdio-config.js" >> $GITHUB_OUTPUT fi - name: Create and Upload Test Spec @@ -959,7 +942,7 @@ jobs: echo "📝 Creating test spec for custom environment mode..." echo "Platform: ${{ matrix.platform }}" - WDIO_CONFIG=$(cat /tmp/wdio-config.js) + WDIO_CONFIG=$(cat ${{ runner.temp }}/wdio-config.js) if [ "${{ matrix.platform }}" == "Android" ]; then PLATFORM="Android" diff --git a/.github/workflows/integration-mobile-test-transcription-parakeet.yml b/.github/workflows/integration-mobile-test-transcription-parakeet.yml index ca1bd0288e..67f74ed30c 100644 --- a/.github/workflows/integration-mobile-test-transcription-parakeet.yml +++ b/.github/workflows/integration-mobile-test-transcription-parakeet.yml @@ -86,31 +86,12 @@ jobs: include: - platform: Android os: ubuntu-24.04 - runner: ai-run-linux + runner: qvac-ubuntu2404-x64 - platform: iOS os: macos-14 runner: macos-14 steps: - - name: Free up disk space - if: matrix.platform == 'Android' - run: | - echo "Disk space before cleanup:" - df -h - sudo rm -rf /usr/share/dotnet || true - sudo rm -rf /opt/ghc || true - sudo rm -rf /opt/hostedtoolcache/CodeQL || true - sudo rm -rf /opt/hostedtoolcache/go || true - sudo rm -rf /opt/hostedtoolcache/Python || true - sudo rm -rf /opt/hostedtoolcache/Ruby || true - sudo rm -rf /usr/local/lib/android/sdk/ndk || true - sudo rm -rf /usr/local/share/boost || true - sudo rm -rf /usr/share/swift || true - sudo docker image prune --all --force || true - sudo apt-get clean || true - echo "Disk space after cleanup:" - df -h - - name: Checkout addon repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -130,11 +111,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest @@ -329,6 +312,7 @@ jobs: continue-on-error: true - name: Setup Python (.nemo -> .gguf conversion) + if: matrix.platform == 'iOS' uses: actions/setup-python@v5 with: python-version: '3.12' diff --git a/.github/workflows/integration-mobile-test-transcription-whispercpp.yml b/.github/workflows/integration-mobile-test-transcription-whispercpp.yml index f8f871e4b7..581d15ea9b 100644 --- a/.github/workflows/integration-mobile-test-transcription-whispercpp.yml +++ b/.github/workflows/integration-mobile-test-transcription-whispercpp.yml @@ -43,7 +43,7 @@ env: jobs: build-and-test: name: Build ${{ matrix.platform }} and Run E2E Tests - runs-on: ${{ matrix.runner }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release timeout-minutes: 120 permissions: @@ -57,34 +57,11 @@ jobs: include: - platform: Android os: ubuntu-24.04 - runner: ai-run-linux # Self-hosted runner to avoid Maven Central 403 issues + runner: qvac-ubuntu2404-x64 # Self-hosted runner to avoid Maven Central 403 issues - platform: iOS os: macos-14 - runner: macos-14 steps: - # Free up disk space on Ubuntu runner to prevent "No space left on device" errors - - name: Free up disk space - if: matrix.platform == 'Android' - run: | - echo "Disk space before cleanup:" - df -h - # Remove unnecessary software to free up disk space (|| true to handle self-hosted runners) - sudo rm -rf /usr/share/dotnet || true - sudo rm -rf /opt/ghc || true - sudo rm -rf /opt/hostedtoolcache/CodeQL || true - sudo rm -rf /opt/hostedtoolcache/go || true - sudo rm -rf /opt/hostedtoolcache/Python || true - sudo rm -rf /opt/hostedtoolcache/Ruby || true - sudo rm -rf /usr/local/lib/android/sdk/ndk || true - sudo rm -rf /usr/local/share/boost || true - sudo rm -rf /usr/share/swift || true - sudo docker image prune --all --force || true - # Clean APT cache - sudo apt-get clean || true - echo "Disk space after cleanup:" - df -h - - name: Checkout addon repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -104,11 +81,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest diff --git a/.github/workflows/integration-mobile-test-translation-nmtcpp.yml b/.github/workflows/integration-mobile-test-translation-nmtcpp.yml index ea41fb7feb..0553080608 100644 --- a/.github/workflows/integration-mobile-test-translation-nmtcpp.yml +++ b/.github/workflows/integration-mobile-test-translation-nmtcpp.yml @@ -41,7 +41,7 @@ env: jobs: build-and-test: name: Build ${{ matrix.platform }} and Run E2E Tests - runs-on: ${{ matrix.runner }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release timeout-minutes: 120 continue-on-error: true # Don't block PR merges if tests fail @@ -56,34 +56,11 @@ jobs: include: - platform: Android os: ubuntu-24.04 - runner: ai-run-linux + runner: qvac-ubuntu2404-x64 - platform: iOS os: macos-14 - runner: macos-14 steps: - # Free up disk space on Ubuntu runner to prevent "No space left on device" errors - - name: Free up disk space - if: matrix.platform == 'Android' - run: | - echo "Disk space before cleanup:" - df -h - # Remove unnecessary software to free up disk space (|| true to handle self-hosted runners) - sudo rm -rf /usr/share/dotnet || true - sudo rm -rf /opt/ghc || true - sudo rm -rf /opt/hostedtoolcache/CodeQL || true - sudo rm -rf /opt/hostedtoolcache/go || true - sudo rm -rf /opt/hostedtoolcache/Python || true - sudo rm -rf /opt/hostedtoolcache/Ruby || true - sudo rm -rf /usr/local/lib/android/sdk/ndk || true - sudo rm -rf /usr/local/share/boost || true - sudo rm -rf /usr/share/swift || true - sudo docker image prune --all --force || true - # Clean APT cache - sudo apt-get clean || true - echo "Disk space after cleanup:" - df -h - - name: Checkout monorepo uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -103,11 +80,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest @@ -1008,19 +987,19 @@ jobs: - name: Build WDIO config for Android if: matrix.platform == 'Android' run: | - cat > /tmp/wdio-config.js << 'WDIO_EOF' + cat > wdio-config.js << 'WDIO_EOF' exports.config={runner:"local",hostname:"127.0.0.1",port:4723,path:"/wd/hub",specs:["*.spec.js","*.test.js"],maxInstances:1,bail:0,capabilities:[{platformName:"Android","appium:automationName":"UiAutomator2","appium:appPackage":"__BUNDLE_ID__","appium:appActivity":"__BUNDLE_ID__.MainActivity","appium:newCommandTimeout":300,"appium:autoGrantPermissions":true,"appium:autoAcceptAlerts":true,"appium:noReset":true,"appium:dontStopAppOnReset":true,"appium:forceAppLaunch":false}],logLevel:"debug",waitforTimeout:120000,connectionRetryTimeout:30000,connectionRetryCount:3,services:[],framework:"mocha",reporters:["spec"],mochaOpts:{ui:"bdd",timeout:1800000},before:async function(capabilities,specs,browser){const BUNDLE_ID="__BUNDLE_ID__";global.appCrashed=false;global._crashCheckFails=0;global._crashCheckDisabled=false;global.checkAppCrash=async(stage)=>{if(global._crashCheckDisabled)return-1;try{const state=await browser.queryAppState(BUNDLE_ID);global._crashCheckFails=0;console.log("["+stage+"] App state: "+state+" (4=foreground,3=background,1=not running)");if(state<3){console.error("\\n🛑 APP CRASHED at "+stage+"! State="+state);console.error("Check device logs for BareKit/native errors.\\n");global.appCrashed=true;if(global._healthInterval)clearInterval(global._healthInterval);setTimeout(function(){process.exit(1);},5000);}return state;}catch(e){global._crashCheckFails++;if(global._crashCheckFails>=3){console.log("["+stage+"] queryAppState not supported, disabling crash detection");global._crashCheckDisabled=true;if(global._healthInterval)clearInterval(global._healthInterval);}return-1;}};console.log("Checking initial app state...");await global.checkAppCrash("startup");console.log("Waiting for app to initialize...");await browser.pause(5000);await global.checkAppCrash("after-pause");const initText=await browser.$("android=new UiSelector().textContains(\"INITIALIZED\")");await initText.waitForDisplayed({timeout:60000});await global.checkAppCrash("after-init");console.log("App initialized, clicking Run Automated Tests...");const button=await browser.$("android=new UiSelector().textContains(\"Run Automated Tests\")");await button.waitForDisplayed({timeout:15000});await button.click();console.log("Button clicked!");await browser.pause(5000);await global.checkAppCrash("after-click");global._healthInterval=setInterval(async()=>{if(global.appCrashed)return;try{await global.checkAppCrash("health-monitor");}catch(e){}},15000);console.log("Health monitor started (15s interval)");},after:async function(){if(global._healthInterval)clearInterval(global._healthInterval);console.log("Health monitor stopped");console.log("[perf-extract] Starting extraction...");var BID="__BUNDLE_ID__";var pollShellPaths=["/sdcard/Android/data/"+BID+"/files/perf-report.json","/storage/emulated/0/Android/data/"+BID+"/files/perf-report.json","/data/local/tmp/perf-report.json","/tmp/perf-report.json","/data/data/"+BID+"/files/perf-report.json","/data/user/0/"+BID+"/files/perf-report.json"];var lastCnt=0;var stableCnt=0;var pollJson=null;for(var pw=0;pw<48;pw++){var pHit=false;for(var pp=0;pp10){var si2=sr.indexOf("{");if(si2>=0){var sj=sr.substring(si2);try{var sd=JSON.parse(sj);var cnt=sd.results?sd.results.length:0;console.log("[perf-extract] poll "+pw+": "+cnt+" results from "+pollShellPaths[pp]);if(cnt>0&&cnt===lastCnt){stableCnt++;}else{stableCnt=0;}lastCnt=cnt;pollJson=sj;pHit=true;break;}catch(pje){}}}}catch(se){}}if(!pHit&&pw%6===5){console.log("[perf-extract] poll "+pw+": no file found yet, still waiting...");}if(stableCnt>=6)break;await new Promise(function(r){setTimeout(r,5000);});}console.log("[perf-extract] poll done: "+lastCnt+" results (stable="+stableCnt+")");var outDir=process.env.DEVICEFARM_LOG_DIR||process.env.DEVICEFARM_TEST_PACKAGE_PATH||".";var outFile=outDir+"/perf-report-extract.json";var rj=pollJson;if(rj){console.log("[perf-extract] using poll result ("+lastCnt+" results, "+rj.length+"b)");}var paths=["@"+BID+"/files/perf-report.json","/sdcard/Android/data/"+BID+"/files/perf-report.json","/storage/emulated/0/Android/data/"+BID+"/files/perf-report.json","/data/user/0/"+BID+"/files/perf-report.json","/data/user/0/"+BID+"/cache/perf-report.json","/data/data/"+BID+"/files/perf-report.json","/data/data/"+BID+"/cache/perf-report.json","/tmp/perf-report.json","/data/local/tmp/perf-report.json"];for(var i=0;i10&&json[0]==="{"){console.log("[perf-extract] pullFile OK: "+paths[i]+" ("+json.length+"b)");rj=json;break;}console.log("[perf-extract] "+paths[i]+": not JSON ("+json.length+"b)");}catch(e){console.log("[perf-extract] "+paths[i]+": "+e.message);}}if(!rj){console.log("[perf-extract] pullFile failed, trying logcat...");try{var logs=await browser.getLogs("logcat");console.log("[perf-extract] logcat: "+logs.length+" entries");var all=logs.map(function(e){return(e&&e.message)||""}).join("\n");var si=all.lastIndexOf("[PERF_REPORT_START]");if(si>=0){var js=si+"[PERF_REPORT_START]".length;var ei=all.indexOf("[PERF_REPORT_END]",js);if(ei>=0){var raw=all.substring(js,ei).trim();try{JSON.parse(raw);rj=raw;console.log("[perf-extract] logcat OK ("+raw.length+"b)");}catch(pe){console.log("[perf-extract] logcat parse fail: "+pe.message);}}else{console.log("[perf-extract] logcat: START but no END");}}else{console.log("[perf-extract] logcat: no markers");}if(!rj){var cm={};for(var li=0;licm[cid].c[cix].length)cm[cid].c[cix]=cd;}}var ck=Object.keys(cm);for(var ki=0;ki0)cj=cj.substring(fb);try{JSON.parse(cj);rj=cj;console.log("[perf-extract] logcat chunks OK ("+cj.length+"b)");break;}catch(pe4){console.log("[perf-extract] chunk set "+ck[ki]+": parse fail: "+pe4.message);}}}}if(!rj&&ck.length>0){console.log("[perf-extract] logcat: found "+ck.length+" chunk sets but reassembly failed");}}catch(le){console.log("[perf-extract] getLogs error: "+le.message);}}if(!rj){console.log("[perf-extract] trying mobile:shell...");var sp=["/sdcard/Android/data/"+BID+"/files/perf-report.json","/storage/emulated/0/Android/data/"+BID+"/files/perf-report.json","/data/data/"+BID+"/files/perf-report.json","/data/user/0/"+BID+"/files/perf-report.json","/data/local/tmp/perf-report.json","/tmp/perf-report.json"];for(var k=0;k10){var ci=res.indexOf("{");if(ci>=0){var cl=res.substring(ci);try{JSON.parse(cl);rj=cl;console.log("[perf-extract] shell OK: "+sp[k]+" ("+cl.length+"b)");break;}catch(pe2){}}}}catch(se){console.log("[perf-extract] shell "+sp[k]+": "+se.message);}}}if(!rj){console.log("[perf-extract] trying run-as...");var rp=["files/perf-report.json","cache/perf-report.json"];for(var ri=0;ri10){var rc=rr.indexOf("{");if(rc>=0){var rl=rr.substring(rc);try{JSON.parse(rl);rj=rl;console.log("[perf-extract] run-as OK: "+rp[ri]+" ("+rl.length+"b)");break;}catch(pe5){}}}}catch(re){console.log("[perf-extract] run-as "+rp[ri]+": "+re.message);}}}if(rj){try{require("fs").writeFileSync(outFile,rj);console.log("[perf-extract] file: "+outFile);}catch(we){console.log("[perf-extract] write fail: "+we.message);}console.log("[PERF_REPORT_START]"+rj+"[PERF_REPORT_END]");}else{console.log("[perf-extract] ALL methods failed");}},afterTest:async function(test,context,{error}){if(global.appCrashed)return;await global.checkAppCrash("after-test:"+test.title);}}; WDIO_EOF - WDIO_CONFIG_B64=$(sed "s#__BUNDLE_ID__#${{ env.APP_BUNDLE_ID }}#g" /tmp/wdio-config.js | base64 | tr -d '\n') + WDIO_CONFIG_B64=$(sed "s#__BUNDLE_ID__#${{ env.APP_BUNDLE_ID }}#g" wdio-config.js | base64 | tr -d '\n') echo "WDIO_CONFIG_B64=${WDIO_CONFIG_B64}" >> $GITHUB_ENV - name: Build WDIO config for iOS if: matrix.platform == 'iOS' run: | - cat > /tmp/wdio-config.js << 'WDIO_EOF' + cat > wdio-config.js << 'WDIO_EOF' exports.config={runner:"local",hostname:"127.0.0.1",port:4723,path:"/wd/hub",specs:["*.spec.js","*.test.js"],maxInstances:1,bail:0,capabilities:[{platformName:"iOS","appium:automationName":"XCUITest","appium:bundleId":"__BUNDLE_ID__","appium:newCommandTimeout":300,"appium:noReset":true,"appium:forceAppLaunch":false,"appium:usePrebuiltWDA":true,"appium:wdaLocalPort":8100,"appium:showIOSLog":true,"appium:realDeviceLogger":"/usr/local/lib/node_modules/appium/node_modules/deviceconsole/deviceconsole"}],logLevel:"debug",waitforTimeout:120000,connectionRetryTimeout:30000,connectionRetryCount:3,services:[],framework:"mocha",reporters:["spec"],mochaOpts:{ui:"bdd",timeout:1800000},before:async function(capabilities,specs,browser){const BUNDLE_ID="__BUNDLE_ID__";global.appCrashed=false;global._crashCheckFails=0;global._crashCheckDisabled=false;global.flushBareLog=async function(reason){try{var b64=await browser.pullFile("@"+BUNDLE_ID+":documents/bare_console.log");var txt=Buffer.from(b64,"base64").toString();var dir=process.env.DEVICEFARM_LOG_DIR||".";require("fs").writeFileSync(dir+"/bare_console.log",txt);console.log("[bare-log] "+reason+" flush ok ("+txt.length+" bytes)");}catch(e){console.log("[bare-log] "+reason+" flush failed: "+e.message);}};global.checkAppCrash=async(stage)=>{if(global._crashCheckDisabled)return-1;try{const state=await browser.execute("mobile: queryAppState",{bundleId:BUNDLE_ID});global._crashCheckFails=0;console.log("["+stage+"] App state: "+state+" (4=foreground,3=background,1=not running)");if(state<3){console.error("\\n🛑 APP CRASHED at "+stage+"! State="+state);console.error("Check device logs for BareKit/native errors.\\n");global.appCrashed=true;if(global._healthInterval)clearInterval(global._healthInterval);setTimeout(function(){process.exit(1);},5000);try{await browser.pause(1500);await Promise.race([global.flushBareLog("crash-"+stage),new Promise(function(_,rj){setTimeout(function(){rj(new Error("bare-log flush timed out"));},3000);})]);}catch(_){}}return state;}catch(e){global._crashCheckFails++;if(global._crashCheckFails>=3){console.log("["+stage+"] queryAppState not supported, disabling crash detection");global._crashCheckDisabled=true;if(global._healthInterval)clearInterval(global._healthInterval);}return-1;}};console.log("Checking initial app state...");await global.checkAppCrash("startup");console.log("Waiting for app to initialize...");await browser.pause(5000);await global.checkAppCrash("after-pause");const initText=await browser.$("-ios predicate string:label CONTAINS \"INITIALIZED\"");await initText.waitForDisplayed({timeout:60000});await global.checkAppCrash("after-init");console.log("App initialized, clicking Run Automated Tests...");const button=await browser.$("-ios predicate string:label CONTAINS \"Run Automated Tests\"");await button.waitForDisplayed({timeout:15000});await button.click();console.log("Button clicked!");await browser.pause(5000);await global.checkAppCrash("after-click");global._healthInterval=setInterval(async()=>{if(global.appCrashed)return;try{await global.checkAppCrash("health-monitor");}catch(e){}},15000);console.log("Health monitor started (15s interval)");},after:async function(){if(global._healthInterval)clearInterval(global._healthInterval);console.log("Health monitor stopped");console.log("[perf-extract] Pulling perf-report.json from iOS app sandbox...");var BID="__BUNDLE_ID__";var pullPaths=["@"+BID+":documents/perf-report.json","@"+BID+":library/perf-report.json","@"+BID+":tmp/perf-report.json","@"+BID+":documents/Documents/perf-report.json"];await browser.pause(3000);var outDir=process.env.DEVICEFARM_LOG_DIR||process.env.DEVICEFARM_TEST_PACKAGE_PATH||".";var outFile=outDir+"/perf-report-extract.json";var rj=null;for(var i=0;i10&&json[0]==="{"){rj=json;try{require("fs").writeFileSync(outFile,json);console.log("[perf-extract] Written to "+outFile+" ("+json.length+" bytes)");}catch(we){console.log("[perf-extract] writeFile failed: "+we.message);}console.log("[perf-extract] Success from "+pullPaths[i]);console.log("[PERF_REPORT_START]"+json+"[PERF_REPORT_END]");break;}else{console.log("[perf-extract] "+pullPaths[i]+": not JSON ("+json.length+"b)");}}catch(e){console.log("[perf-extract] "+pullPaths[i]+": "+e.message);}}if(!rj){console.log("[perf-extract] iOS pullFile failed for all paths");}if(global.flushBareLog)await global.flushBareLog("after");},afterTest:async function(test,context,{error}){if(global.appCrashed)return;await global.checkAppCrash("after-test:"+test.title);}}; WDIO_EOF - WDIO_CONFIG_B64=$(sed "s#__BUNDLE_ID__#${{ env.APP_BUNDLE_ID }}#g" /tmp/wdio-config.js | base64 | tr -d '\n') + WDIO_CONFIG_B64=$(sed "s#__BUNDLE_ID__#${{ env.APP_BUNDLE_ID }}#g" wdio-config.js | base64 | tr -d '\n') echo "WDIO_CONFIG_B64=${WDIO_CONFIG_B64}" >> $GITHUB_ENV - name: Create and Upload Test Spec diff --git a/.github/workflows/integration-mobile-test-tts-ggml.yml b/.github/workflows/integration-mobile-test-tts-ggml.yml index 18e11bd374..f5c4a1fda6 100644 --- a/.github/workflows/integration-mobile-test-tts-ggml.yml +++ b/.github/workflows/integration-mobile-test-tts-ggml.yml @@ -103,31 +103,12 @@ jobs: include: - platform: Android os: ubuntu-24.04 - runner: ai-run-linux + runner: qvac-ubuntu2404-x64 - platform: iOS os: macos-14 runner: macos-14 steps: - - name: Free up disk space - if: matrix.platform == 'Android' - run: | - echo "Disk space before cleanup:" - df -h - sudo rm -rf /usr/share/dotnet || true - sudo rm -rf /opt/ghc || true - sudo rm -rf /opt/hostedtoolcache/CodeQL || true - sudo rm -rf /opt/hostedtoolcache/go || true - sudo rm -rf /opt/hostedtoolcache/Python || true - sudo rm -rf /opt/hostedtoolcache/Ruby || true - sudo rm -rf /usr/local/lib/android/sdk/ndk || true - sudo rm -rf /usr/local/share/boost || true - sudo rm -rf /usr/share/swift || true - sudo docker image prune --all --force || true - sudo apt-get clean || true - echo "Disk space after cleanup:" - df -h - - name: Checkout addon repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -147,11 +128,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest @@ -360,6 +343,7 @@ jobs: continue-on-error: true - name: Setup Python (HF -> .gguf conversion) + if: matrix.platform == 'iOS' uses: actions/setup-python@v5 with: python-version: '3.12' diff --git a/.github/workflows/integration-mobile-test-tts-onnx.yml b/.github/workflows/integration-mobile-test-tts-onnx.yml index 240aa5d307..aa3aea574e 100644 --- a/.github/workflows/integration-mobile-test-tts-onnx.yml +++ b/.github/workflows/integration-mobile-test-tts-onnx.yml @@ -63,35 +63,13 @@ jobs: platform: [Android, iOS] include: - platform: Android - os: ubuntu-24.04 - runner: ai-run-linux + os: ubuntu-22.04 + runner: qvac-ubuntu2204-x64 - platform: iOS os: macos-14 runner: macos-14 steps: - # Free up disk space on Ubuntu runner to prevent "No space left on device" errors - - name: Free up disk space - if: matrix.platform == 'Android' - run: | - echo "Disk space before cleanup:" - df -h - # Remove unnecessary software to free up disk space (|| true to handle self-hosted runners) - sudo rm -rf /usr/share/dotnet || true - sudo rm -rf /opt/ghc || true - sudo rm -rf /opt/hostedtoolcache/CodeQL || true - sudo rm -rf /opt/hostedtoolcache/go || true - sudo rm -rf /opt/hostedtoolcache/Python || true - sudo rm -rf /opt/hostedtoolcache/Ruby || true - sudo rm -rf /usr/local/lib/android/sdk/ndk || true - sudo rm -rf /usr/local/share/boost || true - sudo rm -rf /usr/share/swift || true - sudo docker image prune --all --force || true - # Clean APT cache - sudo apt-get clean || true - echo "Disk space after cleanup:" - df -h - - name: Checkout addon repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -111,11 +89,13 @@ jobs: fetch-depth: 0 - name: Setup Node.js + if: matrix.platform == 'iOS' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: ${{ env.NODE_VERSION }} - name: Install global dependencies + if: matrix.platform == 'iOS' run: | echo "Installing global dependencies..." npm install -g @expo/cli@latest diff --git a/.github/workflows/integration-test-bci-whispercpp.yml b/.github/workflows/integration-test-bci-whispercpp.yml index a53aad54c1..592dd7248b 100644 --- a/.github/workflows/integration-test-bci-whispercpp.yml +++ b/.github/workflows/integration-test-bci-whispercpp.yml @@ -33,7 +33,7 @@ jobs: run-integration-tests: timeout-minutes: 60 continue-on-error: true - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: ${{ matrix.platform }}-${{ matrix.arch }}-integration-tests @@ -51,6 +51,7 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 - os: ubuntu-24.04-arm platform: linux arch: arm64 @@ -60,21 +61,18 @@ jobs: - os: macos-15-large platform: darwin arch: x64 - - os: windows-2022 + - os: windows-2025 platform: win32 arch: x64 + runner: qvac-win25-x64 steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths - if: ${{ matrix.platform == 'win32' }} - shell: powershell - run: git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -86,7 +84,15 @@ jobs: working-directory: ${{ inputs.workdir }} run: | npm install - npm install -g bare@1.26.0 bare-make + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | + npm install -g bare bare-make + + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH - name: Download prebuilds from artifact if: ${{ !inputs.prebuild_package }} @@ -108,10 +114,12 @@ jobs: working-directory: ${{ inputs.workdir }} shell: bash run: | - mkdir -p prebuilds - npm pack ${{ inputs.prebuild_package }} --pack-destination /tmp - tar -xzf /tmp/*.tgz -C /tmp - cp -r /tmp/package/prebuilds/* prebuilds/ + mkdir -p prebuilds "${{ runner.temp }}/tmp" + rm -f "${{ runner.temp }}/tmp"/*.tgz + rm -rf "${{ runner.temp }}/tmp/package" + npm pack ${{ inputs.prebuild_package }} --pack-destination "${{ runner.temp }}/tmp" + tar -xzf "${{ runner.temp }}/tmp"/*.tgz -C "${{ runner.temp }}/tmp" + cp -r "${{ runner.temp }}/tmp"/package/prebuilds/* prebuilds/ find prebuilds -type f -name 'tetherto__*' | while read f; do mv "$f" "${f/tetherto__/qvac__}" done @@ -122,34 +130,26 @@ jobs: shell: powershell run: | New-Item -ItemType Directory -Force -Path prebuilds | Out-Null - npm pack ${{ inputs.prebuild_package }} --pack-destination $env:TEMP - $tgz = Get-ChildItem "$env:TEMP\*.tgz" | Select-Object -First 1 - tar -xzf $tgz.FullName -C $env:TEMP - Copy-Item -Path "$env:TEMP\package\prebuilds\*" -Destination prebuilds -Recurse -Force + New-Item -ItemType Directory -Force -Path "${{ runner.temp }}\tmp" | Out-Null + npm pack ${{ inputs.prebuild_package }} --pack-destination "${{ runner.temp }}\tmp" + $tgz = Get-ChildItem "${{ runner.temp }}\tmp\*.tgz" | Select-Object -First 1 + tar -xzf $tgz.FullName -C "${{ runner.temp }}\tmp" + Copy-Item -Path "${{ runner.temp }}\tmp\package\prebuilds\*" -Destination prebuilds -Recurse -Force Get-ChildItem -Path prebuilds -Recurse -File -Filter 'tetherto__*' | ForEach-Object { $newName = $_.Name -replace 'tetherto__', 'qvac__' Rename-Item -Path $_.FullName -NewName $newName } - - name: Linux - install dependencies - if: matrix.platform == 'linux' || matrix.platform == 'android' - shell: bash - run: | - sudo apt-get update && sudo apt-get install -y mesa-vulkan-drivers - sudo apt-get install -y libopenblas-dev liblapack-dev libfftw3-dev - - name: macOS - install whisper dependencies if: matrix.platform == 'darwin' shell: bash run: | brew install --quiet openblas lapack fftw - - name: Windows - install Vulkan runtime - if: matrix.platform == 'win32' - uses: tetherto/qvac/.github/actions/setup-vulkan-sdk@0bbdca93da303a0b1634ba14a89cec085621078d - with: - platform: ${{ matrix.platform }} - arch: ${{ matrix.arch }} + - if: ${{ matrix.os == 'windows-2025' }} + name: Set Vulkan SDK Path on Windows Server 2025 + working-directory: ${{ env.WORKDIR }} + run: echo "VULKAN_SDK=C:\VulkanSDK" >> $Env:GITHUB_ENV - name: Run integration test (Unix) if: ${{ matrix.platform != 'win32' }} diff --git a/.github/workflows/integration-test-decoder-audio.yml b/.github/workflows/integration-test-decoder-audio.yml index acc7214357..35ced6444c 100644 --- a/.github/workflows/integration-test-decoder-audio.yml +++ b/.github/workflows/integration-test-decoder-audio.yml @@ -16,7 +16,7 @@ on: jobs: run-integration-tests: - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: test-${{ matrix.platform }}-${{ matrix.arch }} permissions: @@ -29,9 +29,11 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64-gpu - os: ubuntu-24.04 platform: linux arch: x64 + runner: qvac-ubuntu2404-x64-gpu - os: ubuntu-24.04-arm platform: linux arch: arm64 @@ -41,21 +43,18 @@ jobs: - os: macos-14 platform: darwin arch: arm64 - - os: windows-2022 + - os: windows-2025 platform: win32 arch: x64 + runner: qvac-win25-x64-gpu steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths - if: ${{ matrix.platform == 'win32' }} - shell: bash - run: git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -67,8 +66,16 @@ jobs: working-directory: ${{ inputs.workdir }} run: | npm install + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - name: Run integration test working-directory: ${{ inputs.workdir }} timeout-minutes: 10 diff --git a/.github/workflows/integration-test-diffusion-cpp.yml b/.github/workflows/integration-test-diffusion-cpp.yml index 8d28fecdac..9758fd049e 100644 --- a/.github/workflows/integration-test-diffusion-cpp.yml +++ b/.github/workflows/integration-test-diffusion-cpp.yml @@ -43,12 +43,11 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 - runner: ubuntu-22.04 - no_gpu: 'true' + runner: qvac-ubuntu2204-x64-gpu - os: ubuntu-24.04 platform: linux arch: x64 - runner: ai-run-linux-gpu + runner: qvac-ubuntu2404-x64-gpu - os: ubuntu-24.04-arm platform: linux arch: arm64 @@ -68,22 +67,22 @@ jobs: arch: x64 runner: macos-15-large no_gpu: 'true' - - os: windows-11 + - os: windows-2025 platform: win32 arch: x64 - runner: ai-run-windows11-gpu + runner: qvac-win25-x64-gpu timeout: 1800 steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths + - name: Windows - configure git credentials if: ${{ matrix.platform == 'win32' }} run: | - git config --system core.longpaths true git config --global url."https://${{ secrets.PAT_TOKEN }}:@github.com/".insteadOf "https://github.com/" git config --global url."https://${{ secrets.PAT_TOKEN }}:@github.com/".insteadOf "git@github.com:" shell: powershell @@ -164,8 +163,16 @@ jobs: working-directory: ${{ env.WORKDIR }} run: | npm install + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | npm install -g bare bare-make bare-runtime bare-https brittle + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - run: mkdir -p ${{ runner.temp }}/qvac-diffusion-cpp - run: mkdir -p ${{ env.WORKDIR }}/prebuilds @@ -177,11 +184,10 @@ jobs: merge-multiple: true - if: ${{ !inputs.prebuild_package }} - run: cp -r ${{ runner.temp }}/qvac-diffusion-cpp/* ${{ env.WORKDIR }}/prebuilds + run: cp -r ${{ runner.temp }}/qvac-diffusion-cpp/* ${{ env.WORKDIR }}/prebuilds/ - name: Download prebuilds from package (Linux/macOS) if: ${{ inputs.prebuild_package && matrix.platform != 'win32' }} - working-directory: ${{ runner.temp }}/qvac-diffusion-cpp shell: bash run: | PACKAGE="${{ inputs.prebuild_package }}" @@ -201,14 +207,13 @@ jobs: exit 1 fi - cp -r ./package/prebuilds/* ${{ env.WORKDIR }}/prebuilds + cp -r ./package/prebuilds/* ${{ env.WORKDIR }}/prebuilds/ echo "Prebuilds downloaded from npm successfully" ls -la ${{ env.WORKDIR }}/prebuilds/ - name: Download prebuilds from package (Windows) if: ${{ inputs.prebuild_package && matrix.platform == 'win32' }} - working-directory: ${{ runner.temp }}/qvac-diffusion-cpp shell: powershell run: | $PACKAGE = "${{ inputs.prebuild_package }}" @@ -243,7 +248,7 @@ jobs: Get-ChildItem ${{ env.WORKDIR }}/prebuilds - name: Linux - install dependencies - if: matrix.platform == 'linux' || matrix.platform == 'android' + if: (matrix.platform == 'linux' || matrix.platform == 'android') && matrix.arch == 'arm64' shell: bash run: sudo apt-get update && sudo apt-get install -y mesa-vulkan-drivers diff --git a/.github/workflows/integration-test-embed-llamacpp.yml b/.github/workflows/integration-test-embed-llamacpp.yml index 98877b1e40..bc27d4c50f 100644 --- a/.github/workflows/integration-test-embed-llamacpp.yml +++ b/.github/workflows/integration-test-embed-llamacpp.yml @@ -40,10 +40,11 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64-gpu - os: ubuntu-24.04 platform: linux arch: x64 - runner: ai-run-linux-gpu + runner: qvac-ubuntu2404-x64-gpu - os: ubuntu-22.04-arm platform: linux arch: arm64 @@ -58,22 +59,18 @@ jobs: - os: macos-15-large platform: darwin arch: x64 - - os: windows-11 + - os: windows-2025 platform: win32 arch: x64 - runner: ai-run-windows11-gpu + runner: qvac-win25-x64-gpu steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths - if: ${{ matrix.platform == 'win32' }} - shell: powershell - run: git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -85,8 +82,16 @@ jobs: working-directory: ${{ env.WORKDIR }} run: | npm install + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - name: Download prebuilds (from artifacts) if: ${{ !inputs.prebuild_package }} uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # 8.0.1 @@ -184,8 +189,8 @@ jobs: npm config list continue-on-error: true - - name: Install gh cli for ai-run-linux-gpu - if: ${{ matrix.platform == 'linux' }} + - name: Install gh cli for arm64 based ubuntu images + if: matrix.os == 'ubuntu-22.04-arm' || matrix.os == 'ubuntu-24.04-arm' shell: bash run: | (type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) \ @@ -212,7 +217,7 @@ jobs: continue-on-error: true - name: Linux - install dependencies - if: matrix.platform == 'linux' || matrix.platform == 'android' + if: matrix.os == 'ubuntu-22.04-arm' || matrix.os == 'ubuntu-24.04-arm' shell: bash run: sudo apt-get update && sudo apt-get install -y mesa-vulkan-drivers diff --git a/.github/workflows/integration-test-llm-llamacpp.yml b/.github/workflows/integration-test-llm-llamacpp.yml index 4a803dab49..b517dbca80 100644 --- a/.github/workflows/integration-test-llm-llamacpp.yml +++ b/.github/workflows/integration-test-llm-llamacpp.yml @@ -82,13 +82,13 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 - runner: ubuntu-22.04 + runner: qvac-ubuntu2204-x64 no_gpu: 'true' label: linux-x64-cpu - os: ubuntu-24.04 platform: linux arch: x64 - runner: ai-run-linux-gpu + runner: qvac-ubuntu2404-x64-gpu timeout_minutes: 480 label: linux-x64-gpu - os: ubuntu-24.04-arm @@ -113,22 +113,23 @@ jobs: arch: x64 runner: macos-15-large label: darwin-x64 - - os: windows-11 + - os: windows-2025 platform: win32 arch: x64 - runner: ai-run-windows11-gpu + runner: qvac-win25-x64-gpu label: win32-x64 steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths + - name: Windows - configure git if: ${{ matrix.platform == 'win32' }} run: | - git config --system core.longpaths true + # git config --system core.longpaths true git config --global url."https://${{ secrets.PAT_TOKEN }}:@github.com/".insteadOf "https://github.com/" git config --global url."https://${{ secrets.PAT_TOKEN }}:@github.com/".insteadOf "git@github.com:" shell: powershell @@ -150,8 +151,16 @@ jobs: working-directory: ${{ env.WORKDIR }} run: | npm install + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | npm install -g bare bare-make bare-runtime bare-https brittle + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - name: Download prebuilds (from artifacts) if: ${{ !inputs.prebuild_package }} uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # 8.0.1 @@ -227,7 +236,7 @@ jobs: Get-ChildItem prebuilds/ - name: Linux - install dependencies - if: matrix.platform == 'linux' || matrix.platform == 'android' + if: matrix.os == 'ubuntu-22.04-arm' || matrix.os == 'ubuntu-24.04-arm' shell: bash run: sudo apt-get update && sudo apt-get install -y mesa-vulkan-drivers diff --git a/.github/workflows/integration-test-ocr-onnx.yml b/.github/workflows/integration-test-ocr-onnx.yml index 9c33c119b2..d6d2f223a7 100644 --- a/.github/workflows/integration-test-ocr-onnx.yml +++ b/.github/workflows/integration-test-ocr-onnx.yml @@ -32,7 +32,8 @@ env: jobs: run-integration-tests: continue-on-error: true - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} + timeout-minutes: 30 environment: release name: test-${{ matrix.platform }}-${{ matrix.arch }} @@ -48,9 +49,11 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 - os: ubuntu-24.04 platform: linux arch: x64 + runner: qvac-ubuntu2404-x64 - os: ubuntu-24.04-arm platform: linux arch: arm64 @@ -60,21 +63,18 @@ jobs: - os: macos-15-xlarge platform: darwin arch: arm64 - - os: windows-2022 + - os: windows-2025 platform: win32 arch: x64 + runner: qvac-win25-x64 steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths - if: ${{ matrix.platform == 'win32' }} - shell: bash - run: git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -87,8 +87,16 @@ jobs: shell: bash run: | npm install + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - name: Download prebuilds from artifact if: ${{ !inputs.prebuild_package }} uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # 8.0.1 @@ -101,17 +109,19 @@ jobs: working-directory: ${{ inputs.workdir || env.PKG_DIR }} shell: bash run: | - mkdir -p prebuilds - npm pack ${{ inputs.prebuild_package }} --pack-destination /tmp - tar -xzf /tmp/*.tgz -C /tmp - cp -r /tmp/package/prebuilds/* prebuilds/ + mkdir -p prebuilds "${{ runner.temp }}/tmp" + rm -f "${{ runner.temp }}/tmp"/*.tgz + rm -rf "${{ runner.temp }}/tmp/package" + npm pack ${{ inputs.prebuild_package }} --pack-destination "${{ runner.temp }}/tmp" + tar -xzf "${{ runner.temp }}/tmp"/*.tgz -C "${{ runner.temp }}/tmp" + cp -r "${{ runner.temp }}/tmp"/package/prebuilds/* prebuilds/ - name: Linux - install dependencies - if: matrix.platform == 'linux' || matrix.platform == 'android' + if: (matrix.platform == 'linux' || matrix.platform == 'android') && matrix.arch == 'arm64' shell: bash run: sudo apt-get update && sudo apt-get install -y mesa-vulkan-drivers - - if: ${{ matrix.os == 'ubuntu-24.04' }} + - if: ${{ matrix.os == 'ubuntu-24.04-arm' }} name: Update c++ tools to install GLIBC++ run: | sudo apt update diff --git a/.github/workflows/integration-test-transcription-parakeet.yml b/.github/workflows/integration-test-transcription-parakeet.yml index ad52a4dd83..e0ed358849 100644 --- a/.github/workflows/integration-test-transcription-parakeet.yml +++ b/.github/workflows/integration-test-transcription-parakeet.yml @@ -35,7 +35,7 @@ jobs: run-integration-tests: timeout-minutes: 60 continue-on-error: true - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: ${{ matrix.os }}-${{ matrix.platform }}-${{ matrix.arch }}-integration-tests env: @@ -48,13 +48,15 @@ jobs: fail-fast: false matrix: include: - - os: ai-run-ubuntu-22.04 + - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 no_gpu: 'true' - - os: ai-run-linux-gpu + - os: ubuntu-24.04 platform: linux arch: x64 + runner: qvac-ubuntu2404-x64-gpu - os: ubuntu-24.04-arm platform: linux arch: arm64 @@ -67,22 +69,19 @@ jobs: platform: darwin arch: x64 no_gpu: 'true' - - os: windows-2022 + - os: windows-2025 platform: win32 arch: x64 + runner: qvac-win25-x64 no_gpu: 'true' steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths - if: ${{ matrix.platform == 'win32' }} - shell: bash - run: git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -94,8 +93,16 @@ jobs: working-directory: ${{ github.workspace }}/packages/transcription-parakeet run: | npm install + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - run: mkdir -p "${{ runner.temp }}/transcription-parakeet" shell: bash - run: mkdir -p "${{ github.workspace }}/packages/transcription-parakeet/prebuilds" @@ -133,21 +140,12 @@ jobs: mv "$file" "$dir/$newbase" done - - name: Linux - install dependencies - if: matrix.platform == 'linux' || matrix.platform == 'android' - shell: bash - run: | - sudo apt-get update - sudo apt-get install -y libgomp1 mesa-vulkan-drivers - - - name: Windows - install Vulkan runtime - if: matrix.platform == 'win32' - uses: tetherto/qvac/.github/actions/setup-vulkan-sdk@0bbdca93da303a0b1634ba14a89cec085621078d - with: - platform: ${{ matrix.platform }} - arch: ${{ matrix.arch }} + - if: ${{ matrix.os == 'windows-2025' }} + name: Set Vulkan SDK Path on Windows Server 2025 + run: echo "VULKAN_SDK=C:\VulkanSDK" >> $Env:GITHUB_ENV - name: Setup Python (for .nemo -> .gguf conversion) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' uses: actions/setup-python@v5 with: python-version: '3.12' diff --git a/.github/workflows/integration-test-transcription-whispercpp.yml b/.github/workflows/integration-test-transcription-whispercpp.yml index c0011dc402..5fa2c06220 100644 --- a/.github/workflows/integration-test-transcription-whispercpp.yml +++ b/.github/workflows/integration-test-transcription-whispercpp.yml @@ -57,7 +57,7 @@ jobs: run-integration-tests: timeout-minutes: 60 continue-on-error: true - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: ${{ matrix.platform }}-${{ matrix.arch }}-integration-tests @@ -75,11 +75,13 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 benchmark_matrix_json: >- [{"modelFile":"ggml-tiny.bin","useGPU":false,"backendHint":"cpu"}] - - os: ai-run-linux-gpu + - os: ubuntu-24.04 platform: linux arch: x64 + runner: qvac-ubuntu2404-x64-gpu benchmark_matrix_json: >- [{"modelFile":"ggml-tiny.bin","useGPU":false,"backendHint":"cpu"},{"modelFile":"ggml-tiny.bin","useGPU":true,"backendHint":"cuda"}] - os: ubuntu-24.04-arm @@ -97,23 +99,20 @@ jobs: arch: x64 benchmark_matrix_json: >- [{"modelFile":"ggml-tiny.bin","useGPU":false,"backendHint":"cpu"},{"modelFile":"ggml-tiny.bin","useGPU":true,"backendHint":"coreml"}] - - os: windows-2022 + - os: windows-2025 platform: win32 arch: x64 + runner: qvac-win25-x64-gpu benchmark_matrix_json: >- [{"modelFile":"ggml-tiny.bin","useGPU":false,"backendHint":"cpu"},{"modelFile":"ggml-tiny.bin","useGPU":true,"backendHint":"directml"}] steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths - if: ${{ matrix.platform == 'win32' }} - shell: powershell - run: git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -125,7 +124,15 @@ jobs: working-directory: ${{ inputs.workdir }} run: | npm install - npm install -g bare@1.26.0 bare-make + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | + npm install -g bare bare-make + + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH - name: Download prebuilds from artifact if: ${{ !inputs.prebuild_package }} @@ -139,10 +146,12 @@ jobs: working-directory: ${{ inputs.workdir }} shell: bash run: | - mkdir -p prebuilds - npm pack ${{ inputs.prebuild_package }} --pack-destination /tmp - tar -xzf /tmp/*.tgz -C /tmp - cp -r /tmp/package/prebuilds/* prebuilds/ + mkdir -p prebuilds "${{ runner.temp }}/tmp" + rm -f "${{ runner.temp }}/tmp"/*.tgz + rm -rf "${{ runner.temp }}/tmp/package" + npm pack ${{ inputs.prebuild_package }} --pack-destination "${{ runner.temp }}/tmp" + tar -xzf "${{ runner.temp }}/tmp"/*.tgz -C "${{ runner.temp }}/tmp" + cp -r "${{ runner.temp }}/tmp"/package/prebuilds/* prebuilds/ find prebuilds -type f -name 'tetherto__*' | while read f; do mv "$f" "${f/tetherto__/qvac__}" done @@ -153,17 +162,18 @@ jobs: shell: powershell run: | New-Item -ItemType Directory -Force -Path prebuilds | Out-Null - npm pack ${{ inputs.prebuild_package }} --pack-destination $env:TEMP - $tgz = Get-ChildItem "$env:TEMP\*.tgz" | Select-Object -First 1 - tar -xzf $tgz.FullName -C $env:TEMP - Copy-Item -Path "$env:TEMP\package\prebuilds\*" -Destination prebuilds -Recurse -Force + New-Item -ItemType Directory -Force -Path "${{ runner.temp }}\tmp" | Out-Null + npm pack ${{ inputs.prebuild_package }} --pack-destination "${{ runner.temp }}\tmp" + $tgz = Get-ChildItem "${{ runner.temp }}\tmp\*.tgz" | Select-Object -First 1 + tar -xzf $tgz.FullName -C "${{ runner.temp }}\tmp" + Copy-Item -Path "${{ runner.temp }}\tmp\package\prebuilds\*" -Destination prebuilds -Recurse -Force Get-ChildItem -Path prebuilds -Recurse -File -Filter 'tetherto__*' | ForEach-Object { $newName = $_.Name -replace 'tetherto__', 'qvac__' Rename-Item -Path $_.FullName -NewName $newName } - - name: Install gh cli for ai-run-linux-gpu - if: matrix.os == 'ai-run-linux-gpu' + - name: Install gh cli for ubuntu-24.04-arm + if: matrix.os == 'ubuntu-24.04-arm' shell: bash run: | (type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) \ @@ -177,8 +187,8 @@ jobs: gh --version continue-on-error: true - - name: Linux - install dependencies - if: matrix.platform == 'linux' || matrix.platform == 'android' + - name: Linux arm64 - install dependencies + if: (matrix.platform == 'linux' || matrix.platform == 'android') && matrix.arch == 'arm64' shell: bash run: | sudo apt-get update && sudo apt-get install -y mesa-vulkan-drivers @@ -191,12 +201,9 @@ jobs: run: | brew install --quiet openblas lapack fftw - - name: Windows - install Vulkan runtime - if: matrix.platform == 'win32' - uses: tetherto/qvac/.github/actions/setup-vulkan-sdk@0bbdca93da303a0b1634ba14a89cec085621078d - with: - platform: ${{ matrix.platform }} - arch: ${{ matrix.arch }} + - if: ${{ matrix.os == 'windows-2025' }} + name: Set Vulkan SDK Path on Windows Server 2025 + run: echo "VULKAN_SDK=C:\VulkanSDK" >> $Env:GITHUB_ENV - name: Run integration test (Unix) if: ${{ matrix.platform != 'win32' && inputs.run_integration_tests != false }} @@ -215,7 +222,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }} - name: Run Vulkan GPU smoke test - if: matrix.os == 'ai-run-linux-gpu' + if: matrix.runner == 'qvac-ubuntu2404-x64-gpu' working-directory: ${{ inputs.workdir }} shell: bash run: npm run test:stand-alone:gpu diff --git a/.github/workflows/integration-test-translation-nmtcpp.yml b/.github/workflows/integration-test-translation-nmtcpp.yml index 8c49ae7c3b..b51106d231 100644 --- a/.github/workflows/integration-test-translation-nmtcpp.yml +++ b/.github/workflows/integration-test-translation-nmtcpp.yml @@ -29,7 +29,7 @@ env: jobs: run-integration-tests: timeout-minutes: 60 - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: ${{ matrix.platform }}-${{ matrix.arch }}-integration-tests permissions: @@ -44,9 +44,11 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64-gpu - os: ubuntu-24.04 platform: linux arch: x64 + runner: qvac-ubuntu2404-x64-gpu - os: ubuntu-24.04-arm platform: linux arch: arm64 @@ -56,21 +58,18 @@ jobs: - os: macos-14 platform: darwin arch: arm64 - - os: ai-run-windows11-gpu + - os: windows-2025 platform: win32 arch: x64 + runner: qvac-win25-x64-gpu steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths - if: ${{ matrix.platform == 'win32' }} - shell: bash - run: git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -82,8 +81,16 @@ jobs: working-directory: packages/translation-nmtcpp run: | npm install + + - name: Install Bare tooling on arm64 arch (ubuntu and mac) + if: ${{ matrix.arch == 'arm64' || matrix.platform == 'darwin' }} + run: | npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - name: Download prebuilds from artifact if: ${{ !inputs.prebuild_package }} uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # 8.0.1 @@ -96,10 +103,12 @@ jobs: working-directory: packages/translation-nmtcpp shell: bash run: | - mkdir -p prebuilds - npm pack ${{ inputs.prebuild_package }} --pack-destination /tmp - tar -xzf /tmp/*.tgz -C /tmp - cp -r /tmp/package/prebuilds/* prebuilds/ + mkdir -p prebuilds "${{ runner.temp }}/tmp" + rm -f "${{ runner.temp }}/tmp"/*.tgz + rm -rf "${{ runner.temp }}/tmp/package" + npm pack ${{ inputs.prebuild_package }} --pack-destination "${{ runner.temp }}/tmp" + tar -xzf "${{ runner.temp }}/tmp"/*.tgz -C "${{ runner.temp }}/tmp" + cp -r "${{ runner.temp }}/tmp"/package/prebuilds/* prebuilds/ - name: Print run state working-directory: packages/translation-nmtcpp @@ -125,29 +134,13 @@ jobs: tree prebuilds || true continue-on-error: true - - name: Linux - install dependencies - if: matrix.platform == 'linux' || matrix.platform == 'android' + - name: Linux arm64 - install dependencies + if: (matrix.platform == 'linux' || matrix.platform == 'android') && matrix.arch == 'arm64' shell: bash run: | sudo apt-get update sudo apt-get install -y mesa-vulkan-drivers - - if: ${{ matrix.platform == 'win32' }} - name: Install AWS CLI on self-hosted Windows runner - shell: powershell - run: | - if (Get-Command aws -ErrorAction SilentlyContinue) { - Write-Host "AWS CLI already installed" - aws --version - } else { - Write-Host "Installing AWS CLI v2..." - Invoke-WebRequest -Uri https://awscli.amazonaws.com/AWSCLIV2.msi -OutFile $env:TEMP\AWSCLIV2.msi - Start-Process msiexec.exe -Wait -ArgumentList '/I', "$env:TEMP\AWSCLIV2.msi", '/qn' - $env:PATH = "C:\Program Files\Amazon\AWSCLIV2;$env:PATH" - echo "C:\Program Files\Amazon\AWSCLIV2" >> $env:GITHUB_PATH - aws --version - } - - name: Configure AWS credentials via OIDC uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # 6.0.0 with: diff --git a/.github/workflows/integration-test-tts-ggml.yml b/.github/workflows/integration-test-tts-ggml.yml index a662dc970a..3a848a6991 100644 --- a/.github/workflows/integration-test-tts-ggml.yml +++ b/.github/workflows/integration-test-tts-ggml.yml @@ -49,11 +49,11 @@ jobs: # change merge-guard to require `success`) once the addon's flake # surface is small enough to make a hard gate cheap. run-integration-tests: - timeout-minutes: 60 + timeout-minutes: 120 continue-on-error: true - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release - name: ${{ matrix.os }}-${{ matrix.platform }}-${{ matrix.arch }}-integration-tests + name: ${{ matrix.os }}-${{ matrix.platform }}-${{ matrix.arch }}${{ matrix.no_gpu == 'true' && '' || '-gpu' }}-integration-tests env: GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }} NO_GPU: ${{ matrix.no_gpu || 'false' }} @@ -64,13 +64,15 @@ jobs: fail-fast: false matrix: include: - - os: ai-run-ubuntu-22.04 + - os: ubuntu-22.04 platform: linux arch: x64 no_gpu: 'true' - - os: ai-run-linux-gpu + runner: qvac-ubuntu2204-x64 + - os: ubuntu-24.04 platform: linux arch: x64 + runner: qvac-ubuntu2404-x64-gpu - os: ubuntu-24.04-arm platform: linux arch: arm64 @@ -83,22 +85,23 @@ jobs: platform: darwin arch: x64 no_gpu: 'true' - - os: windows-2022 + - os: windows-2025 platform: win32 arch: x64 + runner: qvac-win25-x64 no_gpu: 'true' + - os: windows-2025 + platform: win32 + arch: x64 + runner: qvac-win25-x64-gpu steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths - if: ${{ matrix.platform == 'win32' }} - shell: bash - run: git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -110,8 +113,17 @@ jobs: working-directory: ${{ github.workspace }}/packages/tts-ggml run: | npm install + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + + - run: mkdir -p "${{ runner.temp }}/tts-ggml" shell: bash - run: mkdir -p "${{ github.workspace }}/packages/tts-ggml/prebuilds" @@ -150,7 +162,7 @@ jobs: done - name: Linux - install dependencies - if: matrix.platform == 'linux' || matrix.platform == 'android' + if: matrix.arch == 'arm64' && (matrix.platform == 'linux' || matrix.platform == 'android') shell: bash run: | sudo apt-get update @@ -171,12 +183,9 @@ jobs: # useGPU=false when NO_GPU=true). sudo apt-get install -y libgomp1 libomp5 libblas3 mesa-vulkan-drivers - - name: Windows - install Vulkan runtime - if: matrix.platform == 'win32' - uses: tetherto/qvac/.github/actions/setup-vulkan-sdk@0bbdca93da303a0b1634ba14a89cec085621078d - with: - platform: ${{ matrix.platform }} - arch: ${{ matrix.arch }} + - if: ${{ matrix.os == 'windows-2025' }} + name: Set Vulkan SDK Path on Windows Server 2025 + run: echo "VULKAN_SDK=C:\VulkanSDK" >> $Env:GITHUB_ENV # Pin to 3.11 (not 3.12) because numba 0.65+ stopped shipping # darwin-x86_64 wheels for Python 3.12. librosa pulls in numba @@ -186,6 +195,7 @@ jobs: # wheels for the entire numba/llvmlite/librosa stack and is fine # for every other converter dependency we use. - name: Setup Python (HF -> .gguf conversion) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' uses: actions/setup-python@v5 with: python-version: '3.11' diff --git a/.github/workflows/integration-test-tts-onnx.yml b/.github/workflows/integration-test-tts-onnx.yml index 153ce578ed..cab6e1689a 100644 --- a/.github/workflows/integration-test-tts-onnx.yml +++ b/.github/workflows/integration-test-tts-onnx.yml @@ -131,7 +131,7 @@ jobs: run-integration-tests: if: ${{ inputs.run_integration_tests != false }} continue-on-error: true - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: test-${{ matrix.platform }}-${{ matrix.arch }}${{ matrix.os_version && format('-{0}', matrix.os_version) || '' }}-${{ matrix.variant }} permissions: @@ -143,27 +143,23 @@ jobs: matrix: # Only darwin-arm64 (macos-14-xlarge) runs all Chatterbox quantization variants; others use q4 only. include: - - {os: ubuntu-22.04, variant: q4, platform: linux, arch: x64, os_version: u22} - - {os: ubuntu-24.04, variant: q4, platform: linux, arch: x64, os_version: u24} + - {os: ubuntu-22.04, runner: qvac-ubuntu2204-x64-gpu, variant: q4, platform: linux, arch: x64, os_version: u22} + - {os: ubuntu-24.04, runner: qvac-ubuntu2404-x64-gpu, variant: q4, platform: linux, arch: x64, os_version: u24} - {os: ubuntu-24.04-arm, variant: q4, platform: linux, arch: arm64, os_version: u24} - {os: macos-14-xlarge, variant: fp32, platform: darwin, arch: arm64, os_version: m14} - {os: macos-14-xlarge, variant: fp16, platform: darwin, arch: arm64, os_version: m14} - {os: macos-14-xlarge, variant: q4, platform: darwin, arch: arm64, os_version: m14} - {os: macos-14-xlarge, variant: q4f16, platform: darwin, arch: arm64, os_version: m14} - {os: macos-15-large, variant: q4, platform: darwin, arch: x64, os_version: m15} - - {os: windows-2022, variant: q4, platform: win32, arch: x64, os_version: w22,} + - {os: windows-2025, runner: qvac-win25-x64-gpu, variant: q4, platform: win32, arch: x64, os_version: w25,} steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - - name: Windows - enable git long paths - if: ${{ matrix.platform == 'win32' }} - shell: bash - run: git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -181,8 +177,16 @@ jobs: working-directory: ${{ inputs.workdir }} run: | npm install + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - name: Download prebuilds from artifact if: ${{ !inputs.prebuild_package }} uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # 8.0.1 @@ -195,13 +199,15 @@ jobs: working-directory: ${{ inputs.workdir }} shell: bash run: | - mkdir -p prebuilds - npm pack ${{ inputs.prebuild_package }} --pack-destination /tmp - tar -xzf /tmp/*.tgz -C /tmp - cp -r /tmp/package/prebuilds/* prebuilds/ + mkdir -p prebuilds "${{ runner.temp }}/tmp" + rm -f "${{ runner.temp }}/tmp"/*.tgz + rm -rf "${{ runner.temp }}/tmp/package" + npm pack ${{ inputs.prebuild_package }} --pack-destination "${{ runner.temp }}/tmp" + tar -xzf "${{ runner.temp }}/tmp"/*.tgz -C "${{ runner.temp }}/tmp" + cp -r "${{ runner.temp }}/tmp"/package/prebuilds/* prebuilds/ - name: Linux - install dependencies - if: matrix.platform == 'linux' || matrix.platform == 'android' + if: (matrix.platform == 'linux' || matrix.platform == 'android') && matrix.arch == 'arm64' shell: bash run: sudo apt-get update && sudo apt-get install -y mesa-vulkan-drivers @@ -240,26 +246,35 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 - runner_label: ubuntu-22.04 + runner_label: qvac-ubuntu2204-x64 device_label: ubuntu-22.04-x64 backend: cpu use_gpu: false run_python: false round_trip_test: true - - os: ai-run-linux-gpu + - os: ubuntu-24.04 platform: linux arch: x64 - runner_label: ai-run-linux-gpu - device_label: ai-run-linux-gpu + runner_label: qvac-ubuntu2404-x64 + device_label: ubuntu-24.04-x64 backend: cpu use_gpu: false run_python: false round_trip_test: true - - os: ai-run-linux-gpu + - os: ubuntu-22.04 + platform: linux + arch: x64 + runner_label: qvac-ubuntu2204-x64-gpu + device_label: ubuntu-22.04-x64-gpu + backend: cuda + use_gpu: true + run_python: false + round_trip_test: true + - os: ubuntu-24.04 platform: linux arch: x64 - runner_label: ai-run-linux-gpu - device_label: ai-run-linux-gpu + runner_label: qvac-ubuntu2404-x64-gpu + device_label: ubuntu-24.04-x64-gpu backend: cuda use_gpu: true run_python: false @@ -291,20 +306,20 @@ jobs: use_gpu: true run_python: false round_trip_test: true - - os: windows-2022 + - os: windows-2025 platform: win32 arch: x64 - runner_label: windows-2022 - device_label: windows-2022-x64 + runner_label: qvac-win25-x64 + device_label: windows-2025-x64 backend: cpu use_gpu: false run_python: false round_trip_test: false - - os: windows-2022 + - os: windows-2025 platform: win32 arch: x64 - runner_label: windows-2022 - device_label: windows-2022-x64 + runner_label: qvac-win25-x64-gpu + device_label: windows-2025-x64-gpu backend: directml use_gpu: true run_python: false @@ -312,20 +327,17 @@ jobs: steps: - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # 6.3.0 with: node-version: lts/* - name: Set up Python + if: (matrix.platform == 'linux' || matrix.platform == 'darwin') && matrix.arch == 'arm64' uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 6.2.0 with: python-version: '3.14' - - name: Windows - enable git long paths - if: ${{ matrix.platform == 'win32' }} - shell: bash - run: git config --system core.longpaths true - - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: @@ -390,8 +402,16 @@ jobs: working-directory: ${{ inputs.workdir }} run: | npm install + + - name: Install bare tooling (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | npm install -g bare bare-make + - name: Add bare tooling to PATH (Linux x64) + if: (matrix.platform == 'linux' && matrix.arch == 'x64') + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH + - name: Download prebuilds from artifact if: ${{ !inputs.prebuild_package }} uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # 8.0.1 @@ -404,10 +424,12 @@ jobs: working-directory: ${{ inputs.workdir }} shell: bash run: | - mkdir -p prebuilds - npm pack ${{ inputs.prebuild_package }} --pack-destination /tmp - tar -xzf /tmp/*.tgz -C /tmp - cp -r /tmp/package/prebuilds/* prebuilds/ + mkdir -p prebuilds "${{ runner.temp }}/tmp" + rm -f "${{ runner.temp }}/tmp"/*.tgz + rm -rf "${{ runner.temp }}/tmp/package" + npm pack ${{ inputs.prebuild_package }} --pack-destination "${{ runner.temp }}/tmp" + tar -xzf "${{ runner.temp }}/tmp"/*.tgz -C "${{ runner.temp }}/tmp" + cp -r "${{ runner.temp }}/tmp"/package/prebuilds/* prebuilds/ - name: Download prebuilds from package (Windows) if: ${{ inputs.prebuild_package && matrix.platform == 'win32' }} @@ -415,13 +437,14 @@ jobs: shell: powershell run: | New-Item -ItemType Directory -Force -Path prebuilds | Out-Null - npm pack ${{ inputs.prebuild_package }} --pack-destination $env:TEMP - $tgz = Get-ChildItem "$env:TEMP\*.tgz" | Select-Object -First 1 - tar -xzf $tgz.FullName -C $env:TEMP - Copy-Item -Path "$env:TEMP\package\prebuilds\*" -Destination prebuilds -Recurse -Force + New-Item -ItemType Directory -Force -Path "${{ runner.temp }}\tmp" | Out-Null + npm pack ${{ inputs.prebuild_package }} --pack-destination "${{ runner.temp }}\tmp" + $tgz = Get-ChildItem "${{ runner.temp }}\tmp\*.tgz" | Select-Object -First 1 + tar -xzf $tgz.FullName -C "${{ runner.temp }}\tmp" + Copy-Item -Path "${{ runner.temp }}\tmp\package\prebuilds\*" -Destination prebuilds -Recurse -Force - name: Linux - install runtime dependencies - if: ${{ matrix.platform == 'linux' }} + if: ${{ matrix.platform == 'linux' && matrix.arch == 'arm64' }} shell: bash run: | sudo apt-get update @@ -441,11 +464,15 @@ jobs: working-directory: ${{ inputs.workdir }}/benchmarks/server run: npm run setup:supertonic + - name: Install Python pip, setuptools and wheel (arm64 and macos) + if: matrix.arch == 'arm64' || matrix.platform == 'darwin' + run: | + pip install --upgrade pip setuptools wheel + - name: Install Python server dependencies if: ${{ inputs.supertonic_run_python && matrix.run_python }} working-directory: ${{ inputs.workdir }}/benchmarks/python-server run: | - pip install --upgrade pip setuptools wheel pip install -r requirements-supertonic.txt - name: Install benchmark client dependencies (Unix) @@ -453,7 +480,6 @@ jobs: working-directory: ${{ inputs.workdir }}/benchmarks/client shell: bash run: | - pip install --upgrade pip setuptools wheel pip install -r requirements.txt if [ "${{ matrix.round_trip_test && 'true' || 'false' }}" = "true" ]; then pip install -r requirements-roundtrip.txt @@ -464,7 +490,6 @@ jobs: working-directory: ${{ inputs.workdir }}/benchmarks/client shell: powershell run: | - pip install --upgrade pip setuptools wheel pip install -r requirements.txt if ("${{ matrix.round_trip_test && 'true' || 'false' }}" -eq "true") { pip install -r requirements-roundtrip.txt diff --git a/.github/workflows/on-pr-bci-whispercpp.yml b/.github/workflows/on-pr-bci-whispercpp.yml index 5f304d0c04..c8ceb23ef4 100644 --- a/.github/workflows/on-pr-bci-whispercpp.yml +++ b/.github/workflows/on-pr-bci-whispercpp.yml @@ -153,7 +153,7 @@ jobs: cpp-lint: needs: [authorize, context] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners secrets: inherit with: sha: ${{ needs.context.outputs.base_sha }} @@ -170,7 +170,7 @@ jobs: id-token: write needs: [authorize, context] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/cpp-test-coverage-bci-whispercpp.yml + uses: tetherto/qvac/.github/workflows/cpp-test-coverage-bci-whispercpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -184,7 +184,7 @@ jobs: id-token: write needs: [authorize, context] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/prebuilds-bci-whispercpp.yml + uses: tetherto/qvac/.github/workflows/prebuilds-bci-whispercpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -197,7 +197,7 @@ jobs: id-token: write needs: [authorize, context, prebuild] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/integration-test-bci-whispercpp.yml + uses: tetherto/qvac/.github/workflows/integration-test-bci-whispercpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -212,7 +212,7 @@ jobs: id-token: write needs: [authorize, context, prebuild] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/integration-mobile-test-bci-whispercpp.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-bci-whispercpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} diff --git a/.github/workflows/on-pr-decoder-audio.yml b/.github/workflows/on-pr-decoder-audio.yml index e09e628814..f5d9a89c74 100644 --- a/.github/workflows/on-pr-decoder-audio.yml +++ b/.github/workflows/on-pr-decoder-audio.yml @@ -157,7 +157,7 @@ jobs: contents: read packages: read id-token: write - uses: ./.github/workflows/integration-test-decoder-audio.yml + uses: tetherto/qvac/.github/workflows/integration-test-decoder-audio.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -172,7 +172,7 @@ jobs: id-token: write needs: context if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/integration-mobile-test-decoder-audio.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-decoder-audio.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} diff --git a/.github/workflows/on-pr-diffusion-cpp.yml b/.github/workflows/on-pr-diffusion-cpp.yml index d788bb9dbf..7e5068ec78 100644 --- a/.github/workflows/on-pr-diffusion-cpp.yml +++ b/.github/workflows/on-pr-diffusion-cpp.yml @@ -66,7 +66,7 @@ jobs: cpp-tests: if: needs.authorize.outputs.allowed == 'true' needs: [authorize, sanity-checks] - uses: ./.github/workflows/cpp-tests-diffusion.yml + uses: tetherto/qvac/.github/workflows/cpp-tests-diffusion.yml@tmp-self-hosted-runners secrets: inherit with: workdir: packages/diffusion-cpp @@ -75,7 +75,7 @@ jobs: cpp-lint: if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners needs: authorize secrets: inherit with: @@ -119,7 +119,7 @@ jobs: packages: write pull-requests: write id-token: write - uses: ./.github/workflows/prebuilds-diffusion-cpp.yml + uses: tetherto/qvac/.github/workflows/prebuilds-diffusion-cpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -132,7 +132,7 @@ jobs: contents: read packages: read id-token: write - uses: ./.github/workflows/integration-test-diffusion-cpp.yml + uses: tetherto/qvac/.github/workflows/integration-test-diffusion-cpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -146,7 +146,7 @@ jobs: id-token: write if: needs.authorize.outputs.allowed == 'true' needs: [authorize, prebuild] - uses: ./.github/workflows/integration-mobile-test-diffusion-cpp.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-diffusion-cpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} diff --git a/.github/workflows/on-pr-embed-llamacpp.yml b/.github/workflows/on-pr-embed-llamacpp.yml index 1cf5243698..2206358afb 100644 --- a/.github/workflows/on-pr-embed-llamacpp.yml +++ b/.github/workflows/on-pr-embed-llamacpp.yml @@ -76,7 +76,7 @@ jobs: cpp-lint: if: needs.authorize.outputs.allowed == 'true' needs: authorize - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners secrets: inherit with: sha: ${{ github.event.pull_request.base.sha }} @@ -90,7 +90,7 @@ jobs: pull-requests: write if: needs.authorize.outputs.allowed == 'true' needs: [authorize, sanity-checks] - uses: ./.github/workflows/cpp-tests-embed.yml + uses: tetherto/qvac/.github/workflows/cpp-tests-embed.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -133,7 +133,7 @@ jobs: id-token: write if: needs.authorize.outputs.allowed == 'true' needs: [authorize, sanity-checks] - uses: ./.github/workflows/prebuilds-embed-llamacpp.yml + uses: tetherto/qvac/.github/workflows/prebuilds-embed-llamacpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -146,7 +146,7 @@ jobs: contents: read packages: read id-token: write - uses: ./.github/workflows/integration-test-embed-llamacpp.yml + uses: tetherto/qvac/.github/workflows/integration-test-embed-llamacpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -160,7 +160,7 @@ jobs: id-token: write if: needs.authorize.outputs.allowed == 'true' needs: [authorize, prebuild] - uses: ./.github/workflows/integration-mobile-test-embed-llamacpp.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-embed-llamacpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} diff --git a/.github/workflows/on-pr-llm-llamacpp.yml b/.github/workflows/on-pr-llm-llamacpp.yml index dbe8f9fabb..cad13d609c 100644 --- a/.github/workflows/on-pr-llm-llamacpp.yml +++ b/.github/workflows/on-pr-llm-llamacpp.yml @@ -81,7 +81,7 @@ jobs: cpp-tests: if: needs.authorize.outputs.allowed == 'true' needs: [authorize, sanity-checks] - uses: ./.github/workflows/cpp-tests-llm.yml + uses: tetherto/qvac/.github/workflows/cpp-tests-llm.yml@tmp-self-hosted-runners secrets: inherit with: workdir: packages/llm-llamacpp @@ -90,7 +90,7 @@ jobs: cpp-lint: if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners needs: authorize secrets: inherit with: @@ -135,7 +135,7 @@ jobs: packages: write pull-requests: write id-token: write - uses: ./.github/workflows/prebuilds-llm-llamacpp.yml + uses: tetherto/qvac/.github/workflows/prebuilds-llm-llamacpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -148,7 +148,7 @@ jobs: contents: read packages: read id-token: write - uses: ./.github/workflows/integration-test-llm-llamacpp.yml + uses: tetherto/qvac/.github/workflows/integration-test-llm-llamacpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -162,7 +162,7 @@ jobs: id-token: write if: needs.authorize.outputs.allowed == 'true' needs: [authorize, prebuild] - uses: ./.github/workflows/integration-mobile-test-llm-llamacpp.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-llm-llamacpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} diff --git a/.github/workflows/on-pr-ocr-onnx.yml b/.github/workflows/on-pr-ocr-onnx.yml index 00975b09fb..018af69926 100644 --- a/.github/workflows/on-pr-ocr-onnx.yml +++ b/.github/workflows/on-pr-ocr-onnx.yml @@ -159,7 +159,7 @@ jobs: cpp-lint: needs: [authorize, changes] if: needs.authorize.outputs.allowed == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners secrets: inherit with: sha: ${{ github.event.pull_request.base.sha || github.sha }} @@ -179,7 +179,7 @@ jobs: github.event_name == 'workflow_dispatch' || needs.authorize.outputs.allowed == 'true' ) - uses: ./.github/workflows/prebuilds-ocr-onnx.yml + uses: tetherto/qvac/.github/workflows/prebuilds-ocr-onnx.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} @@ -197,7 +197,7 @@ jobs: github.event_name == 'workflow_dispatch' || needs.authorize.outputs.allowed == 'true' ) - uses: ./.github/workflows/integration-test-ocr-onnx.yml + uses: tetherto/qvac/.github/workflows/integration-test-ocr-onnx.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} @@ -216,7 +216,7 @@ jobs: github.event_name == 'workflow_dispatch' || needs.authorize.outputs.allowed == 'true' ) - uses: ./.github/workflows/integration-mobile-test-ocr-onnx.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-ocr-onnx.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} diff --git a/.github/workflows/on-pr-onnx.yml b/.github/workflows/on-pr-onnx.yml index a6e4de0968..1d16cab3dc 100644 --- a/.github/workflows/on-pr-onnx.yml +++ b/.github/workflows/on-pr-onnx.yml @@ -156,7 +156,7 @@ jobs: cpp-lint: needs: [authorize, changes] if: needs.authorize.outputs.allowed == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners secrets: inherit with: sha: ${{ github.event.pull_request.base.sha || github.sha }} @@ -176,7 +176,7 @@ jobs: github.event_name == 'workflow_dispatch' || needs.authorize.outputs.allowed == 'true' ) - uses: ./.github/workflows/prebuilds-onnx.yml + uses: tetherto/qvac/.github/workflows/prebuilds-onnx.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} diff --git a/.github/workflows/on-pr-transcription-parakeet.yml b/.github/workflows/on-pr-transcription-parakeet.yml index e3104df735..c69727c0a3 100644 --- a/.github/workflows/on-pr-transcription-parakeet.yml +++ b/.github/workflows/on-pr-transcription-parakeet.yml @@ -138,7 +138,7 @@ jobs: cpp-lint: needs: context if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners secrets: inherit with: sha: ${{ needs.context.outputs.base_sha }} @@ -155,7 +155,7 @@ jobs: actions: read needs: context if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/cpp-test-coverage-transcription-parakeet.yml + uses: tetherto/qvac/.github/workflows/cpp-test-coverage-transcription-parakeet.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -169,7 +169,7 @@ jobs: id-token: write needs: context if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/prebuilds-transcription-parakeet.yml + uses: tetherto/qvac/.github/workflows/prebuilds-transcription-parakeet.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -182,7 +182,7 @@ jobs: id-token: write needs: [context, prebuild] if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/integration-test-transcription-parakeet.yml + uses: tetherto/qvac/.github/workflows/integration-test-transcription-parakeet.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -196,7 +196,7 @@ jobs: id-token: write needs: [context, prebuild] if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/integration-mobile-test-transcription-parakeet.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-transcription-parakeet.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} diff --git a/.github/workflows/on-pr-transcription-whispercpp.yml b/.github/workflows/on-pr-transcription-whispercpp.yml index 110c432d59..7c554402cb 100644 --- a/.github/workflows/on-pr-transcription-whispercpp.yml +++ b/.github/workflows/on-pr-transcription-whispercpp.yml @@ -153,7 +153,7 @@ jobs: cpp-lint: needs: [authorize, context] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners secrets: inherit with: sha: ${{ needs.context.outputs.base_sha }} @@ -170,7 +170,7 @@ jobs: id-token: write needs: [authorize, context] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/cpp-test-coverage-transcription-whispercpp.yml + uses: tetherto/qvac/.github/workflows/cpp-test-coverage-transcription-whispercpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -197,7 +197,7 @@ jobs: id-token: write needs: [authorize, context, prebuild] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/integration-test-transcription-whispercpp.yml + uses: tetherto/qvac/.github/workflows/integration-test-transcription-whispercpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -212,7 +212,7 @@ jobs: id-token: write needs: [authorize, context, prebuild] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/integration-mobile-test-transcription-whispercpp.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-transcription-whispercpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} diff --git a/.github/workflows/on-pr-translation-nmtcpp.yml b/.github/workflows/on-pr-translation-nmtcpp.yml index 6a870dc6a1..4eb71e4347 100644 --- a/.github/workflows/on-pr-translation-nmtcpp.yml +++ b/.github/workflows/on-pr-translation-nmtcpp.yml @@ -118,7 +118,7 @@ jobs: always() && needs.authorize.outputs.allowed == 'true' && (needs.changes.outputs.pkg == 'true' || github.event_name == 'workflow_dispatch') - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners secrets: inherit with: sha: ${{ github.event.pull_request.base.sha || github.event.before || 'HEAD~1' }} @@ -136,7 +136,7 @@ jobs: always() && needs.authorize.outputs.allowed == 'true' && (needs.changes.outputs.pkg == 'true' || github.event_name == 'workflow_dispatch') - uses: ./.github/workflows/reusable-cpp-tests-translation-nmtcpp.yml + uses: tetherto/qvac/.github/workflows/reusable-cpp-tests-translation-nmtcpp.yml@tmp-self-hosted-runners secrets: inherit with: ref: ${{ github.event.pull_request.head.ref }} @@ -153,7 +153,7 @@ jobs: always() && needs.authorize.outputs.allowed == 'true' && (needs.changes.outputs.pkg == 'true' || github.event_name == 'workflow_dispatch') - uses: ./.github/workflows/prebuilds-translation-nmtcpp.yml + uses: tetherto/qvac/.github/workflows/prebuilds-translation-nmtcpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -169,7 +169,7 @@ jobs: contents: read packages: read id-token: write - uses: ./.github/workflows/integration-test-translation-nmtcpp.yml + uses: tetherto/qvac/.github/workflows/integration-test-translation-nmtcpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -186,7 +186,7 @@ jobs: always() && needs.authorize.outputs.allowed == 'true' && (needs.changes.outputs.pkg == 'true' || github.event_name == 'workflow_dispatch') - uses: ./.github/workflows/integration-mobile-test-translation-nmtcpp.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-translation-nmtcpp.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ github.event.pull_request.head.repo.full_name }} diff --git a/.github/workflows/on-pr-tts-ggml.yml b/.github/workflows/on-pr-tts-ggml.yml index 25dda7deab..0579e8876b 100644 --- a/.github/workflows/on-pr-tts-ggml.yml +++ b/.github/workflows/on-pr-tts-ggml.yml @@ -138,7 +138,7 @@ jobs: cpp-lint: needs: context if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners secrets: inherit with: sha: ${{ needs.context.outputs.base_sha }} @@ -160,7 +160,7 @@ jobs: actions: read needs: context if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/cpp-test-coverage-tts-ggml.yml + uses: tetherto/qvac/.github/workflows/cpp-test-coverage-tts-ggml.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -174,7 +174,7 @@ jobs: id-token: write needs: context if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/prebuilds-tts-ggml.yml + uses: tetherto/qvac/.github/workflows/prebuilds-tts-ggml.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -187,7 +187,7 @@ jobs: id-token: write needs: [context, prebuild] if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/integration-test-tts-ggml.yml + uses: tetherto/qvac/.github/workflows/integration-test-tts-ggml.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -201,7 +201,7 @@ jobs: id-token: write needs: [context, prebuild] if: needs.context.outputs.run_verify == 'true' || github.event_name == 'workflow_dispatch' - uses: ./.github/workflows/integration-mobile-test-tts-ggml.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-tts-ggml.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} diff --git a/.github/workflows/on-pr-tts-onnx.yml b/.github/workflows/on-pr-tts-onnx.yml index 76ff417c4d..67ea80001a 100644 --- a/.github/workflows/on-pr-tts-onnx.yml +++ b/.github/workflows/on-pr-tts-onnx.yml @@ -177,7 +177,7 @@ jobs: cpp-lint: needs: [authorize, context] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/cpp-lint.yaml + uses: tetherto/qvac/.github/workflows/cpp-lint.yaml@tmp-self-hosted-runners secrets: inherit with: sha: ${{ needs.context.outputs.base_sha }} @@ -194,7 +194,7 @@ jobs: actions: read needs: [authorize, context] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/cpp-test-coverage-tts-onnx.yml + uses: tetherto/qvac/.github/workflows/cpp-test-coverage-tts-onnx.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -209,7 +209,7 @@ jobs: id-token: write needs: [authorize, context] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/prebuilds-tts-onnx.yml + uses: tetherto/qvac/.github/workflows/prebuilds-tts-onnx.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -223,7 +223,7 @@ jobs: id-token: write needs: [authorize, context, prebuild] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/integration-test-tts-onnx.yml + uses: tetherto/qvac/.github/workflows/integration-test-tts-onnx.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} @@ -240,7 +240,7 @@ jobs: id-token: write needs: [authorize, context, prebuild] if: needs.authorize.outputs.allowed == 'true' - uses: ./.github/workflows/integration-mobile-test-tts-onnx.yml + uses: tetherto/qvac/.github/workflows/integration-mobile-test-tts-onnx.yml@tmp-self-hosted-runners secrets: inherit with: repository: ${{ needs.context.outputs.repository }} diff --git a/.github/workflows/pr-test-inference-addon-cpp-js.yml b/.github/workflows/pr-test-inference-addon-cpp-js.yml index fecea02121..4a6856d085 100644 --- a/.github/workflows/pr-test-inference-addon-cpp-js.yml +++ b/.github/workflows/pr-test-inference-addon-cpp-js.yml @@ -63,7 +63,7 @@ jobs: fail-fast: false matrix: include: - - runner: ubuntu-22.04 + - runner: qvac-ubuntu2204-x64 platform: linux arch: x64 name: linux-x64-asan @@ -81,27 +81,12 @@ jobs: name: darwin-x64 asan: false run_tests: true - - runner: windows-2022 + - runner: qvac-win25-x64 platform: win32 arch: x64 name: win32-x64 asan: false run_tests: true - # Android/iOS entries are build-only here. - # Disable for now to save CI time. - # - runner: ubuntu-24.04 - # platform: android - # arch: arm64 - # name: android-arm64 - # flags: -D ANDROID_STL=c++_shared - # asan: false - # run_tests: false - # - runner: macos-15 - # platform: ios - # arch: arm64 - # name: ios-arm64 - # asan: false - # run_tests: false runs-on: ${{ matrix.runner }} name: js-${{ matrix.name }} permissions: @@ -122,6 +107,7 @@ jobs: workdir: ${{ env.PKG_DIR }} - name: Setup Node.js + if: matrix.platform == 'darwin' || matrix.arch == 'arm64' uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # 4.4.0 with: node-version: 22 @@ -129,10 +115,6 @@ jobs: - name: Install Bare tooling run: npm install -g bare bare-make - - if: ${{ matrix.platform == 'win32' }} - name: Enable git long paths - run: git config --system core.longpaths true - - if: ${{ matrix.platform == 'win32' }} name: Setup CMake on Windows run: | diff --git a/.github/workflows/pr-test-inference-addon-cpp.yml b/.github/workflows/pr-test-inference-addon-cpp.yml index baabdf91a0..342add09f2 100644 --- a/.github/workflows/pr-test-inference-addon-cpp.yml +++ b/.github/workflows/pr-test-inference-addon-cpp.yml @@ -70,10 +70,12 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 - os: ubuntu-22.04 platform: android arch: arm64 flags: -D ANDROID_STL=c++_shared + runner: qvac-ubuntu2204-x64 - os: macos-14 platform: ios arch: arm64 @@ -85,9 +87,10 @@ jobs: - os: macos-14 platform: darwin arch: arm64 - - os: windows-2022 + - os: windows-2025 platform: win32 arch: x64 + runner: qvac-win25-x64 runs-on: ${{ matrix.os }} name: ${{ matrix.platform }}-${{ matrix.arch }}${{ matrix.tags }} @@ -117,7 +120,7 @@ jobs: sudo apt update sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross lld - - if: ${{ matrix.os == 'windows-2022' }} + - if: ${{ matrix.os == 'windows-2025' }} name: setup cmake windows run: | cd .. @@ -138,10 +141,6 @@ jobs: cat $GITHUB_PATH >> temp mv temp $GITHUB_PATH - - if: ${{ matrix.os == 'windows-2022' }} - name: Longpaths on windows - run: git config --system core.longpaths true - - if: ${{ matrix.os == 'macos-14' }} name: Install vcpkg in macos run: | @@ -156,21 +155,18 @@ jobs: name: Configure vcpkg in linux run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV - - if: ${{ matrix.os == 'windows-2022' }} + - if: ${{ matrix.os == 'windows-2025' }} name: Configure vcpkg in windows run: echo ("VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" -replace '\\', '/') >> $env:GITHUB_ENV - - if: ${{ matrix.os == 'windows-2022' }} + - if: ${{ matrix.os == 'windows-2025' }} name: Configure cmake generator in windows run: echo "CMAKE_GENERATOR=Visual Studio 17 2022" >> $env:GITHUB_ENV - - if: ${{ matrix.os == 'windows-2022' && matrix.arch == 'x64' }} + - if: ${{ matrix.os == 'windows-2025' && matrix.arch == 'x64' }} run: echo "CMAKE_GENERATOR_PLATFORM=x64" >> $env:GITHUB_ENV - - if: ${{ matrix.os == 'windows-2022' && matrix.arch == 'x86' }} - run: echo "CMAKE_GENERATOR_PLATFORM=Win32" >> $env:GITHUB_ENV - - - if: ${{ matrix.os == 'windows-2022' && matrix.arch == 'arm64' }} + - if: ${{ matrix.os == 'windows-2025' && matrix.arch == 'arm64' }} run: echo "CMAKE_GENERATOR_PLATFORM=ARM64" >> $env:GITHUB_ENV - if: ${{ matrix.platform == 'android' }} diff --git a/.github/workflows/prebuilds-bci-whispercpp.yml b/.github/workflows/prebuilds-bci-whispercpp.yml index 49fd4a6b86..0d56cd99b5 100644 --- a/.github/workflows/prebuilds-bci-whispercpp.yml +++ b/.github/workflows/prebuilds-bci-whispercpp.yml @@ -34,7 +34,7 @@ jobs: contents: write pull-requests: write id-token: write - uses: ./.github/workflows/reusable-prebuilds.yml + uses: tetherto/qvac/.github/workflows/reusable-prebuilds.yml@tmp-self-hosted-runners with: workdir: ${{ inputs.workdir }} ref: ${{ inputs.ref }} diff --git a/.github/workflows/prebuilds-diffusion-cpp.yml b/.github/workflows/prebuilds-diffusion-cpp.yml index 6fa6420a01..f159f0034f 100644 --- a/.github/workflows/prebuilds-diffusion-cpp.yml +++ b/.github/workflows/prebuilds-diffusion-cpp.yml @@ -35,7 +35,7 @@ jobs: contents: write pull-requests: write id-token: write - uses: ./.github/workflows/reusable-prebuilds.yml + uses: tetherto/qvac/.github/workflows/reusable-prebuilds.yml@tmp-self-hosted-runners with: workdir: ${{ inputs.workdir }} ref: ${{ inputs.ref }} diff --git a/.github/workflows/prebuilds-embed-llamacpp.yml b/.github/workflows/prebuilds-embed-llamacpp.yml index 08ecafb8c0..8038724bc2 100644 --- a/.github/workflows/prebuilds-embed-llamacpp.yml +++ b/.github/workflows/prebuilds-embed-llamacpp.yml @@ -43,7 +43,7 @@ jobs: contents: write pull-requests: write id-token: write - uses: ./.github/workflows/reusable-prebuilds.yml + uses: tetherto/qvac/.github/workflows/reusable-prebuilds.yml@tmp-self-hosted-runners with: workdir: ${{ inputs.workdir }} ref: ${{ inputs.ref }} diff --git a/.github/workflows/prebuilds-llm-llamacpp.yml b/.github/workflows/prebuilds-llm-llamacpp.yml index 5e3a001fb5..af9eda58e3 100644 --- a/.github/workflows/prebuilds-llm-llamacpp.yml +++ b/.github/workflows/prebuilds-llm-llamacpp.yml @@ -43,7 +43,7 @@ jobs: contents: write pull-requests: write id-token: write - uses: ./.github/workflows/reusable-prebuilds.yml + uses: tetherto/qvac/.github/workflows/reusable-prebuilds.yml@tmp-self-hosted-runners with: workdir: ${{ inputs.workdir }} ref: ${{ inputs.ref }} diff --git a/.github/workflows/prebuilds-ocr-onnx.yml b/.github/workflows/prebuilds-ocr-onnx.yml index aef7f0637c..74027461d3 100644 --- a/.github/workflows/prebuilds-ocr-onnx.yml +++ b/.github/workflows/prebuilds-ocr-onnx.yml @@ -35,7 +35,7 @@ jobs: contents: write pull-requests: write id-token: write - uses: ./.github/workflows/reusable-prebuilds.yml + uses: tetherto/qvac/.github/workflows/reusable-prebuilds.yml@tmp-self-hosted-runners with: workdir: ${{ inputs.workdir }} ref: ${{ inputs.ref }} diff --git a/.github/workflows/prebuilds-onnx.yml b/.github/workflows/prebuilds-onnx.yml index a10d3c9d67..840a073624 100644 --- a/.github/workflows/prebuilds-onnx.yml +++ b/.github/workflows/prebuilds-onnx.yml @@ -36,7 +36,7 @@ jobs: contents: write pull-requests: write id-token: write - uses: ./.github/workflows/reusable-prebuilds.yml + uses: tetherto/qvac/.github/workflows/reusable-prebuilds.yml@tmp-self-hosted-runners with: workdir: ${{ inputs.workdir }} ref: ${{ inputs.ref }} diff --git a/.github/workflows/prebuilds-transcription-parakeet.yml b/.github/workflows/prebuilds-transcription-parakeet.yml index b05a4ed99c..8faff5a252 100644 --- a/.github/workflows/prebuilds-transcription-parakeet.yml +++ b/.github/workflows/prebuilds-transcription-parakeet.yml @@ -33,7 +33,7 @@ jobs: contents: write pull-requests: write id-token: write - uses: ./.github/workflows/reusable-prebuilds.yml + uses: tetherto/qvac/.github/workflows/reusable-prebuilds.yml@tmp-self-hosted-runners with: workdir: ${{ inputs.workdir }} ref: ${{ inputs.ref }} diff --git a/.github/workflows/prebuilds-translation-nmtcpp.yml b/.github/workflows/prebuilds-translation-nmtcpp.yml index d25d84e418..4008b7c81d 100644 --- a/.github/workflows/prebuilds-translation-nmtcpp.yml +++ b/.github/workflows/prebuilds-translation-nmtcpp.yml @@ -35,7 +35,7 @@ jobs: contents: write pull-requests: write id-token: write - uses: ./.github/workflows/reusable-prebuilds.yml + uses: tetherto/qvac/.github/workflows/reusable-prebuilds.yml@tmp-self-hosted-runners with: workdir: ${{ inputs.workdir }} ref: ${{ inputs.ref }} diff --git a/.github/workflows/prebuilds-tts-ggml.yml b/.github/workflows/prebuilds-tts-ggml.yml index 9c65a1295f..adb9726a9c 100644 --- a/.github/workflows/prebuilds-tts-ggml.yml +++ b/.github/workflows/prebuilds-tts-ggml.yml @@ -33,7 +33,7 @@ jobs: contents: write pull-requests: write id-token: write - uses: ./.github/workflows/reusable-prebuilds.yml + uses: tetherto/qvac/.github/workflows/reusable-prebuilds.yml@tmp-self-hosted-runners with: workdir: ${{ inputs.workdir }} ref: ${{ inputs.ref }} diff --git a/.github/workflows/prebuilds-tts-onnx.yml b/.github/workflows/prebuilds-tts-onnx.yml index 46de9c0b5f..ac4bcfd163 100644 --- a/.github/workflows/prebuilds-tts-onnx.yml +++ b/.github/workflows/prebuilds-tts-onnx.yml @@ -35,12 +35,12 @@ jobs: contents: write pull-requests: write id-token: write - uses: ./.github/workflows/reusable-prebuilds.yml + uses: tetherto/qvac/.github/workflows/reusable-prebuilds.yml@tmp-self-hosted-runners with: workdir: ${{ inputs.workdir }} ref: ${{ inputs.ref }} repository: ${{ inputs.repository }} artifact-name-prefix: onnx-tts- - setup-python-on-windows: true + # setup-python-on-windows: true setup-rust-toolchain: true secrets: inherit diff --git a/.github/workflows/reusable-cpp-tests-translation-nmtcpp.yml b/.github/workflows/reusable-cpp-tests-translation-nmtcpp.yml index 578253c89b..ed152921f1 100644 --- a/.github/workflows/reusable-cpp-tests-translation-nmtcpp.yml +++ b/.github/workflows/reusable-cpp-tests-translation-nmtcpp.yml @@ -17,7 +17,7 @@ env: jobs: cpp-tests: - runs-on: ubuntu-24.04 + runs-on: qvac-ubuntu2204-x64 environment: release timeout-minutes: 90 defaults: @@ -41,20 +41,13 @@ jobs: with: node-version: lts/* - - name: Setup LLVM - uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c - - - name: Install Vulkan SDK - run: | - wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc - sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-noble.list http://packages.lunarg.com/vulkan/lunarg-vulkan-noble.list - sudo apt update - sudo apt install -y vulkan-sdk - - name: Install NPM dependencies run: | npm install - npm install -g bare bare-make + # npm install -g bare bare-make + + - name: Add bare tooling to PATH + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH - name: Configure vcpkg run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV diff --git a/.github/workflows/reusable-prebuilds.yml b/.github/workflows/reusable-prebuilds.yml index 69e060baf9..6a22237581 100644 --- a/.github/workflows/reusable-prebuilds.yml +++ b/.github/workflows/reusable-prebuilds.yml @@ -111,6 +111,7 @@ jobs: - os: ubuntu-22.04 platform: linux arch: x64 + runner: qvac-ubuntu2204-x64 - os: ubuntu-22.04-arm platform: linux arch: arm64 @@ -136,11 +137,11 @@ jobs: - os: macos-15-intel platform: darwin arch: x64 - - os: windows-2022 + - os: windows-2025 platform: win32 arch: x64 - - runs-on: ${{ matrix.os }} + runner: qvac-win25-x64 + runs-on: ${{ matrix.runner || matrix.os }} environment: release name: ${{ matrix.platform }}-${{ matrix.arch }}${{ matrix.tags }} @@ -166,14 +167,16 @@ jobs: echo "Matrix arch: $MATRIX_ARCH" echo "Matrix tags: $MATRIX_TAGS" - - name: Setup build host + - name: Setup build host (Linux arm and macOS) + if: matrix.arch == 'arm64' || matrix.os == 'macos-15' || matrix.os == 'macos-15-intel' uses: tetherto/qvac/.github/actions/setup-build-host@df55c85d7b8004961e430557e85b6ec1b15cf170 with: platform: ${{ matrix.platform }} arch: ${{ matrix.arch }} linux-extra-packages: ${{ inputs.linux-extra-packages }} - - name: Setup LLVM + - name: Setup LLVM (Linux arm and macOS) + if: matrix.arch == 'arm64' || matrix.os == 'macos-15' || matrix.os == 'macos-15-intel' uses: tetherto/qvac/.github/actions/setup-llvm@0c819dd1110e4902223b1f7646cc0f1be2c9bc5c - name: Checkout repository @@ -188,6 +191,10 @@ jobs: with: role-to-assume: ${{ secrets.AWS_OIDC_ROLE_ARN }} + - name: Use vcpkg in user profile on windows + if: matrix.os == 'windows-2025' + run: echo "VCPKG_INSTALLATION_ROOT=$HOME\vcpkg" | Out-File -FilePath $env:GITHUB_ENV -Append + - name: Setup vcpkg uses: tetherto/qvac/.github/actions/setup-vcpkg@1d9b2165867d03c6edd675e402ee101a5d48a6d8 env: @@ -196,20 +203,19 @@ jobs: platform: ${{ matrix.platform }} arch: ${{ matrix.arch }} - - name: Setup Bare tooling + - name: Setup Bare tooling (Linux ARM and macOS) + if: matrix.arch == 'arm64' || matrix.os == 'macos-15' || matrix.os == 'macos-15-intel' uses: tetherto/qvac/.github/actions/setup-bare-tooling@0bbdca93da303a0b1634ba14a89cec085621078d - - if: ${{ inputs.setup-python-on-windows && matrix.platform == 'win32' }} - name: Setup Python on self-hosted Windows runner - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 6.2.0 - with: - python-version: "3.12" + - name: Add linux x64 Bare tooling to PATH + if: matrix.os == 'ubuntu-22.04' && matrix.arch == 'x64' + run: echo "/usr/local/nvm/versions/node/v20.20.2/bin" >> $GITHUB_PATH - name: Setup Apple Clang uses: tetherto/qvac/.github/actions/setup-apple-clang@1d9b2165867d03c6edd675e402ee101a5d48a6d8 - - if: ${{ inputs.include-vulkan-sdk }} - name: Setup Vulkan SDK + - if: ${{ inputs.include-vulkan-sdk && (matrix.arch == 'arm64' || matrix.os == 'macos-15' || matrix.os == 'macos-15-intel') }} + name: Setup Vulkan SDK (Linux ARM and MacOS) uses: tetherto/qvac/.github/actions/setup-vulkan-sdk@0bbdca93da303a0b1634ba14a89cec085621078d env: MODEL_S3_BUCKET: ${{ secrets.MODEL_S3_BUCKET }} @@ -219,6 +225,18 @@ jobs: aws-role-to-assume: ${{ secrets.AWS_OIDC_ROLE_ARN }} aws-region: eu-central-1 + - if: ${{ matrix.platform == 'linux' && matrix.arch == 'x64' }} + name: Set Vulkan SDK path in Linux x64 + shell: bash + run: | + echo "VULKAN_SDK=/opt/vulkansdk/x86_64" >> "$GITHUB_ENV" + + - if: ${{ inputs.include-vulkan-sdk && matrix.os == 'windows-2025' }} + name: Set Vulkan SDK Path (Windows) + run: | + "VULKAN_SDK=C:\VulkanSDK" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + "PATH=C:\VulkanSDK\Bin;$Env:PATH" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + - if: ${{ inputs.mac-brew-packages != '' && startsWith(matrix.os, 'macos') }} name: Install extra brew packages on macOS shell: bash @@ -297,7 +315,8 @@ jobs: shell: bash run: bare-make install - - name: Strip static libraries (.a) from prebuilds + - name: Strip static libraries (.a) from prebuilds (Linux / MacOS) + if: matrix.os != 'windows-2025' working-directory: ${{ env.WORKDIR }} shell: bash run: | @@ -314,6 +333,27 @@ jobs: echo "$MATCHES" find prebuilds -type f -name '*.a' -delete + - name: Strip static libraries (.a) from prebuilds (Windows) + if: matrix.os == 'windows-2025' + working-directory: ${{ env.WORKDIR }} + shell: powershell + run: | + # Check that prebuilds/ exists + if (-not (Test-Path -Path "prebuilds" -PathType Container)) { + Write-Output "prebuilds/ does not exist; skipping" + exit 0 + } + # Find all .a files under prebuilds/ + $matches = Get-ChildItem -Path "prebuilds" -Recurse -File -Filter "*.a" + if (-not $matches) { + Write-Output "No .a files found under prebuilds/" + exit 0 + } + Write-Output "Removing the following .a files:" + $matches | ForEach-Object { Write-Output $_.FullName } + # Delete them + $matches | Remove-Item -Force + - name: Smoke check (tmp-*) package name & prebuilds listing if: ${{ startsWith(github.ref, 'refs/heads/tmp-') || startsWith(github.ref_name, 'tmp-') diff --git a/.github/workflows/test-android-sdk.yml b/.github/workflows/test-android-sdk.yml index 700fe26ca3..00272afcc4 100644 --- a/.github/workflows/test-android-sdk.yml +++ b/.github/workflows/test-android-sdk.yml @@ -104,7 +104,7 @@ jobs: build: name: "[android] build" - runs-on: ai-run-linux + runs-on: qvac-ubuntu2204-x64 environment: release timeout-minutes: 30 outputs: diff --git a/.github/workflows/test-desktop-sdk.yml b/.github/workflows/test-desktop-sdk.yml index f11f5edccc..3c0ea252bf 100644 --- a/.github/workflows/test-desktop-sdk.yml +++ b/.github/workflows/test-desktop-sdk.yml @@ -15,7 +15,7 @@ on: required: true type: string platforms: - description: 'JSON array of runner labels (e.g., ["ubuntu-latest"] or ["qvac-ubuntu2204-x64-gpu", "mac-mini-m4-gpu"])' + description: 'JSON array of runner labels (e.g., ["qvac-ubuntu2404-x64"] or ["qvac-ubuntu2404-x64-gpu", "mac-mini-m4-gpu"])' required: true type: string consumer-timeout: