From 292eeeff619850ae236ad00b4010c7aec337ace6 Mon Sep 17 00:00:00 2001 From: Jeongkyu Shin Date: Sun, 19 Jul 2026 21:10:50 +0900 Subject: [PATCH] build: bump Launchpad PPA toolchain and MSRV to Rust 1.96 Rust 1.96 has shipped (latest patch 1.96.1), so move the packaging toolchain off 1.93. This raises the declared MSRV in Cargo.toml to 1.96 to keep it aligned with the Launchpad PPA build toolchain, updates the debian/control and debian/control.source build dependencies to rustc-1.96/cargo-1.96, bumps the rustc/cargo version gate in every debian/rules variant to ge 1.96, refreshes debian/README.packaging, and sets vendor_rust to 1.96.1 for all distros in the Launchpad PPA workflow. The CI msrv job reads rust-version from Cargo.toml, so it tracks the new value automatically. Jammy and Noble still resolve their build toolchain from the ~lablup/+archive/ubuntu/rustc-release dependency PPA, which must publish rustc-1.96 and cargo-1.96 before those builds can resolve the dependency. --- .github/workflows/launchpad_ppa.yml | 8 ++++---- Cargo.toml | 7 ++++--- debian/README.packaging | 22 +++++++++++----------- debian/control | 4 ++-- debian/control.source | 4 ++-- debian/rules | 12 ++++++------ debian/rules.launchpad | 12 ++++++------ debian/rules.launchpad-simple | 12 ++++++------ debian/rules.source | 12 ++++++------ 9 files changed, 47 insertions(+), 46 deletions(-) diff --git a/.github/workflows/launchpad_ppa.yml b/.github/workflows/launchpad_ppa.yml index 4c549150..afdb495c 100644 --- a/.github/workflows/launchpad_ppa.yml +++ b/.github/workflows/launchpad_ppa.yml @@ -25,14 +25,14 @@ jobs: matrix: include: - distro: jammy - vendor_rust: "1.93.1" + vendor_rust: "1.96.1" toolchain_source: "Requires backend-ai PPA dependency on ~lablup/+archive/ubuntu/rustc-release" - distro: noble - vendor_rust: "1.93.1" + vendor_rust: "1.96.1" toolchain_source: "Requires backend-ai PPA dependency on ~lablup/+archive/ubuntu/rustc-release" - distro: resolute - vendor_rust: "1.93.1" - toolchain_source: "Uses the official Ubuntu 26.04 archive Rust 1.93+ toolchain" + vendor_rust: "1.96.1" + toolchain_source: "Uses the official Ubuntu 26.04 archive Rust 1.96+ toolchain" steps: - name: Checkout code diff --git a/Cargo.toml b/Cargo.toml index c311bbe5..7206fcc6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,11 +15,12 @@ readme = "README.md" keywords = ["cli", "rust"] categories = ["command-line-utilities"] edition = "2024" -# MSRV 1.93: aligned with the Launchpad PPA build toolchain (rustc-1.93 on +# MSRV 1.96: aligned with the Launchpad PPA build toolchain (rustc-1.96 on # jammy/noble, Ubuntu 26.04 archive on resolute). Hard floor is 1.89 # (`rustyline` 18 uses `File::lock`, stabilized in 1.89); `time` 0.3.47 -# (RUSTSEC-2026-0009) requires >= 1.88. Verified with `cargo +1.93.0 check`. -rust-version = "1.93" +# (RUSTSEC-2026-0009) requires >= 1.88. The declared value tracks the PPA +# build toolchain, not the hard floor. +rust-version = "1.96" [dependencies] bytes = "1.11.1" diff --git a/debian/README.packaging b/debian/README.packaging index c159477b..b1ed7a78 100644 --- a/debian/README.packaging +++ b/debian/README.packaging @@ -10,24 +10,24 @@ Launchpad build environments do NOT have internet access. This means: ### Build Dependencies The following packages are required and must be available to Launchpad through the Ubuntu archive or a configured dependency PPA: -- `rustc-1.93` or `rustc (>= 1.93)` - Rust compiler -- `cargo-1.93` or `cargo (>= 1.93)` - Rust package manager +- `rustc-1.96` or `rustc (>= 1.96)` - Rust compiler +- `cargo-1.96` or `cargo (>= 1.96)` - Rust package manager - `pkg-config` - For finding system libraries - `cmake` - Build system ### Rust Version Requirements -This project currently requires Rust 1.93 or newer because the vendored dependency set no longer builds with Rust 1.85. This means: -- Ubuntu 22.04 (Jammy): requires a versioned Rust 1.93 toolchain from the dependent PPA `~lablup/+archive/ubuntu/rustc-release` -- Ubuntu 24.04 (Noble): requires a versioned Rust 1.93 toolchain from the dependent PPA `~lablup/+archive/ubuntu/rustc-release` -- Ubuntu 26.04 (Resolute): can use the archive's Rust 1.93+ toolchain without the extra dependency PPA +This project currently requires Rust 1.96 or newer because the vendored dependency set no longer builds with Rust 1.85. This means: +- Ubuntu 22.04 (Jammy): requires a versioned Rust 1.96 toolchain from the dependent PPA `~lablup/+archive/ubuntu/rustc-release` +- Ubuntu 24.04 (Noble): requires a versioned Rust 1.96 toolchain from the dependent PPA `~lablup/+archive/ubuntu/rustc-release` +- Ubuntu 26.04 (Resolute): can use the archive's Rust 1.96+ toolchain without the extra dependency PPA If building for older Ubuntu versions, you may need to: -1. Add a Launchpad PPA dependency on `~lablup/+archive/ubuntu/rustc-release` so Jammy and Noble can see `rustc-1.93` and `cargo-1.93` -2. Limit support to distributions with Rust 1.93+ +1. Add a Launchpad PPA dependency on `~lablup/+archive/ubuntu/rustc-release` so Jammy and Noble can see `rustc-1.96` and `cargo-1.96` +2. Limit support to distributions with Rust 1.96+ ### Build Process 1. GitHub Actions vendors crates into `vendor/` and generates `.cargo/config.toml` -2. The `debian/rules` file requires Rust/Cargo 1.93+ and enables offline cargo mode +2. The `debian/rules` file requires Rust/Cargo 1.96+ and enables offline cargo mode 3. Launchpad builds the project with `cargo build --release --frozen --workspace` 4. The binary is installed to `/usr/bin/bssh` @@ -36,8 +36,8 @@ If the build fails on Launchpad: 1. Check the build log for the exact error 2. Common issues: - Missing build dependencies: Add them to debian/control - - Rust version incompatibility: Ensure Rust 1.93+ is available - - Missing PPA dependency: Jammy/Noble need access to `rustc-1.93` and `cargo-1.93` + - Rust version incompatibility: Ensure Rust 1.96+ is available + - Missing PPA dependency: Jammy/Noble need access to `rustc-1.96` and `cargo-1.96` - Missing vendored crates: Ensure `vendor/` and `.cargo/config.toml` are included in the source package - Cargo registry access: The build will fail if it tries to download crates diff --git a/debian/control b/debian/control index f1df3961..8387f2bd 100644 --- a/debian/control +++ b/debian/control @@ -4,8 +4,8 @@ Priority: optional Maintainer: Jeongkyu Shin Build-Depends: debhelper-compat (= 13), build-essential, - rustc-1.93 | rustc (>= 1.93), - cargo-1.93 | cargo (>= 1.93), + rustc-1.96 | rustc (>= 1.96), + cargo-1.96 | cargo (>= 1.96), pkg-config, cmake Standards-Version: 4.6.2 diff --git a/debian/control.source b/debian/control.source index a569dc2d..7b8bb680 100644 --- a/debian/control.source +++ b/debian/control.source @@ -3,8 +3,8 @@ Section: utils Priority: optional Maintainer: Jeongkyu Shin Build-Depends: debhelper-compat (= 13), - rustc-1.93 | rustc (>= 1.93), - cargo-1.93 | cargo (>= 1.93), + rustc-1.96 | rustc (>= 1.96), + cargo-1.96 | cargo (>= 1.96), pkg-config, cmake, build-essential diff --git a/debian/rules b/debian/rules index e26e67ba..269089b4 100755 --- a/debian/rules +++ b/debian/rules @@ -9,8 +9,8 @@ export CARGO_HOME = $(HOME)/.cargo export CARGO_TARGET_DIR = $(CURDIR)/target export CARGO_NET_OFFLINE = true -RUSTC := $(shell if command -v rustc-1.93 >/dev/null 2>&1; then printf '%s' rustc-1.93; else printf '%s' rustc; fi) -CARGO := $(shell if command -v cargo-1.93 >/dev/null 2>&1; then printf '%s' cargo-1.93; else printf '%s' cargo; fi) +RUSTC := $(shell if command -v rustc-1.96 >/dev/null 2>&1; then printf '%s' rustc-1.96; else printf '%s' rustc; fi) +CARGO := $(shell if command -v cargo-1.96 >/dev/null 2>&1; then printf '%s' cargo-1.96; else printf '%s' cargo; fi) %: dh $@ @@ -23,12 +23,12 @@ override_dh_auto_configure: $(CARGO) --version rustc_version=$$($(RUSTC) --version | awk '{print $$2}'); \ cargo_version=$$($(CARGO) --version | awk '{print $$2}'); \ - dpkg --compare-versions "$$rustc_version" ge 1.93 || { \ - echo "rustc 1.93+ is required for the current dependency set (found $$rustc_version)"; \ + dpkg --compare-versions "$$rustc_version" ge 1.96 || { \ + echo "rustc 1.96+ is required for the current dependency set (found $$rustc_version)"; \ exit 1; \ }; \ - dpkg --compare-versions "$$cargo_version" ge 1.93 || { \ - echo "cargo 1.93+ is required for the current dependency set (found $$cargo_version)"; \ + dpkg --compare-versions "$$cargo_version" ge 1.96 || { \ + echo "cargo 1.96+ is required for the current dependency set (found $$cargo_version)"; \ exit 1; \ } diff --git a/debian/rules.launchpad b/debian/rules.launchpad index e26e67ba..269089b4 100644 --- a/debian/rules.launchpad +++ b/debian/rules.launchpad @@ -9,8 +9,8 @@ export CARGO_HOME = $(HOME)/.cargo export CARGO_TARGET_DIR = $(CURDIR)/target export CARGO_NET_OFFLINE = true -RUSTC := $(shell if command -v rustc-1.93 >/dev/null 2>&1; then printf '%s' rustc-1.93; else printf '%s' rustc; fi) -CARGO := $(shell if command -v cargo-1.93 >/dev/null 2>&1; then printf '%s' cargo-1.93; else printf '%s' cargo; fi) +RUSTC := $(shell if command -v rustc-1.96 >/dev/null 2>&1; then printf '%s' rustc-1.96; else printf '%s' rustc; fi) +CARGO := $(shell if command -v cargo-1.96 >/dev/null 2>&1; then printf '%s' cargo-1.96; else printf '%s' cargo; fi) %: dh $@ @@ -23,12 +23,12 @@ override_dh_auto_configure: $(CARGO) --version rustc_version=$$($(RUSTC) --version | awk '{print $$2}'); \ cargo_version=$$($(CARGO) --version | awk '{print $$2}'); \ - dpkg --compare-versions "$$rustc_version" ge 1.93 || { \ - echo "rustc 1.93+ is required for the current dependency set (found $$rustc_version)"; \ + dpkg --compare-versions "$$rustc_version" ge 1.96 || { \ + echo "rustc 1.96+ is required for the current dependency set (found $$rustc_version)"; \ exit 1; \ }; \ - dpkg --compare-versions "$$cargo_version" ge 1.93 || { \ - echo "cargo 1.93+ is required for the current dependency set (found $$cargo_version)"; \ + dpkg --compare-versions "$$cargo_version" ge 1.96 || { \ + echo "cargo 1.96+ is required for the current dependency set (found $$cargo_version)"; \ exit 1; \ } diff --git a/debian/rules.launchpad-simple b/debian/rules.launchpad-simple index e26e67ba..269089b4 100644 --- a/debian/rules.launchpad-simple +++ b/debian/rules.launchpad-simple @@ -9,8 +9,8 @@ export CARGO_HOME = $(HOME)/.cargo export CARGO_TARGET_DIR = $(CURDIR)/target export CARGO_NET_OFFLINE = true -RUSTC := $(shell if command -v rustc-1.93 >/dev/null 2>&1; then printf '%s' rustc-1.93; else printf '%s' rustc; fi) -CARGO := $(shell if command -v cargo-1.93 >/dev/null 2>&1; then printf '%s' cargo-1.93; else printf '%s' cargo; fi) +RUSTC := $(shell if command -v rustc-1.96 >/dev/null 2>&1; then printf '%s' rustc-1.96; else printf '%s' rustc; fi) +CARGO := $(shell if command -v cargo-1.96 >/dev/null 2>&1; then printf '%s' cargo-1.96; else printf '%s' cargo; fi) %: dh $@ @@ -23,12 +23,12 @@ override_dh_auto_configure: $(CARGO) --version rustc_version=$$($(RUSTC) --version | awk '{print $$2}'); \ cargo_version=$$($(CARGO) --version | awk '{print $$2}'); \ - dpkg --compare-versions "$$rustc_version" ge 1.93 || { \ - echo "rustc 1.93+ is required for the current dependency set (found $$rustc_version)"; \ + dpkg --compare-versions "$$rustc_version" ge 1.96 || { \ + echo "rustc 1.96+ is required for the current dependency set (found $$rustc_version)"; \ exit 1; \ }; \ - dpkg --compare-versions "$$cargo_version" ge 1.93 || { \ - echo "cargo 1.93+ is required for the current dependency set (found $$cargo_version)"; \ + dpkg --compare-versions "$$cargo_version" ge 1.96 || { \ + echo "cargo 1.96+ is required for the current dependency set (found $$cargo_version)"; \ exit 1; \ } diff --git a/debian/rules.source b/debian/rules.source index 09104905..788323ea 100644 --- a/debian/rules.source +++ b/debian/rules.source @@ -9,8 +9,8 @@ export CARGO_HOME = $(HOME)/.cargo export CARGO_TARGET_DIR = $(CURDIR)/target export CARGO_NET_OFFLINE = true -RUSTC := $(shell if command -v rustc-1.93 >/dev/null 2>&1; then printf '%s' rustc-1.93; else printf '%s' rustc; fi) -CARGO := $(shell if command -v cargo-1.93 >/dev/null 2>&1; then printf '%s' cargo-1.93; else printf '%s' cargo; fi) +RUSTC := $(shell if command -v rustc-1.96 >/dev/null 2>&1; then printf '%s' rustc-1.96; else printf '%s' rustc; fi) +CARGO := $(shell if command -v cargo-1.96 >/dev/null 2>&1; then printf '%s' cargo-1.96; else printf '%s' cargo; fi) %: dh $@ @@ -23,12 +23,12 @@ override_dh_auto_configure: $(CARGO) --version rustc_version=$$($(RUSTC) --version | awk '{print $$2}'); \ cargo_version=$$($(CARGO) --version | awk '{print $$2}'); \ - dpkg --compare-versions "$$rustc_version" ge 1.93 || { \ - echo "rustc 1.93+ is required for the current dependency set (found $$rustc_version)"; \ + dpkg --compare-versions "$$rustc_version" ge 1.96 || { \ + echo "rustc 1.96+ is required for the current dependency set (found $$rustc_version)"; \ exit 1; \ }; \ - dpkg --compare-versions "$$cargo_version" ge 1.93 || { \ - echo "cargo 1.93+ is required for the current dependency set (found $$cargo_version)"; \ + dpkg --compare-versions "$$cargo_version" ge 1.96 || { \ + echo "cargo 1.96+ is required for the current dependency set (found $$cargo_version)"; \ exit 1; \ }