From 0e4452b625696a4b8397858994cadda17e124606 Mon Sep 17 00:00:00 2001 From: Alex Zenla Date: Sun, 2 Aug 2026 19:02:09 -0700 Subject: [PATCH] chore(upgrade): upgrade to rust v1.97.1, bump deps and migrate, bump images (#95) --- Cargo.lock | 97 ++++++++++++++----------- Cargo.toml | 16 ++-- Dockerfile | 2 +- crates/boot/src/drivers.rs | 2 +- crates/boot/src/menu.rs | 10 +-- crates/boot/src/options.rs | 10 ++- hack/dev/boot/Dockerfile | 2 +- hack/dev/kernel/Dockerfile | 6 +- hack/dev/utils/Dockerfile.copy-direct | 2 +- hack/dev/utils/Dockerfile.copy-polyfill | 2 +- hack/dev/vm/Dockerfile.initramfs | 4 +- hack/dev/vm/Dockerfile.ovmf | 2 +- hack/dev/vm/Dockerfile.xen | 2 +- rust-toolchain.toml | 2 +- 14 files changed, 83 insertions(+), 76 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a8ec5bf..9749014 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "bit_field" @@ -16,15 +16,15 @@ checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] @@ -46,9 +46,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ "hybrid-array", ] @@ -129,9 +129,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" dependencies = [ "typenum", ] @@ -144,9 +144,9 @@ checksum = "534d589df1ef528a238f4bc4b1db081a1280f3aedf2695fd8971e9853a7fa4f6" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "lock_api" @@ -159,15 +159,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -189,14 +189,14 @@ checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -209,9 +209,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -219,22 +219,22 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -265,18 +265,29 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "spin" -version = "0.11.0" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "783f3f6f6b01e295a669edfc402133a5f2553d1f0e81284b3ba4594e80bdd4a2" +checksum = "8abadc99fd9c7bbb7d0ca2b31d72a067d0c0dcd7aad25ab8cac71ba91417694b" dependencies = [ "lock_api", ] [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -285,9 +296,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" dependencies = [ "serde_core", "serde_spanned", @@ -307,18 +318,18 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "ucs2" @@ -331,9 +342,9 @@ dependencies = [ [[package]] name = "uefi" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66ab9569afdd1e33a31d8002343aa1df594f055347b1a66136bf9dd6cbc3ec37" +checksum = "a58ad7512f7c38b58aa536c3839dbb1d5a122d14a7e2245b06ded49edcb7585a" dependencies = [ "bitflags", "cfg-if", @@ -353,14 +364,14 @@ checksum = "4687412b5ac74d245d5bfb1733ede50c31be19bf8a4b6a967a29b451bab49e67" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "uefi-raw" -version = "0.14.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3775e5934877acaef4b00f254f252df1e2266903c31e51455c117f4f2824eda" +checksum = "1a36f49db0b04a8dfd246a26ddf8d2526a2ffd8cf946ae7fe603fd0c5fbd2786" dependencies = [ "bitflags", "uguid", @@ -380,6 +391,6 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" diff --git a/Cargo.toml b/Cargo.toml index 178a087..a5adfc1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,13 +17,13 @@ repository = "https://github.com/edera-dev/sprout" edition = "2024" [workspace.dependencies] -bitflags = "2.11.1" -log = "0.4.29" -spin = "0.11.0" -uefi-raw = "0.14.0" +bitflags = "2.13.1" +log = "0.4.33" +spin = "0.12.2" +uefi-raw = "0.15.1" [workspace.dependencies.anyhow] -version = "1.0.102" +version = "1.0.104" default-features = false [workspace.dependencies.hex] @@ -37,7 +37,7 @@ default-features = false features = ["alloc"] [workspace.dependencies.serde] -version = "1.0.228" +version = "1.0.229" default-features = false features = ["alloc", "derive"] @@ -50,12 +50,12 @@ version = "2.0.1" default-features = false [workspace.dependencies.toml] -version = "1.1.2" +version = "1.1.3" default-features = false features = ["serde", "parse"] [workspace.dependencies.uefi] -version = "0.37.0" +version = "0.39.0" default-features = false features = ["alloc", "global_allocator", "panic_handler"] diff --git a/Dockerfile b/Dockerfile index 2295478..1220955 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ ARG RUST_PROFILE=release ARG RUST_TARGET_SUBDIR=release -FROM --platform=$BUILDPLATFORM rust:1.93.0-alpine@sha256:69d7b9d9aeaf108a1419d9a7fcf7860dcc043e9dbd1ab7ce88e44228774d99e9 AS build +FROM --platform=$BUILDPLATFORM rust:1.97.1-alpine@sha256:3c38f3f82c2f3d73da3b38e18d279393a04cb43ddded0e35088a8c3324d40900 AS build RUN apk --no-cache add musl-dev busybox-static ARG RUST_PROFILE RUN adduser -S -s /bin/sh build diff --git a/crates/boot/src/drivers.rs b/crates/boot/src/drivers.rs index 62d9b90..9ec151a 100644 --- a/crates/boot/src/drivers.rs +++ b/crates/boot/src/drivers.rs @@ -49,7 +49,7 @@ fn reconnect() -> Result<()> { for handle in handles.iter() { // Ignore the result as there is nothing we can do if reconnecting a controller fails. // This is also likely to fail in some cases but should fail safely. - let _ = uefi::boot::connect_controller(*handle, None, None, true); + let _ = uefi::boot::connect_controller(*handle, &[], None, true); } Ok(()) diff --git a/crates/boot/src/menu.rs b/crates/boot/src/menu.rs index b293ba2..08e204b 100644 --- a/crates/boot/src/menu.rs +++ b/crates/boot/src/menu.rs @@ -44,16 +44,8 @@ fn read(input: &mut Input, timeout: &Duration) -> Result { .context("unable to create timer event")? }; - // The timeout is in increments of 100 nanoseconds. - let timeout_hundred_nanos = timeout.as_nanos() / 100; - - // Check if the timeout is too large to fit into an u64. - if timeout_hundred_nanos > u64::MAX as u128 { - bail!("timeout duration overflow"); - } - // Set a timer to trigger after the specified duration. - let trigger = TimerTrigger::Relative(timeout_hundred_nanos as u64); + let trigger = TimerTrigger::Relative(*timeout); uefi::boot::set_timer(&timer_event, trigger).context("unable to set timeout timer")?; let mut events = vec![timer_event, key_event]; diff --git a/crates/boot/src/options.rs b/crates/boot/src/options.rs index 512eb9e..0d38547 100644 --- a/crates/boot/src/options.rs +++ b/crates/boot/src/options.rs @@ -1,5 +1,5 @@ use alloc::string::{String, ToString}; -use anyhow::Result; +use anyhow::{Context, Result, anyhow}; use core::ptr::null_mut; use jaarg::{ ErrorUsageWriter, ErrorUsageWriterContext, HelpWriter, HelpWriterContext, Opt, Opts, @@ -131,11 +131,15 @@ impl SproutOptions { ) { ParseResult::ContinueSuccess => Ok(result), ParseResult::ExitSuccess => unsafe { - uefi::boot::exit(uefi::boot::image_handle(), Status::SUCCESS, 0, null_mut()); + uefi::boot::exit(uefi::boot::image_handle(), Status::SUCCESS, 0, null_mut()) + .context("unable to exit")?; + Err(anyhow!("unable to exit")) }, ParseResult::ExitError => unsafe { - uefi::boot::exit(uefi::boot::image_handle(), Status::ABORTED, 0, null_mut()); + uefi::boot::exit(uefi::boot::image_handle(), Status::ABORTED, 0, null_mut()) + .context("unable to exit")?; + Err(anyhow!("unable to exit")) }, } } diff --git a/hack/dev/boot/Dockerfile b/hack/dev/boot/Dockerfile index 54813b2..c846c64 100644 --- a/hack/dev/boot/Dockerfile +++ b/hack/dev/boot/Dockerfile @@ -1,4 +1,4 @@ -FROM --platform=$BUILDPLATFORM debian:trixie@sha256:2c91e484d93f0830a7e05a2b9d92a7b102be7cab562198b984a84fdbc7806d91 AS build +FROM --platform=$BUILDPLATFORM debian:trixie@sha256:fac46bff2e02f51425b6e33b0e1169f55dfb053d83511ca28aa50c09fd5ed7a4 AS build ARG BUILDPLATFORM ARG EFI_NAME RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -y \ diff --git a/hack/dev/kernel/Dockerfile b/hack/dev/kernel/Dockerfile index fb60354..6f0ff12 100644 --- a/hack/dev/kernel/Dockerfile +++ b/hack/dev/kernel/Dockerfile @@ -1,7 +1,7 @@ -ARG KERNEL_SOURCE_URL=https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.18.2.tar.xz -ARG KERNEL_CHECKSUM=sha256:558c6bbab749492b34f99827fe807b0039a744693c21d3a7e03b3a48edaab96a +ARG KERNEL_SOURCE_URL=https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.18.41.tar.xz +ARG KERNEL_CHECKSUM=sha256:17fc72f0f8d4a8a8633a5d20085f5d9c5a5ec51ee896a0b7ae1ec25da31273ea -FROM --platform=$BUILDPLATFORM debian:trixie@sha256:2c91e484d93f0830a7e05a2b9d92a7b102be7cab562198b984a84fdbc7806d91 AS buildenv +FROM --platform=$BUILDPLATFORM debian:trixie@sha256:fac46bff2e02f51425b6e33b0e1169f55dfb053d83511ca28aa50c09fd5ed7a4 AS buildenv RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -y \ build-essential squashfs-tools python3-yaml \ patch diffutils sed mawk findutils zstd \ diff --git a/hack/dev/utils/Dockerfile.copy-direct b/hack/dev/utils/Dockerfile.copy-direct index f91dd99..dc0f5fb 100644 --- a/hack/dev/utils/Dockerfile.copy-direct +++ b/hack/dev/utils/Dockerfile.copy-direct @@ -1 +1 @@ -FROM --platform=$BUILDPLATFORM debian:trixie@sha256:2c91e484d93f0830a7e05a2b9d92a7b102be7cab562198b984a84fdbc7806d91 +FROM --platform=$BUILDPLATFORM debian:trixie@sha256:fac46bff2e02f51425b6e33b0e1169f55dfb053d83511ca28aa50c09fd5ed7a4 diff --git a/hack/dev/utils/Dockerfile.copy-polyfill b/hack/dev/utils/Dockerfile.copy-polyfill index c4ab590..d5c913c 100644 --- a/hack/dev/utils/Dockerfile.copy-polyfill +++ b/hack/dev/utils/Dockerfile.copy-polyfill @@ -1,4 +1,4 @@ ARG TARGET_IMAGE=scratch FROM ${TARGET_IMAGE} AS image -FROM --platform=$BUILDPLATFORM debian:trixie@sha256:2c91e484d93f0830a7e05a2b9d92a7b102be7cab562198b984a84fdbc7806d91 AS final +FROM --platform=$BUILDPLATFORM debian:trixie@sha256:fac46bff2e02f51425b6e33b0e1169f55dfb053d83511ca28aa50c09fd5ed7a4 AS final COPY --from=image / /image diff --git a/hack/dev/vm/Dockerfile.initramfs b/hack/dev/vm/Dockerfile.initramfs index af0971b..45a36bf 100644 --- a/hack/dev/vm/Dockerfile.initramfs +++ b/hack/dev/vm/Dockerfile.initramfs @@ -1,4 +1,4 @@ -FROM alpine:3.23@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659 AS rootfs +FROM alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS rootfs RUN apk --no-cache add alpine-base tzdata wireless-regdb ifupdown-ng agetty RUN rc-update add devfs sysinit && \ rc-update add dmesg sysinit && \ @@ -21,7 +21,7 @@ RUN rc-update add devfs sysinit && \ ADD kernel.modules.tgz / COPY files/interfaces /etc/network/interfaces -FROM alpine:3.23@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659 AS build +FROM alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS build COPY --from=rootfs / /rootfs WORKDIR /rootfs RUN find . | cpio -R 0:0 --ignore-devno --renumber-inodes -o -H newc --quiet > /initramfs diff --git a/hack/dev/vm/Dockerfile.ovmf b/hack/dev/vm/Dockerfile.ovmf index 84bab94..785ecf0 100644 --- a/hack/dev/vm/Dockerfile.ovmf +++ b/hack/dev/vm/Dockerfile.ovmf @@ -1,4 +1,4 @@ -FROM alpine:3.23@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659 AS build +FROM alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS build ARG TARGETPLATFORM RUN if [ "${TARGETPLATFORM}" = "linux/amd64" ] || [ "${TARGETPLATFORM}" = "linux/x86_64" ]; then \ apk --no-cache add ovmf edk2-shell; cp /usr/share/ovmf/bios.bin /ovmf.fd; fi diff --git a/hack/dev/vm/Dockerfile.xen b/hack/dev/vm/Dockerfile.xen index dcc990b..b51a7ed 100644 --- a/hack/dev/vm/Dockerfile.xen +++ b/hack/dev/vm/Dockerfile.xen @@ -1,4 +1,4 @@ -FROM alpine:3.23@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659 AS build +FROM alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS build ARG TARGETPLATFORM RUN apk add --no-cache xen-hypervisor && cp /usr/lib/efi/xen.efi /xen.efi diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 7ad2976..188682e 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.95.0" +channel = "1.97.1" components = ["rustfmt", "clippy"] targets = ["x86_64-unknown-uefi", "aarch64-unknown-uefi"]