-
Notifications
You must be signed in to change notification settings - Fork 2
160 lines (126 loc) · 4.16 KB
/
testing.yml
File metadata and controls
160 lines (126 loc) · 4.16 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
name: Testing
on:
push:
pull_request:
env:
CARGO_TERM_COLOR: always
jobs:
format:
name: Formatting
runs-on: ubuntu-latest
steps:
- id: checkout
name: Checkout Repository
uses: actions/checkout@v5
- id: setup
name: Setup Toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: nightly
components: rustfmt
- id: format
name: Run Formatting-Checks
run: cargo fmt --check
test:
name: Test (${{ matrix.toolchain }})
runs-on: ubuntu-latest
needs: format
strategy:
matrix:
toolchain: [stable, nightly]
steps:
- id: checkout
name: Checkout Repository
uses: actions/checkout@v5
- id: setup
name: Setup Toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ matrix.toolchain }}
components: clippy
- id: cache
name: Enable Workflow Cache
uses: Swatinem/rust-cache@v2
- id: tools
name: Install Tools
uses: taiki-e/install-action@v2
with:
tool: cargo-nextest,cargo-machete
# ── Build (single compilation, reused by all subsequent steps) ──
- id: fetch
name: Download Dependencies
run: cargo fetch --verbose
- id: build
name: Build All Targets
run: cargo build --tests --benches --examples --workspace --all-targets --all-features --verbose
# ── Static Analysis (reuses build artifacts) ──
- id: docs-check
name: Check Documentation Builds
env:
RUSTDOCFLAGS: "-D warnings"
run: cargo doc --no-deps --bins --examples --workspace --all-features
- id: deps
name: Check Unused Dependencies
run: cargo machete
# ── Unit Tests (lib tests inside src/) ──
- id: test-unit
name: Run Unit Tests
run: cargo nextest run --lib --workspace --all-features
# ── Doc Tests ──
- id: test-docs
name: Run Documentation Tests
run: cargo test --doc --workspace
# ── Integration Tests (all test files in tests/ directory) ──
- id: test-integration
name: Run Integration Tests
run: cargo nextest run --test '*' --all-features
# ── Post-test Verification ──
- id: verify-test-isolation
name: Verify Test Isolation (data folder should be empty)
run: |
echo "Checking if data/ folder is polluted by tests..."
if [ -d "data" ]; then
FILE_COUNT=$(find data/ -mindepth 1 -type f | wc -l)
DIR_COUNT=$(find data/ -mindepth 1 -type d | wc -l)
echo "Files in data/: $FILE_COUNT"
echo "Subdirectories in data/: $DIR_COUNT"
if [ $FILE_COUNT -gt 0 ] || [ $DIR_COUNT -gt 0 ]; then
echo "❌ ERROR: Tests polluted the production data/ folder!"
echo "Contents of data/ folder:"
ls -laR data/
echo ""
echo "Tests must use temporary directories (TempWorkspace) with proper isolation."
echo "See docs/contributing/testing/ for best practices."
exit 1
else
echo "✅ Test isolation verified: data/ folder is clean"
fi
else
echo "✅ Test isolation verified: data/ folder does not exist"
fi
build:
name: Build on ${{ matrix.os }} (${{ matrix.toolchain }})
runs-on: ${{ matrix.os }}
needs: format
strategy:
matrix:
os: [macos-latest, windows-latest]
toolchain: [stable, nightly]
steps:
- id: checkout
name: Checkout Repository
uses: actions/checkout@v5
- id: setup
name: Setup Toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ matrix.toolchain }}
- id: cache
name: Enable Workflow Cache
uses: Swatinem/rust-cache@v2
- id: fetch
name: Download Dependencies
run: cargo fetch --verbose
- id: build
name: Build Project
run: cargo build --verbose --workspace --all-features