name: Visual Studio versions on: workflow_call: workflow_dispatch: jobs: build: strategy: matrix: toolset: - msvc143 - vs2022 - msvc145 - vs2026 include: # Runner image. - {toolset: msvc143, os: windows-2022} - {toolset: vs2022, os: windows-2022} - {toolset: msvc145, os: windows-2025} - {toolset: vs2026, os: windows-2025} # Boost version. - boost-version: 1.91.0 # Some Boost libraries commonly used by me. - libraries: filesystem program_options regex test # Build settings. - platform: x64 - configuration: Release runs-on: '${{ matrix.os }}' name: '${{ matrix.toolset }}' defaults: run: shell: pwsh steps: - name: Checkout uses: actions/checkout@v6 - name: Cache Boost uses: actions/cache@v5 with: path: '${{ runner.workspace }}/boost/boost_*.tar.gz' key: 'boost_${{ matrix.boost-version }}' - name: Clean up PATH uses: egor-tensin/cleanup-path@v5 if: runner.os == 'Windows' - name: Set common variables uses: ./.github/actions/common-variables with: toolset: '${{ matrix.toolset }}' - name: Set up Python uses: actions/setup-python@v6 with: python-version: '3.x' - name: Set up software environment uses: ./.github/actions/software-environment with: toolset: '${{ matrix.toolset }}' platform: '${{ matrix.platform }}' - name: Download Boost uses: ./.github/actions/download-boost with: boost-version: '${{ matrix.boost-version }}' - name: Build Boost uses: ./.github/actions/build-boost with: toolset: '${{ matrix.toolset }}' libraries: '${{ matrix.libraries }}' platform: '${{ matrix.platform }}' configuration: '${{ matrix.configuration }}' continue-on-error: true - name: Check that Boost was bootstrapped uses: ./.github/actions/check-boost-bootstrapped - name: Check that Boost libraries were built uses: ./.github/actions/check-boost-libraries with: libraries: '${{ matrix.libraries }}' platform: '${{ matrix.platform }}' configuration: '${{ matrix.configuration }}' - name: Build examples/boost id: build_example uses: ./.github/actions/build-example with: src-dir: test/examples/boost boost-dir: '${{ env.BOOST_DIR }}' toolset: '${{ matrix.toolset }}' platform: '${{ matrix.platform }}' configuration: '${{ matrix.configuration }}' - name: Verify runtime library linkage uses: ./.github/actions/check-runtime-library with: path: '${{ steps.build_example.outputs.install-dir }}' - name: Verify architecture uses: ./.github/actions/check-arch with: path: '${{ steps.build_example.outputs.install-dir }}' expected: '${{ matrix.platform }}' - name: Run examples/boost uses: ./.github/actions/run-example-boost with: path: '${{ steps.build_example.outputs.install-dir }}'