diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0da8c40..22c0473 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,7 +8,7 @@ on: env: RUST_BACKTRACE: full - MSRV: 1.80.0 + MSRV: 1.84.0 jobs: tests: diff --git a/Cargo.toml b/Cargo.toml index 88a4562..e721c05 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ authors = ["Aurora Labs "] # An update of the MSRV requires updating: # - `rust-toolchain` files in `near-plugins-derive/tests/contracts/**` # - the toolchain installed in CI via the `toolchain` parameter of `actions-rs/toolchain@v1` -rust-version = "1.80.0" +rust-version = "1.84.0" description = "Ergonomic plugin system to extend NEAR contracts." license = "CC0-1.0" readme = "README.md" @@ -36,3 +36,4 @@ proc-macro2 = "1.0" quote = "1.0.9" syn = { version = "1.0.69", features = ["full"] } proc-macro-crate = "0.1.5" +cargo-near-build = "0.4.4" \ No newline at end of file diff --git a/near-plugins-derive/Cargo.toml b/near-plugins-derive/Cargo.toml index 599a427..716d1d2 100644 --- a/near-plugins-derive/Cargo.toml +++ b/near-plugins-derive/Cargo.toml @@ -22,3 +22,4 @@ near-sdk = { workspace = true, features = ["unit-testing"] } tokio.workspace = true near-workspaces.workspace = true toml.workspace = true +cargo-near-build.workspace = true diff --git a/near-plugins-derive/tests/common/repo.rs b/near-plugins-derive/tests/common/repo.rs index 2f52b94..9a569b8 100644 --- a/near-plugins-derive/tests/common/repo.rs +++ b/near-plugins-derive/tests/common/repo.rs @@ -1,19 +1,5 @@ -use std::path::{Path, PathBuf}; use std::process::Output; - -async fn read_toolchain(project_path: &Path) -> anyhow::Result { - let content = tokio::fs::read_to_string(project_path.join("rust-toolchain")).await?; - let value: toml::Value = toml::from_str(&content)?; - let result = value - .as_table() - .and_then(|t| t.get("toolchain")) - .and_then(|v| v.as_table()) - .and_then(|t| t.get("channel")) - .and_then(|v| v.as_str()) - .ok_or_else(|| anyhow::Error::msg("Failed to parse rust-toolchain toml"))? - .to_string(); - Ok(result) -} +use std::{path::Path, str::FromStr}; pub fn require_success(output: Output) -> Result<(), anyhow::Error> { if output.status.success() { @@ -23,45 +9,18 @@ pub fn require_success(output: Output) -> Result<(), anyhow::Error> { } } -async fn add_wasm_target(project_path: &Path, toolchain: &str) -> anyhow::Result<()> { - let output = tokio::process::Command::new("rustup") - .env("RUSTUP_TOOLCHAIN", toolchain) - .current_dir(project_path) - .args(["target", "add", "wasm32-unknown-unknown"]) - .output() - .await?; - require_success(output)?; - Ok(()) -} - pub async fn compile_project(project_path: &Path, package_name: &str) -> anyhow::Result> { - let toolchain = read_toolchain(project_path).await?; - add_wasm_target(project_path, &toolchain).await?; - let output = tokio::process::Command::new("cargo") - .env("RUSTUP_TOOLCHAIN", &toolchain) - .current_dir(project_path) - .args([ - "build", - "--target", - "wasm32-unknown-unknown", - "--release", - "--no-default-features", - "-p", - package_name, - ]) - .output() - .await?; + let path = project_path.join("Cargo.toml"); + let artifact = cargo_near_build::build(cargo_near_build::BuildOpts { + manifest_path: Some( + cargo_near_build::camino::Utf8PathBuf::from_str(path.to_str().unwrap()) + .expect("camino PathBuf from str"), + ), + no_abi: true, // TODO remove this flag when we fix ABI generation + no_locked: true, + ..Default::default() + }) + .unwrap_or_else(|_| panic!("building contract {package_name} from {project_path:?}")); - require_success(output)?; - let binary_path = project_path.join( - [ - "target", - "wasm32-unknown-unknown", - "release", - format!("{}.wasm", package_name).as_str(), - ] - .iter() - .collect::(), - ); - Ok(tokio::fs::read(binary_path).await?) + Ok(tokio::fs::read(&artifact.path).await?) } diff --git a/near-plugins-derive/tests/contracts/access_controllable/rust-toolchain b/near-plugins-derive/tests/contracts/access_controllable/rust-toolchain index 14f0527..d6d7b98 100644 --- a/near-plugins-derive/tests/contracts/access_controllable/rust-toolchain +++ b/near-plugins-derive/tests/contracts/access_controllable/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "1.80.0" +channel = "1.84.0" components = ["clippy", "rustfmt"] targets = [ "wasm32-unknown-unknown" ] diff --git a/near-plugins-derive/tests/contracts/ownable/rust-toolchain b/near-plugins-derive/tests/contracts/ownable/rust-toolchain index 14f0527..d6d7b98 100644 --- a/near-plugins-derive/tests/contracts/ownable/rust-toolchain +++ b/near-plugins-derive/tests/contracts/ownable/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "1.80.0" +channel = "1.84.0" components = ["clippy", "rustfmt"] targets = [ "wasm32-unknown-unknown" ] diff --git a/near-plugins-derive/tests/contracts/pausable/rust-toolchain b/near-plugins-derive/tests/contracts/pausable/rust-toolchain index 14f0527..d6d7b98 100644 --- a/near-plugins-derive/tests/contracts/pausable/rust-toolchain +++ b/near-plugins-derive/tests/contracts/pausable/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "1.80.0" +channel = "1.84.0" components = ["clippy", "rustfmt"] targets = [ "wasm32-unknown-unknown" ] diff --git a/near-plugins-derive/tests/contracts/upgradable/rust-toolchain b/near-plugins-derive/tests/contracts/upgradable/rust-toolchain index 14f0527..d6d7b98 100644 --- a/near-plugins-derive/tests/contracts/upgradable/rust-toolchain +++ b/near-plugins-derive/tests/contracts/upgradable/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "1.80.0" +channel = "1.84.0" components = ["clippy", "rustfmt"] targets = [ "wasm32-unknown-unknown" ] diff --git a/near-plugins-derive/tests/contracts/upgradable/src/lib.rs b/near-plugins-derive/tests/contracts/upgradable/src/lib.rs index b233a8f..f678bec 100644 --- a/near-plugins-derive/tests/contracts/upgradable/src/lib.rs +++ b/near-plugins-derive/tests/contracts/upgradable/src/lib.rs @@ -1,5 +1,5 @@ use near_plugins::{access_control, AccessControlRole, AccessControllable, Upgradable}; -use near_sdk::borsh::{BorshDeserialize, BorshSerialize}; +use near_sdk::borsh::BorshDeserialize; use near_sdk::env; use near_sdk::serde::{Deserialize, Serialize}; use near_sdk::{near, AccountId, Duration, PanicOnDefault}; diff --git a/near-plugins-derive/tests/contracts/upgradable_2/rust-toolchain b/near-plugins-derive/tests/contracts/upgradable_2/rust-toolchain index 14f0527..d6d7b98 100644 --- a/near-plugins-derive/tests/contracts/upgradable_2/rust-toolchain +++ b/near-plugins-derive/tests/contracts/upgradable_2/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "1.80.0" +channel = "1.84.0" components = ["clippy", "rustfmt"] targets = [ "wasm32-unknown-unknown" ] diff --git a/near-plugins-derive/tests/contracts/upgradable_state_migration/rust-toolchain b/near-plugins-derive/tests/contracts/upgradable_state_migration/rust-toolchain index 14f0527..d6d7b98 100644 --- a/near-plugins-derive/tests/contracts/upgradable_state_migration/rust-toolchain +++ b/near-plugins-derive/tests/contracts/upgradable_state_migration/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "1.80.0" +channel = "1.84.0" components = ["clippy", "rustfmt"] targets = [ "wasm32-unknown-unknown" ]