`dtolnay/rust-toolchain@stable` installs a minimal profile. The `native`
job named no components, so every run that reached the Clippy step died
on
error: 'cargo-clippy' is not installed for the toolchain
'stable-aarch64-unknown-linux-gnu'
before clippy read a line of source. That is not a lint result; the step
had never run. The `fmt` job below always named `components: rustfmt`
correctly — this one never did.
Two lines of behaviour change. The rest is the comment explaining why the
step is left gating on `-D warnings` rather than softened: the workspace
is not clippy-clean (run 203's build alone emits ~13 rustc warnings that
`-D warnings` promotes to errors), and `continue-on-error` cannot tell
"debt not yet paid" from "debt paid". That debt is scoped in #13, the way
the rustfmt debt is in #12.
Run 203 is what made this visible. With the aarch64 fix in 64bb7da the
native job got all the way through:
cargo check --workspace ok 10m01s
cargo build --workspace ok 19m04s
cargo test --workspace ok 16m22s 214 passed, 0 failed
cargo clippy --workspace toolchain error
Refs #13
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01McNbzUeq1KRBWs4G6X2YVj
142 lines
5.3 KiB
YAML
142 lines
5.3 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [ main, develop ]
|
|
pull_request:
|
|
branches: [ main ]
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
RUST_BACKTRACE: 1
|
|
|
|
# ── What this file may assume about where it runs ────────────────────────────
|
|
#
|
|
# It runs on ONE self-hosted runner: `rpi5-runner`, aarch64, advertising
|
|
# ["ubuntu-latest", "ubuntu-24.04", "ubuntu-22.04"]. Nothing else exists.
|
|
#
|
|
# This file was written for GitHub's hosted fleet — three operating systems and
|
|
# x86_64 throughout — and had never once gone green here: 23 runs cancelled, 2
|
|
# waiting, zero successes. Two separate reasons, and both are configuration
|
|
# describing a world that is not this one:
|
|
#
|
|
# * `windows-latest` / `macos-latest` match no runner label, so those jobs sit
|
|
# in WAITING for ever. The run therefore never reaches a terminal state, and
|
|
# a pull request's checks never resolve either way — not red, just never
|
|
# finished. That is worse than a failure: a red check tells you something.
|
|
# * `--target x86_64-unknown-linux-gnu` on an aarch64 host makes every build a
|
|
# cross-compile, and `wayland-sys`'s build script dies on it —
|
|
# "pkg-config has not been configured to support cross-compilation".
|
|
#
|
|
# So: one job, on the machine that exists, building for the machine that exists.
|
|
# If a second architecture is ever wanted here it needs a second RUNNER, not a
|
|
# second matrix row.
|
|
|
|
jobs:
|
|
# ── Native build, on the one runner there is ────────────────────────────────
|
|
native:
|
|
name: Native — linux
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Rust toolchain
|
|
# `stable` installs a MINIMAL profile: rustc, cargo, rust-std and no
|
|
# more. Components have to be named. Without this line the Clippy step
|
|
# below dies on "'cargo-clippy' is not installed for the toolchain
|
|
# 'stable-aarch64-unknown-linux-gnu'" — which is not a lint result, it
|
|
# is the step never having run. The `fmt` job below always got this
|
|
# right; this one never did.
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
components: clippy
|
|
|
|
- name: Cache Cargo registry and build
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
# Linux: install Bevy's system dependencies (X11, Wayland, audio)
|
|
- name: Install Linux system dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
libasound2-dev \
|
|
libudev-dev \
|
|
libwayland-dev \
|
|
libxkbcommon-dev \
|
|
libx11-dev \
|
|
libxi-dev \
|
|
pkg-config
|
|
|
|
- name: Check (fast compile check)
|
|
run: cargo check --workspace
|
|
|
|
- name: Build (debug)
|
|
run: cargo build --workspace
|
|
|
|
- name: Run tests
|
|
run: cargo test --workspace
|
|
|
|
# This step has never once executed on this codebase: the toolchain above
|
|
# shipped without the component, so every run died on "not installed"
|
|
# before clippy saw a line of source. Its result was never pass or fail,
|
|
# only unmeasured. With the component installed it becomes a real check,
|
|
# and the first honest thing it will report is that the workspace is not
|
|
# clean — the build already emits ~13 plain rustc warnings (unused
|
|
# imports, unused variables, needless `mut`, dead fields) that
|
|
# `-D warnings` promotes to errors, before clippy's own lints are counted.
|
|
#
|
|
# Left gating on purpose. A red check that measures something is worth
|
|
# more than a green one that measures nothing, and the alternative —
|
|
# `continue-on-error`, or dropping `-D warnings` — cannot tell "debt not
|
|
# yet paid" from "debt paid", which is the shape PROTOCOL.md forbids.
|
|
# The debt is scoped in #13, as the rustfmt debt is in #12.
|
|
- name: Clippy
|
|
run: cargo clippy --workspace -- -D warnings
|
|
|
|
# ── WASM / Web build ─────────────────────────────────────────────────────────
|
|
wasm:
|
|
name: WASM — Web
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Rust toolchain + WASM target
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
targets: wasm32-unknown-unknown
|
|
|
|
- name: Cache Cargo
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Install Trunk
|
|
uses: jetli/trunk-action@v0.5.0
|
|
|
|
- name: Check WASM compile
|
|
run: >
|
|
cargo check
|
|
--target wasm32-unknown-unknown
|
|
-p sylpheed-viewer
|
|
-p sylpheed-formats
|
|
|
|
- name: Build WASM release with Trunk
|
|
run: trunk build --release
|
|
|
|
- name: Upload WASM dist artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: web-dist
|
|
path: dist/
|
|
|
|
# ── Format check ─────────────────────────────────────────────────────────────
|
|
fmt:
|
|
name: Formatting
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
components: rustfmt
|
|
- run: cargo fmt --all -- --check
|