-
Notifications
You must be signed in to change notification settings - Fork 334
152 lines (143 loc) · 5.24 KB
/
main.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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
name: CI
on:
push:
branches: ["main"]
pull_request:
merge_group:
types: [checks_requested]
env:
CARGO_NET_GIT_FETCH_WITH_CLI: true
jobs:
Test:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
rust: [1.63.0, 1.67.0, stable, beta, nightly]
exclude:
- os: macos-latest
rust: 1.67.0
- os: windows-latest
rust: 1.67.0
- os: macos-latest
rust: beta
- os: windows-latest
rust: beta
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
components: ${{ matrix.rust == 'nightly' && 'rust-src' || '' }}
# Add toolchain for no_std tests
- run: rustup toolchain install nightly
- name: Downgrade deps on Rust 1.63.0
if: |
matrix.rust == '1.63.0'
run: |
cargo update -p idna_adapter --precise 1.1.0
- name: Downgrade deps on Rust 1.67.0
if: |
matrix.rust == '1.67.0'
run: |
cargo update -p zerofrom --precise 0.1.4
cargo update -p yoke --precise 0.7.4
cargo update -p litemap --precise 0.7.3
- name: Add `aarch64-unknown-none` toolchain for `no_std` tests
if: |
matrix.os == 'ubuntu-latest' &&
matrix.rust == 'nightly'
run: rustup target add aarch64-unknown-none && rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
- run: cargo build --all-targets
# Run tests
- name: Run tests
run: cargo test
# Run tests enabling the serde feature
- name: Run tests with the serde feature
run: cargo test --features "url/serde,url/expose_internals"
# The #[debugger_visualizer] attribute is currently gated behind a feature flag until #[debugger_visualizer]
# is available in all rustc versions past our MSRV. As such, we only run the tests on newer rustc versions.
- name: Run debugger_visualizer tests
if: |
matrix.os == 'windows-latest' &&
matrix.rust != '1.63.0' &&
matrix.rust != '1.67.0'
run: cargo test --test debugger_visualizer --features "url/debugger_visualizer,url_debug_tests/debugger_visualizer" -- --test-threads=1 || echo "debugger test failed"
continue-on-error: true # Fails on GH actions, but not locally.
- name: Test `no_std` support
run: cargo test --no-default-features --features=alloc
- name: Build `url` crate for `aarch64-unknown-none` with `no_std`
if: |
matrix.os == 'ubuntu-latest' &&
matrix.rust == 'nightly'
run: >
cd url
&& cargo check --target aarch64-unknown-none -v --no-default-features
- name: Run tests with sanitizers
if: (matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest') && matrix.rust == 'nightly'
env:
ASAN_OPTIONS: detect_leaks=1:detect_stack_use_after_return=1
run: |
if [ "${{ matrix.os }}" = "ubuntu-latest" ]; then
sudo apt-get install -y --no-install-recommends llvm
TARGET="x86_64-unknown-linux-gnu"
SANITIZERS="address thread leak memory"
elif [ "${{ matrix.os }}" = "macos-latest" ]; then
TARGET="aarch64-apple-darwin"
# no memory and leak sanitizer support yet
SANITIZERS="address thread"
# Suppress non-crate leaks on macOS. TODO: Check occasionally if these are still needed.
{
echo "leak:dyld4::RuntimeState"
echo "leak:fetchInitializingClassList"
} > suppressions.txt
export LSAN_OPTIONS="suppressions=$(pwd)/suppressions.txt"
fi
for sanitizer in $SANITIZERS; do
echo "Running tests with $sanitizer sanitizer..."
export RUSTFLAGS="-Z sanitizer=$sanitizer"
export RUSTDOCFLAGS="$RUSTFLAGS"
cargo +nightly test -Z build-std --target "$TARGET"
done
WASM:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Install wasm-pack
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- run: cargo build --target wasm32-unknown-unknown
- run: cd url && wasm-pack test --headless --chrome
- run: cd url && wasm-pack test --headless --firefox
Lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- run: cargo fmt --all --check
- run: cargo clippy --workspace --all-targets -- -D warnings
if: always()
Audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: EmbarkStudios/cargo-deny-action@v1
Result:
name: Result
runs-on: ubuntu-latest
needs:
- "Test"
- "WASM"
- "Lint"
- "Audit"
steps:
- name: Mark the job as successful
run: exit 0
if: success()
- name: Mark the job as unsuccessful
run: exit 1
if: "!success()"