name: build

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    strategy:
      matrix:
        os: [ windows-latest, macos-latest ]

    runs-on: ${{ matrix.os }}
    continue-on-error: true
    steps:
    - uses: actions/checkout@v4
    - if: startsWith(matrix.os, 'windows')
      uses: microsoft/setup-msbuild@v2
    - if: startsWith(matrix.os, 'windows')
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'
    - if: startsWith(matrix.os, 'windows')
      run: pip install meson ninja
    - if: startsWith(matrix.os, 'macos')
      name: Install macos dependencies
      run: brew install pkg-config glfw meson
    - name: Profiler GUI
      run: |
        cmake -B profiler/build -S profiler -DCMAKE_BUILD_TYPE=Release
        cmake --build profiler/build --parallel --config Release
    - name: Update utility
      run: |
        cmake -B update/build -S update -DCMAKE_BUILD_TYPE=Release
        cmake --build update/build --parallel --config Release
    - name: Capture utility
      run: |
        cmake -B capture/build -S capture -DCMAKE_BUILD_TYPE=Release
        cmake --build capture/build --parallel --config Release
    - name: Csvexport utility
      run: |
        cmake -B csvexport/build -S csvexport -DCMAKE_BUILD_TYPE=Release
        cmake --build csvexport/build --parallel --config Release
    - name: Import utilities
      run: |
        cmake -B import/build -S import -DCMAKE_BUILD_TYPE=Release
        cmake --build import/build --parallel --config Release
    - if: ${{ !startsWith(matrix.os, 'windows') }}
      name: Library
      run: meson setup -Dprefix=$GITHUB_WORKSPACE/bin/lib build && meson compile -C build && meson install -C build
    - if: ${{ !startsWith(matrix.os, 'windows') }}
      name: Find Artifacts
      id: find_artifacts
      run: |
        mkdir -p bin
        cp profiler/build/tracy-profiler bin
        cp update/build/tracy-update bin
        cp capture/build/tracy-capture bin
        cp csvexport/build/tracy-csvexport bin
        cp import/build/tracy-import-chrome bin
        cp import/build/tracy-import-fuchsia bin
    - if: startsWith(matrix.os, 'windows')
      name: Find Artifacts
      id: find_artifacts_windows
      run: |
        mkdir bin
        copy profiler\build\Release\tracy-profiler.exe bin
        copy update\build\Release\tracy-update.exe bin
        copy capture\build\Release\tracy-capture.exe bin
        copy csvexport\build\Release\tracy-csvexport.exe bin
        copy import\build\Release\tracy-import-chrome.exe bin
        copy import\build\Release\tracy-import-fuchsia.exe bin
    - uses: actions/upload-artifact@v4
      with:
        name: ${{ matrix.os }}
        path: bin
