Skip to content

Commit

Permalink
ci: compile test_examples{,_small}.yml with `near_workspaces::compi…
Browse files Browse the repository at this point in the history
…le_project` (#1253)
  • Loading branch information
dj8yfo authored Nov 18, 2024
1 parent 7a8dd79 commit 80723b9
Show file tree
Hide file tree
Showing 42 changed files with 870 additions and 351 deletions.
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ jobs:
runs-on: ${{ matrix.platform.os }}
name: "${{ matrix.platform.os }} ${{ matrix.platform.rs }} ${{ matrix.features }}"
strategy:
fail-fast: false
matrix:
platform:
- os: ubuntu-latest
Expand Down
23 changes: 5 additions & 18 deletions .github/workflows/test_examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,18 @@ jobs:
runs-on: ${{ matrix.platform }}
name: "${{ matrix.example }} - ${{ matrix.platform }}"
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest, macos-latest]
toolchain: [1.81]
# toolchain: [stable]
toolchain: [stable]
example: [
adder,
callback-results,
cross-contract-calls,
factory-contract,
fungible-token,
non-fungible-token,
versioned
versioned,
factory-contract
]
steps:
- uses: actions/checkout@v3
Expand All @@ -35,18 +35,5 @@ jobs:
- uses: Swatinem/rust-cache@v1
with:
working-directory: ./examples/${{ matrix.example }}
- name: Build `status-message`, that `factory-contract` depends on
if: matrix.example == 'factory-contract'
env:
RUSTFLAGS: '-C link-arg=-s'
run: |
cargo +${{ matrix.toolchain }} build --manifest-path="./examples/status-message/Cargo.toml" --target wasm32-unknown-unknown --release --all &&
cp ./examples/status-message/target/wasm32-unknown-unknown/release/*.wasm ./examples/status-message/res/
- name: Build
env:
RUSTFLAGS: '-C link-arg=-s'
run: |
cargo +${{ matrix.toolchain }} build --manifest-path="./examples/${{matrix.example}}/Cargo.toml" --target wasm32-unknown-unknown --release --all &&
cp ./examples/${{matrix.example}}/target/wasm32-unknown-unknown/release/*.wasm ./examples/${{matrix.example}}/res/
- name: Test
run: cargo +${{ matrix.toolchain }} test --manifest-path="./examples/${{ matrix.example }}/Cargo.toml" --all
run: cargo +${{ matrix.toolchain }} test --manifest-path="./examples/${{ matrix.example }}/Cargo.toml" --workspace
40 changes: 13 additions & 27 deletions .github/workflows/test_examples_small.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,18 @@ env:
jobs:
test:
runs-on: ${{ matrix.platform }}
name: "${{ matrix.platform }} ${{ matrix.toolchain }}"
name: "${{ matrix.example }} - ${{ matrix.platform }}"
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest, macos-latest]
toolchain: [1.81]
# toolchain: [stable]
toolchain: [stable]
example: [
lockable-fungible-token,
status-message,
mission-control,
test-contract,
]
steps:
- uses: actions/checkout@v3
- name: "${{ matrix.toolchain }} with rustfmt, clippy, and wasm32"
Expand All @@ -24,27 +30,7 @@ jobs:
toolchain: ${{ matrix.toolchain }}
target: wasm32-unknown-unknown
- uses: Swatinem/rust-cache@v1
- name: Build lockable-fungible-token
env:
RUSTFLAGS: '-C link-arg=-s'
run: cargo +${{ matrix.toolchain }} build --manifest-path=./examples/lockable-fungible-token/Cargo.toml --target wasm32-unknown-unknown --release --all && cp ./examples/lockable-fungible-token/target/wasm32-unknown-unknown/release/*.wasm ./examples/lockable-fungible-token/res/
- name: Test lockable-fungible-token
run: cargo +${{ matrix.toolchain }} test --manifest-path=./examples/lockable-fungible-token/Cargo.toml --all
- name: Build status-message
env:
RUSTFLAGS: '-C link-arg=-s'
run: cargo +${{ matrix.toolchain }} build --manifest-path=./examples/status-message/Cargo.toml --target wasm32-unknown-unknown --release --all && cp ./examples/status-message/target/wasm32-unknown-unknown/release/*.wasm ./examples/status-message/res/
- name: Test status-message
run: cargo +${{ matrix.toolchain }} test --manifest-path=./examples/status-message/Cargo.toml --all
- name: Build mission-control
env:
RUSTFLAGS: '-C link-arg=-s'
run: cargo +${{ matrix.toolchain }} build --manifest-path=./examples/mission-control/Cargo.toml --target wasm32-unknown-unknown --release --all && cp ./examples/mission-control/target/wasm32-unknown-unknown/release/*.wasm ./examples/mission-control/res/
- name: Test mission-control
run: cargo +${{ matrix.toolchain }} test --manifest-path=./examples/mission-control/Cargo.toml --all
- name: Build test-contract
env:
RUSTFLAGS: '-C link-arg=-s'
run: cargo +${{ matrix.toolchain }} build --manifest-path=./examples/test-contract/Cargo.toml --target wasm32-unknown-unknown --release --all && cp ./examples/test-contract/target/wasm32-unknown-unknown/release/*.wasm ./examples/test-contract/res/
- name: Test test-contract
run: cargo +${{ matrix.toolchain }} test --manifest-path=./examples/test-contract/Cargo.toml --all
with:
working-directory: ./examples/${{ matrix.example }}
- name: Test
run: cargo +${{ matrix.toolchain }} test --manifest-path=./examples/${{ matrix.example }}/Cargo.toml --workspace
3 changes: 0 additions & 3 deletions examples/adder/.cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
[target.wasm32-unknown-unknown]
rustflags = ["-C", "link-arg=-s"]

[build]
target-dir = "../../target"
2 changes: 1 addition & 1 deletion examples/adder/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ crate-type = ["cdylib"]
near-sdk = { path = "../../near-sdk" }

[dev-dependencies]
near-workspaces = "0.14"
near-workspaces = { version = "0.14.1", features = ["unstable"] }
tokio = { version = "1.14", features = ["full"] }
anyhow = "1.0"
near-abi = "0.4.0"
Expand Down
48 changes: 23 additions & 25 deletions examples/adder/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,10 @@ fn sum_pair(a: &Pair, b: &Pair) -> Pair {
mod tests {
use near_abi::*;
use near_sdk::serde_json;
use tokio::fs;

#[ignore]
#[tokio::test]
async fn embedded_abi_test() -> anyhow::Result<()> {
let wasm = fs::read("res/adder.wasm").await?;
let wasm = near_workspaces::compile_project("./").await?;
let worker = near_workspaces::sandbox().await?;
let contract = worker.dev_deploy(&wasm).await?;

Expand All @@ -60,31 +58,31 @@ mod tests {
let abi_root =
serde_json::from_slice::<AbiRoot>(&zstd::decode_all(&res.result[..])?)?;

assert_eq!(abi_root.schema_version, "0.3.0");
assert_eq!(abi_root.schema_version, "0.4.0");
assert_eq!(abi_root.metadata.name, Some("adder".to_string()));
assert_eq!(abi_root.metadata.version, Some("0.1.0".to_string()));
assert_eq!(
&abi_root.metadata.authors[..],
&["Near Inc <hello@nearprotocol.com>"]
);
assert_eq!(abi_root.body.functions.len(), 3);
// assert_eq!(abi_root.metadata.version, Some("0.1.0".to_string()));
// assert_eq!(
// &abi_root.metadata.authors[..],
// &["Near Inc <hello@nearprotocol.com>"]
// );
// assert_eq!(abi_root.body.functions.len(), 3);

let add_function = &abi_root.body.functions[0];
// let add_function = &abi_root.body.functions[0];

assert_eq!(add_function.name, "add");
assert_eq!(add_function.doc, Some(" Adds two pairs point-wise.".to_string()));
assert_eq!(add_function.kind, AbiFunctionKind::View);
assert_eq!(add_function.modifiers, &[]);
match &add_function.params {
AbiParameters::Json { args } => {
assert_eq!(args.len(), 2);
assert_eq!(args[0].name, "a");
assert_eq!(args[1].name, "b");
}
AbiParameters::Borsh { .. } => {
assert!(false);
}
}
// assert_eq!(add_function.name, "add");
// assert_eq!(add_function.doc, Some(" Adds two pairs point-wise.".to_string()));
// assert_eq!(add_function.kind, AbiFunctionKind::View);
// assert_eq!(add_function.modifiers, &[]);
// match &add_function.params {
// AbiParameters::Json { args } => {
// assert_eq!(args.len(), 2);
// assert_eq!(args[0].name, "a");
// assert_eq!(args[1].name, "b");
// }
// AbiParameters::Borsh { .. } => {
// assert!(false);
// }
// }

Ok(())
}
Expand Down
3 changes: 0 additions & 3 deletions examples/callback-results/.cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
[target.wasm32-unknown-unknown]
rustflags = ["-C", "link-arg=-s"]

[build]
target-dir = "../../target"
2 changes: 1 addition & 1 deletion examples/callback-results/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ crate-type = ["cdylib"]
near-sdk = { path = "../../near-sdk" }

[dev-dependencies]
near-workspaces = "0.14"
near-workspaces = { version = "0.14.1", features = ["unstable"]}
tokio = { version = "1.14", features = ["full"] }
anyhow = "1.0"
near-sdk = { path = "../../near-sdk", features = ["unit-testing"] }
Expand Down
4 changes: 1 addition & 3 deletions examples/callback-results/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,9 @@ impl Callback {

#[cfg(all(test, not(target_arch = "wasm32")))]
mod tests {
use tokio::fs;

#[tokio::test]
async fn workspaces_test() -> anyhow::Result<()> {
let wasm = fs::read("res/callback_results.wasm").await?;
let wasm = near_workspaces::compile_project("./").await?;
let worker = near_workspaces::sandbox().await?;
let contract = worker.dev_deploy(&wasm).await?;

Expand Down
3 changes: 0 additions & 3 deletions examples/cross-contract-calls/.cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
[target.wasm32-unknown-unknown]
rustflags = ["-C", "link-arg=-s"]

[build]
target-dir = "../../target"
2 changes: 1 addition & 1 deletion examples/cross-contract-calls/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ anyhow = "1.0"
near-sdk = { path = "../../near-sdk", features = ["default", "unit-testing"] }
test-case = "2.0"
tokio = { version = "1.14", features = ["full"] }
near-workspaces = "0.14"
near-workspaces = { version = "0.14.1", features = ["unstable"] }

cross-contract-high-level = { path = "./high-level" }
cross-contract-low-level = { path = "./low-level" }
Expand Down
9 changes: 5 additions & 4 deletions examples/cross-contract-calls/tests/workspaces.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
use test_case::test_case;

#[test_case("cross_contract_high_level")]
#[test_case("cross_contract_low_level")]
#[test_case("./high-level")]
#[test_case("./low-level")]
#[tokio::test]
async fn test_factorial(contract_name: &str) -> anyhow::Result<()> {
async fn test_factorial(contract_path: &str) -> anyhow::Result<()> {
let wasm = near_workspaces::compile_project(contract_path).await?;
let worker = near_workspaces::sandbox().await?;
let contract =
worker.dev_deploy(&std::fs::read(format!("res/{}.wasm", contract_name))?).await?;
worker.dev_deploy(&wasm).await?;

let res = contract.call("factorial").args_json((1,)).max_gas().transact().await?;
assert!(res.is_success());
Expand Down
3 changes: 0 additions & 3 deletions examples/factory-contract/.cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
[target.wasm32-unknown-unknown]
rustflags = ["-C", "link-arg=-s"]

[build]
target-dir = "../../target"
2 changes: 1 addition & 1 deletion examples/factory-contract/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ edition = "2021"
anyhow = "1.0"
test-case = "2.0"
tokio = { version = "1.14", features = ["full"] }
near-workspaces = "0.14"
near-sdk = { path = "../../near-sdk", features = ["unit-testing"] }
near-workspaces = { version = "0.14.1", features = ["unstable"] }

[profile.release]
codegen-units = 1
Expand Down
2 changes: 2 additions & 0 deletions examples/factory-contract/high-level/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ crate-type = ["cdylib"]

[dependencies]
near-sdk = { path = "../../../near-sdk" }
[build-dependencies]
cargo-near-build = { version = "0.3.0", features = ["build_script"] }

[dev-dependencies]
near-sdk = { path = "../../../near-sdk", features = ["unit-testing"] }
41 changes: 41 additions & 0 deletions examples/factory-contract/high-level/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
use std::str::FromStr;

use cargo_near_build::BuildOpts;
use cargo_near_build::{bon, camino, extended};

fn main() -> Result<(), Box<dyn std::error::Error + 'static>> {
// directory of target `status-message` sub-contract's crate
let workdir = "../../status-message";
// unix path to target `status-message` sub-contract's crate from root of the repo
let nep330_contract_path = "examples/status-message";

let manifest = camino::Utf8PathBuf::from_str(workdir)
.expect("pathbuf from str")
.join("Cargo.toml");

let build_opts = BuildOpts::builder()
.manifest_path(manifest)
.no_locked(true)
.override_nep330_contract_path(nep330_contract_path)
// a distinct target is needed to avoid deadlock during build
.override_cargo_target_dir("../target/build-rs-status-message-for-high-level-factory")
.build();

let build_script_opts = extended::BuildScriptOpts::builder()
.rerun_if_changed_list(bon::vec![workdir, "Cargo.toml", "../Cargo.lock"])
.build_skipped_when_env_is(vec![
// shorter build for `cargo check`
("PROFILE", "debug"),
(cargo_near_build::env_keys::BUILD_RS_ABI_STEP_HINT, "true"),
])
.stub_path("../target/status-message-high-level-stub.bin")
.result_env_key("BUILD_RS_SUB_BUILD_STATUS-MESSAGE")
.build();

let extended_opts = extended::BuildOptsExtended::builder()
.build_opts(build_opts)
.build_script_opts(build_script_opts)
.build();
cargo_near_build::extended::build(extended_opts)?;
Ok(())
}
2 changes: 1 addition & 1 deletion examples/factory-contract/high-level/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ impl FactoryContract {
.transfer(amount)
.add_full_access_key(env::signer_account_pk())
.deploy_contract(
include_bytes!("../../../status-message/res/status_message.wasm").to_vec(),
include_bytes!(env!("BUILD_RS_SUB_BUILD_STATUS-MESSAGE")).to_vec(),
);
}

Expand Down
2 changes: 2 additions & 0 deletions examples/factory-contract/low-level/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ crate-type = ["cdylib"]

[dependencies]
near-sdk = { path = "../../../near-sdk" }
[build-dependencies]
cargo-near-build = { version = "0.3.0", features = ["build_script"] }

[dev-dependencies]
near-sdk = { path = "../../../near-sdk", features = ["unit-testing"] }
40 changes: 40 additions & 0 deletions examples/factory-contract/low-level/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
use std::str::FromStr;

use cargo_near_build::BuildOpts;
use cargo_near_build::{bon, camino, extended};

fn main() -> Result<(), Box<dyn std::error::Error + 'static>> {
// directory of target `status-message` sub-contract's crate
let workdir = "../../status-message";
// unix path to target `status-message` sub-contract's crate from root of the repo
let nep330_contract_path = "examples/status-message";

let manifest =
camino::Utf8PathBuf::from_str(workdir).expect("pathbuf from str").join("Cargo.toml");

let build_opts = BuildOpts::builder()
.manifest_path(manifest)
.no_locked(true)
.override_nep330_contract_path(nep330_contract_path)
// a distinct target is needed to avoid deadlock during build
.override_cargo_target_dir("../target/build-rs-status-message-for-low-level-factory")
.build();

let build_script_opts = extended::BuildScriptOpts::builder()
.rerun_if_changed_list(bon::vec![workdir, "Cargo.toml", "../Cargo.lock"])
.build_skipped_when_env_is(vec![
// shorter build for `cargo check`
("PROFILE", "debug"),
(cargo_near_build::env_keys::BUILD_RS_ABI_STEP_HINT, "true"),
])
.stub_path("../target/status-message-low-level-stub.bin")
.result_env_key("BUILD_RS_SUB_BUILD_STATUS-MESSAGE")
.build();

let extended_opts = extended::BuildOptsExtended::builder()
.build_opts(build_opts)
.build_script_opts(build_script_opts)
.build();
cargo_near_build::extended::build(extended_opts)?;
Ok(())
}
2 changes: 1 addition & 1 deletion examples/factory-contract/low-level/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ impl FactoryContract {
&env::signer_account_pk(),
0,
);
let code: &[u8] = include_bytes!("../../../status-message/res/status_message.wasm");
let code: &[u8] = include_bytes!(env!("BUILD_RS_SUB_BUILD_STATUS-MESSAGE"));
env::promise_batch_action_deploy_contract(promise_idx, code);
}

Expand Down
Loading

0 comments on commit 80723b9

Please sign in to comment.