Skip to content

ci: build the Nix flake and check the minimum Rust version - #436

Merged
devmobasa merged 3 commits into
mainfrom
ci/nix-build-and-msrv
Nov 3, 2026
Merged

devmobasa merged 3 commits into
mainfrom
ci/nix-build-and-msrv

Conversation

@devmobasa

Copy link
Copy Markdown
Owner

Summary

This PR adds three CI changes, one commit each:

  • Build the Nix flake. The "Nix flake" job only ran nix build --dry-run,
    which evaluates the packages but never builds them. [BUG] Installing via nix flake fails #432 shipped because of
    this: the check phase failed only during a real build.
  • Check the minimum Rust version. Both manifests declare
    rust-version = "1.99.0" so nixpkgs can build Wayscriber. Every job used
    the 1.99.1 development toolchain, so nothing tested that floor.
  • Pin the GTK widget job to ubuntu-24.04. ubuntu-latest is moving to a
    newer image, and with newer GTK and Weston the configurator contract below
    fails.

Changes

ci: build the Nix flake instead of only evaluating it

  • Adds check nix-build. It builds .#wayscriber, .#wayscriber-configurator,
    and the x86_64-linux development shell, including each package's check
    phase, and prints the build logs. It uses the same list of flake outputs as
    check nix-instantiation.
  • The "Nix flake" job runs it after the existing checks. Its timeout rises
    from 20 to 45 minutes for the release builds. The check name stays the same.

ci: check the workspace with the minimum Rust version

  • Adds ci minimum-rust and a new "Minimum Rust" job that runs it. The
    command:
    • reads rust-version from both manifests, which must agree
    • installs that toolchain with rustup, using the minimal profile and
      --no-self-update
    • runs cargo +<version> check --locked --workspace --all-targets with
      --all-features and with --no-default-features
  • The explicit +<version> is needed because rust-toolchain.toml selects
    1.99.1 inside the checkout.
  • version check also requires both crates to declare the same
    rust-version, and rust-toolchain.toml to pin a channel no older than
    it.
  • The version-bump test fixture now writes the real rust-version into its
    synthetic manifests.

ci: pin the GTK widget job to Ubuntu 24.04

app::component::tests::language_changes_rebuild_the_window_in_place fails
with GTK 4.24 and Weston 15. Shortcut recording ends before the first
language switch. Giving Weston a fake seat (--fake-seat) removes the seat
warning, but the test still fails, so a missing seat is not the cause. The
job passes on Ubuntu 24.04. The pin keeps a runner image change from
breaking this required check until the contract is investigated separately.

Validation

  • The C# tool tests pass, including new tests that record the exact commands
    check nix-instantiation, check nix-build, and ci minimum-rust would
    run, and new version check cases for both Rust rules.
  • dotnet format passes, and so do version check, assets check,
    check nixpkgs-recipe, check legacy-tools, and
    check rust-source-coverage.
  • ci minimum-rust was run locally. It installs and selects 1.99.0, and
    both feature sets check cleanly.
  • Each commit builds and passes the C# tests on its own.
  • The new "Nix flake" build step and the "Minimum Rust" job run for the first
    time on this PR.

Notes

  • "Minimum Rust" is a new check name. Add it to branch protection if it
    should be required.
  • The flake also advertises aarch64-linux, which still has no build job. An
    Arm runner lane is a possible follow-up.

The "Nix flake" job ran `check nix-instantiation`, which is
`nix build --dry-run`: it evaluates the packages and the development
shell but never builds them, so a check phase that fails only at build
time, as in #432, still passed CI.

Add `check nix-build`, which builds the same flake outputs and prints
their logs, and run it in the job after the instantiation check. Both
commands share one list of flake outputs. Raise the job timeout for the
release builds.
Both manifests declare rust-version 1.99.0 so that nixpkgs, which ships
rustc 1.99.0, can build Wayscriber, but every CI job used the 1.99.1
development toolchain, so nothing checked that the floor still builds.

Add `ci minimum-rust` and a "Minimum Rust" job that runs it. The command
reads rust-version from both manifests, which must agree, installs that
toolchain with rustup, and runs `cargo +<version> check --locked
--workspace --all-targets` with all features and with no default
features. The explicit toolchain is needed because rust-toolchain.toml
selects 1.99.1 inside the checkout.

`version check` now also requires both crates to declare the same
rust-version and rust-toolchain.toml to pin a channel no older than it.
The configurator's language-rebuild contract fails on a workstation with
GTK 4.24 and Weston 15: shortcut recording ends before the first
language switch. The CI job passes on Ubuntu 24.04, while ubuntu-latest
is moving to a newer image. Pin the job until the contract is checked
against newer GTK and Weston, so a runner image change cannot break the
required check unnoticed.
@devmobasa
devmobasa merged commit dfa3805 into main Nov 3, 2026
6 checks passed
@devmobasa
devmobasa deleted the ci/nix-build-and-msrv branch November 4, 2026 06:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant