| name: CI |
| |
| on: |
| push: |
| branches: [ "main" ] |
| pull_request: |
| |
| concurrency: |
| # Use github.run_id on main branch |
| # Use github.event.pull_request.number on pull requests, so it's unique per pull request |
| # Use github.ref on other branches, so it's unique per branch |
| group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.event.pull_request.number || github.ref }} |
| cancel-in-progress: true |
| |
| jobs: |
| cmake: |
| strategy: |
| # Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable. |
| fail-fast: false |
| |
| # Set up a matrix to run the following 6 configurations: |
| # 1. <Windows, Debug, latest MSVC compiler toolchain on the default runner image, default generator> |
| # 2. <Windows, Release, latest MSVC compiler toolchain on the default runner image, default generator> |
| # 3. <Linux, Debug, latest GCC compiler toolchain in the container, default generator> |
| # 4. <Linux, Release, latest GCC compiler toolchain in the container, default generator> |
| # 5. <MacOS, Debug, latest Clang compiler toolchain on the default runner image, default generator> |
| # 6. <MacOS, Release, latest Clang compiler toolchain on the default runner image, default generator> |
| matrix: |
| os: [macos-latest, ubuntu-latest, windows-latest] |
| build_type: [Debug, Release] |
| toolchain: [gcc, clang, msvc] |
| include: |
| - os: macos-latest |
| toolchain: clang |
| c_compiler: $(brew --prefix llvm@15)/bin/clang |
| cpp_compiler: $(brew --prefix llvm@15)/bin/clang++ |
| env: |
| MACOSX_DEPLOYMENT_TARGET: "11.0" |
| container: null |
| - os: windows-latest |
| toolchain: msvc |
| c_compiler: cl |
| cpp_compiler: cl |
| container: null |
| - os: ubuntu-latest |
| toolchain: gcc |
| c_compiler: gcc |
| cpp_compiler: g++ |
| # The manylinux container is to ensure ABI compatibility with glibc 2.28. |
| # This way, the continuous delivery process casts a wide net across many linux distros. |
| container: dockcross/manylinux_2_28-x64:latest |
| exclude: |
| - os: macos-latest |
| toolchain: msvc |
| - os: macos-latest |
| toolchain: gcc |
| - os: ubuntu-latest |
| toolchain: msvc |
| - os: ubuntu-latest |
| toolchain: clang |
| - os: windows-latest |
| toolchain: clang |
| - os: windows-latest |
| toolchain: gcc |
| |
| name: CMake-${{ matrix.os }}-${{ matrix.build_type }}-${{ matrix.toolchain }} |
| runs-on: ${{ matrix.os }} |
| container: ${{ matrix.container }} |
| env: |
| SCCACHE_GHA_ENABLED: "true" |
| |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: Set up dependencies on linux |
| if: matrix.container == 'dockcross/manylinux_2_28-x64:latest' |
| run: > |
| dnf install -y mesa-libGL-devel libxcb libxcb-devel libX11-xcb libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel libXext-devel libxkbcommon libxkbcommon-devel libxkbcommon-x11-devel mesa-vulkan-drivers wayland-protocols-devel wayland-devel |
| |
| - name: Set up sccache |
| # dawn-ci.cmake documents why sccache is not used in other platforms. |
| if: matrix.os == 'ubuntu-latest' |
| uses: mozilla-actions/sccache-action@v0.0.5 |
| |
| - name: Configure CMake |
| run: > |
| cmake |
| -S . |
| -B out/${{ matrix.build_type }} |
| -C .github/workflows/dawn-ci.cmake |
| -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} |
| -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} |
| -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} |
| |
| - name: Build |
| run: cmake --build out/${{ matrix.build_type }} --config ${{ matrix.build_type }} |
| |
| - name: Package |
| run: | |
| cmake --install out/${{ matrix.build_type }} --config ${{ matrix.build_type }} --prefix Dawn-${{ github.sha }}-${{ matrix.os }}-${{ matrix.build_type }} |
| cmake -E tar cvzf Dawn-${{ github.sha }}-${{ matrix.os }}-${{ matrix.build_type }}.tar.gz Dawn-${{ github.sha }}-${{ matrix.os }}-${{ matrix.build_type }} |
| |
| - name: Upload artifacts |
| uses: actions/upload-artifact@v4 |
| with: |
| name: Dawn-${{ github.sha }}-${{ matrix.os }}-${{ matrix.build_type }} |
| path: Dawn-${{ github.sha }}-${{ matrix.os }}-${{ matrix.build_type }}.tar.gz |
| |
| golang: |
| name: Go Build and Test |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: Set up Go |
| uses: actions/setup-go@v4 |
| with: |
| go-version: '1.18' |
| |
| - name: Build |
| run: go build -v ./... |
| |
| - name: Test |
| run: go test -v ./... |