diff --git a/crates/loader/src/local.rs b/crates/loader/src/local.rs index 3541ce6be6..34a236bbdb 100644 --- a/crates/loader/src/local.rs +++ b/crates/loader/src/local.rs @@ -91,6 +91,7 @@ impl LocalLoader { ) -> Result { spin_manifest::normalize::normalize_manifest(&mut manifest, profile)?; + manifest.validate_required_fields()?; manifest.validate_dependencies()?; let AppManifest { diff --git a/crates/manifest/src/schema/v2.rs b/crates/manifest/src/schema/v2.rs index 9aeb064a75..662a7f1d99 100644 --- a/crates/manifest/src/schema/v2.rs +++ b/crates/manifest/src/schema/v2.rs @@ -46,6 +46,7 @@ pub struct AppManifest { /// /// Example: `[[trigger.http]]` #[serde(rename = "trigger")] + #[serde(default)] #[schemars(with = "json_schema::TriggerSchema")] pub triggers: Map>, /// `[component.]` @@ -55,6 +56,15 @@ pub struct AppManifest { } impl AppManifest { + /// Ensures that required fields (where not enforced in the schema) are populated. + pub fn validate_required_fields(&self) -> anyhow::Result<()> { + if self.triggers.is_empty() { + anyhow::bail!("The application must have at least one trigger"); + } + + Ok(()) + } + /// This method ensures that the dependencies of each component are valid. pub fn validate_dependencies(&self) -> anyhow::Result<()> { for (component_id, component) in &self.components { diff --git a/examples/spin-timer/Cargo.lock b/examples/spin-timer/Cargo.lock index 11510ac248..e58d845f49 100644 --- a/examples/spin-timer/Cargo.lock +++ b/examples/spin-timer/Cargo.lock @@ -5037,8 +5037,8 @@ version = "4.2.0-pre0" dependencies = [ "anyhow", "wac-graph", - "wasm-encoder 0.247.0", - "wasmparser 0.247.0", + "wasm-encoder 0.258.0", + "wasmparser 0.258.0", ] [[package]] @@ -5060,11 +5060,11 @@ version = "4.2.0-pre0" dependencies = [ "anyhow", "tracing", - "wasm-encoder 0.247.0", - "wasm-metadata 0.247.0", - "wasmparser 0.247.0", - "wit-component 0.247.0", - "wit-parser 0.247.0", + "wasm-encoder 0.258.0", + "wasm-metadata 0.258.0", + "wasmparser 0.258.0", + "wit-component 0.258.0", + "wit-parser 0.258.0", ] [[package]] @@ -6666,9 +6666,9 @@ checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" [[package]] name = "wac-graph" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdc8c5ffe944e002a24ba9d0fa67f51d4a761c1fc97718a17d1d7379753a6f8e" +checksum = "0bf6c75ac6a3c0351b04ee506e6c39b5b01b4204364264b034e23f8df7cc9946" dependencies = [ "anyhow", "id-arena", @@ -6678,23 +6678,23 @@ dependencies = [ "semver", "thiserror 1.0.69", "wac-types", - "wasm-encoder 0.247.0", - "wasm-metadata 0.247.0", - "wasmparser 0.247.0", + "wasm-encoder 0.258.0", + "wasm-metadata 0.258.0", + "wasmparser 0.258.0", ] [[package]] name = "wac-types" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b90654c08294d879e85f0b8b2c5a7efc3a7a10df3009dd1578d98902d1ec8a2" +checksum = "fc44aa9e8f525d1f0c9800a4c082c33b4ac0781a84e83465923afdaf4a25755b" dependencies = [ "anyhow", "id-arena", "indexmap 2.14.0", "semver", - "wasm-encoder 0.247.0", - "wasmparser 0.247.0", + "wasm-encoder 0.258.0", + "wasmparser 0.258.0", ] [[package]] @@ -6834,16 +6834,6 @@ dependencies = [ "wat", ] -[[package]] -name = "wasm-encoder" -version = "0.247.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b6733b8b91d010a6ac5b0fb237dc46a19650bc4c67db66857e2e787d437204" -dependencies = [ - "leb128fmt", - "wasmparser 0.247.0", -] - [[package]] name = "wasm-encoder" version = "0.254.0" @@ -6865,22 +6855,13 @@ dependencies = [ ] [[package]] -name = "wasm-metadata" -version = "0.247.0" +name = "wasm-encoder" +version = "0.258.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "665fe59e56cc9b419ca6fcca56673e3421d1a5011e3b65caf6b726fd9e041d10" +checksum = "e974fe6821a8cf64575d51ea2194e2c8f77e7b66e9afe7419ce8a97f9ee0d251" dependencies = [ - "anyhow", - "auditable-serde", - "flate2", - "indexmap 2.14.0", - "serde", - "serde_derive", - "serde_json", - "spdx", - "url", - "wasm-encoder 0.247.0", - "wasmparser 0.247.0", + "leb128fmt", + "wasmparser 0.258.0", ] [[package]] @@ -6895,6 +6876,25 @@ dependencies = [ "wasmparser 0.254.0", ] +[[package]] +name = "wasm-metadata" +version = "0.258.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a11585adb92fe9b55ad1d760e8d8fb5d87e0d2e303cb8eed57f078d54293a2" +dependencies = [ + "anyhow", + "auditable-serde", + "flate2", + "indexmap 2.14.0", + "serde", + "serde_derive", + "serde_json", + "spdx", + "url", + "wasm-encoder 0.258.0", + "wasmparser 0.258.0", +] + [[package]] name = "wasm-pkg-common" version = "0.11.0" @@ -6927,9 +6927,9 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.247.0" +version = "0.254.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6fb4c2bee46c5ea4d40f8cdb5c131725cd976718ec56f1c8e82fbde5fa2a80" +checksum = "d5769a29f799fbab136aaf65b4fe5384cd7d93fe6fc9ba0dcb6c8382a1f16e27" dependencies = [ "bitflags", "hashbrown 0.17.1", @@ -6940,26 +6940,26 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.254.0" +version = "0.257.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5769a29f799fbab136aaf65b4fe5384cd7d93fe6fc9ba0dcb6c8382a1f16e27" +checksum = "d92fc335fb6d48f46bda1d8b26b69e28320c15ac3272208333833d6e217e2b4a" dependencies = [ "bitflags", - "hashbrown 0.17.1", "indexmap 2.14.0", "semver", - "serde", ] [[package]] name = "wasmparser" -version = "0.257.1" +version = "0.258.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92fc335fb6d48f46bda1d8b26b69e28320c15ac3272208333833d6e217e2b4a" +checksum = "d9a61719f93a87b16d325921e251800c4833f8fab50fa21c7de73aed50086313" dependencies = [ "bitflags", + "hashbrown 0.17.1", "indexmap 2.14.0", "semver", + "serde", ] [[package]] @@ -7771,9 +7771,9 @@ checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] name = "wit-component" -version = "0.247.0" +version = "0.254.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d567162a6b9843080e5e0053f696623ff694bae8ae017c9ec536d1873bbe3d8" +checksum = "b0e65bb94c369b3c4741ce3d1d2704b1fec93db7c540df0e521a097e7ceeb5be" dependencies = [ "anyhow", "bitflags", @@ -7782,17 +7782,17 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "wasm-encoder 0.247.0", - "wasm-metadata 0.247.0", - "wasmparser 0.247.0", - "wit-parser 0.247.0", + "wasm-encoder 0.254.0", + "wasm-metadata 0.254.0", + "wasmparser 0.254.0", + "wit-parser 0.254.0", ] [[package]] name = "wit-component" -version = "0.254.0" +version = "0.258.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0e65bb94c369b3c4741ce3d1d2704b1fec93db7c540df0e521a097e7ceeb5be" +checksum = "481b5c47b2ecce0389b5e08a05557d6a190c9cd761773b8880a8017ee04dc7ef" dependencies = [ "anyhow", "bitflags", @@ -7801,17 +7801,17 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "wasm-encoder 0.254.0", - "wasm-metadata 0.254.0", - "wasmparser 0.254.0", - "wit-parser 0.254.0", + "wasm-encoder 0.258.0", + "wasm-metadata 0.258.0", + "wasmparser 0.258.0", + "wit-parser 0.258.0", ] [[package]] name = "wit-parser" -version = "0.247.0" +version = "0.254.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ffe4064318cdf3c08cb99343b44c039fcefe61ccdf58aa9975285f13d74d1fc" +checksum = "1655131e4f7d3f0cb141f6eca71315ca40eff0f3d4de7cff0a82bacedd8c89b4" dependencies = [ "anyhow", "hashbrown 0.17.1", @@ -7822,15 +7822,15 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "unicode-xid", - "wasmparser 0.247.0", + "unicode-ident", + "wasmparser 0.254.0", ] [[package]] name = "wit-parser" -version = "0.254.0" +version = "0.258.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1655131e4f7d3f0cb141f6eca71315ca40eff0f3d4de7cff0a82bacedd8c89b4" +checksum = "ff4daaa3cd97ae49ecd0a99dc009d453f93e0f083dd3be38c0f24a83a93e37ac" dependencies = [ "anyhow", "hashbrown 0.17.1", @@ -7842,7 +7842,7 @@ dependencies = [ "serde_derive", "serde_json", "unicode-ident", - "wasmparser 0.254.0", + "wasmparser 0.258.0", ] [[package]] diff --git a/templates/http-empty/content/spin.toml b/templates/http-empty/content/spin.toml index e662f2f1c9..4044706b28 100644 --- a/templates/http-empty/content/spin.toml +++ b/templates/http-empty/content/spin.toml @@ -1,3 +1,5 @@ +#:schema https://schemas.spinframework.dev/spin/manifest-v2/latest.json + spin_manifest_version = 2 [application] diff --git a/tests/integration.rs b/tests/integration.rs index 990081e0ba..a5675331df 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -597,8 +597,8 @@ mod integration_tests { }, )?; - let expected = "Error: No triggers in app\n"; - assert_eq!(env.runtime_mut().stderr(), expected); + let expected = "application must have at least one trigger"; + assert!(env.runtime_mut().stderr().contains(expected)); Ok(()) }