From 2c20136c2acdf6510ff14637422529844b26748f Mon Sep 17 00:00:00 2001 From: Shunichiro Nomura Date: Sat, 10 Oct 2026 22:26:06 +0900 Subject: [PATCH 1/3] chore: raise MSRV to Rust 1.99 --- Cargo.toml | 2 +- docs/en/installation.md | 2 +- docs/ja/installation.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b25fc324a..a36f36528 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ default-members = ["crates/graphcal-cli"] [workspace.package] version = "0.0.1-alpha.35" edition = "2024" -rust-version = "1.95" +rust-version = "1.99" description = "Type-safe, unit-aware, Git-friendly reactive programming language for engineering calculations" readme = "README.md" repository = "https://github.com/graphcal-lang/graphcal" diff --git a/docs/en/installation.md b/docs/en/installation.md index d631bdf34..b49ffaf29 100644 --- a/docs/en/installation.md +++ b/docs/en/installation.md @@ -36,7 +36,7 @@ cargo binstall graphcal@ ### cargo install -`cargo install` builds Graphcal from [crates.io](https://crates.io/crates/graphcal). It requires Rust 1.95 or later, which you can get from [rustup.rs](https://rustup.rs/): +`cargo install` builds Graphcal from [crates.io](https://crates.io/crates/graphcal). It requires Rust 1.99 or later, which you can get from [rustup.rs](https://rustup.rs/): ```bash cargo install graphcal@ --locked diff --git a/docs/ja/installation.md b/docs/ja/installation.md index 5d838fa82..d9dac2364 100644 --- a/docs/ja/installation.md +++ b/docs/ja/installation.md @@ -36,7 +36,7 @@ cargo binstall graphcal@ ### cargo install { #cargo-install } -`cargo install` は [crates.io](https://crates.io/crates/graphcal) のソースから Graphcal をビルドします。Rust 1.95 以降が必要です。Rust は [rustup.rs](https://rustup.rs/) から入手できます。 +`cargo install` は [crates.io](https://crates.io/crates/graphcal) のソースから Graphcal をビルドします。Rust 1.99 以降が必要です。Rust は [rustup.rs](https://rustup.rs/) から入手できます。 ```bash cargo install graphcal@ --locked From a47cf809aa9df8a5a07c9ea275a9ef30a285bb4c Mon Sep 17 00:00:00 2001 From: Shunichiro Nomura Date: Sat, 10 Oct 2026 22:36:28 +0900 Subject: [PATCH 2/3] ci: align MSRV and dynamic safety toolchain prerequisites --- .github/workflows/ci.yaml | 5 +++++ .github/workflows/dynamic-safety.yaml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b5e092a98..f55d4b59b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -357,6 +357,11 @@ jobs: - uses: $/.github/actions/report-engine-tools + - name: Install MSRV Wasm standard library + run: | + msrv=$(cargo metadata --locked --no-deps --format-version 1 | jq -r '.packages[] | select(.name == "graphcal") | .rust_version') + rustup toolchain install "$msrv" --profile minimal --target wasm32-unknown-unknown --no-self-update + - name: Check MSRV run: cargo hack check --workspace --rust-version --ignore-private diff --git a/.github/workflows/dynamic-safety.yaml b/.github/workflows/dynamic-safety.yaml index f10faa8fe..7ff4b1079 100644 --- a/.github/workflows/dynamic-safety.yaml +++ b/.github/workflows/dynamic-safety.yaml @@ -14,7 +14,7 @@ permissions: env: CARGO_TERM_COLOR: always CARGO_BUILD_WARNINGS: deny - SAFETY_NIGHTLY: nightly-2026-02-21 + SAFETY_NIGHTLY: nightly-2026-07-10 jobs: dynamic-safety-changes: From 2ebb906faa3c69df725a8a784c261b513dea3214 Mon Sep 17 00:00:00 2001 From: Shunichiro Nomura Date: Sat, 10 Oct 2026 23:00:44 +0900 Subject: [PATCH 3/3] fix: isolate report engine dynamic library search paths --- .github/workflows/ci.yaml | 5 ----- crates/graphcal-cli/build_support/engine.rs | 15 ++++++++++++--- crates/graphcal-cli/tests/report_engine.rs | 13 +++++++++++++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f55d4b59b..b5e092a98 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -357,11 +357,6 @@ jobs: - uses: $/.github/actions/report-engine-tools - - name: Install MSRV Wasm standard library - run: | - msrv=$(cargo metadata --locked --no-deps --format-version 1 | jq -r '.packages[] | select(.name == "graphcal") | .rust_version') - rustup toolchain install "$msrv" --profile minimal --target wasm32-unknown-unknown --no-self-update - - name: Check MSRV run: cargo hack check --workspace --rust-version --ignore-private diff --git a/crates/graphcal-cli/build_support/engine.rs b/crates/graphcal-cli/build_support/engine.rs index a0b7b5512..6a53a72ba 100644 --- a/crates/graphcal-cli/build_support/engine.rs +++ b/crates/graphcal-cli/build_support/engine.rs @@ -104,9 +104,10 @@ fn watch_tool(name: &str) -> Result<(), Error> { } /// Do not pass host coverage/sanitizer flags, wrappers, target directories, or -/// jobserver tokens to a second target build. One worker uses the slot already -/// owned by this build script. The engine always uses the repository toolchain, -/// including when the native CLI is being checked with its older MSRV. +/// jobserver tokens or dynamic-library search paths to a second target build. +/// One worker uses the slot already owned by this build script. The engine always +/// uses the repository toolchain, including when the native CLI is being checked +/// with its older MSRV. fn rust_command(root: &Path, channel: &str, tool: &str) -> Command { let mut command = Command::new("rustup"); env::vars_os() @@ -162,6 +163,14 @@ pub fn isolated_variable(key: &str) -> bool { | "MAKEFLAGS" | "MFLAGS" | "LLVM_PROFILE_FILE" + // Cargo includes the host compiler libraries here. Identical + // compilers installed under different rustup names can otherwise + // load the host rustc_driver and infer the wrong Wasm sysroot. + // Keep PATH: Windows needs it to locate rustup and other tools. + | "LD_LIBRARY_PATH" + | "DYLD_LIBRARY_PATH" + | "DYLD_FALLBACK_LIBRARY_PATH" + | "LIBPATH" ) } diff --git a/crates/graphcal-cli/tests/report_engine.rs b/crates/graphcal-cli/tests/report_engine.rs index 592400a81..55217ea93 100644 --- a/crates/graphcal-cli/tests/report_engine.rs +++ b/crates/graphcal-cli/tests/report_engine.rs @@ -206,6 +206,19 @@ fn host_instrumentation_and_build_directories_are_isolated() { } } +#[test] +fn host_dynamic_library_paths_are_isolated_without_removing_tool_search_paths() { + for key in [ + "LD_LIBRARY_PATH", + "DYLD_LIBRARY_PATH", + "DYLD_FALLBACK_LIBRARY_PATH", + "LIBPATH", + ] { + assert!(engine::isolated_variable(key), "{key}"); + } + assert!(!engine::isolated_variable("PATH")); +} + #[test] fn source_fingerprint_tracks_dependency_assets_and_not_cli_only_edits() { let temp = tempfile::tempdir().unwrap();