From 9ae9b30ff8ce226bfeb3f302eb74d1984a07eaf6 Mon Sep 17 00:00:00 2001 From: Kate Goldenring Date: Mon, 4 Mar 2024 09:14:20 -0800 Subject: [PATCH] Point to latest Runwasi and Spin crates for precompilation support Signed-off-by: Kate Goldenring --- Cargo.lock | 576 ++++++++++++++++------------- containerd-shim-spin/Cargo.toml | 28 +- containerd-shim-spin/src/engine.rs | 131 +++++-- 3 files changed, 437 insertions(+), 298 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f4c8a87d..85c4d1e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1326,24 +1326,25 @@ dependencies = [ "serde_json", "spin-app", "spin-common", - "spin-componentize", + "spin-componentize 0.1.0", "spin-core", "spin-loader", "spin-manifest", "spin-oci", - "spin-redis-engine", "spin-trigger", "spin-trigger-http", + "spin-trigger-redis", "tokio", "trigger-sqs", "url", "wasmtime", + "wat", ] [[package]] name = "containerd-shim-wasm" -version = "0.4.0" -source = "git+https://github.com/containerd/runwasi?rev=c768e5b0919ca02903a301bf82a390489437dabe#c768e5b0919ca02903a301bf82a390489437dabe" +version = "0.5.0" +source = "git+https://github.com/containerd/runwasi?rev=064baf38c7b7de64c253a50115b3f7e921f28817#064baf38c7b7de64c253a50115b3f7e921f28817" dependencies = [ "anyhow", "caps", @@ -1359,14 +1360,19 @@ dependencies = [ "log", "nix 0.27.1", "oci-spec", + "prost-types 0.11.9", "protobuf 3.2.0", "serde", "serde_json", + "sha256", "thiserror", "tokio", + "tokio-stream", "ttrpc", + "ttrpc-codegen", + "wasmparser 0.200.0", "wat", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1405,18 +1411,18 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.104.1" +version = "0.105.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e7c0d51205b863591dd1e7aaa0fb69c2ea7bed48ffa63d6c4a848b07a35a732" +checksum = "9515fcc42b6cb5137f76b84c1a6f819782d0cf12473d145d3bc5cd67eedc8bc2" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.104.1" +version = "0.105.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ffb467cbc25543e4c20d2ad669bf8275598047b03c89652ad5fe2a0f47fc0e1" +checksum = "1ad827c6071bfe6d22de1bc331296a29f9ddc506ff926d8415b435ec6a6efce0" dependencies = [ "bumpalo", "cranelift-bforest", @@ -1435,33 +1441,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.104.1" +version = "0.105.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7e74aed5c2b91e38d090653506afbd2cd3be1ff70593e2aa6bb82b3c6b77ff" +checksum = "10e6b36237a9ca2ce2fb4cc7741d418a080afa1327402138412ef85d5367bef1" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.104.1" +version = "0.105.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff2dd24cce0775566da85770cb48aa58fef901cf2bff30275b42e7dbe62cbd5" +checksum = "c36bf4bfb86898a94ccfa773a1f86e8a5346b1983ff72059bdd2db4600325251" [[package]] name = "cranelift-control" -version = "0.104.1" +version = "0.105.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8bcf4d5c73bbca309edf3af2839b5218e5c74cfbf22b0ac492af8a1d11120d9" +checksum = "7cbf36560e7a6bd1409ca91e7b43b2cc7ed8429f343d7605eadf9046e8fac0d0" dependencies = [ "arbitrary", ] [[package]] name = "cranelift-entity" -version = "0.104.1" +version = "0.105.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "286754159b1a685475d6a0b4710832f950d6f4846a817002e2c23ff001321a65" +checksum = "a71e11061a75b1184c09bea97c026a88f08b59ade96a7bb1f259d4ea0df2e942" dependencies = [ "serde", "serde_derive", @@ -1469,9 +1475,9 @@ dependencies = [ [[package]] name = "cranelift-frontend" -version = "0.104.1" +version = "0.105.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67150a1fef9857caba710f8c0c8223d640f02c0e5d1ebbfc75ed62912599cb6b" +checksum = "af5d4da63143ee3485c7bcedde0a818727d737d1083484a0ceedb8950c89e495" dependencies = [ "cranelift-codegen", "log", @@ -1481,15 +1487,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.104.1" +version = "0.105.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb7ceea70d3e0d7f69df7657f99de902e32016731c5a8d2788c1df0215f00952" +checksum = "457a9832b089e26f5eea70dcf49bed8ec6edafed630ce7c83161f24d46ab8085" [[package]] name = "cranelift-native" -version = "0.104.1" +version = "0.105.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707e5d9384ce4fa3c40af1abf4c3ec49857745cced5187593385f4a2c0b95445" +checksum = "9b490d579df1ce365e1ea359e24ed86d82289fa785153327c2f6a69a59a731e4" dependencies = [ "cranelift-codegen", "libc", @@ -1498,9 +1504,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.104.1" +version = "0.105.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d957e3ff2a14c2f974a66c22bfcedcd2bd0272af8dce4236869c3942f5a471" +checksum = "8cd747ed7f9a461dda9c388415392f6bb95d1a6ef3b7694d17e0817eb74b7798" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1508,7 +1514,7 @@ dependencies = [ "itertools 0.10.5", "log", "smallvec", - "wasmparser 0.118.1", + "wasmparser 0.121.2", "wasmtime-types", ] @@ -1899,13 +1905,12 @@ dependencies = [ [[package]] name = "dkregistry" version = "0.5.1-alpha.0" -source = "git+https://github.com/camallo/dkregistry-rs?rev=37acecb4b8139dd1b1cc83795442f94f90e1ffc5#37acecb4b8139dd1b1cc83795442f94f90e1ffc5" +source = "git+https://github.com/fermyon/dkregistry-rs?rev=161cf2b66996ed97c7abaf046e38244484814de3#161cf2b66996ed97c7abaf046e38244484814de3" dependencies = [ "async-stream", "base64 0.13.1", "bytes", "futures", - "http 0.2.11", "libflate", "log", "mime", @@ -2926,12 +2931,12 @@ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" dependencies = [ "hermit-abi 0.3.4", - "rustix 0.38.30", + "libc", "windows-sys 0.52.0", ] @@ -3265,9 +3270,9 @@ dependencies = [ [[package]] name = "libflate" -version = "1.4.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ff4ae71b685bbad2f2f391fe74f6b7659a34871c08b210fdc039e43bee07d18" +checksum = "05605ab2bce11bcfc0e9c635ff29ef8b2ea83f29be257ee7d730cac3ee373093" dependencies = [ "adler32", "crc32fast", @@ -3615,15 +3620,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.7.1" @@ -3816,8 +3812,6 @@ dependencies = [ "bitflags 1.3.2", "cfg-if 1.0.0", "libc", - "memoffset 0.6.5", - "pin-utils", ] [[package]] @@ -4120,8 +4114,8 @@ dependencies = [ [[package]] name = "outbound-http" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "http 0.2.11", @@ -4138,8 +4132,8 @@ dependencies = [ [[package]] name = "outbound-mysql" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "flate2", @@ -4157,8 +4151,8 @@ dependencies = [ [[package]] name = "outbound-pg" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "native-tls", @@ -4175,8 +4169,8 @@ dependencies = [ [[package]] name = "outbound-redis" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "redis 0.21.7", @@ -4514,7 +4508,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "059a34f111a9dee2ce1ac2826a68b24601c4298cfeb1a587c3cb493d5ab46f52" dependencies = [ "libc", - "nix 0.25.1", + "nix 0.27.1", ] [[package]] @@ -5567,6 +5561,19 @@ dependencies = [ "digest", ] +[[package]] +name = "sha256" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18278f6a914fa3070aa316493f7d2ddfb9ac86ebc06fa3b83bffda487e9065b0" +dependencies = [ + "async-trait", + "bytes", + "hex", + "sha2", + "tokio", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -5698,8 +5705,8 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "spin-app" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-trait", @@ -5714,8 +5721,8 @@ dependencies = [ [[package]] name = "spin-common" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "dirs 4.0.0", @@ -5733,14 +5740,26 @@ dependencies = [ "anyhow", "wasm-encoder 0.35.0", "wasmparser 0.115.0", - "wit-component", + "wit-component 0.16.1", "wit-parser 0.12.2", ] +[[package]] +name = "spin-componentize" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" +dependencies = [ + "anyhow", + "wasm-encoder 0.200.0", + "wasmparser 0.200.0", + "wit-component 0.200.0", + "wit-parser 0.200.0", +] + [[package]] name = "spin-core" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-trait", @@ -5761,8 +5780,8 @@ dependencies = [ [[package]] name = "spin-http" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "http 1.0.0", @@ -5779,8 +5798,8 @@ dependencies = [ [[package]] name = "spin-key-value" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "lru 0.9.0", @@ -5795,7 +5814,7 @@ dependencies = [ [[package]] name = "spin-key-value-azure" version = "0.1.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "azure_data_cosmos", @@ -5810,7 +5829,7 @@ dependencies = [ [[package]] name = "spin-key-value-redis" version = "0.1.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "redis 0.21.7", @@ -5824,7 +5843,7 @@ dependencies = [ [[package]] name = "spin-key-value-sqlite" version = "0.1.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "once_cell", @@ -5837,8 +5856,8 @@ dependencies = [ [[package]] name = "spin-llm" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "bytesize", @@ -5850,8 +5869,8 @@ dependencies = [ [[package]] name = "spin-llm-remote-http" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "http 0.2.11", @@ -5867,8 +5886,8 @@ dependencies = [ [[package]] name = "spin-loader" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-trait", @@ -5905,8 +5924,8 @@ dependencies = [ [[package]] name = "spin-locked-app" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-trait", @@ -5919,8 +5938,8 @@ dependencies = [ [[package]] name = "spin-manifest" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "indexmap 1.9.3", @@ -5934,8 +5953,8 @@ dependencies = [ [[package]] name = "spin-oci" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-compression", @@ -5962,8 +5981,8 @@ dependencies = [ [[package]] name = "spin-outbound-networking" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "ipnet", @@ -5973,27 +5992,10 @@ dependencies = [ "urlencoding", ] -[[package]] -name = "spin-redis-engine" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" -dependencies = [ - "anyhow", - "async-trait", - "futures", - "redis 0.21.7", - "serde", - "spin-app", - "spin-core", - "spin-trigger", - "spin-world", - "tracing", -] - [[package]] name = "spin-serde" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "base64 0.21.5", "serde", @@ -6001,8 +6003,8 @@ dependencies = [ [[package]] name = "spin-sqlite" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-trait", @@ -6015,8 +6017,8 @@ dependencies = [ [[package]] name = "spin-sqlite-inproc" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-trait", @@ -6030,8 +6032,8 @@ dependencies = [ [[package]] name = "spin-sqlite-libsql" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-trait", @@ -6045,8 +6047,8 @@ dependencies = [ [[package]] name = "spin-trigger" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-trait", @@ -6065,7 +6067,7 @@ dependencies = [ "serde_json", "spin-app", "spin-common", - "spin-componentize", + "spin-componentize 2.3.1", "spin-core", "spin-key-value", "spin-key-value-azure", @@ -6093,8 +6095,8 @@ dependencies = [ [[package]] name = "spin-trigger-http" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-trait", @@ -6129,10 +6131,27 @@ dependencies = [ "wasmtime-wasi-http", ] +[[package]] +name = "spin-trigger-redis" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" +dependencies = [ + "anyhow", + "async-trait", + "futures", + "redis 0.21.7", + "serde", + "spin-app", + "spin-core", + "spin-trigger", + "spin-world", + "tracing", +] + [[package]] name = "spin-variables" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "anyhow", "async-trait", @@ -6149,8 +6168,8 @@ dependencies = [ [[package]] name = "spin-world" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "wasmtime", ] @@ -6325,8 +6344,8 @@ dependencies = [ [[package]] name = "table" -version = "2.2.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +version = "2.3.1" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" [[package]] name = "tar" @@ -6370,7 +6389,7 @@ dependencies = [ [[package]] name = "terminal" version = "0.1.0" -source = "git+https://github.com/fermyon/spin?branch=load-aot-compiled-components#7ee3418013f4471ebf3a970a046b87b797dadf8f" +source = "git+https://github.com/fermyon/spin?tag=v2.3.1#22c2ac507add20f82f35e79fb798e8294a49f69a" dependencies = [ "atty", "once_cell", @@ -6405,9 +6424,9 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if 1.0.0", "once_cell", @@ -6879,7 +6898,7 @@ dependencies = [ [[package]] name = "trigger-sqs" version = "0.6.0" -source = "git+https://github.com/kate-goldenring/spin-trigger-sqs?branch=uses-aot-compilation-loader#b03027821d3a0e9ec9e03f523e90a63baec62b7f" +source = "git+https://github.com/fermyon/spin-trigger-sqs?rev=ad7c5405d588161ce4ac317172dd8b165bdab572#ad7c5405d588161ce4ac317172dd8b165bdab572" dependencies = [ "anyhow", "async-trait", @@ -7189,13 +7208,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] -name = "wasi-cap-std-sync" -version = "17.0.1" +name = "wasi-common" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "025e842ba390587e523785ff58bd54fbbf1781b8d3072bc9aba4dc0b809f69da" +checksum = "880c1461417b2bf90262591bf8a5f04358fb86dac8a585a49b87024971296763" dependencies = [ "anyhow", - "async-trait", + "bitflags 2.4.2", "cap-fs-ext", "cap-rand", "cap-std", @@ -7203,51 +7222,18 @@ dependencies = [ "fs-set-times", "io-extras", "io-lifetimes 2.0.3", + "log", "once_cell", "rustix 0.38.30", "system-interface", - "tracing", - "wasi-common", - "windows-sys 0.52.0", -] - -[[package]] -name = "wasi-common" -version = "17.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4d4023cc65b3615590d38db0afb79234de09b3bb89cb0d8f83bdee9f5c28a8" -dependencies = [ - "anyhow", - "bitflags 2.4.2", - "cap-rand", - "cap-std", - "io-extras", - "log", - "rustix 0.38.30", "thiserror", + "tokio", "tracing", "wasmtime", "wiggle", "windows-sys 0.52.0", ] -[[package]] -name = "wasi-tokio" -version = "17.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c97de58a5b89e9ab479a2f9e17e9eb41d0e0156e3c979b2e7f00e9499d2e97b7" -dependencies = [ - "anyhow", - "cap-std", - "io-extras", - "io-lifetimes 2.0.3", - "rustix 0.38.30", - "tokio", - "wasi-cap-std-sync", - "wasi-common", - "wiggle", -] - [[package]] name = "wasm-bindgen" version = "0.2.88" @@ -7334,18 +7320,36 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.38.1" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad2b51884de9c7f4fe2fd1043fccb8dcad4b1e29558146ee57a144d15779f3f" +checksum = "d162eb64168969ae90e8668ca0593b0e47667e315aa08e717a9c9574d700d826" dependencies = [ "leb128", ] [[package]] name = "wasm-encoder" -version = "0.40.0" +version = "0.41.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d162eb64168969ae90e8668ca0593b0e47667e315aa08e717a9c9574d700d826" +checksum = "972f97a5d8318f908dded23594188a90bcd09365986b1163e66d70170e5287ae" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasm-encoder" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e3fb0c8fbddd78aa6095b850dfeedbc7506cf5f81e633f69cf8f2333ab84b9" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasm-encoder" +version = "0.201.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9c7d2731df60006819b013f64ccc2019691deccf6e11a1804bc850cd6748f1a" dependencies = [ "leb128", ] @@ -7366,6 +7370,22 @@ dependencies = [ "wasmparser 0.120.0", ] +[[package]] +name = "wasm-metadata" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b8cc0c21f46d55b0aaa419cacce1eadcf28eaebd0e1488d6a6313ee71a586" +dependencies = [ + "anyhow", + "indexmap 2.1.0", + "serde", + "serde_derive", + "serde_json", + "spdx", + "wasm-encoder 0.200.0", + "wasmparser 0.200.0", +] + [[package]] name = "wasm-streams" version = "0.3.0" @@ -7401,19 +7421,31 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.118.1" +version = "0.120.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ee9723b928e735d53000dec9eae7b07a60e490c85ab54abb66659fc61bfcd9" +checksum = "e9148127f39cbffe43efee8d5442b16ecdba21567785268daa1ec9e134389705" dependencies = [ + "bitflags 2.4.2", "indexmap 2.1.0", "semver", ] [[package]] name = "wasmparser" -version = "0.120.0" +version = "0.121.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9148127f39cbffe43efee8d5442b16ecdba21567785268daa1ec9e134389705" +checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" +dependencies = [ + "bitflags 2.4.2", + "indexmap 2.1.0", + "semver", +] + +[[package]] +name = "wasmparser" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a03f65ac876612140c57ff6c3b8fe4990067cce97c2cfdb07368a3cc3354b062" dependencies = [ "bitflags 2.4.2", "indexmap 2.1.0", @@ -7422,20 +7454,21 @@ dependencies = [ [[package]] name = "wasmprinter" -version = "0.2.77" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8389a95eb0b3165fea0537a6988960cc23a33d9be650e63fc3d63065fe20dcb" +checksum = "60e73986a6b7fdfedb7c5bf9e7eb71135486507c8fbc4c0c42cffcb6532988b7" dependencies = [ "anyhow", - "wasmparser 0.120.0", + "wasmparser 0.121.2", ] [[package]] name = "wasmtime" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb6aa966be38f613954c3debe7ba6c7a02ffd0537432be438da0b038955cdf" +checksum = "4c843b8bc4dd4f3a76173ba93405c71111d570af0d90ea5f6299c705d0c2add2" dependencies = [ + "addr2line", "anyhow", "async-trait", "bincode", @@ -7443,26 +7476,30 @@ dependencies = [ "cfg-if 1.0.0", "encoding_rs", "fxprof-processed-profile", + "gimli", "indexmap 2.1.0", + "ittapi", "libc", "log", "object", "once_cell", "paste", "rayon", + "rustix 0.38.30", "serde", "serde_derive", "serde_json", "target-lexicon", - "wasm-encoder 0.38.1", - "wasmparser 0.118.1", + "wasm-encoder 0.41.2", + "wasmparser 0.121.2", "wasmtime-cache", "wasmtime-component-macro", "wasmtime-component-util", "wasmtime-cranelift", "wasmtime-environ", "wasmtime-fiber", - "wasmtime-jit", + "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", "wasmtime-runtime", "wasmtime-winch", "wat", @@ -7471,18 +7508,18 @@ dependencies = [ [[package]] name = "wasmtime-asm-macros" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1495ef4d46aec14f967b672e946e391dd8a14a443cda3d5e0779ff67fb6e28d" +checksum = "86b9d329c718b3a18412a6a017c912b539baa8fe1210d21b651f6b4dbafed743" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "wasmtime-cache" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2de1b065bdbaca3df9e7e9f70eb129e326a99d971b16d666acd798d98d47635" +checksum = "6fb4fc2bbf9c790a57875eba65588fa97acf57a7d784dc86d057e648d9a1ed91" dependencies = [ "anyhow", "base64 0.21.5", @@ -7500,9 +7537,9 @@ dependencies = [ [[package]] name = "wasmtime-component-macro" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f19bcff82f81ba0273c0b68f3909977b0dd54489bc86c630d8aad43dca92f3f" +checksum = "d8d55ddfd02898885c39638eae9631cd430c83a368f5996ed0f7bfb181d02157" dependencies = [ "anyhow", "proc-macro2", @@ -7515,15 +7552,15 @@ dependencies = [ [[package]] name = "wasmtime-component-util" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8af072b7ad5ac5583e1f9e4737ebf88923de564fb5d4ace0ca9b4b720bdf95a1" +checksum = "1d6d69c430cddc70ec42159506962c66983ce0192ebde4eb125b7aabc49cff88" [[package]] name = "wasmtime-cranelift" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df08a8bd9a68732577bee05ac685e4c247238b5e79ad9c062e2dfb4d04dca132" +checksum = "31ca62f519225492bd555d0ec85a2dacb0c10315db3418c8b9aeb3824bf54a24" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -7538,7 +7575,7 @@ dependencies = [ "object", "target-lexicon", "thiserror", - "wasmparser 0.118.1", + "wasmparser 0.121.2", "wasmtime-cranelift-shared", "wasmtime-environ", "wasmtime-versioned-export-macros", @@ -7546,9 +7583,9 @@ dependencies = [ [[package]] name = "wasmtime-cranelift-shared" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "404201c9e669083f189f01337b3ed0aa0eb081157fb4e170bbfe193df9497771" +checksum = "fd5f2071f42e61490bf7cb95b9acdbe6a29dd577a398019304a960585f28b844" dependencies = [ "anyhow", "cranelift-codegen", @@ -7562,22 +7599,25 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e696b4911c9a69c3c2892ec05eb41bb15436d1a46d8830a755c40f5df47546a" +checksum = "82bf1a47f384610da19f58b0fd392ca6a3b720974315c08afb0392c0f3951fed" dependencies = [ "anyhow", + "bincode", + "cpp_demangle", "cranelift-entity", "gimli", "indexmap 2.1.0", "log", "object", + "rustc-demangle", "serde", "serde_derive", "target-lexicon", "thiserror", - "wasm-encoder 0.38.1", - "wasmparser 0.118.1", + "wasm-encoder 0.41.2", + "wasmparser 0.121.2", "wasmprinter", "wasmtime-component-util", "wasmtime-types", @@ -7585,9 +7625,9 @@ dependencies = [ [[package]] name = "wasmtime-fiber" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a39681c1f6f54d1bf7efe5dc829f8d7fc0e2ca12c346fd7a3efbf726e9681d2" +checksum = "0e31aecada2831e067ebfe93faa3001cc153d506f8af40bbea58aa1d20fe4820" dependencies = [ "anyhow", "cc", @@ -7598,38 +7638,11 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "wasmtime-jit" -version = "17.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c56519882d936c680bd191d58ac04cff071a470eca2dcc664adcd60f986a731" -dependencies = [ - "addr2line", - "anyhow", - "bincode", - "cfg-if 1.0.0", - "cpp_demangle", - "gimli", - "ittapi", - "log", - "object", - "rustc-demangle", - "rustix 0.38.30", - "serde", - "serde_derive", - "target-lexicon", - "wasmtime-environ", - "wasmtime-jit-debug", - "wasmtime-jit-icache-coherence", - "wasmtime-runtime", - "windows-sys 0.52.0", -] - [[package]] name = "wasmtime-jit-debug" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "babc65e64ab0dd4e1ce65624db64e24ed0fbdebb16148729173fa0da9f70e53c" +checksum = "833dae95bc7a4f9177bf93f9497419763535b74e37eb8c37be53937d3281e287" dependencies = [ "object", "once_cell", @@ -7639,9 +7652,9 @@ dependencies = [ [[package]] name = "wasmtime-jit-icache-coherence" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7ec5b11c12d9acb09612e7ce04c4c8aea3e8dc79b2591ffdead986a5ce8ec49" +checksum = "33f4121cb29dda08139b2824a734dd095d83ce843f2d613a84eb580b9cfc17ac" dependencies = [ "cfg-if 1.0.0", "libc", @@ -7650,9 +7663,9 @@ dependencies = [ [[package]] name = "wasmtime-runtime" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e1c31bbdf67cb86f149bcead5193749f23f77c93c5244ec9ac8d192f90966c" +checksum = "4e517f2b996bb3b0e34a82a2bce194f850d9bcfc25c08328ef5fb71b071066b8" dependencies = [ "anyhow", "cc", @@ -7668,7 +7681,7 @@ dependencies = [ "psm", "rustix 0.38.30", "sptr", - "wasm-encoder 0.38.1", + "wasm-encoder 0.41.2", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-fiber", @@ -7680,22 +7693,22 @@ dependencies = [ [[package]] name = "wasmtime-types" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e799cff634d30fd042db96b417d515e54f903b95f8c1e0ec60e8f604479485" +checksum = "54a327d7a0ef57bd52a507d28b4561a74126c7a8535a2fc6f2025716bc6a52e8" dependencies = [ "cranelift-entity", "serde", "serde_derive", "thiserror", - "wasmparser 0.118.1", + "wasmparser 0.121.2", ] [[package]] name = "wasmtime-versioned-export-macros" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10fe166d4e4c95d5d80c5b47e1e12256af2099ac525ddb9a19b1aeb8896e5e1" +checksum = "8ef32eea9fc7035a55159a679d1e89b43ece5ae45d24eed4808e6a92c99a0da4" dependencies = [ "proc-macro2", "quote", @@ -7704,9 +7717,9 @@ dependencies = [ [[package]] name = "wasmtime-wasi" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494f99111a165dcddc69aaa5fa23604f49dcfab479a869edd84581abd6ac569b" +checksum = "d04d2fb2257245aa05ff799ded40520ae4d8cd31b0d14972afac89061f12fe12" dependencies = [ "anyhow", "async-trait", @@ -7721,7 +7734,6 @@ dependencies = [ "futures", "io-extras", "io-lifetimes 2.0.3", - "libc", "log", "once_cell", "rustix 0.38.30", @@ -7730,9 +7742,7 @@ dependencies = [ "tokio", "tracing", "url", - "wasi-cap-std-sync", "wasi-common", - "wasi-tokio", "wasmtime", "wiggle", "windows-sys 0.52.0", @@ -7740,9 +7750,9 @@ dependencies = [ [[package]] name = "wasmtime-wasi-http" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6ee5c9cd235c99afdb9acf8dac79ae0ea431e36cb1d9434d6940a7390bdce7" +checksum = "eb0bffc64b193bb99810de77ca2a77f4afa828629e83106cbe47bf76000d93a3" dependencies = [ "anyhow", "async-trait", @@ -7763,16 +7773,16 @@ dependencies = [ [[package]] name = "wasmtime-winch" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3f5d76d399cb4423e6f178bc154a0e1c314711e28dabaa6e757e56628a083ec" +checksum = "db3378c0e808a744b5d4df2a9a9d2746a53b151811926731f04fc401707f7d54" dependencies = [ "anyhow", "cranelift-codegen", "gimli", "object", "target-lexicon", - "wasmparser 0.118.1", + "wasmparser 0.121.2", "wasmtime-cranelift-shared", "wasmtime-environ", "winch-codegen", @@ -7780,9 +7790,9 @@ dependencies = [ [[package]] name = "wasmtime-wit-bindgen" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb3bc92c031cf4961135bffe055a69c1bd67c253dca20631478189bb05ec27b" +checksum = "ca677c36869e45602617b25a9968ec0d895ad9a0aee3756d9dee1ddd89456f91" dependencies = [ "anyhow", "heck 0.4.1", @@ -7792,9 +7802,9 @@ dependencies = [ [[package]] name = "wasmtime-wmemcheck" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da08ab734954e16f57be38423b90c25a0b13420e51cbd0a2e37b86a468a988c" +checksum = "7f4cbfb052d66f03603a9b77f18171ea245c7805714caad370a549a6344bf86b" [[package]] name = "wast" @@ -7807,23 +7817,24 @@ dependencies = [ [[package]] name = "wast" -version = "70.0.1" +version = "201.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d415036fe747a32b30c76c8bd6c73f69b7705fb7ebca5f16e852eef0c95802" +checksum = "1ef6e1ef34d7da3e2b374fd2b1a9c0227aff6cad596e1b24df9b58d0f6222faa" dependencies = [ + "bumpalo", "leb128", "memchr", "unicode-width", - "wasm-encoder 0.40.0", + "wasm-encoder 0.201.0", ] [[package]] name = "wat" -version = "1.0.84" +version = "1.201.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8241f34599d413d2243a21015ab43aef68bfb32a0e447c54eef8d423525ca15e" +checksum = "453d5b37a45b98dee4f4cb68015fc73634d7883bbef1c65e6e9c78d454cf3f32" dependencies = [ - "wast 70.0.1", + "wast 201.0.0", ] [[package]] @@ -7885,9 +7896,9 @@ dependencies = [ [[package]] name = "wiggle" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd5b200b5dd3d5d7cc4093166f4f916d2d2839296cf1b1757b9726635f6425c3" +checksum = "b69812e493f8a43d8551abfaaf9539e1aff0cf56a58cdd276845fc4af035d0cd" dependencies = [ "anyhow", "async-trait", @@ -7900,9 +7911,9 @@ dependencies = [ [[package]] name = "wiggle-generate" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4dc34a2bc1091599de005e9b854cd1a9ea35b16ca51cac2797274c1a2666e06" +checksum = "0446357a5a7af0172848b6eca7b2aa1ab7d90065cd2ab02b633a322e1a52f636" dependencies = [ "anyhow", "heck 0.4.1", @@ -7915,9 +7926,9 @@ dependencies = [ [[package]] name = "wiggle-macro" -version = "17.0.1" +version = "18.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ba3b37f402a7513b9ed7973a6e907074987b3afdcede98d3d79939b3e76f1b" +checksum = "9498ef53a12cf25dc6de9baef6ccd8b58d159202c412a19f4d72b218393086c5" dependencies = [ "proc-macro2", "quote", @@ -7958,9 +7969,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "winch-codegen" -version = "0.15.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d921185084e134e897e0e202e129a422306d0f1391954ecf4928d36defa897d" +checksum = "8197ed4a2ebf612f0624ddda10de71f8cd2d3a4ecf8ffac0586a264599708d63" dependencies = [ "anyhow", "cranelift-codegen", @@ -7968,7 +7979,7 @@ dependencies = [ "regalloc2", "smallvec", "target-lexicon", - "wasmparser 0.118.1", + "wasmparser 0.121.2", "wasmtime-environ", ] @@ -8156,11 +8167,30 @@ dependencies = [ "serde_derive", "serde_json", "wasm-encoder 0.36.2", - "wasm-metadata", + "wasm-metadata 0.10.16", "wasmparser 0.116.1", "wit-parser 0.12.2", ] +[[package]] +name = "wit-component" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39979723340baea490b87b11b2abae05f149d86f2b55c18d41d78a2a2b284c16" +dependencies = [ + "anyhow", + "bitflags 2.4.2", + "indexmap 2.1.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder 0.200.0", + "wasm-metadata 0.200.0", + "wasmparser 0.200.0", + "wit-parser 0.200.0", +] + [[package]] name = "wit-parser" version = "0.12.2" @@ -8195,6 +8225,24 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "wit-parser" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f717576b37f01c15696bda7f6f13868367b9c5913485f9f0ec8e59fd28c8e13" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.1.0", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser 0.200.0", +] + [[package]] name = "witx" version = "0.9.1" diff --git a/containerd-shim-spin/Cargo.toml b/containerd-shim-spin/Cargo.toml index da608003..f01a55cf 100644 --- a/containerd-shim-spin/Cargo.toml +++ b/containerd-shim-spin/Cargo.toml @@ -11,21 +11,22 @@ Containerd shim for running Spin workloads. """ [dependencies] -containerd-shim-wasm = { git = "https://github.com/containerd/runwasi", rev = "c768e5b0919ca02903a301bf82a390489437dabe" } +containerd-shim-wasm = { git = "https://github.com/containerd/runwasi", rev = "064baf38c7b7de64c253a50115b3f7e921f28817" } containerd-shim = "0.6.0" log = "0.4" -spin-app = { git = "https://github.com/fermyon/spin", branch = "load-aot-compiled-components" } -spin-core = { git = "https://github.com/fermyon/spin", branch = "load-aot-compiled-components" } +spin-app = { git = "https://github.com/fermyon/spin", tag = "v2.3.1" } +spin-core = { git = "https://github.com/fermyon/spin", tag = "v2.3.1" } spin-componentize = { git = "https://github.com/fermyon/spin-componentize", rev = "191789170abde10cd55590466c0660dd6c7d472a" } -spin-trigger = { git = "https://github.com/fermyon/spin", branch = "load-aot-compiled-components" } -spin-trigger-http = { git = "https://github.com/fermyon/spin", branch = "load-aot-compiled-components" } -spin-redis-engine = { git = "https://github.com/fermyon/spin", branch = "load-aot-compiled-components" } -trigger-sqs = { git = "https://github.com/kate-goldenring/spin-trigger-sqs", branch = "uses-aot-compilation-loader" } -spin-manifest = { git = "https://github.com/fermyon/spin", branch = "load-aot-compiled-components" } -spin-loader = { git = "https://github.com/fermyon/spin", branch = "load-aot-compiled-components" } -spin-oci = { git = "https://github.com/fermyon/spin", branch = "load-aot-compiled-components" } -spin-common = { git = "https://github.com/fermyon/spin", branch = "load-aot-compiled-components" } -wasmtime = "17.0.0" +# Enable loading components precompiled by the shim +spin-trigger = { git = "https://github.com/fermyon/spin", tag = "v2.3.1", features = ["unsafe-aot-compilation"] } +spin-trigger-http = { git = "https://github.com/fermyon/spin", tag = "v2.3.1" } +spin-trigger-redis = { git = "https://github.com/fermyon/spin", tag = "v2.3.1" } +trigger-sqs = { git = "https://github.com/fermyon/spin-trigger-sqs", rev = "ad7c5405d588161ce4ac317172dd8b165bdab572" } +spin-manifest = { git = "https://github.com/fermyon/spin", tag = "v2.3.1" } +spin-loader = { git = "https://github.com/fermyon/spin", tag = "v2.3.1" } +spin-oci = { git = "https://github.com/fermyon/spin", tag = "v2.3.1" } +spin-common = { git = "https://github.com/fermyon/spin", tag = "v2.3.1" } +wasmtime = "18.0.1" tokio = { version = "1", features = ["rt"] } openssl = { version = "*", features = ["vendored"] } serde = "1.0" @@ -36,3 +37,6 @@ oci-spec = { version = "0.6.3" } futures = "0.3" ctrlc = { version = "3.2", features = ["termination"] } + +[dev-dependencies] +wat = "1" diff --git a/containerd-shim-spin/src/engine.rs b/containerd-shim-spin/src/engine.rs index cf5f48e4..19a071b5 100644 --- a/containerd-shim-spin/src/engine.rs +++ b/containerd-shim-spin/src/engine.rs @@ -7,10 +7,10 @@ use spin_app::locked::LockedApp; use spin_loader::cache::Cache; use spin_loader::FilesMountStrategy; use spin_manifest::schema::v2::AppManifest; -use spin_redis_engine::RedisTrigger; use spin_trigger::TriggerHooks; use spin_trigger::{loader, RuntimeConfig, TriggerExecutor, TriggerExecutorBuilder}; use spin_trigger_http::HttpTrigger; +use spin_trigger_redis::RedisTrigger; use std::collections::hash_map::DefaultHasher; use std::collections::HashSet; use std::env; @@ -285,7 +285,13 @@ impl SpinEngine { let locked_url = self.write_locked_app(&app, &working_dir).await?; // Build trigger config - let loader = loader::TriggerLoader::new(working_dir.clone(), true, true); + let mut loader = loader::TriggerLoader::new(working_dir.clone(), true); + // Configure the loader to support loading AOT compiled components.. + // Since all components were compiled by the shim (during `precompile`), + // this operation can be considered safe. + unsafe { + loader.enable_loading_aot_compiled_components(); + } let mut runtime_config = RuntimeConfig::new(PathBuf::from("/").into()); // Load in runtime config if one exists at expected location if Path::new(RUNTIME_CONFIG_PATH).exists() { @@ -301,6 +307,16 @@ impl SpinEngine { let executor = builder.build(locked_url, runtime_config, init_data).await?; Ok(executor) } + + // Returns Some(WasmLayer) if the layer contains wasm, otherwise None + fn is_wasm_content(layer: &WasmLayer) -> Option { + if let MediaType::Other(name) = layer.config.media_type() { + if name == "application/vnd.wasm.content.layer.v1+wasm" { + return Some(layer.clone()); + } + } + None + } } impl Engine for SpinEngine { @@ -328,31 +344,34 @@ impl Engine for SpinEngine { ] } - fn precompile(&self, layer: &WasmLayer) -> Option>> { - match layer.config.media_type() { - MediaType::Other(name) => { + fn precompile(&self, layers: &[WasmLayer]) -> Result>>> { + // Runwasi expects layers to be returned in the same order, so wrap each layer in an option, setting non Wasm layers to None + let mut wasm_content_layers: Vec> = + layers.iter().map(SpinEngine::is_wasm_content).collect(); + for layer in &mut wasm_content_layers { + if let Some(wasm_layer) = layer.as_mut() { log::info!( - "Precompiling layer with Spin Engine: {:?}", - layer.config.digest() + "Precompile called for wasm layer {:?}", + wasm_layer.config.digest() ); - if name == "application/vnd.wasm.content.layer.v1+wasm" { - if self - .wasmtime_engine - .detect_precompiled(&layer.layer) - .is_some() - { - log::info!("Layer already precompiled {:?}", layer.config.digest()); - return None; - } - let component = - spin_componentize::componentize_if_necessary(&layer.layer).unwrap(); - Some(self.wasmtime_engine.precompile_component(&component)) - } else { - None + if self + .wasmtime_engine + .detect_precompiled(&wasm_layer.layer) + .is_some() + { + log::info!("Layer already precompiled {:?}", wasm_layer.config.digest()); + continue; } + let component = spin_componentize::componentize_if_necessary(&wasm_layer.layer)?; + let precompiled = self.wasmtime_engine.precompile_component(&component)?; + wasm_layer.layer = precompiled; } - _ => None, } + let precompiled_layers: Vec>> = wasm_content_layers + .into_iter() + .map(|l| l.map(|l| l.layer)) + .collect(); + Ok(precompiled_layers) } fn can_precompile(&self) -> Option { @@ -425,4 +444,72 @@ mod tests { assert_eq!(parsed.clone().port(), 80); assert_eq!(parsed.ip().to_string(), "0.0.0.0"); } + + #[test] + fn is_wasm_content() { + let wasm_content = WasmLayer { + layer: vec![], + config: oci_spec::image::Descriptor::new( + MediaType::Other("application/vnd.wasm.content.layer.v1+wasm".to_string()), + 1024, + "sha256:1234", + ), + }; + // Should be ignored + let data_content = WasmLayer { + layer: vec![], + config: oci_spec::image::Descriptor::new( + MediaType::Other("application/vnd.wasm.content.layer.v1+data".to_string()), + 1024, + "sha256:1234", + ), + }; + assert!(SpinEngine::is_wasm_content(&wasm_content).is_some()); + assert!(SpinEngine::is_wasm_content(&data_content).is_none()); + } + + #[test] + fn precompile() { + let module = wat::parse_str("(module)").unwrap(); + let wasmtime_engine = wasmtime::Engine::default(); + let component = wasmtime::component::Component::new(&wasmtime_engine, "(component)") + .unwrap() + .serialize() + .unwrap(); + let wasm_layers: Vec = vec![ + // Needs to be precompiled + WasmLayer { + layer: module.clone(), + config: oci_spec::image::Descriptor::new( + MediaType::Other("application/vnd.wasm.content.layer.v1+wasm".to_string()), + 1024, + "sha256:1234", + ), + }, + // Precompiled + WasmLayer { + layer: component.to_owned(), + config: oci_spec::image::Descriptor::new( + MediaType::Other("application/vnd.wasm.content.layer.v1+wasm".to_string()), + 1024, + "sha256:1234", + ), + }, + // Content that should be skipped + WasmLayer { + layer: vec![], + config: oci_spec::image::Descriptor::new( + MediaType::Other("application/vnd.wasm.content.layer.v1+data".to_string()), + 1024, + "sha256:1234", + ), + }, + ]; + let spin_engine = SpinEngine::default(); + let precompiled = spin_engine.precompile(&wasm_layers).unwrap(); + assert_eq!(precompiled.len(), 3); + assert_ne!(precompiled[0].as_deref().unwrap(), module); + assert_eq!(precompiled[1].as_deref().unwrap(), component); + assert!(precompiled[2].is_none()); + } }