blob: c845150dc5a753d0eabeaec8362f4388d81ea1ef [file] [log] [blame] [edit]
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 ./...