From 6944f4c6664f442428a1fa0db0ee9b10fd6db377 Mon Sep 17 00:00:00 2001
From: Mathieu Piton <27002047+mpiton@users.noreply.github.com>
Date: Wed, 15 Jul 2026 16:30:19 +0200
Subject: [PATCH 1/7] ci: add reproducible plugin verification
---
.github/workflows/plugin-ci.yml | 13 ++
Cargo.lock | 334 +++++++++++++++++---------------
Cargo.toml | 2 +-
rust-toolchain.toml | 5 +
tests/wasm_smoke.rs | 72 ++++---
5 files changed, 236 insertions(+), 190 deletions(-)
create mode 100644 .github/workflows/plugin-ci.yml
create mode 100644 rust-toolchain.toml
diff --git a/.github/workflows/plugin-ci.yml b/.github/workflows/plugin-ci.yml
new file mode 100644
index 0000000..60907af
--- /dev/null
+++ b/.github/workflows/plugin-ci.yml
@@ -0,0 +1,13 @@
+name: Plugin CI
+
+on:
+ pull_request:
+ push:
+ branches: [main]
+ tags: ["v*"]
+
+jobs:
+ plugin-ci:
+ permissions:
+ contents: write
+ uses: mpiton/vortex/.github/workflows/plugin-ci.yml@e9edb3b1b60cd795f03cf1e5acba7d6b3731f753
diff --git a/Cargo.lock b/Cargo.lock
index 1b3e961..440e69b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4,9 +4,9 @@ version = 4
[[package]]
name = "addr2line"
-version = "0.25.1"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b"
+checksum = "59317f77929f0e679d39364702289274de2f0f0b22cbf50b2b8cff2169a0b27a"
dependencies = [
"gimli",
]
@@ -264,46 +264,48 @@ dependencies = [
[[package]]
name = "cranelift-assembler-x64"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50a04121a197fde2fe896f8e7cac9812fc41ed6ee9c63e1906090f9f497845f6"
+checksum = "adc822414b18d1f5b1b33ce1441534e311e62fef86ebb5b9d382af857d0272c9"
dependencies = [
"cranelift-assembler-x64-meta",
]
[[package]]
name = "cranelift-assembler-x64-meta"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a09e699a94f477303820fb2167024f091543d6240783a2d3b01a3f21c42bc744"
+checksum = "8c646808b06f4532478d8d6057d74f15c3322f10d995d9486e7dcea405bf521a"
dependencies = [
"cranelift-srcgen",
]
[[package]]
name = "cranelift-bforest"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f07732c662a9755529e332d86f8c5842171f6e98ba4d5976a178043dad838654"
+checksum = "7b5996f01a686b2349cdb379083ec5ad3e8cb8767fb2d495d3a4f2ee4163a18d"
dependencies = [
"cranelift-entity",
+ "wasmtime-internal-core",
]
[[package]]
name = "cranelift-bitset"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18391da761cf362a06def7a7cf11474d79e55801dd34c2e9ba105b33dc0aef88"
+checksum = "523fea83273f6a985520f57788809a4de2165794d9ab00fb1254fceb4f5aa00c"
dependencies = [
"serde",
"serde_derive",
+ "wasmtime-internal-core",
]
[[package]]
name = "cranelift-codegen"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b3a09b3042c69810d255aef59ddc3b3e4c0644d1d90ecfd6e3837798cc88a3c"
+checksum = "d73d1e372730b5f64ed1a2bd9f01fe4686c8ec14a28034e3084e530c8d951878"
dependencies = [
"bumpalo",
"cranelift-assembler-x64",
@@ -315,7 +317,8 @@ dependencies = [
"cranelift-entity",
"cranelift-isle",
"gimli",
- "hashbrown 0.15.5",
+ "hashbrown 0.16.1",
+ "libm",
"log",
"pulley-interpreter",
"regalloc2",
@@ -323,14 +326,14 @@ dependencies = [
"serde",
"smallvec",
"target-lexicon",
- "wasmtime-internal-math",
+ "wasmtime-internal-core",
]
[[package]]
name = "cranelift-codegen-meta"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75817926ec812241889208d1b190cadb7fedded4592a4bb01b8524babb9e4849"
+checksum = "b0319c18165e93dc1ebf78946a8da0b1c341c95b4a39729a69574671639bdb5f"
dependencies = [
"cranelift-assembler-x64-meta",
"cranelift-codegen-shared",
@@ -341,35 +344,36 @@ dependencies = [
[[package]]
name = "cranelift-codegen-shared"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "859158f87a59476476eda3884d883c32e08a143cf3d315095533b362a3250a63"
+checksum = "9195cd8aeecb55e401aa96b2eaa55921636e8246c127ed7908f7ef7e0d40f270"
[[package]]
name = "cranelift-control"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03b65a9aec442d715cbf54d14548b8f395476c09cef7abe03e104a378291ab88"
+checksum = "8976c2154b74136322befc74222ab5c7249edd7e2604f8cbef2b94975541ffb9"
dependencies = [
"arbitrary",
]
[[package]]
name = "cranelift-entity"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8334c99a7e86060c24028732efd23bac84585770dcb752329c69f135d64f2fc1"
+checksum = "6038b3147c7982f4951150d5f96c7c06c1e7214b99d4b4a98607aadf8ded89d1"
dependencies = [
"cranelift-bitset",
"serde",
"serde_derive",
+ "wasmtime-internal-core",
]
[[package]]
name = "cranelift-frontend"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43ac6c095aa5b3e845d7ca3461e67e2b65249eb5401477a5ff9100369b745111"
+checksum = "4cbd294abe236e23cc3d907b0936226b6a8342db7636daa9c7c72be1e323420e"
dependencies = [
"cranelift-codegen",
"log",
@@ -379,15 +383,15 @@ dependencies = [
[[package]]
name = "cranelift-isle"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69d3d992870ed4f0f2e82e2175275cb3a123a46e9660c6558c46417b822c91fa"
+checksum = "b5a90b6ed3aba84189352a87badeb93b2126d3724225a42dc67fdce53d1b139c"
[[package]]
name = "cranelift-native"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee32e36beaf80f309edb535274cfe0349e1c5cf5799ba2d9f42e828285c6b52e"
+checksum = "c3ec0cc1a54e22925eacf4fc3dc815f907734d3b377899d19d52bec04863e853"
dependencies = [
"cranelift-codegen",
"libc",
@@ -396,9 +400,9 @@ dependencies = [
[[package]]
name = "cranelift-srcgen"
-version = "0.128.4"
+version = "0.130.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "903adeaf4938e60209a97b53a2e4326cd2d356aab9764a1934630204bae381c9"
+checksum = "948865622f87f30907bb46fbb081b235ae63c1896a99a83c26a003305c1fa82d"
[[package]]
name = "crc32fast"
@@ -421,9 +425,9 @@ dependencies = [
[[package]]
name = "crossbeam-epoch"
-version = "0.9.18"
+version = "0.9.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f"
dependencies = [
"crossbeam-utils",
]
@@ -540,9 +544,9 @@ dependencies = [
[[package]]
name = "extism"
-version = "1.21.0"
+version = "1.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed8c5859bdab81d2eb4cd963eeacd8031d353b1ffb2fde43ee9179a0d6295120"
+checksum = "4b66cd9ac5c64b49c9bac69db3d1b10d8f9386e7caab73489c2f197ba43d5e05"
dependencies = [
"anyhow",
"async-trait",
@@ -567,9 +571,9 @@ dependencies = [
[[package]]
name = "extism-convert"
-version = "1.21.0"
+version = "1.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec1a8eac059a1730a21aa47f99a0c2075ba0ab88fd0c4e52e35027cf99cdf3e7"
+checksum = "ad19858c4c462309a8f3a20abec53e8603bda1eefda26c8bfab51d5516b40cbb"
dependencies = [
"anyhow",
"base64",
@@ -583,9 +587,9 @@ dependencies = [
[[package]]
name = "extism-convert-macros"
-version = "1.21.0"
+version = "1.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "848f105dd6e1af2ea4bb4a76447658e8587167df3c4e4658c4258e5b14a5b051"
+checksum = "5f2932799f6d9f9646f97b65287f6bb2addc75a0ee61e40fb24559a7540dd928"
dependencies = [
"manyhow",
"proc-macro-crate",
@@ -596,9 +600,9 @@ dependencies = [
[[package]]
name = "extism-manifest"
-version = "1.21.0"
+version = "1.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "953a22ad322939ae4567ec73a34913a3a43dcbdfa648b8307d38fe56bb3a0acd"
+checksum = "e2f59c8dadb5e0bde9a48c6ed45312e6ef625cbcd5f67c28459dbc8fe8bc0383"
dependencies = [
"base64",
"serde",
@@ -631,12 +635,6 @@ dependencies = [
"syn",
]
-[[package]]
-name = "fallible-iterator"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
-
[[package]]
name = "fastrand"
version = "2.4.1"
@@ -676,12 +674,24 @@ dependencies = [
"miniz_oxide",
]
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
[[package]]
name = "foldhash"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+[[package]]
+name = "foldhash"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
+
[[package]]
name = "form_urlencoded"
version = "1.2.2"
@@ -846,11 +856,12 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.32.3"
+version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
+checksum = "0bf7f043f89559805f8c7cacc432749b2fa0d0a0a9ee46ce47164ed5ba7f126c"
dependencies = [
- "fallible-iterator",
+ "fnv",
+ "hashbrown 0.16.1",
"indexmap",
"stable_deref_trait",
]
@@ -867,8 +878,18 @@ version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
- "foldhash",
+ "foldhash 0.1.5",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
+dependencies = [
+ "foldhash 0.2.0",
"serde",
+ "serde_core",
]
[[package]]
@@ -1292,12 +1313,12 @@ dependencies = [
[[package]]
name = "object"
-version = "0.37.3"
+version = "0.38.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
+checksum = "271638cd5fa9cca89c4c304675ca658efc4e64a66c716b7cfe1afb4b9611dbbc"
dependencies = [
"crc32fast",
- "hashbrown 0.15.5",
+ "hashbrown 0.16.1",
"indexmap",
"memchr",
]
@@ -1430,21 +1451,21 @@ dependencies = [
[[package]]
name = "pulley-interpreter"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9812652c1feb63cf39f8780cecac154a32b22b3665806c733cd4072547233a4"
+checksum = "7ec12fe19a9588315a49fe5704502a9c02d6a198303314b0c7c86123b06d29e5"
dependencies = [
"cranelift-bitset",
"log",
"pulley-macros",
- "wasmtime-internal-math",
+ "wasmtime-internal-core",
]
[[package]]
name = "pulley-macros"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56000349b6896e3d44286eb9c330891237f40b27fd43c1ccc84547d0b463cb40"
+checksum = "36f7d5ef31ebf1b46cd7e722ffef934e670d7e462f49aa01cde07b9b76dca580"
dependencies = [
"proc-macro2",
"quote",
@@ -1544,13 +1565,13 @@ dependencies = [
[[package]]
name = "regalloc2"
-version = "0.13.5"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08effbc1fa53aaebff69521a5c05640523fab037b34a4a2c109506bc938246fa"
+checksum = "de2c52737737f8609e94f975dee22854a2d5c125772d4b1cf292120f4d45c186"
dependencies = [
"allocator-api2",
"bumpalo",
- "hashbrown 0.15.5",
+ "hashbrown 0.17.0",
"log",
"rustc-hash",
"smallvec",
@@ -2283,11 +2304,10 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasi-common"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f49ffbbd04665d04028f66aee8f24ae7a1f46063f59a28fddfa52ca3091754a2"
+checksum = "46137f5bcc41a0f002ed14688e463665388a6f3a6662a12a8c315d4b8849791c"
dependencies = [
- "anyhow",
"async-trait",
"bitflags",
"cap-fs-ext",
@@ -2303,6 +2323,7 @@ dependencies = [
"thiserror 2.0.18",
"tracing",
"wasmtime",
+ "wasmtime-environ",
"wiggle",
"windows-sys 0.61.2",
]
@@ -2372,9 +2393,9 @@ dependencies = [
[[package]]
name = "wasm-compose"
-version = "0.243.0"
+version = "0.245.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af801b6f36459023eaec63fdbaedad2fd5a4ab7dc74ecc110a8b5d375c5775e4"
+checksum = "5fd23d12cc95c451c1306db5bc63075fbebb612bb70c53b4237b1ce5bc178343"
dependencies = [
"anyhow",
"heck",
@@ -2386,29 +2407,29 @@ dependencies = [
"serde_derive",
"serde_yaml",
"smallvec",
- "wasm-encoder 0.243.0",
- "wasmparser 0.243.0",
+ "wasm-encoder 0.245.1",
+ "wasmparser 0.245.1",
"wat",
]
[[package]]
name = "wasm-encoder"
-version = "0.243.0"
+version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c55db9c896d70bd9fa535ce83cd4e1f2ec3726b0edd2142079f594fc3be1cb35"
+checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
dependencies = [
"leb128fmt",
- "wasmparser 0.243.0",
+ "wasmparser 0.244.0",
]
[[package]]
name = "wasm-encoder"
-version = "0.244.0"
+version = "0.245.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
+checksum = "3f9dca005e69bf015e45577e415b9af8c67e8ee3c0e38b5b0add5aa92581ed5c"
dependencies = [
"leb128fmt",
- "wasmparser 0.244.0",
+ "wasmparser 0.245.1",
]
[[package]]
@@ -2435,27 +2456,27 @@ dependencies = [
[[package]]
name = "wasmparser"
-version = "0.243.0"
+version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6d8db401b0528ec316dfbe579e6ab4152d61739cfe076706d2009127970159d"
+checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
dependencies = [
"bitflags",
"hashbrown 0.15.5",
"indexmap",
"semver",
- "serde",
]
[[package]]
name = "wasmparser"
-version = "0.244.0"
+version = "0.245.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
+checksum = "4f08c9adee0428b7bddf3890fc27e015ac4b761cc608c822667102b8bfd6995e"
dependencies = [
"bitflags",
- "hashbrown 0.15.5",
+ "hashbrown 0.16.1",
"indexmap",
"semver",
+ "serde",
]
[[package]]
@@ -2471,23 +2492,22 @@ dependencies = [
[[package]]
name = "wasmprinter"
-version = "0.243.0"
+version = "0.245.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb2b6035559e146114c29a909a3232928ee488d6507a1504d8934e8607b36d7b"
+checksum = "5f41517a3716fbb8ccf46daa9c1325f760fcbff5168e75c7392288e410b91ac8"
dependencies = [
"anyhow",
"termcolor",
- "wasmparser 0.243.0",
+ "wasmparser 0.245.1",
]
[[package]]
name = "wasmtime"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2a83182bf04af87571b4c642300479501684f26bab5597f68f68cded5b098fd"
+checksum = "efb1ed5899dde98357cfdcf647a4614498798719793898245b4b34e663addabf"
dependencies = [
"addr2line",
- "anyhow",
"async-trait",
"bitflags",
"bumpalo",
@@ -2497,8 +2517,6 @@ dependencies = [
"futures",
"fxprof-processed-profile",
"gimli",
- "hashbrown 0.15.5",
- "indexmap",
"ittapi",
"libc",
"log",
@@ -2518,18 +2536,17 @@ dependencies = [
"target-lexicon",
"tempfile",
"wasm-compose",
- "wasm-encoder 0.243.0",
- "wasmparser 0.243.0",
+ "wasm-encoder 0.245.1",
+ "wasmparser 0.245.1",
"wasmtime-environ",
"wasmtime-internal-cache",
"wasmtime-internal-component-macro",
"wasmtime-internal-component-util",
+ "wasmtime-internal-core",
"wasmtime-internal-cranelift",
"wasmtime-internal-fiber",
"wasmtime-internal-jit-debug",
"wasmtime-internal-jit-icache-coherence",
- "wasmtime-internal-math",
- "wasmtime-internal-slab",
"wasmtime-internal-unwinder",
"wasmtime-internal-versioned-export-macros",
"wasmtime-internal-winch",
@@ -2539,15 +2556,17 @@ dependencies = [
[[package]]
name = "wasmtime-environ"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb201c41aa23a3642365cfb2e4a183573d85127a3c9d528f56b9997c984541ab"
+checksum = "4172382dcc785c31d0e862c6780a18f5dd437914d22c4691351f965ef751c821"
dependencies = [
"anyhow",
"cpp_demangle",
+ "cranelift-bforest",
"cranelift-bitset",
"cranelift-entity",
"gimli",
+ "hashbrown 0.16.1",
"indexmap",
"log",
"object",
@@ -2556,19 +2575,21 @@ dependencies = [
"semver",
"serde",
"serde_derive",
+ "sha2",
"smallvec",
"target-lexicon",
- "wasm-encoder 0.243.0",
- "wasmparser 0.243.0",
+ "wasm-encoder 0.245.1",
+ "wasmparser 0.245.1",
"wasmprinter",
"wasmtime-internal-component-util",
+ "wasmtime-internal-core",
]
[[package]]
name = "wasmtime-internal-cache"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5b3069d1a67ba5969d0eb1ccd7e141367d4e713f4649aa90356c98e8f19bea"
+checksum = "4ed398988226d7aa0505ac6bb576e09532ad722d702ec4e66365d78ed695c95f"
dependencies = [
"base64",
"directories-next",
@@ -2586,9 +2607,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-component-macro"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c924400db7b6ca996fef1b23beb0f41d5c809836b1ec60fc25b4057e2d25d9b"
+checksum = "ae5ec9fff073ff13b81732d56a9515d761c245750bcda09093827f84130ebc25"
dependencies = [
"anyhow",
"proc-macro2",
@@ -2596,20 +2617,32 @@ dependencies = [
"syn",
"wasmtime-internal-component-util",
"wasmtime-internal-wit-bindgen",
- "wit-parser 0.243.0",
+ "wit-parser 0.245.1",
]
[[package]]
name = "wasmtime-internal-component-util"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d3f65daf4bf3d74ca2fbbe20af0589c42e2b398a073486451425d94fd4afef4"
+checksum = "935d9ab293ba27d1ec9aa7bc1b3a43993dbe961af2a8f23f90a11e1331b4c13f"
+
+[[package]]
+name = "wasmtime-internal-core"
+version = "43.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3820b174f477d2a7083209d1ad5353fcdb11eaea434b2137b8681029460dd3"
+dependencies = [
+ "anyhow",
+ "hashbrown 0.16.1",
+ "libm",
+ "serde",
+]
[[package]]
name = "wasmtime-internal-cranelift"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "633e889cdae76829738db0114ab3b02fce51ea4a1cd9675a67a65fce92e8b418"
+checksum = "d1679d205caf9766c6aa309d45bb3e7c634d7725e3164404df33824b9f7c4fb7"
dependencies = [
"cfg-if",
"cranelift-codegen",
@@ -2625,18 +2658,18 @@ dependencies = [
"smallvec",
"target-lexicon",
"thiserror 2.0.18",
- "wasmparser 0.243.0",
+ "wasmparser 0.245.1",
"wasmtime-environ",
- "wasmtime-internal-math",
+ "wasmtime-internal-core",
"wasmtime-internal-unwinder",
"wasmtime-internal-versioned-export-macros",
]
[[package]]
name = "wasmtime-internal-fiber"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "deb126adc5d0c72695cfb77260b357f1b81705a0f8fa30b3944e7c2219c17341"
+checksum = "f1e505254058be5b0df458d670ee42d9eafe2349d04c1296e9dc01071dc20a85"
dependencies = [
"cc",
"cfg-if",
@@ -2649,9 +2682,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-jit-debug"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e66ff7f90a8002187691ff6237ffd09f954a0ebb9de8b2ff7f5c62632134120"
+checksum = "1c2e05b345f1773e59c20e6ad7298fd6857cdea245023d88bb659c96d8f0ea72"
dependencies = [
"cc",
"object",
@@ -2661,36 +2694,21 @@ dependencies = [
[[package]]
name = "wasmtime-internal-jit-icache-coherence"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b96df23179ae16d54fb3a420f84ffe4383ec9dd06fad3e5bc782f85f66e8e08"
+checksum = "b86701b234a4643e3f111869aa792b3a05a06e02d486ee9cb6c04dae16b52dab"
dependencies = [
- "anyhow",
"cfg-if",
"libc",
+ "wasmtime-internal-core",
"windows-sys 0.61.2",
]
-[[package]]
-name = "wasmtime-internal-math"
-version = "41.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86d1380926682b44c383e9a67f47e7a95e60c6d3fa8c072294dab2c7de6168a0"
-dependencies = [
- "libm",
-]
-
-[[package]]
-name = "wasmtime-internal-slab"
-version = "41.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b63cbea1c0192c7feb7c0dfb35f47166988a3742f29f46b585ef57246c65764"
-
[[package]]
name = "wasmtime-internal-unwinder"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f25c392c7e5fb891a7416e3c34cfbd148849271e8c58744fda875dde4bec4d6a"
+checksum = "f63558d801beb83dde9b336eb4ae049019aee26627926edb32cd119d7e4c83cd"
dependencies = [
"cfg-if",
"cranelift-codegen",
@@ -2701,9 +2719,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-versioned-export-macros"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70f8b9796a3f0451a7b702508b303d654de640271ac80287176de222f187a237"
+checksum = "737c4d956fc3a848541a064afb683dd2771132a6b125be5baaf95c4379aa47df"
dependencies = [
"proc-macro2",
"quote",
@@ -2712,16 +2730,16 @@ dependencies = [
[[package]]
name = "wasmtime-internal-winch"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0063e61f1d0b2c20e9cfc58361a6513d074a23c80b417aac3033724f51648a0"
+checksum = "f599b79545e3bba0b7913406055ebede5bb0dabee9ba2015ef25a9f4c9f47807"
dependencies = [
"cranelift-codegen",
"gimli",
"log",
"object",
"target-lexicon",
- "wasmparser 0.243.0",
+ "wasmparser 0.245.1",
"wasmtime-environ",
"wasmtime-internal-cranelift",
"winch-codegen",
@@ -2729,15 +2747,15 @@ dependencies = [
[[package]]
name = "wasmtime-internal-wit-bindgen"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "587699ca7cae16b4a234ffcc834f37e75675933d533809919b52975f5609e2ef"
+checksum = "2192a77a00b9a67800c2b4e1c70fb6abca79d6b529e53a2ef9dcdcc36090330d"
dependencies = [
"anyhow",
"bitflags",
"heck",
"indexmap",
- "wit-parser 0.243.0",
+ "wit-parser 0.245.1",
]
[[package]]
@@ -2782,38 +2800,38 @@ dependencies = [
[[package]]
name = "wiggle"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a69a60bcbe1475c5dc9ec89210ade54823d44f742e283cba64f98f89697c4cec"
+checksum = "9c8cfd3db2f05619c6f36f257d84327c11546e28d61e3a1c1220aaad553bc4b0"
dependencies = [
- "anyhow",
"bitflags",
"thiserror 2.0.18",
"tracing",
"wasmtime",
+ "wasmtime-environ",
"wiggle-macro",
"witx",
]
[[package]]
name = "wiggle-generate"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21f3dc0fd4dcfc7736434bb216179a2147835309abc09bf226736a40d484548f"
+checksum = "4bd7a197903e5b4ff5e13aef9c891960d71e92073600ecf4c86c7e795ac1c803"
dependencies = [
- "anyhow",
"heck",
"proc-macro2",
"quote",
"syn",
+ "wasmtime-environ",
"witx",
]
[[package]]
name = "wiggle-macro"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fea2aea744eded58ae092bf57110c27517dab7d5a300513ff13897325c5c5021"
+checksum = "6410b86fcec207070d9372b215d3470bad67215e6bbac46981a16999c4abbc28"
dependencies = [
"proc-macro2",
"quote",
@@ -2854,11 +2872,10 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "winch-codegen"
-version = "41.0.4"
+version = "43.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c55de3ac5b8bd71e5f6c87a9e511dd3ceb194bdb58183c6a7bf21cd8c0e46fbc"
+checksum = "52dbb0cf07b0dfe7b7a1ca8efb8f94ba98bd0fb144c411ea1665c78f0449e958"
dependencies = [
- "anyhow",
"cranelift-assembler-x64",
"cranelift-codegen",
"gimli",
@@ -2866,10 +2883,10 @@ dependencies = [
"smallvec",
"target-lexicon",
"thiserror 2.0.18",
- "wasmparser 0.243.0",
+ "wasmparser 0.245.1",
"wasmtime-environ",
+ "wasmtime-internal-core",
"wasmtime-internal-cranelift",
- "wasmtime-internal-math",
]
[[package]]
@@ -3125,9 +3142,9 @@ dependencies = [
[[package]]
name = "wit-parser"
-version = "0.243.0"
+version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df983a8608e513d8997f435bb74207bf0933d0e49ca97aa9d8a6157164b9b7fc"
+checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
dependencies = [
"anyhow",
"id-arena",
@@ -3138,16 +3155,17 @@ dependencies = [
"serde_derive",
"serde_json",
"unicode-xid",
- "wasmparser 0.243.0",
+ "wasmparser 0.244.0",
]
[[package]]
name = "wit-parser"
-version = "0.244.0"
+version = "0.245.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
+checksum = "330698718e82983499419494dd1e3d7811a457a9bf9f69734e8c5f07a2547929"
dependencies = [
"anyhow",
+ "hashbrown 0.16.1",
"id-arena",
"indexmap",
"log",
@@ -3156,7 +3174,7 @@ dependencies = [
"serde_derive",
"serde_json",
"unicode-xid",
- "wasmparser 0.244.0",
+ "wasmparser 0.245.1",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 9bbb298..9838785 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,7 +18,7 @@ thiserror = "2.0"
base64 = "0.22"
[dev-dependencies]
-extism = "1.0"
+extism = "=1.30.0"
rstest = "0.24"
[profile.release]
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
new file mode 100644
index 0000000..187e1fa
--- /dev/null
+++ b/rust-toolchain.toml
@@ -0,0 +1,5 @@
+[toolchain]
+channel = "1.95.0"
+profile = "minimal"
+components = ["clippy", "llvm-tools-preview", "rustfmt"]
+targets = ["wasm32-wasip1"]
diff --git a/tests/wasm_smoke.rs b/tests/wasm_smoke.rs
index 0d90765..c9ba29f 100644
--- a/tests/wasm_smoke.rs
+++ b/tests/wasm_smoke.rs
@@ -1,12 +1,8 @@
-//! Smoke test: load the compiled `.wasm` via Extism and call the pure
-//! `can_handle` / `supports_playlist` exports.
+//! Real ABI smoke tests for every runtime export of the release WASM artifact.
+//! A MediaFire page fixture exercises extraction and resolution through the
+//! same Extism `http_request` boundary as Vortex.
//!
-//! `extract_links` and `resolve_stream_url` need a real `http_request`
-//! round-trip — exercised by the host's own integration tests, not
-//! here. The stub `http_request` returns an HTTP-like JSON envelope so
-//! the WASM module loads without unresolved imports.
-//!
-//! Skipped unless the WASM artifact is present at
+//! Requires the WASM artifact at
//! `target/wasm32-wasip1/release/vortex_mod_mediafire.wasm`. To produce
//! it:
//!
@@ -17,12 +13,21 @@
use std::path::PathBuf;
use extism::{Function, UserData, Val, PTR};
+use serde_json::{json, Value};
const WASM_REL_PATH: &str = "target/wasm32-wasip1/release/vortex_mod_mediafire.wasm";
+const FILE_URL: &str = "https://www.mediafire.com/file/abc123/archive.zip";
+const DIRECT_URL: &str = "https://download1.mediafire.com/abc123/archive.zip";
+const FILE_PAGE: &str = r#"Download (1.50 MB)"#;
-fn wasm_path() -> Option {
- let p = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(WASM_REL_PATH);
- p.exists().then_some(p)
+fn wasm_path() -> PathBuf {
+ let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(WASM_REL_PATH);
+ assert!(
+ path.is_file(),
+ "missing release WASM artifact at {}; run `cargo build --target wasm32-wasip1 --release` first",
+ path.display()
+ );
+ path
}
fn stub_http_request() -> Function {
@@ -32,8 +37,8 @@ fn stub_http_request() -> Function {
[PTR],
UserData::<()>::default(),
|plugin, _inputs, outputs, _user_data: UserData<()>| {
- let body = r#"{"status":200,"headers":{},"body":""}"#;
- let handle = plugin.memory_new(body)?;
+ let response = json!({ "status": 200, "headers": {}, "body": FILE_PAGE }).to_string();
+ let handle = plugin.memory_new(&response)?;
outputs[0] = Val::I64(handle.offset() as i64);
Ok(())
},
@@ -45,18 +50,10 @@ fn load_plugin(path: &PathBuf) -> extism::Plugin {
extism::Plugin::new(&manifest, [stub_http_request()], true).expect("load wasm")
}
-/// Resolve the WASM artefact path or skip the calling test with a build hint.
+/// Require the release WASM artefact and report how to build it when missing.
macro_rules! require_wasm {
() => {
- match wasm_path() {
- Some(p) => p,
- None => {
- eprintln!(
- "skipping: build with `cargo build --target wasm32-wasip1 --release` first"
- );
- return;
- }
- }
+ wasm_path()
};
}
@@ -65,10 +62,7 @@ fn wasm_can_handle_recognises_mediafire_file_url() {
let path = require_wasm!();
let mut plugin = load_plugin(&path);
let result: String = plugin
- .call(
- "can_handle",
- "https://www.mediafire.com/file/abc123/foo.zip",
- )
+ .call("can_handle", FILE_URL)
.expect("can_handle call");
assert_eq!(result.trim(), "true");
}
@@ -88,10 +82,26 @@ fn wasm_supports_playlist_always_false() {
let path = require_wasm!();
let mut plugin = load_plugin(&path);
let result: String = plugin
- .call(
- "supports_playlist",
- "https://www.mediafire.com/file/abc/foo.zip",
- )
+ .call("supports_playlist", FILE_URL)
.expect("supports_playlist call");
assert_eq!(result.trim(), "false");
}
+
+#[test]
+fn wasm_extraction_and_resolution_exports_are_callable() {
+ let path = require_wasm!();
+ let mut plugin = load_plugin(&path);
+
+ let links: String = plugin
+ .call("extract_links", FILE_URL)
+ .expect("extract_links call");
+ let links: Value = serde_json::from_str(&links).expect("extract_links JSON");
+ assert_eq!(links["kind"], "file");
+ assert_eq!(links["files"][0]["filename"], "archive.zip");
+ assert_eq!(links["files"][0]["direct_url"], DIRECT_URL);
+
+ let direct_url: String = plugin
+ .call("resolve_stream_url", json!({ "url": FILE_URL }).to_string())
+ .expect("resolve_stream_url call");
+ assert_eq!(direct_url, DIRECT_URL);
+}
From 45ce0b177463c969bcc7e5e7e7ac5d4fa4cf759c Mon Sep 17 00:00:00 2001
From: Mathieu Piton <27002047+mpiton@users.noreply.github.com>
Date: Wed, 15 Jul 2026 16:50:22 +0200
Subject: [PATCH 2/7] fix(ci): scope release permissions and document smoke
order
---
.github/CONTRIBUTING.md | 14 +++++++-------
.github/workflows/plugin-ci.yml | 7 +++++++
README.md | 3 ++-
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 22c9a21..31012cd 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -25,11 +25,11 @@ Thanks for taking the time to contribute! This crate is a WASM plugin for the
2. Create a feature branch (`git checkout -b feat/your-feature`)
3. Add a **failing test first** — see existing fixtures in `tests/fixtures/*.html`
4. Implement the change in `src/parser.rs` / `src/url_matcher.rs` / `src/lib.rs`
-5. Run `cargo test`, `cargo clippy --all-targets -- -D warnings`, `cargo fmt --check`
+5. Run `cargo clippy --all-targets -- -D warnings` and `cargo fmt --check`
6. Build the WASM artefact (`cargo build --target wasm32-wasip1 --release`)
- and check `wasm_smoke.rs` still passes
-7. Commit using [Conventional Commits](https://www.conventionalcommits.org/)
-8. Push to your fork and open a Pull Request
+7. Run `cargo test`, including the mandatory `wasm_smoke.rs`
+8. Commit using [Conventional Commits](https://www.conventionalcommits.org/)
+9. Push to your fork and open a Pull Request
### Commit Message Format
@@ -54,9 +54,6 @@ rustup target add wasm32-wasip1
git clone https://github.com/mpiton/vortex-mod-mediafire.git
cd vortex-mod-mediafire
-# Native unit tests + parser fixtures + WASM smoke
-cargo test
-
# Lint + format
cargo clippy --all-targets -- -D warnings
cargo fmt --check
@@ -64,6 +61,9 @@ cargo fmt --check
# Build WASM release artefact (1.1 MB)
cargo build --target wasm32-wasip1 --release
# → target/wasm32-wasip1/release/vortex_mod_mediafire.wasm
+
+# Native unit tests + parser fixtures + WASM smoke
+cargo test
```
## Adding a fixture
diff --git a/.github/workflows/plugin-ci.yml b/.github/workflows/plugin-ci.yml
index 60907af..668d401 100644
--- a/.github/workflows/plugin-ci.yml
+++ b/.github/workflows/plugin-ci.yml
@@ -8,6 +8,13 @@ on:
jobs:
plugin-ci:
+ if: ${{ !startsWith(github.ref, 'refs/tags/') }}
+ permissions:
+ contents: read
+ uses: mpiton/vortex/.github/workflows/plugin-ci.yml@e9edb3b1b60cd795f03cf1e5acba7d6b3731f753
+
+ plugin-release:
+ if: ${{ startsWith(github.ref, 'refs/tags/') }}
permissions:
contents: write
uses: mpiton/vortex/.github/workflows/plugin-ci.yml@e9edb3b1b60cd795f03cf1e5acba7d6b3731f753
diff --git a/README.md b/README.md
index c78d9af..5ec35ea 100644
--- a/README.md
+++ b/README.md
@@ -66,9 +66,10 @@ Vortex picks up the new plugin via the file watcher; no restart needed.
## Tests
```bash
-cargo test # 55 tests, ~10 ms
cargo clippy --all-targets -- -D warnings
cargo fmt --check
+cargo build --target wasm32-wasip1 --release # required by the smoke tests
+cargo test # native + mandatory WASM smoke tests
```
The HTML fixtures live in `tests/fixtures/*.html` — ten variants covering
From d6cdfab301fb098b1f45d784b100abff07c37ff0 Mon Sep 17 00:00:00 2001
From: Mathieu Piton <27002047+mpiton@users.noreply.github.com>
Date: Wed, 15 Jul 2026 16:55:42 +0200
Subject: [PATCH 3/7] fix(ci): separate verification and release workflows
---
.github/workflows/plugin-ci.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/plugin-ci.yml b/.github/workflows/plugin-ci.yml
index 668d401..be39cc0 100644
--- a/.github/workflows/plugin-ci.yml
+++ b/.github/workflows/plugin-ci.yml
@@ -11,10 +11,10 @@ jobs:
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
permissions:
contents: read
- uses: mpiton/vortex/.github/workflows/plugin-ci.yml@e9edb3b1b60cd795f03cf1e5acba7d6b3731f753
+ uses: mpiton/vortex/.github/workflows/plugin-ci.yml@3abf4058eb1fa946b196b1a87cf459c4ffe73a4e
plugin-release:
if: ${{ startsWith(github.ref, 'refs/tags/') }}
permissions:
contents: write
- uses: mpiton/vortex/.github/workflows/plugin-ci.yml@e9edb3b1b60cd795f03cf1e5acba7d6b3731f753
+ uses: mpiton/vortex/.github/workflows/plugin-release.yml@3abf4058eb1fa946b196b1a87cf459c4ffe73a4e
From 98dfe1c76634f4d929b0d453d9db86816e6ad2de Mon Sep 17 00:00:00 2001
From: Mathieu Piton <27002047+mpiton@users.noreply.github.com>
Date: Wed, 15 Jul 2026 17:29:25 +0200
Subject: [PATCH 4/7] fix(ci): pin hardened release workflow
---
.github/workflows/plugin-ci.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/plugin-ci.yml b/.github/workflows/plugin-ci.yml
index be39cc0..a866708 100644
--- a/.github/workflows/plugin-ci.yml
+++ b/.github/workflows/plugin-ci.yml
@@ -17,4 +17,4 @@ jobs:
if: ${{ startsWith(github.ref, 'refs/tags/') }}
permissions:
contents: write
- uses: mpiton/vortex/.github/workflows/plugin-release.yml@3abf4058eb1fa946b196b1a87cf459c4ffe73a4e
+ uses: mpiton/vortex/.github/workflows/plugin-release.yml@676ce0e2bc3d11ad7e77eb7035772183d8c337a3
From e3430d221e6d98958fe33252b3e6e1cbbbdf5e35 Mon Sep 17 00:00:00 2001
From: Mathieu Piton <27002047+mpiton@users.noreply.github.com>
Date: Wed, 15 Jul 2026 18:18:34 +0200
Subject: [PATCH 5/7] fix(ci): align release trust and contributor checks
---
.github/CONTRIBUTING.md | 17 +++++++++--------
.github/workflows/plugin-ci.yml | 4 ++--
README.md | 9 +++++----
3 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 31012cd..7568b69 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -25,9 +25,9 @@ Thanks for taking the time to contribute! This crate is a WASM plugin for the
2. Create a feature branch (`git checkout -b feat/your-feature`)
3. Add a **failing test first** — see existing fixtures in `tests/fixtures/*.html`
4. Implement the change in `src/parser.rs` / `src/url_matcher.rs` / `src/lib.rs`
-5. Run `cargo clippy --all-targets -- -D warnings` and `cargo fmt --check`
-6. Build the WASM artefact (`cargo build --target wasm32-wasip1 --release`)
-7. Run `cargo test`, including the mandatory `wasm_smoke.rs`
+5. Run `cargo fmt --all -- --check`, then the locked native and WASM Clippy commands below
+6. Build the WASM artefact with the locked release command below
+7. Run the locked native tests, including the mandatory `wasm_smoke.rs`
8. Commit using [Conventional Commits](https://www.conventionalcommits.org/)
9. Push to your fork and open a Pull Request
@@ -54,16 +54,17 @@ rustup target add wasm32-wasip1
git clone https://github.com/mpiton/vortex-mod-mediafire.git
cd vortex-mod-mediafire
-# Lint + format
-cargo clippy --all-targets -- -D warnings
-cargo fmt --check
+# Format + lint native and WASM targets
+cargo fmt --all -- --check
+cargo clippy --locked --all-targets --target x86_64-unknown-linux-gnu -- -D warnings
+cargo clippy --locked --lib --target wasm32-wasip1 -- -D warnings
# Build WASM release artefact (1.1 MB)
-cargo build --target wasm32-wasip1 --release
+cargo build --locked --lib --target wasm32-wasip1 --release
# → target/wasm32-wasip1/release/vortex_mod_mediafire.wasm
# Native unit tests + parser fixtures + WASM smoke
-cargo test
+cargo test --locked --all-targets --target x86_64-unknown-linux-gnu
```
## Adding a fixture
diff --git a/.github/workflows/plugin-ci.yml b/.github/workflows/plugin-ci.yml
index a866708..6f79b89 100644
--- a/.github/workflows/plugin-ci.yml
+++ b/.github/workflows/plugin-ci.yml
@@ -14,7 +14,7 @@ jobs:
uses: mpiton/vortex/.github/workflows/plugin-ci.yml@3abf4058eb1fa946b196b1a87cf459c4ffe73a4e
plugin-release:
- if: ${{ startsWith(github.ref, 'refs/tags/') }}
+ if: ${{ startsWith(github.ref, 'refs/tags/') && github.actor == github.repository_owner }}
permissions:
contents: write
- uses: mpiton/vortex/.github/workflows/plugin-release.yml@676ce0e2bc3d11ad7e77eb7035772183d8c337a3
+ uses: mpiton/vortex/.github/workflows/plugin-release.yml@f91b43d62504522407e2e491aaf9d53dacd2726b
diff --git a/README.md b/README.md
index 5ec35ea..c0938fe 100644
--- a/README.md
+++ b/README.md
@@ -66,10 +66,11 @@ Vortex picks up the new plugin via the file watcher; no restart needed.
## Tests
```bash
-cargo clippy --all-targets -- -D warnings
-cargo fmt --check
-cargo build --target wasm32-wasip1 --release # required by the smoke tests
-cargo test # native + mandatory WASM smoke tests
+cargo fmt --all -- --check
+cargo clippy --locked --all-targets --target x86_64-unknown-linux-gnu -- -D warnings
+cargo clippy --locked --lib --target wasm32-wasip1 -- -D warnings
+cargo build --locked --lib --target wasm32-wasip1 --release
+cargo test --locked --all-targets --target x86_64-unknown-linux-gnu
```
The HTML fixtures live in `tests/fixtures/*.html` — ten variants covering
From 9bc2a828b450e7a923866e19bad47c30414f09fb Mon Sep 17 00:00:00 2001
From: Mathieu Piton <27002047+mpiton@users.noreply.github.com>
Date: Wed, 15 Jul 2026 18:48:38 +0200
Subject: [PATCH 6/7] fix(ci): pin canonical release workflows
---
.github/workflows/plugin-ci.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/plugin-ci.yml b/.github/workflows/plugin-ci.yml
index 6f79b89..626e07d 100644
--- a/.github/workflows/plugin-ci.yml
+++ b/.github/workflows/plugin-ci.yml
@@ -11,10 +11,10 @@ jobs:
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
permissions:
contents: read
- uses: mpiton/vortex/.github/workflows/plugin-ci.yml@3abf4058eb1fa946b196b1a87cf459c4ffe73a4e
+ uses: mpiton/vortex/.github/workflows/plugin-ci.yml@9b3b7b3b7956150f7475ab409bb0eed424573bae
plugin-release:
if: ${{ startsWith(github.ref, 'refs/tags/') && github.actor == github.repository_owner }}
permissions:
contents: write
- uses: mpiton/vortex/.github/workflows/plugin-release.yml@f91b43d62504522407e2e491aaf9d53dacd2726b
+ uses: mpiton/vortex/.github/workflows/plugin-release.yml@1b0cc276086cfc87165d63f8c5624fa3960ad2e9
From 73f1c2cb780031479a37ae3a633401a320a267de Mon Sep 17 00:00:00 2001
From: Mathieu Piton <27002047+mpiton@users.noreply.github.com>
Date: Wed, 15 Jul 2026 19:38:20 +0200
Subject: [PATCH 7/7] ci: repin reusable plugin workflows
---
.github/workflows/plugin-ci.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/plugin-ci.yml b/.github/workflows/plugin-ci.yml
index 626e07d..e44ee5d 100644
--- a/.github/workflows/plugin-ci.yml
+++ b/.github/workflows/plugin-ci.yml
@@ -11,10 +11,10 @@ jobs:
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
permissions:
contents: read
- uses: mpiton/vortex/.github/workflows/plugin-ci.yml@9b3b7b3b7956150f7475ab409bb0eed424573bae
+ uses: mpiton/vortex/.github/workflows/plugin-ci.yml@f63e53f866bbdf5e5e3e8f62a37f78e13cec5298
plugin-release:
if: ${{ startsWith(github.ref, 'refs/tags/') && github.actor == github.repository_owner }}
permissions:
contents: write
- uses: mpiton/vortex/.github/workflows/plugin-release.yml@1b0cc276086cfc87165d63f8c5624fa3960ad2e9
+ uses: mpiton/vortex/.github/workflows/plugin-release.yml@d85baa93ac7905c5813095b2406f2a3642458356