-
-
Notifications
You must be signed in to change notification settings - Fork 828
135 lines (116 loc) · 4.07 KB
/
test_rust.yml
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
name: Test Rust
on:
push:
branches: [master]
pull_request:
branches: [master]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
changes:
name: Paths filter
runs-on: ubuntu-22.04
outputs:
should_run: ${{ steps.filter.outputs.src }}
steps:
- uses: actions/checkout@v4
- uses: AurorNZ/paths-filter@v4
id: filter
with:
filters: |
src:
- '!web/package.json'
- '!web/package-lock.json'
- '!web/packages/**'
- '!**/*.md'
build:
needs: changes
if: needs.changes.outputs.should_run== 'true'
name: Test Rust ${{ matrix.rust_version }} / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.rust_version == 'nightly' || matrix.rust_version == 'beta' }}
strategy:
fail-fast: false
matrix:
rust_version: [stable]
os: [ubuntu-22.04, windows-latest, macos-latest]
include:
- rust_version: nightly
os: ubuntu-22.04
- rust_version: beta
os: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ matrix.rust_version }}
components: rustfmt, clippy
- name: Install Linux dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt install -y libasound2-dev libxcb-shape0-dev libxcb-xfixes0-dev libgtk-3-dev mesa-vulkan-drivers libpango1.0-dev
- name: Cache Cargo output
uses: Swatinem/rust-cache@v2
with:
shared-key: "desktop"
save-if: ${{ github.ref == 'refs/heads/master' }}
- name: Check formatting
if: runner.os == 'Linux'
run: cargo fmt --all -- --check
- name: Check clippy
# not critical on other platforms, and slows down Windows
if: runner.os == 'Linux'
# Don't fail the build for clippy on nightly, since we get a lot of false-positives
run: cargo clippy --all --all-features --tests ${{ (matrix.rust_version != 'nightly' && '-- -D warnings') || '' }}
- name: Check licensing and duplicates in used crates
if: ${{ runner.os == 'Linux' && matrix.rust_version == 'stable' }}
uses: EmbarkStudios/cargo-deny-action@v1
- name: Check documentation
if: runner.os == 'Linux'
run: cargo doc --no-deps --all-features
env:
RUSTDOCFLAGS: -D warnings
- name: Install cargo nextest
uses: taiki-e/install-action@v2
with:
tool: cargo-nextest
- name: Run tests with image tests
if: runner.os != 'macOS'
# TODO: Disallow retries in general once we can allow only after SIGABRT.
# See: https://github.com/nextest-rs/nextest/issues/1172
run: cargo nextest run --workspace --locked --no-fail-fast --retries 2 -j 4 --features imgtests,lzma,jpegxr
env:
XDG_RUNTIME_DIR: '' # dummy value, just to silence warnings about it missing
- name: Run tests without image tests
if: runner.os == 'macOS'
run: cargo nextest run --workspace --locked --no-fail-fast -j 4 --features lzma,jpegxr
env:
XDG_RUNTIME_DIR: '' # dummy value, just to silence warnings about it missing
- name: Upload images
if: failure()
uses: actions/upload-artifact@v3
with:
name: swf_images
path: |
tests*/**/*.actual*.png
tests*/**/*.difference*.png
check-required:
needs: changes
if: needs.changes.outputs.should_run == 'false'
name: Test Rust ${{ matrix.rust_version }} / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
rust_version: [stable]
os: [ubuntu-22.04, windows-latest, macos-latest]
include:
- rust_version: nightly
os: ubuntu-22.04
- rust_version: beta
os: ubuntu-22.04
steps:
- name: No-op
run: echo noop