tools/sieve-playground builds the vendored sieve-rs 0.7.3 (vnd.inbuxa.* names included) to WebAssembly, with a static page around it, for inbuxa Admin's Debug button on a Sieve script: until now that button sent the script to an outside site whose interpreter knows only upstream's extension names, so any script that requires vnd.inbuxa.* failed to compile there. Ported from the playground in the upstream sieve-rs repository's web/ directory (commit 549a2d57f7), which targets sieve-rs 1.x: - run.rs and handler.rs drive 0.7's event loop the way the server's delivery does, carrying on after a runtime error; llm_prompt compiles and answers false, as on a server without a model. - The expression functions are the server's own modules, included by path; tests fail if the list, ApplyString or the few functions copied from misc.rs/unicode.rs stop matching crates/common. - Built for wasm32-wasip1 rather than with wasm-bindgen: sieve-rs and mail-builder read the clock, which panics on wasm32-unknown-unknown. The page's worker answers the six WASI calls, giving the module the playground's current-time setting. shim/gethostname stands in for a crate with no WASI build. Nothing in vendor/ or crates/ changes. - The page carries no upstream names or links; storage keys and the samples are renamed to match. build.sh --admin <dir> stages the result into an inbuxa-admin checkout.
35 lines
1.1 KiB
Rust
35 lines
1.1 KiB
Rust
/*
|
|
* SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <[email protected]>
|
|
* SPDX-FileCopyrightText: 2026 Coffey Labs LLC
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*
|
|
* Modified by Coffey Labs in 2026 for INBUXA.
|
|
*/
|
|
|
|
use std::fs;
|
|
|
|
fn main() {
|
|
// The vendored crate the server builds, so the playground names the
|
|
// interpreter version the server runs.
|
|
println!("cargo:rerun-if-changed=../../vendor/sieve-rs/Cargo.toml");
|
|
let manifest = fs::read_to_string("../../vendor/sieve-rs/Cargo.toml").unwrap_or_default();
|
|
let mut version = "unknown".to_string();
|
|
let mut in_package = false;
|
|
for line in manifest.lines() {
|
|
let line = line.trim();
|
|
if line.starts_with('[') {
|
|
in_package = line == "[package]";
|
|
continue;
|
|
}
|
|
if in_package
|
|
&& line.starts_with("version")
|
|
&& let Some(value) = line.split('=').nth(1)
|
|
{
|
|
version = value.trim().trim_matches('"').to_string();
|
|
break;
|
|
}
|
|
}
|
|
println!("cargo:rustc-env=SIEVE_VERSION={version}");
|
|
}
|