forked from gfx-rs/wgpu
-
Notifications
You must be signed in to change notification settings - Fork 0
190 lines (164 loc) · 6.21 KB
/
Copy pathcts.yml
File metadata and controls
190 lines (164 loc) · 6.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
name: CTS
on:
push:
branches-ignore: [
# Renovate branches are always PRs, so they will be covered
# by the pull_request event.
"renovate/**",
# Branches with the `gh-readonly-queue` prefix are used by the
# merge queue, so they are already covered by the `merge_group` event.
"gh-readonly-queue/**",
]
pull_request:
merge_group:
env:
#
# Keep in sync with ci.yml
#
REPO_MSRV: "1.93"
CARGO_INCREMENTAL: false
CARGO_TERM_COLOR: always
RUST_BACKTRACE: full
RUSTFLAGS: -D warnings
RUSTDOCFLAGS: -D warnings
#
# Runtime configuration
#
LVP_POISON_MEMORY: true # to test memory init; see docs/testing.md
# cts_runner uses dxc by default
# Every time a PR is pushed to, cancel any previous jobs. This
# makes us behave nicer to github and get faster turnaround times
# on PRs that are pushed to multiple times in rapid succession.
concurrency:
group: ${{github.workflow}}-${{github.ref}}
cancel-in-progress: ${{github.event_name == 'pull_request'}}
jobs:
cts:
strategy:
fail-fast: false
matrix:
suite: ["API Operation", "API Validation", "Other"]
platform: ["Windows x86_64", "Mac aarch64", "Linux x86_64"]
include:
# When an `include` item matches existing matrix entries, the additional items are
# added only to the matching entries. The two lines above define the matrix, and
# the items below attach the rest of the configuration values that apply to suites
# and platforms.
- suite: API Operation
filter: "^webgpu:api,operation,"
- suite: API Validation
filter: "^webgpu:api,validation,"
- suite: Other
filter: "!^webgpu:api,operation,|^webgpu:api,validation,"
# Windows
- platform: Windows x86_64
os: windows-2022
target: x86_64-pc-windows-msvc
backend: dx12
shell: bash
# Mac
# Need to use `zsh` for `source <(cmd)` because it doesn't work in
# ancient MacOS bash. `zsh` is a non-standard shell in GitHub
# actions, so must be specified as a command string.
- platform: Mac aarch64
os: macos-14
target: x86_64-apple-darwin
backend: metal
shell: zsh {0}
# Linux
- platform: Linux x86_64
os: ubuntu-24.04
target: x86_64-unknown-linux-gnu
backend: vulkan
shell: bash
name: ${{ matrix.suite }} ${{ matrix.platform }}
runs-on: ${{ matrix.os }}
defaults:
run:
# Substitution of ${{ matrix.shell }} appears not to work in per-step configuration
shell: ${{ matrix.shell }}
steps:
- name: checkout repo
uses: actions/checkout@v6
- name: Install Repo MSRV toolchain
run: |
rustup toolchain install ${{ env.REPO_MSRV }} --no-self-update --profile=minimal --target ${{ matrix.target }} --component llvm-tools
rustup override set ${{ env.REPO_MSRV }}
cargo -V
- name: Install `cargo-llvm-cov`
uses: taiki-e/install-action@v2
with:
tool: cargo-llvm-cov
- name: caching
uses: Swatinem/rust-cache@v2
with:
# The version number can be incremented for cache busting.
prefix-key: v3-rust-${{ hashFiles('cts_runner/revision.txt') }}
env-vars: ImageVersion
cache-directories: cts
# Save the cache from the `other` job because it also runs the cts_runner
# integration tests.
save-if: ${{ github.ref == 'refs/heads/trunk' && matrix.suite == 'other' }}
# We enable line numbers for panics, but that's it
- name: disable debug
shell: bash
run: |
mkdir -p .cargo
cat <<EOF >> .cargo/config.toml
[profile.dev]
debug = "line-tables-only"
EOF
# Unlike regular `llvm-cov run`, which builds artifacts in `target/llvm-cov-target`,
# `llvm-cov show-env` uses the regular target directory for artifacts. Because of this,
# this job configures the `install-mesa` and `install-warp` actions with the regular
# target directory, not the `llvm-cov-target` directory.
#
# The `GITHUB_ENV` file is not subject to shell expansion, so we need to un-escape the
# `llvm-cov show-env` output.
- name: Set llvm-cov environment
shell: bash
run: |
cargo llvm-cov --no-cfg-coverage show-env | while read -r assignment; do
key="${assignment%%=*}"
eval "$assignment"
echo "$key=${!key}" >> "$GITHUB_ENV"
done
- name: (Windows) Install DXC
if: matrix.os == 'windows-2022'
uses: ./.github/actions/install-dxc
# Note: `target-dir` is intentionally different from other jobs.
# See note above about `llvm-cov show-env`.
- name: (Windows) Install WARP
if: matrix.os == 'windows-2022'
uses: ./.github/actions/install-warp
with:
target-dir: "target/debug"
- name: (Linux) Install Mesa
if: matrix.os == 'ubuntu-24.04'
uses: ./.github/actions/install-mesa
with:
target-dir: "target/debug"
# Some of these tests check stdout, so we explicitly set the backend
# to avoid getting EGL messages in the output.
- name: Test cts_runner
if: matrix.suite == 'other'
shell: bash
run: |
export LLVM_PROFILE_FILE=${{ github.workspace }}/target/wgpu-%p-%m.profraw
export DENO_WEBGPU_BACKEND=${{ matrix.backend }}
cargo --locked test -p cts_runner
- name: Run CTS
shell: bash
run: cargo --locked xtask cts --llvm-cov --backend ${{ matrix.backend }} --filter '${{matrix.filter }}'
- name: Generate coverage report
id: coverage
continue-on-error: true
run: |
set -e
cargo --locked llvm-cov report --lcov --output-path lcov.info
- name: Upload coverage report to Codecov
uses: codecov/codecov-action@v7
if: steps.coverage.outcome == 'success'
with:
files: lcov.info
token: ${{ secrets.CODECOV_TOKEN }}