wasm-tools is needed at build time to generate the WebAssembly spec
tests (INCLUDE_WASM_SPEC_TESTS), and the setup action downloads it from
the bytecodealliance releases CDN for every build job. That CDN
intermittently returns 504, which fails otherwise-green CI runs.
Bake the pinned wasm-tools 1.243.0 into the ladybird-ci image so the
Linux container jobs, which are the bulk of the build matrix, get it
from the image instead of fetching it per run.
A follow-up will drop the per-job download for the container platforms
once this image is published. The macOS and Windows jobs run on native
runners that do not use this image, so they keep downloading the same
pinned version.
Let's not depend on a nightly pre-release, especially not just for a
linting option. We can enable the linter option once it lands in the
stable release.
By default, `rustfmt` persists the import granularity. In practice, most
Rust code has import granularity "Module" due to LSP's actions.
"Item" gets rid of import groupings and achieves cleaner diffs and
better conflict resolution. Better greppability is a positive side
effect.
Note: it's an unstable rustfmt feature. `cargo +nightly fmt` must be
used instead of `cargo fmt`.
Required for Qt AT-SPI2 bridge tests. The 26.04 bump gets us Qt 6.10 (we
need ≥6.8) and Orca 50.1 (we need ≥47) directly from apt — so we don’t
need a separate Qt install or Orca overlay.
This also gets us both clang-21 and clang++-21 — because Ubuntu’s own
26.04 repo has those, and bundles both into the same package. So we no
longer need to add the apt.llvm.org repo to get those.
Allows us to use this image for linting jobs as well. Also set explicit
alternatives for the toolchain, making the image authorative on the
versions being used. Switching between GCC and Clang is still possible
since both are present, but we no longer need to select the exact
versions.
The goal is to have a stable, reproducible build environment for Linux
amd64 and arm64 that we can simply pull in for CI build jobs. We've seen
that apt repositories can be temporarily unreachable or build dependency
versions are silently updated causing builds to fail. A nice benefit of
this is that we can skip most of the environment setup, which takes a
couple of minutes each run.