chore: bump version to 9.11.2 (#4909) #4733
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: AddressSanitizer | |
| on: | |
| push: | |
| branches: | |
| - master | |
| - 'releases/**' | |
| pull_request: | |
| branches: | |
| - '*' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} | |
| cancel-in-progress: true | |
| env: | |
| VCPKG_BINARY_SOURCES: 'clear;x-gha,readwrite' | |
| jobs: | |
| test_with_sanitizers: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| #os: [windows-latest, ubuntu-latest, macos-14, macos-15-intel] | |
| os: [ubuntu-latest, macos-14, macos-15-intel] # Temporarily remove windows asan | |
| preset: [vcpkg-asan-debug, vcpkg-ubsan-debug] | |
| exclude: | |
| # UBSan not supported by MSVC on Windows | |
| - { os: windows-latest, preset: vcpkg-ubsan-debug } | |
| # UBSan runs out of disk space on Linux | |
| - { os: ubuntu-latest, preset: vcpkg-ubsan-debug } | |
| runs-on: ${{ matrix.os }} | |
| name: asan.${{ matrix.os }}.${{ matrix.preset }} | |
| env: | |
| UBSAN_OPTIONS: "print_stacktrace=1" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: false | |
| fetch-depth: 0 | |
| - name: Init submodules with retry | |
| shell: bash | |
| run: | | |
| git config --global --add safe.directory "$(pwd)" | |
| for attempt in 1 2 3 4 5; do | |
| if git submodule update --init --recursive; then | |
| echo "Submodule init succeeded on attempt $attempt" | |
| exit 0 | |
| fi | |
| echo "Attempt $attempt failed, retrying in 15s..." | |
| sleep 15 | |
| done | |
| echo "Submodule init failed after 5 attempts" | |
| exit 1 | |
| - name: Setup MSVC Developer Command Prompt | |
| if: ${{ startsWith(matrix.os, 'windows') }} | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| - uses: lukka/get-cmake@latest | |
| - name: Install build dependencies (Linux only) | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt-get update || true | |
| sudo apt-get install -y ninja-build autoconf automake autoconf-archive ccache | |
| - name: Install ccache (macOS only) | |
| if: runner.os == 'macOS' | |
| run: brew install ccache | |
| - name: Cache ccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ runner.temp }}/ccache | |
| key: ccache-asan-${{ matrix.os }}-${{ matrix.preset }}-${{ github.sha }} | |
| restore-keys: | | |
| ccache-asan-${{ matrix.os }}-${{ matrix.preset }}- | |
| - name: Configure ccache | |
| shell: bash | |
| run: | | |
| echo "CCACHE_DIR=$RUNNER_TEMP/ccache" >> $GITHUB_ENV | |
| ccache --set-config=max_size=500M | |
| ccache --set-config=compiler_check=content | |
| ccache --zero-stats | |
| env: | |
| CCACHE_DIR: ${{ runner.temp }}/ccache | |
| - name: Export GitHub Actions cache environment variables | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); | |
| core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); | |
| - name: Clear vcpkg temp files and update | |
| shell: bash | |
| run: | | |
| rm -rf ext_libs/vcpkg/downloads | |
| rm -rf ext_libs/vcpkg/buildtrees | |
| git submodule update --init ext_libs/vcpkg | |
| - name: Setup vcpkg | |
| uses: lukka/run-vcpkg@v11 | |
| with: | |
| vcpkgDirectory: '${{ github.workspace }}/ext_libs/vcpkg' | |
| - name: Configure with CMake (with retry) | |
| env: | |
| VCPKG_ROOT: ${{github.workspace}}/ext_libs/vcpkg | |
| shell: bash | |
| run: | | |
| max_attempts=3 | |
| attempt=1 | |
| until cmake --preset "${{ matrix.preset }}" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache; do | |
| if [ $attempt -ge $max_attempts ]; then | |
| echo "CMake configure failed after $max_attempts attempts" | |
| exit 1 | |
| fi | |
| echo "CMake configure failed (attempt $attempt/$max_attempts), retrying in 30 seconds..." | |
| attempt=$((attempt + 1)) | |
| sleep 30 | |
| done | |
| - name: Build | |
| run: cmake --build build | |
| - name: Show ccache stats | |
| if: always() | |
| run: ccache --show-stats | |
| - name: Verify binaries exist | |
| run: | | |
| ls -la build/vowpalwabbit/cli/ | |
| test -f build/vowpalwabbit/cli/vw || (echo "vw binary not found!" && exit 1) | |
| ls -la build/vowpalwabbit/spanning_tree_bin/ | |
| test -f build/vowpalwabbit/spanning_tree_bin/spanning_tree || (echo "spanning_tree binary not found!" && exit 1) | |
| - name: Run unit tests | |
| working-directory: build | |
| run: ctest --output-on-failure --no-tests=error --exclude-regex WIterations --label-regex VWTestList | |
| - name: Run python test script | |
| if: ${{ success() || failure() }} | |
| run: | | |
| python3 test/run_tests.py -f --clean_dirty -E 0.001 --include_flatbuffers --jobs 1 | |
| test_ubsan_minimal: | |
| # To avoid running out of disk space, build only VW executables and some unit tests on Linux | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest] | |
| preset: [vcpkg-ubsan-debug] | |
| runs-on: ${{ matrix.os }} | |
| name: asan.${{ matrix.os }}.${{ matrix.preset }} | |
| env: | |
| UBSAN_OPTIONS: "print_stacktrace=1" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: false | |
| fetch-depth: 0 | |
| - name: Init submodules with retry | |
| shell: bash | |
| run: | | |
| git config --global --add safe.directory "$(pwd)" | |
| for attempt in 1 2 3 4 5; do | |
| if git submodule update --init --recursive; then | |
| echo "Submodule init succeeded on attempt $attempt" | |
| exit 0 | |
| fi | |
| echo "Attempt $attempt failed, retrying in 15s..." | |
| sleep 15 | |
| done | |
| echo "Submodule init failed after 5 attempts" | |
| exit 1 | |
| - uses: lukka/get-cmake@latest | |
| - name: Install build dependencies (Linux only) | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt-get update || true | |
| sudo apt-get install -y ninja-build autoconf automake autoconf-archive ccache | |
| - name: Cache ccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ runner.temp }}/ccache | |
| key: ccache-asan-${{ matrix.os }}-${{ matrix.preset }}-${{ github.sha }} | |
| restore-keys: | | |
| ccache-asan-${{ matrix.os }}-${{ matrix.preset }}- | |
| - name: Configure ccache | |
| shell: bash | |
| run: | | |
| echo "CCACHE_DIR=$RUNNER_TEMP/ccache" >> $GITHUB_ENV | |
| ccache --set-config=max_size=500M | |
| ccache --set-config=compiler_check=content | |
| ccache --zero-stats | |
| env: | |
| CCACHE_DIR: ${{ runner.temp }}/ccache | |
| - name: Export GitHub Actions cache environment variables | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); | |
| core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); | |
| - name: Clear vcpkg temp files and update | |
| shell: bash | |
| run: | | |
| rm -rf ext_libs/vcpkg/downloads | |
| rm -rf ext_libs/vcpkg/buildtrees | |
| git submodule update --init ext_libs/vcpkg | |
| - name: Setup vcpkg | |
| uses: lukka/run-vcpkg@v11 | |
| with: | |
| vcpkgDirectory: '${{ github.workspace }}/ext_libs/vcpkg' | |
| - name: Configure with CMake (with retry) | |
| env: | |
| VCPKG_ROOT: ${{github.workspace}}/ext_libs/vcpkg | |
| shell: bash | |
| run: | | |
| max_attempts=3 | |
| attempt=1 | |
| until cmake --preset "${{ matrix.preset }}" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache; do | |
| if [ $attempt -ge $max_attempts ]; then | |
| echo "CMake configure failed after $max_attempts attempts" | |
| exit 1 | |
| fi | |
| echo "CMake configure failed (attempt $attempt/$max_attempts), retrying in 30 seconds..." | |
| attempt=$((attempt + 1)) | |
| sleep 30 | |
| done | |
| - name: Build | |
| run: cmake --build build -t vw_cli_bin vw_spanning_tree vw_spanning_tree_bin vw_core_test | |
| - name: Show ccache stats | |
| if: always() | |
| run: ccache --show-stats | |
| - name: Run unit tests | |
| run: ./build/vowpalwabbit/core/vw_core_test --gtest_filter=-\*WIiterations | |
| - name: Run python test script | |
| if: ${{ success() || failure() }} | |
| run: python3 test/run_tests.py -f --clean_dirty -E 0.001 --include_flatbuffers |