diff --git a/.github/workflows/factors.yml b/.github/workflows/factors.yml new file mode 100644 index 000000000..68ecf8fb6 --- /dev/null +++ b/.github/workflows/factors.yml @@ -0,0 +1,20 @@ +# TODO(factors): remove after factors branch passes regular CI +name: Factors +on: + push: + branches: ["factors"] + pull_request: + branches: ["factors"] +jobs: + factors-tests: + runs-on: ubuntu-22.04-4core-spin + steps: + - uses: actions/checkout@v3 + - name: setup dependencies + uses: ./.github/actions/spin-ci-dependencies + with: + rust: true + rust-wasm: true + rust-cache: true + - name: Run factors tests + run: ./run-factors-tests.sh diff --git a/Cargo.lock b/Cargo.lock index aa48f93f9..e4bd2fdc6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7631,6 +7631,7 @@ name = "spin-factors" version = "2.7.0-pre0" dependencies = [ "anyhow", + "cargo-target-dep", "http 1.1.0", "http-body-util", "serde 1.0.197", diff --git a/crates/factor-variables/build.rs b/crates/factor-variables/build.rs index bba8ce3c9..c96556b06 100644 --- a/crates/factor-variables/build.rs +++ b/crates/factor-variables/build.rs @@ -1,5 +1,5 @@ fn main() { - println!("cargo::rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=build.rs"); // Enable spin-factors-derive to emit expanded macro output. let out_dir = std::env::var("OUT_DIR").unwrap(); println!("cargo:rustc-env=SPIN_FACTORS_DERIVE_EXPAND_DIR={out_dir}"); diff --git a/crates/factor-wasi/build.rs b/crates/factor-wasi/build.rs index bba8ce3c9..c96556b06 100644 --- a/crates/factor-wasi/build.rs +++ b/crates/factor-wasi/build.rs @@ -1,5 +1,5 @@ fn main() { - println!("cargo::rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=build.rs"); // Enable spin-factors-derive to emit expanded macro output. let out_dir = std::env::var("OUT_DIR").unwrap(); println!("cargo:rustc-env=SPIN_FACTORS_DERIVE_EXPAND_DIR={out_dir}"); diff --git a/crates/factor-wasi/src/lib.rs b/crates/factor-wasi/src/lib.rs index 82fdd802b..2579b15e6 100644 --- a/crates/factor-wasi/src/lib.rs +++ b/crates/factor-wasi/src/lib.rs @@ -157,7 +157,6 @@ impl<'a> MountFilesContext<'a> { guest_path: impl AsRef, writable: bool, ) -> anyhow::Result<()> { - use wasmtime_wasi::{DirPerms, FilePerms}; let (dir_perms, file_perms) = if writable { (DirPerms::all(), FilePerms::all()) } else { diff --git a/crates/factors/Cargo.toml b/crates/factors/Cargo.toml index 7306e5294..3efbb2e02 100644 --- a/crates/factors/Cargo.toml +++ b/crates/factors/Cargo.toml @@ -31,5 +31,8 @@ tokio = { version = "1", features = ["macros", "rt", "sync"] } toml = "0.8" wasmtime-wasi-http = { workspace = true } +[build-dependencies] +cargo-target-dep = { git = "https://github.com/fermyon/cargo-target-dep", rev = "482f269eceb7b1a7e8fc618bf8c082dd24979cf1" } + [lints] workspace = true diff --git a/crates/factors/build.rs b/crates/factors/build.rs new file mode 100644 index 000000000..923b145fe --- /dev/null +++ b/crates/factors/build.rs @@ -0,0 +1,19 @@ +use std::path::Path; + +use cargo_target_dep::build_target_dep; + +fn main() { + println!("cargo:rerun-if-changed=build.rs"); + // Enable spin-factors-derive to emit expanded macro output. + let out_dir = std::env::var("OUT_DIR").unwrap(); + println!("cargo:rustc-env=SPIN_FACTORS_DERIVE_EXPAND_DIR={out_dir}"); + + let root = "tests/smoke-app"; + build_target_dep(root, Path::new("tests/smoke-app/smoke_app.wasm")) + .release() + .target("wasm32-wasi") + .build(); + println!("cargo:rerun-if-changed={root}/Cargo.toml"); + println!("cargo:rerun-if-changed={root}/Cargo.lock"); + println!("cargo:rerun-if-changed={root}/src"); +} diff --git a/crates/factors/tests/smoke-app/.gitignore b/crates/factors/tests/smoke-app/.gitignore index 386474fa5..671b13b2a 100644 --- a/crates/factors/tests/smoke-app/.gitignore +++ b/crates/factors/tests/smoke-app/.gitignore @@ -1,2 +1,3 @@ target/ .spin/ +*.wasm diff --git a/crates/factors/tests/smoke-app/spin.toml b/crates/factors/tests/smoke-app/spin.toml index a800b49fe..a49ca70f8 100644 --- a/crates/factors/tests/smoke-app/spin.toml +++ b/crates/factors/tests/smoke-app/spin.toml @@ -15,11 +15,7 @@ route = "/..." component = "smoke-app" [component.smoke-app] -source = "target/wasm32-wasi/release/smoke_app.wasm" +source = "smoke_app.wasm" allowed_outbound_hosts = ["https://{{ host }}"] key_value_stores = ["default"] -variables = { "other" = "<{{ other }}>"} - -[component.smoke-app.build] -command = "cargo build --target wasm32-wasi --release" -watch = ["src/**/*.rs", "Cargo.toml"] +variables = { "other" = "<{{ other }}>"} \ No newline at end of file diff --git a/crates/factors/tests/smoke.rs b/crates/factors/tests/smoke.rs index 0a4cbde32..ee1bcb6b4 100644 --- a/crates/factors/tests/smoke.rs +++ b/crates/factors/tests/smoke.rs @@ -64,7 +64,7 @@ async fn smoke_test_works() -> anyhow::Result<()> { None, ) .await?; - let app = App::inert(locked); + let app = App::new("test-app", locked); let engine = wasmtime::Engine::new(wasmtime::Config::new().async_support(true))?; let mut linker = wasmtime::component::Linker::new(&engine); diff --git a/crates/key-value/src/lib.rs b/crates/key-value/src/lib.rs index 7caddf40a..78e494000 100644 --- a/crates/key-value/src/lib.rs +++ b/crates/key-value/src/lib.rs @@ -5,10 +5,10 @@ use spin_world::v2::key_value; use std::{collections::HashSet, sync::Arc}; use table::Table; -mod host_component; +// TODO(factors): Code left for reference; remove after migration to factors +// mod host_component; mod util; -pub use host_component::{manager, KeyValueComponent}; pub use util::{ CachingStoreManager, DefaultManagerGetter, DelegatingStoreManager, EmptyStoreManager, }; diff --git a/crates/key-value/src/util.rs b/crates/key-value/src/util.rs index 0af704e62..c2aef7e4d 100644 --- a/crates/key-value/src/util.rs +++ b/crates/key-value/src/util.rs @@ -52,11 +52,15 @@ impl DelegatingStoreManager { #[async_trait] impl StoreManager for DelegatingStoreManager { async fn get(&self, name: &str) -> Result, Error> { - let store = match self.delegates.get(name) { - Some(store) => store, - None => &(self.default_manager)(name).ok_or(Error::NoSuchStore)?, - }; - store.get(name).await + match self.delegates.get(name) { + Some(store) => store.get(name).await, + None => { + (self.default_manager)(name) + .ok_or(Error::NoSuchStore)? + .get(name) + .await + } + } } fn is_defined(&self, store_name: &str) -> bool { diff --git a/crates/sqlite/src/lib.rs b/crates/sqlite/src/lib.rs index a9f589bf6..110dfaca0 100644 --- a/crates/sqlite/src/lib.rs +++ b/crates/sqlite/src/lib.rs @@ -1,13 +1,13 @@ -mod host_component; +// TODO(factors): Code left for reference; remove after migration to factors +// mod host_component; -use spin_app::{async_trait, MetadataKey}; +use spin_app::MetadataKey; use spin_core::wasmtime::component::Resource; +use spin_world::async_trait; use spin_world::v1::sqlite::Error as V1SqliteError; use spin_world::v2::sqlite; use std::{collections::HashSet, sync::Arc}; -pub use host_component::SqliteComponent; - pub const DATABASES_KEY: MetadataKey> = MetadataKey::new("databases"); /// A store of connections for all accessible databases for an application diff --git a/run-factors-tests.sh b/run-factors-tests.sh new file mode 100755 index 000000000..497a0f319 --- /dev/null +++ b/run-factors-tests.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +# TODO(factors): Remove after enabling CI for factors branch + +cargo test -p '*factor*'