name: CI on: push: branches: [master] pull_request: branches: [master] jobs: # ── 动态矩阵 ────────────────────────────────────────────── # PR 仅跑 Ubuntu 节省 minutes;push master 跑全矩阵 Ubuntu + Windows matrix: name: Determine matrix runs-on: ubuntu-24.04 outputs: os: ${{ steps.set-matrix.outputs.os }} steps: - id: set-matrix shell: bash run: | if [ "${{ github.event_name }}" = "push" ] && [ "${{ github.ref }}" = "refs/heads/master" ]; then echo "os=[\"ubuntu-24.04\",\"windows-2025\"]" >> "$GITHUB_OUTPUT" else echo "os=[\"ubuntu-24.04\"]" >> "$GITHUB_OUTPUT" fi # ── 构建 & 测试 ─────────────────────────────────────────── build: name: ${{ matrix.os }} / ${{ matrix.build_type }} needs: matrix strategy: fail-fast: false matrix: os: ${{ fromJSON(needs.matrix.outputs.os) }} build_type: [Release] runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 1 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install Conan run: pip install conan - name: Cache Conan uses: actions/cache@v4 with: path: | ~/.conan2 ~/.conan2/p key: ${{ runner.os }}-conan-${{ matrix.build_type }}-${{ hashFiles('deps/conanfile.txt') }} restore-keys: | ${{ runner.os }}-conan-${{ matrix.build_type }}- ${{ runner.os }}-conan- - name: Install Conan dependencies run: | conan profile detect --force conan install deps --build=missing -s build_type=${{ matrix.build_type }} - name: Configure CMake run: cmake --preset conan-release - name: Build run: cmake --build --preset conan-release --config ${{ matrix.build_type }} - name: Test run: ctest --preset conan-release -C ${{ matrix.build_type }} --output-on-failure