Create Github Actions workflows

Add initial Github workflows to:
 - Build and run go tests
 - Do the cmake build on Windows/Linux/MacOS
 - CMake build with GCC is skipped for now due to compiler-specific failures
 - Debug CMake build with MSVC is skipped for now due to issues with PDB file locking and multiple compile threads
 - GN build for convenience of getting build results in Github PRs; may or may not keep it long term

This is an imported pull request from
https://github.com/google/dawn/pull/8

GITHUB_PR_HEAD_SHA=aefd0f48e0bc119579781da17daf6c6c94a6723c
ORIGINAL_AUTHOR=Austin Eng <2154796+austinEng@users.noreply.github.com>
GitOrigin-RevId: c7783ee67c711fe079e37f6418561daf23b741ae
Change-Id: I3a97e0afd75025c60c6dfb0bdbfe89c969c795bd
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/159021
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..b58853a
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,176 @@
+name: CI
+
+on:
+  push:
+    branches: [ "main" ]
+  pull_request:
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+  cancel-in-progress: true
+
+jobs:
+  gn:
+    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
+
+      matrix:
+        os: [ubuntu-latest, windows-latest, macos-latest]
+
+    name: GN ${{ matrix.os }}
+    runs-on: ${{ matrix.os }}
+
+    steps:
+    - name: Install Ubuntu build dependencies
+      if: matrix.os == 'ubuntu-latest'
+      run: |
+        sudo apt update
+        sudo apt install libgl-dev libx11-xcb-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxext-dev wayland-protocols libwayland-dev libxkbcommon-dev
+
+    - name: Install depot_tools
+      uses: newkdev/setup-depot-tools@v1.0.1
+
+    - uses: actions/checkout@v3
+
+    - name: Set reusable strings
+      # Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file.
+      id: strings
+      shell: bash
+      run: |
+        echo "build-output-dir=out/build" >> "$GITHUB_OUTPUT"
+
+    - name: Set up checkout
+      run: |
+        cp ./scripts/standalone.gclient .gclient
+
+    - name: gclient sync --no-history --shallow
+      run: gclient sync --no-history --shallow
+      env:
+        DEPOT_TOOLS_WIN_TOOLCHAIN: 0
+
+    - name: Set up sccache
+      uses: mozilla-actions/sccache-action@v0.0.3
+
+    - name: Generate build files
+      shell: bash
+      run: |
+        mkdir -p ${{ steps.strings.outputs.build-output-dir }}
+        cat << EOF >> ${{ steps.strings.outputs.build-output-dir }}/args.gn
+        cc_wrapper="sccache"
+        is_debug=false
+        is_component_build=true
+        is_clang=true
+        EOF
+        gn gen ${{ steps.strings.outputs.build-output-dir }}
+
+      env:
+        SCCACHE_GHA_ENABLED: "true"
+        DEPOT_TOOLS_WIN_TOOLCHAIN: 0
+
+    - name: Build
+      run: autoninja -C ${{ steps.strings.outputs.build-output-dir }}
+      env:
+        SCCACHE_GHA_ENABLED: "true"
+        DEPOT_TOOLS_WIN_TOOLCHAIN: 0
+
+  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
+
+      matrix:
+        os: [ubuntu-latest, windows-latest, macos-latest]
+        build_type: [Debug, Release]
+        c_compiler: [clang, cl]
+        include:
+          - os: windows-latest
+            c_compiler: cl
+            cpp_compiler: cl
+          - os: ubuntu-latest
+            c_compiler: clang
+            cpp_compiler: clang++
+          - os: macos-latest
+            c_compiler: clang
+            cpp_compiler: clang++
+        exclude:
+          - os: windows-latest
+            c_compiler: clang
+          - os: windows-latest
+            c_compiler: cl
+            build_type: Debug
+          - os: ubuntu-latest
+            c_compiler: cl
+          - os: macos-latest
+            c_compiler: cl
+
+    name: CMake ${{ matrix.os }} ${{ matrix.build_type }} (${{ matrix.c_compiler }})
+    runs-on: ${{ matrix.os }}
+
+    steps:
+    - uses: actions/checkout@v3
+
+    - name: Set reusable strings
+      # Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file.
+      id: strings
+      shell: bash
+      run: |
+        echo "build-output-dir=${{ github.workspace }}/out/build" >> "$GITHUB_OUTPUT"
+
+    - name: Install Ubuntu build dependencies
+      if: matrix.os == 'ubuntu-latest'
+      run: |
+        sudo apt update
+        sudo apt install libgl-dev libx11-xcb-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxext-dev wayland-protocols libwayland-dev libxkbcommon-dev
+
+    - name: Set up Python
+      uses: actions/setup-python@v4
+      with:
+        python-version: 3.11
+
+    - name: Fetch dependencies
+      run: python ./tools/fetch_dawn_dependencies.py --use-test-deps --shallow
+
+    - name: Set up Ninja
+      uses: seanmiddleditch/gha-setup-ninja@master
+
+    - name: Set up Visual Studio environment
+      if: matrix.os == 'windows-latest'
+      uses: seanmiddleditch/gha-setup-vsdevenv@master
+
+    - name: Set up sccache
+      uses: mozilla-actions/sccache-action@v0.0.3
+
+    - name: Configure CMake
+      run: >
+        cmake -G Ninja -B ${{ steps.strings.outputs.build-output-dir }}
+        -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }}
+        -DCMAKE_C_COMPILER=${{ matrix.c_compiler }}
+        -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
+        -DCMAKE_C_COMPILER_LAUNCHER=sccache
+        -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
+        -S ${{ github.workspace }}
+      env:
+        SCCACHE_GHA_ENABLED: "true"
+
+    - name: Build
+      run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }}
+      env:
+        SCCACHE_GHA_ENABLED: "true"
+
+  golang:
+    name: Go Build and Test
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+
+    - 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 ./...