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; \ }