11name : CI
2+
23on :
34 push :
4- branches : [ master ]
5+ branches : [master]
56 pull_request :
6- branches : [ master, 2.x-dev ]
7+ branches : [master, 2.x-dev]
78
89env :
910 CARGO_TERM_COLOR : always
1011 RUST_BACKTRACE : 1
11- # Note: nmrs requires a Wayland compositor (Sway, Hyprland, GNOME Wayland, etc.)
12- # CI tests validate compilation and core functionality only
1312
1413jobs :
15- fmt :
16- name : format
14+ format :
15+ name : Format Check
1716 runs-on : ubuntu-latest
1817 steps :
1918 - uses : actions/checkout@v6
@@ -22,74 +21,12 @@ jobs:
2221 components : rustfmt
2322 - run : cargo fmt --all -- --check
2423
25- semver :
26- name : semver-checks
27- runs-on : ubuntu-latest
28- steps :
29- - uses : actions/checkout@v6
30- with :
31- fetch-depth : 0 # Need full history for semver checks
32- - name : Install dependencies
33- run : |
34- sudo apt-get update
35- sudo apt-get install -y \
36- pkg-config \
37- libglib2.0-dev \
38- libgirepository1.0-dev \
39- libgdk-pixbuf2.0-dev \
40- libpango1.0-dev \
41- libcairo2-dev \
42- libgtk-4-dev \
43- libadwaita-1-dev
44- - uses : dtolnay/rust-toolchain@stable
45- - uses : actions/cache@v5
46- with :
47- path : |
48- ~/.cargo/registry
49- ~/.cargo/git
50- target
51- key : ${{ runner.os }}-semver-${{ hashFiles('**/Cargo.lock') }}
52- restore-keys : |
53- ${{ runner.os }}-semver-
54- - name : Install cargo-semver-checks
55- run : cargo install cargo-semver-checks --locked
56- - name : Check semver compliance (nmrs)
57- run : |
58- # Get the latest release tag for baseline
59- LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
60- if [ -n "$LATEST_TAG" ]; then
61- echo "Checking against baseline: $LATEST_TAG"
62- # Check if the package exists in the baseline (handle renames)
63- if git show "$LATEST_TAG:nmrs/Cargo.toml" >/dev/null 2>&1; then
64- cargo semver-checks check-release --package nmrs --baseline-rev "$LATEST_TAG"
65- else
66- echo "Package 'nmrs' not found in baseline $LATEST_TAG (likely renamed), skipping semver check"
67- fi
68- else
69- echo "No previous tags found, skipping semver check for nmrs"
70- fi
71- - name : Check semver compliance (nmrs-gui)
72- run : |
73- LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
74- if [ -n "$LATEST_TAG" ]; then
75- echo "Checking against baseline: $LATEST_TAG"
76- # Check if the package exists in the baseline (handle renames)
77- if git show "$LATEST_TAG:nmrs-gui/Cargo.toml" >/dev/null 2>&1; then
78- cargo semver-checks check-release --package nmrs-gui --baseline-rev "$LATEST_TAG" || true
79- else
80- echo "Package 'nmrs-gui' not found in baseline $LATEST_TAG (likely renamed), skipping semver check"
81- fi
82- else
83- echo "No previous tags found, skipping semver check for nmrs-gui"
84- fi
85- # nmrs-gui may fail due to GTK bindings - continue anyway
86- continue-on-error : true
87-
8824 clippy :
89- name : clippy
25+ name : Clippy Lints
9026 runs-on : ubuntu-latest
9127 steps :
9228 - uses : actions/checkout@v6
29+
9330 - name : Install dependencies
9431 run : |
9532 sudo apt-get update
@@ -102,9 +39,11 @@ jobs:
10239 libcairo2-dev \
10340 libgtk-4-dev \
10441 libadwaita-1-dev
42+
10543 - uses : dtolnay/rust-toolchain@stable
10644 with :
10745 components : clippy
46+
10847 - uses : actions/cache@v5
10948 with :
11049 path : |
@@ -114,13 +53,15 @@ jobs:
11453 key : ${{ runner.os }}-clippy-${{ hashFiles('**/Cargo.lock') }}
11554 restore-keys : |
11655 ${{ runner.os }}-clippy-
56+
11757 - run : cargo clippy --all-targets --all-features -- -D warnings
11858
119- test-unit :
120- name : unit-tests
59+ test :
60+ name : Unit Tests
12161 runs-on : ubuntu-latest
12262 steps :
12363 - uses : actions/checkout@v6
64+
12465 - name : Install dependencies
12566 run : |
12667 sudo apt-get update
@@ -132,9 +73,10 @@ jobs:
13273 libpango1.0-dev \
13374 libcairo2-dev \
13475 libgtk-4-dev \
135- libadwaita-1-dev \
136- xvfb
76+ libadwaita-1-dev
77+
13778 - uses : dtolnay/rust-toolchain@stable
79+
13880 - uses : actions/cache@v5
13981 with :
14082 path : |
@@ -144,67 +86,24 @@ jobs:
14486 key : ${{ runner.os }}-test-${{ hashFiles('**/Cargo.lock') }}
14587 restore-keys : |
14688 ${{ runner.os }}-test-
89+
14790 - name : Run unit tests
14891 run : cargo test --lib --all-features --workspace
149- - name : Run UI tests with virtual display
150- run : |
151- # Note: nmrs UI requires a Wayland compositor at runtime
152- # These smoke tests only verify compilation and basic GTK initialization
153- xvfb-run -a cargo test --test smoke_test --test style_test
154-
155- networkmanager :
156- name : networkmanager
157- runs-on : ubuntu-latest
158- steps :
159- - uses : actions/checkout@v6
160- - name : Install dependencies
161- run : |
162- sudo apt-get update
163- sudo apt-get install -y \
164- pkg-config \
165- libglib2.0-dev \
166- libgirepository1.0-dev \
167- libgdk-pixbuf2.0-dev \
168- libpango1.0-dev \
169- libcairo2-dev \
170- libgtk-4-dev \
171- libadwaita-1-dev \
172- network-manager \
173- dbus-x11
174- - uses : dtolnay/rust-toolchain@stable
175- - uses : actions/cache@v5
176- with :
177- path : |
178- ~/.cargo/registry
179- ~/.cargo/git
180- target
181- key : ${{ runner.os }}-integration-${{ hashFiles('**/Cargo.lock') }}
182- restore-keys : |
183- ${{ runner.os }}-integration-
184- - name : Start D-Bus system bus
185- run : |
186- sudo systemctl start dbus
187- - name : Verify integration tests compile
188- run : cargo test --test integration_test --all-features --no-run
189- - name : Start NetworkManager
190- run : |
191- sudo systemctl start NetworkManager
192- sleep 3
193- - name : Run integration tests
194- run : sudo -E env "PATH=$PATH" $(which cargo) test --test integration_test --all-features -- --nocapture || true
19592
19693 build :
197- name : build (${{ matrix.target }})
94+ name : Build (${{ matrix.target }})
19895 runs-on : ubuntu-latest
19996 strategy :
97+ fail-fast : false
20098 matrix :
20199 include :
202100 - target : x86_64-unknown-linux-gnu
203- packages : nmrs-gui
101+ packages : nmrs nmrs -gui
204102 - target : aarch64-unknown-linux-gnu
205103 packages : nmrs
206104 steps :
207105 - uses : actions/checkout@v6
106+
208107 - name : Install dependencies
209108 run : |
210109 sudo apt-get update
@@ -217,12 +116,15 @@ jobs:
217116 libcairo2-dev \
218117 libgtk-4-dev \
219118 libadwaita-1-dev
119+
220120 - name : Install cross-compilation tools
221121 if : matrix.target == 'aarch64-unknown-linux-gnu'
222122 run : sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
123+
223124 - uses : dtolnay/rust-toolchain@stable
224125 with :
225126 targets : ${{ matrix.target }}
127+
226128 - uses : actions/cache@v5
227129 with :
228130 path : |
@@ -232,23 +134,13 @@ jobs:
232134 key : ${{ runner.os }}-build-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
233135 restore-keys : |
234136 ${{ runner.os }}-build-${{ matrix.target }}-
235- - name : Build
236- run : cargo build --release --target ${{ matrix.target }} --package ${{ matrix.packages }}
137+
138+ - name : Build ${{ matrix.packages }}
139+ run : |
140+ for package in ${{ matrix.packages }}; do
141+ echo "Building $package for ${{ matrix.target }}"
142+ cargo build --release --target ${{ matrix.target }} --package $package
143+ done
237144 env :
238145 CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER : aarch64-linux-gnu-gcc
239146 PKG_CONFIG_ALLOW_CROSS : 1
240-
241- audit :
242- name : audit
243- runs-on : ubuntu-latest
244- steps :
245- - uses : actions/checkout@v6
246- - uses : dtolnay/rust-toolchain@stable
247- - uses : actions/cache@v5
248- with :
249- path : |
250- ~/.cargo/registry
251- ~/.cargo/git
252- key : ${{ runner.os }}-audit-${{ hashFiles('**/Cargo.lock') }}
253- - run : cargo install cargo-audit
254- - run : cargo audit
0 commit comments