From 40228a5090fbd1362e1f4ed26d9fcb6ef7f67f20 Mon Sep 17 00:00:00 2001 From: Dominik Spitzli Date: Thu, 12 Nov 2026 13:07:31 +0100 Subject: [PATCH] chore: use canonical Spitzli plugin SDK and binaries --- Cargo.lock | 188 +++++++++++++-------------- Cargo.toml | 22 ++-- Dockerfile | 8 +- NAMESPACE-MIGRATION.json | 65 +++++++++ NOTICE | 4 +- scripts/plugin-release/release.mjs | 2 +- src/data.rs | 4 +- src/engine.rs | 6 +- src/lib.rs | 6 +- src/main.rs | 24 ++-- src/minio.rs | 4 +- src/provider.rs | 2 +- src/sdk.rs | 6 +- src/store.rs | 10 +- standalone.json | 14 +- tests/data.rs | 4 +- tests/lifecycle.rs | 26 ++-- tests/manifest.rs | 6 +- tests/minio_acceptance.rs | 36 ++--- tests/native_tls_startup.rs | 2 +- tests/provider_contract.rs | 4 +- tests/support/mod.rs | 10 +- tools/manifest-validator/Cargo.lock | 52 ++++---- tools/manifest-validator/Cargo.toml | 8 +- tools/manifest-validator/src/main.rs | 2 +- ui/index.tsx | 2 +- 26 files changed, 291 insertions(+), 226 deletions(-) create mode 100644 NAMESPACE-MIGRATION.json diff --git a/Cargo.lock b/Cargo.lock index 9442a43..6c7bcfb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2739,6 +2739,100 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3" +[[package]] +name = "spitzli-object-storage-plugin" +version = "0.5.0" +dependencies = [ + "async-trait", + "aws-sdk-iam", + "aws-sdk-s3", + "base64 0.22.1", + "ed25519-dalek", + "hex", + "libc", + "rustix", + "rustls 0.23.46", + "serde", + "serde_json", + "sha2 0.10.9", + "spitzli-plugin-kit", + "spitzli-plugin-protocol", + "spitzli-plugin-runtime", + "tokio", + "tokio-postgres", + "tonic", + "url", + "uuid", +] + +[[package]] +name = "spitzli-plugin-kit" +version = "0.1.0" +source = "git+https://github.com/spitzli/cloud-plugin-sdk?rev=8019f3df67dba3fed3083f22635e4725028c1b5e#8019f3df67dba3fed3083f22635e4725028c1b5e" +dependencies = [ + "aes-gcm", + "getrandom 0.2.17", + "hex", + "rustix", + "rustls 0.23.46", + "rustls-pemfile", + "serde", + "serde_json", + "spitzli-plugin-protocol", + "spitzli-plugin-runtime", + "tokio", + "tokio-postgres", + "tokio-postgres-rustls", + "tonic", + "url", + "uuid", +] + +[[package]] +name = "spitzli-plugin-protocol" +version = "0.1.0" +source = "git+https://github.com/spitzli/cloud-plugin-sdk?rev=8019f3df67dba3fed3083f22635e4725028c1b5e#8019f3df67dba3fed3083f22635e4725028c1b5e" +dependencies = [ + "base64 0.22.1", + "chrono", + "ed25519-dalek", + "jsonschema", + "node-semver", + "regex", + "serde", + "serde_json", + "sha2 0.10.9", + "url", + "uuid", +] + +[[package]] +name = "spitzli-plugin-runtime" +version = "0.1.0" +source = "git+https://github.com/spitzli/cloud-plugin-sdk?rev=8019f3df67dba3fed3083f22635e4725028c1b5e#8019f3df67dba3fed3083f22635e4725028c1b5e" +dependencies = [ + "ed25519-dalek", + "hex", + "hyper-util", + "prost", + "rustix", + "rustls 0.23.46", + "rustls-pemfile", + "serde", + "serde_json", + "sha2 0.10.9", + "spitzli-plugin-protocol", + "tokio", + "tokio-rustls 0.26.6", + "tokio-stream", + "tonic", + "tonic-prost", + "tonic-prost-build", + "tower", + "url", + "x509-parser", +] + [[package]] name = "spki" version = "0.7.3" @@ -3443,100 +3537,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webdock-object-storage-plugin" -version = "0.5.0" -dependencies = [ - "async-trait", - "aws-sdk-iam", - "aws-sdk-s3", - "base64 0.22.1", - "ed25519-dalek", - "hex", - "libc", - "rustix", - "rustls 0.23.46", - "serde", - "serde_json", - "sha2 0.10.9", - "tokio", - "tokio-postgres", - "tonic", - "url", - "uuid", - "webdock-plugin-kit", - "webdock-plugin-protocol", - "webdock-plugin-runtime", -] - -[[package]] -name = "webdock-plugin-kit" -version = "0.1.0" -source = "git+https://github.com/spitzli/cloud-plugin-sdk?rev=8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6#8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6" -dependencies = [ - "aes-gcm", - "getrandom 0.2.17", - "hex", - "rustix", - "rustls 0.23.46", - "rustls-pemfile", - "serde", - "serde_json", - "tokio", - "tokio-postgres", - "tokio-postgres-rustls", - "tonic", - "url", - "uuid", - "webdock-plugin-protocol", - "webdock-plugin-runtime", -] - -[[package]] -name = "webdock-plugin-protocol" -version = "0.1.0" -source = "git+https://github.com/spitzli/cloud-plugin-sdk?rev=8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6#8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6" -dependencies = [ - "base64 0.22.1", - "chrono", - "ed25519-dalek", - "jsonschema", - "node-semver", - "regex", - "serde", - "serde_json", - "sha2 0.10.9", - "url", - "uuid", -] - -[[package]] -name = "webdock-plugin-runtime" -version = "0.1.0" -source = "git+https://github.com/spitzli/cloud-plugin-sdk?rev=8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6#8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6" -dependencies = [ - "ed25519-dalek", - "hex", - "hyper-util", - "prost", - "rustix", - "rustls 0.23.46", - "rustls-pemfile", - "serde", - "serde_json", - "sha2 0.10.9", - "tokio", - "tokio-rustls 0.26.6", - "tokio-stream", - "tonic", - "tonic-prost", - "tonic-prost-build", - "tower", - "url", - "webdock-plugin-protocol", - "x509-parser", -] - [[package]] name = "whoami" version = "2.1.3" diff --git a/Cargo.toml b/Cargo.toml index f84a903..105b19e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ -"bin" = [{ "name" = "webdock-object-storage-plugin", "path" = "src/main.rs", "required-features" = ["providers"] }] +"bin" = [{ "name" = "spitzli-object-storage-plugin", "path" = "src/main.rs", "required-features" = ["providers"] }] ["package"] -"name" = "webdock-object-storage-plugin" +"name" = "spitzli-object-storage-plugin" "version" = "0.5.0" "edition" = "2024" "rust-version" = "1.94" @@ -51,20 +51,20 @@ "default-features" = false "features" = ["ring", "std", "tls12"] -["dependencies"."webdock-plugin-protocol"] +["dependencies"."spitzli-plugin-protocol"] "git" = "https://github.com/spitzli/cloud-plugin-sdk" -"rev" = "8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6" -"package" = "webdock-plugin-protocol" +"rev" = "8019f3df67dba3fed3083f22635e4725028c1b5e" +"package" = "spitzli-plugin-protocol" -["dependencies"."webdock-plugin-runtime"] +["dependencies"."spitzli-plugin-runtime"] "git" = "https://github.com/spitzli/cloud-plugin-sdk" -"rev" = "8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6" -"package" = "webdock-plugin-runtime" +"rev" = "8019f3df67dba3fed3083f22635e4725028c1b5e" +"package" = "spitzli-plugin-runtime" -["dependencies"."webdock-plugin-kit"] +["dependencies"."spitzli-plugin-kit"] "git" = "https://github.com/spitzli/cloud-plugin-sdk" -"rev" = "8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6" -"package" = "webdock-plugin-kit" +"rev" = "8019f3df67dba3fed3083f22635e4725028c1b5e" +"package" = "spitzli-plugin-kit" ["dependencies"."tonic"] "version" = "0.14.6" diff --git a/Dockerfile b/Dockerfile index 3fa2bf2..00ec7d7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,15 +6,15 @@ WORKDIR /src COPY . . # Shared only among reviewed Spitzli platform sources; never customer build code. FROM source AS check -RUN --mount=type=cache,id=spitzli-native-sdk-8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6-registry,target=/usr/local/cargo/registry,sharing=locked --mount=type=cache,id=spitzli-native-sdk-8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6-git,target=/usr/local/cargo/git,sharing=locked --mount=type=cache,id=spitzli-native-sdk-8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6-target,target=/src/target,sharing=locked cargo check --locked --all-targets --jobs 3 && cargo test --locked --all-targets --jobs 3 +RUN --mount=type=cache,id=spitzli-native-sdk-8019f3df67dba3fed3083f22635e4725028c1b5e-registry,target=/usr/local/cargo/registry,sharing=locked --mount=type=cache,id=spitzli-native-sdk-8019f3df67dba3fed3083f22635e4725028c1b5e-git,target=/usr/local/cargo/git,sharing=locked --mount=type=cache,id=spitzli-native-sdk-8019f3df67dba3fed3083f22635e4725028c1b5e-target,target=/src/target,sharing=locked cargo check --locked --all-targets --jobs 3 && cargo test --locked --all-targets --jobs 3 FROM source AS build -RUN --mount=type=cache,id=spitzli-native-sdk-8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6-registry,target=/usr/local/cargo/registry,sharing=locked --mount=type=cache,id=spitzli-native-sdk-8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6-git,target=/usr/local/cargo/git,sharing=locked --mount=type=cache,id=spitzli-native-sdk-8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6-target,target=/src/target,sharing=locked cargo build --locked --release --bins --jobs 3 && mkdir /out && install -m 0555 /src/target/release/webdock-object-storage-plugin /out/webdock-object-storage-plugin +RUN --mount=type=cache,id=spitzli-native-sdk-8019f3df67dba3fed3083f22635e4725028c1b5e-registry,target=/usr/local/cargo/registry,sharing=locked --mount=type=cache,id=spitzli-native-sdk-8019f3df67dba3fed3083f22635e4725028c1b5e-git,target=/usr/local/cargo/git,sharing=locked --mount=type=cache,id=spitzli-native-sdk-8019f3df67dba3fed3083f22635e4725028c1b5e-target,target=/src/target,sharing=locked cargo build --locked --release --bins --jobs 3 && mkdir /out && install -m 0555 /src/target/release/spitzli-object-storage-plugin /out/spitzli-object-storage-plugin FROM docker.io/library/debian:trixie-slim@sha256:f6b08b09a05725f9431502d3b5714f5c4576e82c1a84fa1debe0c24a7e0c3ec4 COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt COPY LICENSE COMMERCIAL-LICENSING.md NOTICE /usr/share/licenses/spitzli-cloud/ -COPY --from=build --chown=65532:65532 --chmod=0555 /out/webdock-object-storage-plugin /usr/local/bin/webdock-object-storage-plugin +COPY --from=build --chown=65532:65532 --chmod=0555 /out/spitzli-object-storage-plugin /usr/local/bin/spitzli-object-storage-plugin ENV HOME=/tmp USER 65532:65532 -ENTRYPOINT ["/usr/local/bin/webdock-object-storage-plugin"] +ENTRYPOINT ["/usr/local/bin/spitzli-object-storage-plugin"] diff --git a/NAMESPACE-MIGRATION.json b/NAMESPACE-MIGRATION.json new file mode 100644 index 0000000..332e433 --- /dev/null +++ b/NAMESPACE-MIGRATION.json @@ -0,0 +1,65 @@ +{ + "baseSource": "d61452fa36013a0eac9c1a62e8d7de083cba4e6b", + "date": "2026-11-12", + "formatVersion": 1, + "licenseUnchanged": true, + "originalSourceSnapshotRetained": true, + "package": "spitzli-object-storage-plugin", + "preservedBindingFilesSHA256": { + "COMMERCIAL-LICENSING.md": "5b8832f5014f16e2cf4f7ee295de32760eed20981495d184bd9f1517be256a09", + "EXPORT-PROVENANCE.json": "7914b9b9f0c65a2d346c6cd08d9592440c3eddce86b4f99abc110d059ff2e7c4", + "LICENSE": "0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0", + "manifest.json": "1d4c555be714d2153b33bc6dc2ce7deee569ffcdd0bafff8da886d04cbc5c1e5", + "migrations/0001_metadata.sql": "5be118d630c588eefa43801360f81bae5f668e940f037901dcba0e4f24a242b6" + }, + "qualifiedChangedSourceSHA256": { + "Cargo.lock": "d5617b300a54b2e2514ad7b3b255f7c04f0a6a093bbc4da8e7b4d0858decbe09", + "Cargo.toml": "e2fe5ac5938110c3da9ebf30b4aa124fa8692ad1a2bae3892756996d0263a1db", + "Dockerfile": "9f35da1ca1e23dfa2268677c0d22197095be770660597614c1beee2c94112508", + "NOTICE": "4949ccd63735c148d2fd1f1423772d11938087ba0bdbcf4aad81c576bcfa09b8", + "scripts/plugin-release/release.mjs": "30462a348f238bc78dab840688199574ad4fc5e9b039310306d6210f4c433890", + "src/data.rs": "0f7d1c05d0ec189fc1ebeb4bdcb518ee4a8459d56f79fc098aa43582bf9af4b0", + "src/engine.rs": "5adb9b6cb33045c0b9e31a11b38c9d1da28450cfebdadb1d267651fec1051d64", + "src/lib.rs": "1ae7cfc6f3a7e76627f8e09430be365787289077d0dd775924a1643807a85d60", + "src/main.rs": "fe3384602151a455022f8498e4d4bccf7a2b20f313e9cec2ce18474b83e5ce25", + "src/minio.rs": "6dfcb6ef0d294012fec1aa15189313083ae11bf50c29f60eb85f16837890a8dd", + "src/provider.rs": "ca421495cd41048d5584c87c13756c664b7609f47e58cdf5ae63b373588dcfa0", + "src/sdk.rs": "7fcc2b79d4c181da815e4382c8b8305f72b79cafc5b1752f7c40bd484f5153da", + "src/store.rs": "c5b34cac289f16a9c6d58d1eca38f9af9fa60b3976505e008d50a07f10fdbd41", + "standalone.json": "77b6de47ddf4933982e03e9cc76f2c12434792df59c2a148f3b8f8ef85d16694", + "tests/data.rs": "a6b7436f240ec1e73752892fb9b755eac4ff49a325ccd702f9582f40b5da58b0", + "tests/lifecycle.rs": "43aa2cdb6ed69042f2af3aac1bb9a430ff882ac746dd81d3f5a337bff4c242b6", + "tests/manifest.rs": "7357945934faa6e035a551cea2f3788a32b6dc7ca3b3298f5798b8fc0ca6a6c5", + "tests/minio_acceptance.rs": "65386a40b1533c50686157633f2fe5cf2d4acf8029f021c1884e4b38bbd1c07a", + "tests/native_tls_startup.rs": "5ca327d28526939ca5bc8764853211f0c4fdc826ea7b8233b0c5fb7a5f47113d", + "tests/provider_contract.rs": "d07092e904bf7cfec43f2c4cd9e9c5e5d590c6339514e05dce4fbff14eb0c07a", + "tests/support/mod.rs": "ecd5200aae889004847fe859bb04fc4127adc839dc6598288056f5dbd2f46c05", + "tools/manifest-validator/Cargo.lock": "ae2cb28761abf9ce99c9f5c4df246d47d61955a9919907fd222f511d13d84ba6", + "tools/manifest-validator/Cargo.toml": "81aa8724804a7f701f7b312c8851937369409d029071d2034dbd6f535b86df6a", + "tools/manifest-validator/src/main.rs": "bb5f5ab38c63e2c28aa64a329696e923aa747e62de2d058e2de734ada06e72b4", + "ui/index.tsx": "4bc789de2755c09cb80ab1d4411b8f065d8b80e2d92982bcaf9d771fa1d0d88e" + }, + "runtimeArtifactsReplaced": false, + "scope": "Rust package/import and binary namespace, host UI import namespace, paired test environment variables and exact SDK pin", + "sdkGit": "https://github.com/spitzli/cloud-plugin-sdk", + "sdkRevision": "8019f3df67dba3fed3083f22635e4725028c1b5e", + "sourceChecks": { + "allRegistryLockfilesPreserved": [ + "Cargo.lock", + "tools/manifest-validator/Cargo.lock" + ], + "format": true, + "releaseContract": true, + "rustLiteralFilesChecked": 17, + "strictClippy": true, + "testsIgnored": 29, + "testsPassed": 18, + "ui": { + "component": "object-storage", + "hostConsoleSource": "a9fa78a6264a64a5e3e9405a49d94da189f7638b", + "typecheckPassed": true + } + }, + "version": "0.5.0", + "wireStoredCryptographicAndExternalResourceBindings": "retained for coordinated migration" +} diff --git a/NOTICE b/NOTICE index 8f8f4fb..69c129f 100644 --- a/NOTICE +++ b/NOTICE @@ -1,7 +1,7 @@ -Webdock +Spitzli Cloud Copyright (c) 2026 Spitzli Development and contributors. -Original Webdock code is licensed under AGPL-3.0-only unless separately noted. +Original Spitzli Cloud code is licensed under AGPL-3.0-only unless separately noted. Alternative written licenses may be available from the relevant rights holder. See LICENSE and COMMERCIAL-LICENSING.md. diff --git a/scripts/plugin-release/release.mjs b/scripts/plugin-release/release.mjs index 11b4590..4f227e7 100644 --- a/scripts/plugin-release/release.mjs +++ b/scripts/plugin-release/release.mjs @@ -78,7 +78,7 @@ export function validateDockerfile(raw) { export function validateSDKDependencies(dependencies) { const sources = new Set(); - for (const dependency of dependencies.filter(dep => dep.name.startsWith('webdock-'))) { + for (const dependency of dependencies.filter(dep => dep.name.startsWith('spitzli-') || dep.name.startsWith('webdock-'))) { requireValue(typeof dependency.source === 'string' && /\?rev=[a-f0-9]{40}(?:#|$)/.test(dependency.source), 'Every SDK crate must use a reviewed Git revision'); sources.add(dependency.source.split('#')[0]); } diff --git a/src/data.rs b/src/data.rs index 95cf788..dd81d29 100644 --- a/src/data.rs +++ b/src/data.rs @@ -3,11 +3,11 @@ use crate::{engine::Engine, model::*, store::Result}; use serde::Deserialize; use serde_json::Value; use sha2::{Digest, Sha256}; -use std::collections::BTreeMap; -use webdock_plugin_protocol::storage::{ +use spitzli_plugin_protocol::storage::{ Attachment, MAX_PLAN_SECONDS, MAX_TRANSFER_BYTES, StorageAuthorization, StorageDirection, StoragePlan, }; +use std::collections::BTreeMap; pub const STORAGE_BINDING: &str = "managed-objects"; diff --git a/src/engine.rs b/src/engine.rs index 5fc46d4..b15d6ef 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -5,9 +5,9 @@ use crate::{ }; use serde_json::{Value, json}; use sha2::{Digest, Sha256}; +use spitzli_plugin_kit::seal::Sealer; use std::{sync::Arc, time::Duration}; use uuid::Uuid; -use webdock_plugin_kit::seal::Sealer; type Result = std::result::Result; pub struct Engine { pub(crate) store: Store, @@ -57,9 +57,9 @@ impl Engine { .map_err(|_| "Object metadata encoding failed"); } if let Some(direction) = match action { - "objects.upload" => Some(webdock_plugin_protocol::storage::StorageDirection::Upload), + "objects.upload" => Some(spitzli_plugin_protocol::storage::StorageDirection::Upload), "objects.download" => { - Some(webdock_plugin_protocol::storage::StorageDirection::Download) + Some(spitzli_plugin_protocol::storage::StorageDirection::Download) } _ => None, } { diff --git a/src/lib.rs b/src/lib.rs index 8eb37db..6f6d4ed 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,15 +9,15 @@ pub mod sdk; pub mod store; use serde_json::Value; +use spitzli_plugin_protocol::{ErrorCode, InvocationClaims, Manifest, PluginError}; +use spitzli_plugin_runtime::ActionHandler; use std::sync::Arc; -use webdock_plugin_protocol::{ErrorCode, InvocationClaims, Manifest, PluginError}; -use webdock_plugin_runtime::ActionHandler; pub struct Handler(pub Arc); #[tonic::async_trait] impl ActionHandler for Handler { async fn authorize_storage( &self, - authorization: &webdock_plugin_protocol::storage::StorageAuthorization, + authorization: &spitzli_plugin_protocol::storage::StorageAuthorization, ) -> Result<(), PluginError> { self.0 .authorize_data(authorization) diff --git a/src/main.rs b/src/main.rs index 27ac9e2..d256c67 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,8 @@ //! Managed Object Storage native runtime with private durable metadata. use serde::Deserialize; +use spitzli_plugin_kit::transport::{CoreTls, ListenTls, RuntimeTransport}; +use spitzli_plugin_runtime::{self as runtime}; use std::{path::PathBuf, process::ExitCode, sync::Arc}; -use webdock_plugin_kit::transport::{CoreTls, ListenTls, RuntimeTransport}; -use webdock_plugin_runtime::{self as runtime}; type Error = Box; #[derive(Deserialize)] @@ -19,7 +19,7 @@ struct Configuration { storage_url: String, storage_ca: Option, secret_key_hex: String, - backend: webdock_object_storage_plugin::sdk::BackendConfig, + backend: spitzli_object_storage_plugin::sdk::BackendConfig, } async fn run() -> Result<(), Error> { let mut args = std::env::args_os().skip(1); @@ -28,7 +28,7 @@ async fn run() -> Result<(), Error> { return Err("unexpected argument".into()); } let config: Configuration = - serde_json::from_slice(&webdock_plugin_kit::read_file(&path, true)?)?; + serde_json::from_slice(&spitzli_plugin_kit::read_file(&path, true)?)?; let transport = RuntimeTransport { listen: config.listen, core: config.core, @@ -36,24 +36,24 @@ async fn run() -> Result<(), Error> { core_tls: config.core_tls, }; transport.validate()?; - let manifest = webdock_plugin_protocol::Manifest::parse(&webdock_plugin_kit::read_file( + let manifest = spitzli_plugin_protocol::Manifest::parse(&spitzli_plugin_kit::read_file( &config.manifest, false, )?)?; - webdock_object_storage_plugin::validate_manifest(&manifest)?; + spitzli_object_storage_plugin::validate_manifest(&manifest)?; let ca = config .storage_ca .as_ref() - .map(|path| webdock_plugin_kit::read_file(path, false)) + .map(|path| spitzli_plugin_kit::read_file(path, false)) .transpose()?; let store = - webdock_object_storage_plugin::store::Store::connect(&config.storage_url, ca.as_deref()) + spitzli_object_storage_plugin::store::Store::connect(&config.storage_url, ca.as_deref()) .await?; - let provider = webdock_object_storage_plugin::sdk::Control::new(config.backend).await?; + let provider = spitzli_object_storage_plugin::sdk::Control::new(config.backend).await?; let client = transport.core_client().await?; - let plugin = Arc::new(webdock_object_storage_plugin::engine::Engine::new( + let plugin = Arc::new(spitzli_object_storage_plugin::engine::Engine::new( store, - webdock_plugin_kit::seal::Sealer::new(&config.secret_key_hex)?, + spitzli_plugin_kit::seal::Sealer::new(&config.secret_key_hex)?, Arc::new(provider), )); let key: [u8; 32] = hex::decode(config.issuer_public_key_hex)? @@ -70,7 +70,7 @@ async fn run() -> Result<(), Error> { config.generation, ed25519_dalek::VerifyingKey::from_bytes(&key)?, Arc::new(authority), - Arc::new(webdock_object_storage_plugin::Handler(plugin)), + Arc::new(spitzli_object_storage_plugin::Handler(plugin)), )?; let shutdown = async { let _ = tokio::signal::ctrl_c().await; diff --git a/src/minio.rs b/src/minio.rs index c9d4b5e..ebccb75 100644 --- a/src/minio.rs +++ b/src/minio.rs @@ -100,7 +100,7 @@ impl Minio { if !directory.is_dir() || directory.permissions().mode() & 0o077 != 0 { return Err("Private mc directory required"); } - let config = webdock_plugin_kit::read_file(&c.config_dir.join("config.json"), true) + let config = spitzli_plugin_kit::read_file(&c.config_dir.join("config.json"), true) .map_err(|_| "Private mc config required")?; let config: Value = serde_json::from_slice(&config).map_err(|_| "Invalid mc config")?; let alias = &config["aliases"]["local"]; @@ -190,7 +190,7 @@ impl Minio { Some(format!( "{}\n{}\n", b.user, - webdock_plugin_kit::seal::password() + spitzli_plugin_kit::seal::password() )), ) .await?; diff --git a/src/provider.rs b/src/provider.rs index f07b750..fb27ebd 100644 --- a/src/provider.rs +++ b/src/provider.rs @@ -17,7 +17,7 @@ pub trait Provider: Send + Sync { async fn presign( &self, _binding: &Binding, - _direction: webdock_plugin_protocol::storage::StorageDirection, + _direction: spitzli_plugin_protocol::storage::StorageDirection, _request: &crate::data::DataRequest, ) -> ProviderResult { Err(ProviderError::Unavailable) diff --git a/src/sdk.rs b/src/sdk.rs index 948c735..5c0596e 100644 --- a/src/sdk.rs +++ b/src/sdk.rs @@ -356,11 +356,11 @@ impl Provider for Control { async fn presign( &self, b: &Binding, - direction: webdock_plugin_protocol::storage::StorageDirection, + direction: spitzli_plugin_protocol::storage::StorageDirection, request: &crate::data::DataRequest, ) -> ProviderResult { use base64::Engine; - use webdock_plugin_protocol::storage::StorageDirection; + use spitzli_plugin_protocol::storage::StorageDirection; request.validate(direction, now() as i64).map_err(unknown)?; if b.backend != self.backend || b.id != request.resource_id { return Err(ProviderError::Ownership); @@ -1214,7 +1214,7 @@ mod tests { #[tokio::test] async fn full_object_checksum_cannot_be_downgraded_by_omitting_the_caller_hash() { use base64::Engine; - use webdock_plugin_protocol::storage::StorageDirection; + use spitzli_plugin_protocol::storage::StorageDirection; let hash = hex::encode([7u8; 32]); for (kind, expected, allowed) in [ (Some("FULL_OBJECT"), None, false), diff --git a/src/store.rs b/src/store.rs index f3a6a9b..2035d55 100644 --- a/src/store.rs +++ b/src/store.rs @@ -20,13 +20,13 @@ pub struct Fence { impl Store { pub async fn connect(url: &str, ca: Option<&[u8]>) -> Result { let client = match ca { - Some(ca) => webdock_plugin_kit::storage_tls(url, ca, "object-storage", MIGRATIONS) + Some(ca) => spitzli_plugin_kit::storage_tls(url, ca, "object-storage", MIGRATIONS) .await .map_err(|_| "metadata migration unavailable")?, None => { - webdock_plugin_kit::loopback(url) + spitzli_plugin_kit::loopback(url) .map_err(|_| "plaintext metadata requires loopback")?; - webdock_plugin_kit::storage(url, "object-storage", MIGRATIONS) + spitzli_plugin_kit::storage(url, "object-storage", MIGRATIONS) .await .map_err(|_| "metadata migration unavailable")? } @@ -49,7 +49,7 @@ impl Store { } /// Independent read committed snapshot; live transfer checks cannot wait on the mutation fence. pub async fn read(&self, id: &Uuid) -> Result> { - let connection = webdock_plugin_kit::postgres::connect(&self.url, self.ca.as_deref()) + let connection = spitzli_plugin_kit::postgres::connect(&self.url, self.ca.as_deref()) .await .map_err(|_| "metadata unavailable")?; connection @@ -64,7 +64,7 @@ impl Store { .transpose() } pub async fn lock(&self) -> Result { - let connection = webdock_plugin_kit::postgres::connect(&self.url, self.ca.as_deref()) + let connection = spitzli_plugin_kit::postgres::connect(&self.url, self.ca.as_deref()) .await .map_err(|_| "metadata unavailable")?; // Do not set an idle-session timeout: external effects may be in progress while SQL is idle. diff --git a/standalone.json b/standalone.json index 6201816..ceaf04c 100644 --- a/standalone.json +++ b/standalone.json @@ -1,14 +1,14 @@ { "binaries": [ - "webdock-object-storage-plugin" + "spitzli-object-storage-plugin" ], "connectionsOwner": "Core", "coreIntegrationDependencies": [], "coreIntegrationTests": [], - "entrypoint": "webdock-object-storage-plugin", + "entrypoint": "spitzli-object-storage-plugin", "lockfileRequiresRegeneration": true, "name": "object-storage", - "package": "webdock-object-storage-plugin", + "package": "spitzli-object-storage-plugin", "release": { "mode": "native-extension", "protocol": "webdock.plugin.v2", @@ -17,11 +17,11 @@ "version": "0.5.0" }, "sdkDependencies": [ - "webdock-plugin-kit", - "webdock-plugin-protocol", - "webdock-plugin-runtime" + "spitzli-plugin-kit", + "spitzli-plugin-protocol", + "spitzli-plugin-runtime" ], "sdkGit": "https://github.com/spitzli/cloud-plugin-sdk", - "sdkRevision": "8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6", + "sdkRevision": "8019f3df67dba3fed3083f22635e4725028c1b5e", "source": "plugins/object-storage" } diff --git a/tests/data.rs b/tests/data.rs index 466eea7..00da216 100644 --- a/tests/data.rs +++ b/tests/data.rs @@ -1,6 +1,6 @@ use serde_json::json; -use webdock_object_storage_plugin::data::DataRequest; -use webdock_plugin_protocol::storage::StorageDirection; +use spitzli_object_storage_plugin::data::DataRequest; +use spitzli_plugin_protocol::storage::StorageDirection; fn input() -> serde_json::Value { json!({"resource_id":uuid::Uuid::new_v4(),"key":"reports/proof.txt","exact_bytes":3,"expected_sha256":"a".repeat(64),"filename":"proof.txt","content_type":"text/plain","expires_at":1120}) } diff --git a/tests/lifecycle.rs b/tests/lifecycle.rs index 3fb7c9a..4820977 100644 --- a/tests/lifecycle.rs +++ b/tests/lifecycle.rs @@ -5,8 +5,8 @@ use std::{ sync::{Arc, Mutex}, }; mod support; -use webdock_object_storage_plugin::{engine::Engine, model::*, provider::Provider, store::Store}; -use webdock_plugin_kit::seal::Sealer; +use spitzli_object_storage_plugin::{engine::Engine, model::*, provider::Provider, store::Store}; +use spitzli_plugin_kit::seal::Sealer; #[derive(Default)] struct Remote { @@ -40,7 +40,7 @@ impl Provider for Controlled { &self, _: &Binding, key: &str, - ) -> ProviderResult { + ) -> ProviderResult { let waiting = { let mut r = self.0.lock().unwrap(); r.heads += 1; @@ -50,7 +50,7 @@ impl Provider for Controlled { started.notify_one(); wait.notified().await; } - Ok(webdock_object_storage_plugin::data::ObjectMetadata { + Ok(spitzli_object_storage_plugin::data::ObjectMetadata { key: key.into(), exact_bytes: 3, version_id: "null".into(), @@ -69,10 +69,10 @@ impl Provider for Controlled { async fn presign( &self, _: &Binding, - _: webdock_plugin_protocol::storage::StorageDirection, - _: &webdock_object_storage_plugin::data::DataRequest, - ) -> ProviderResult { - Ok(webdock_object_storage_plugin::data::PresignedObject { + _: spitzli_plugin_protocol::storage::StorageDirection, + _: &spitzli_object_storage_plugin::data::DataRequest, + ) -> ProviderResult { + Ok(spitzli_object_storage_plugin::data::PresignedObject { url: "http://127.0.0.1:9000/private?signature=private-plan".into(), headers: BTreeMap::new(), }) @@ -771,7 +771,7 @@ async fn metadata_transport_rejects_remote_plaintext_and_invalid_ca_without_logg #[ignore = "orchestrated in two phases by fixtures/postgres.py"] async fn postgres_server_restart_preserves_intent_sealed_credentials_and_replay() { let path = std::path::PathBuf::from( - std::env::var_os("WEBDOCK_OBJECT_STORAGE_POSTGRES_CONFIG").unwrap(), + std::env::var_os("SPITZLI_OBJECT_STORAGE_POSTGRES_CONFIG").unwrap(), ) .parent() .unwrap() @@ -804,7 +804,7 @@ async fn postgres_server_restart_preserves_intent_sealed_credentials_and_replay( file.write_all(json!({"database":f.db.name,"request":request,"created":created,"key":key,"pending":pending}).to_string().as_bytes()).unwrap(); } else { let proof: Value = - serde_json::from_slice(&webdock_plugin_kit::read_file(&path, true).unwrap()).unwrap(); + serde_json::from_slice(&spitzli_plugin_kit::read_file(&path, true).unwrap()).unwrap(); let url = support::database_url(proof["database"].as_str().unwrap()); let store = Store::connect(&url, None).await.unwrap(); let fence = store.lock().await.unwrap(); @@ -1298,7 +1298,7 @@ async fn data_plans_are_fresh_private_and_never_journaled() { .prepare_data( "customer-a", "project-a", - webdock_plugin_protocol::storage::StorageDirection::Upload, + spitzli_plugin_protocol::storage::StorageDirection::Upload, input ) .await @@ -1310,7 +1310,7 @@ async fn data_plans_are_fresh_private_and_never_journaled() { #[ignore = "requires fixtures/postgres.py fresh owned PostgreSQL"] async fn private_epoch_revalidation_denies_deactivation_pending_reactivation_and_wrong_scope_without_fence() { - use webdock_plugin_protocol::storage::{StorageAuthorization, StorageDirection}; + use spitzli_plugin_protocol::storage::{StorageAuthorization, StorageDirection}; let f = Fixture::new().await; let id = f .engine @@ -1457,7 +1457,7 @@ async fn reveal_is_the_only_secret_response_and_never_writes_operation_results() #[tokio::test] #[ignore = "requires fixtures/postgres.py fresh owned PostgreSQL"] async fn actual_deactivation_revokes_issued_plan_while_provider_is_suspended() { - use webdock_plugin_protocol::storage::{StorageAuthorization, StorageDirection}; + use spitzli_plugin_protocol::storage::{StorageAuthorization, StorageDirection}; let f = Fixture::new().await; let created = f .engine diff --git a/tests/manifest.rs b/tests/manifest.rs index 23325c3..c9ceb28 100644 --- a/tests/manifest.rs +++ b/tests/manifest.rs @@ -1,6 +1,6 @@ use serde_json::{Value, json}; -use webdock_object_storage_plugin::validate_manifest; -use webdock_plugin_protocol::Manifest; +use spitzli_object_storage_plugin::validate_manifest; +use spitzli_plugin_protocol::Manifest; #[test] fn every_implemented_operation_has_rest_and_mcp_parity_and_purge_retains_core_index() { let m = Manifest::parse(include_bytes!("../manifest.json")).unwrap(); @@ -70,7 +70,7 @@ fn storage_actions_require_native_service_and_describe_only_public_descriptors() #[test] fn public_output_schema_accepts_the_exported_descriptor_and_rejects_the_private_plan() { - use webdock_plugin_protocol::{ + use spitzli_plugin_protocol::{ storage::{StoragePlan, TransferDescriptor}, validate_value, }; diff --git a/tests/minio_acceptance.rs b/tests/minio_acceptance.rs index 0c29638..877b5af 100644 --- a/tests/minio_acceptance.rs +++ b/tests/minio_acceptance.rs @@ -7,14 +7,14 @@ use aws_sdk_s3::{ primitives::ByteStream, }; use serde_json::{Value, json}; -use std::{os::unix::fs::PermissionsExt, path::PathBuf, sync::Arc}; -use webdock_object_storage_plugin::{ +use spitzli_object_storage_plugin::{ engine::Engine, provider::Provider, sdk::{BackendConfig, Control}, store::Store, }; -use webdock_plugin_kit::seal::Sealer; +use spitzli_plugin_kit::seal::Sealer; +use std::{os::unix::fs::PermissionsExt, path::PathBuf, sync::Arc}; mod support; fn client(endpoint: &str, key: &str, secret: &str) -> Client { @@ -92,7 +92,7 @@ async fn transfer(plan: &Value, method: &str, body: &[u8]) -> Result Result<(), String> { use sha2::{Digest, Sha256}; let hash = hex::encode(Sha256::digest(b"abc")); - let input = json!({"resource_id":id,"key":"data-plan-proof","exact_bytes":3,"expected_sha256":hash,"filename":"proof.txt","content_type":"text/plain","expires_at":webdock_object_storage_plugin::model::now()+120}); + let input = json!({"resource_id":id,"key":"data-plan-proof","exact_bytes":3,"expected_sha256":hash,"filename":"proof.txt","content_type":"text/plain","expires_at":spitzli_object_storage_plugin::model::now()+120}); let upload = call(e, "objects.upload", input.clone()).await?; let parsed = url::Url::parse(upload["url"].as_str().ok_or("private URL")?) .map_err(|_| "private URL parse")?; @@ -593,13 +593,13 @@ async fn paginated_inventory_and_mutations( Ok(()) } #[tokio::test] -#[ignore = "requires WEBDOCK_OBJECT_STORAGE_MINIO_CONFIG private file; only fresh owned fixture resources"] +#[ignore = "requires SPITZLI_OBJECT_STORAGE_MINIO_CONFIG private file; only fresh owned fixture resources"] async fn real_minio_lifecycle_isolation_versions_multipart_retention_and_exact_cleanup() { let path = PathBuf::from( - std::env::var_os("WEBDOCK_OBJECT_STORAGE_MINIO_CONFIG") + std::env::var_os("SPITZLI_OBJECT_STORAGE_MINIO_CONFIG") .expect("private local config path required"), ); - let bytes = webdock_plugin_kit::read_file(&path, true).expect("private config"); + let bytes = spitzli_plugin_kit::read_file(&path, true).expect("private config"); let raw: Value = serde_json::from_slice(&bytes).expect("config JSON"); assert_eq!(raw["kind"], "minio-local"); let c: BackendConfig = serde_json::from_slice(&bytes).expect("explicit config"); @@ -613,7 +613,7 @@ async fn real_minio_lifecycle_isolation_versions_multipart_retention_and_exact_c .join(format!("acceptance-{}", uuid::Uuid::new_v4().simple())); std::fs::create_dir(&directory).unwrap(); std::fs::set_permissions(&directory, std::fs::Permissions::from_mode(0o700)).unwrap(); - let encryption_key = hex::encode(webdock_plugin_kit::seal::random::<32>()); + let encryption_key = hex::encode(spitzli_plugin_kit::seal::random::<32>()); std::fs::write(directory.join("sealer-key"), &encryption_key).unwrap(); std::fs::set_permissions( directory.join("sealer-key"), @@ -685,24 +685,24 @@ async fn real_minio_lifecycle_isolation_versions_multipart_retention_and_exact_c #[tokio::test] #[ignore = "explicit recovery of one exact private acceptance directory only"] async fn recover_exact_owned_fixture() { - let Some(path) = std::env::var_os("WEBDOCK_OBJECT_STORAGE_RECOVERY") else { + let Some(path) = std::env::var_os("SPITZLI_OBJECT_STORAGE_RECOVERY") else { return; }; let path = PathBuf::from(path); let config = PathBuf::from( - std::env::var_os("WEBDOCK_OBJECT_STORAGE_MINIO_CONFIG").expect("private config"), + std::env::var_os("SPITZLI_OBJECT_STORAGE_MINIO_CONFIG").expect("private config"), ); assert_eq!(path.parent(), config.parent()); - let bytes = webdock_plugin_kit::read_file(&config, true).unwrap(); + let bytes = spitzli_plugin_kit::read_file(&config, true).unwrap(); let c: BackendConfig = serde_json::from_slice(&bytes).unwrap(); assert_eq!(c.kind, "minio-local"); let provider = Arc::new(Control::new(c).await.unwrap()); let storage: Value = serde_json::from_slice( - &webdock_plugin_kit::read_file(&path.join("storage.json"), true).unwrap(), + &spitzli_plugin_kit::read_file(&path.join("storage.json"), true).unwrap(), ) .unwrap(); let url = storage["url"].as_str().unwrap(); - let connection = webdock_plugin_kit::postgres::connect(url, None) + let connection = spitzli_plugin_kit::postgres::connect(url, None) .await .expect("private fixture metadata"); let resources = connection @@ -711,7 +711,7 @@ async fn recover_exact_owned_fixture() { .unwrap() .iter() .map(|row| { - serde_json::from_str::( + serde_json::from_str::( row.get::<_, &str>(0), ) .unwrap() @@ -733,11 +733,11 @@ async fn recover_exact_owned_fixture() { let policy = PathBuf::from(raw["minio"]["configDir"].as_str().unwrap()) .join(format!("{}.policy.json", r.binding.id.simple())); let saved: Value = - serde_json::from_slice(&webdock_plugin_kit::read_file(&policy, true).unwrap()) + serde_json::from_slice(&spitzli_plugin_kit::read_file(&policy, true).unwrap()) .unwrap(); assert_eq!( saved, - webdock_object_storage_plugin::sdk::application_policy(&r.binding) + spitzli_object_storage_plugin::sdk::application_policy(&r.binding) ); provider.set_lifecycle(&r.binding, None).await.unwrap(); for key in provider.keys(&r.binding).await.unwrap() { @@ -753,7 +753,7 @@ async fn recover_exact_owned_fixture() { .any(|r| r.provisioned && r.state != "deleted") { let key = String::from_utf8( - webdock_plugin_kit::read_file(&path.join("sealer-key"), true).unwrap(), + spitzli_plugin_kit::read_file(&path.join("sealer-key"), true).unwrap(), ) .unwrap(); let e = Engine::new( @@ -805,7 +805,7 @@ async fn recover_exact_owned_fixture() { async fn bounded_fixture_purge( provider: &Control, - binding: &webdock_object_storage_plugin::model::Binding, + binding: &spitzli_object_storage_plugin::model::Binding, ) -> bool { for _ in 0..40 { if provider.purge(binding).await.unwrap() { diff --git a/tests/native_tls_startup.rs b/tests/native_tls_startup.rs index e41ce33..ba6240f 100644 --- a/tests/native_tls_startup.rs +++ b/tests/native_tls_startup.rs @@ -3,7 +3,7 @@ #[tokio::test] async fn sdk_initialization_selects_a_provider_before_tonic_tls_configuration() { - use webdock_object_storage_plugin::sdk::{BackendConfig, Control}; + use spitzli_object_storage_plugin::sdk::{BackendConfig, Control}; assert!(rustls::crypto::CryptoProvider::get_default().is_none()); // Client construction does no provider I/O; neither an AWS config loader nor a request is used. let config: BackendConfig = serde_json::from_value(serde_json::json!({ diff --git a/tests/provider_contract.rs b/tests/provider_contract.rs index 17a5bb5..afb74ed 100644 --- a/tests/provider_contract.rs +++ b/tests/provider_contract.rs @@ -1,6 +1,6 @@ #![cfg(feature = "providers")] -use webdock_object_storage_plugin::model::Binding; -use webdock_object_storage_plugin::sdk::{BackendConfig, Control, application_policy}; +use spitzli_object_storage_plugin::model::Binding; +use spitzli_object_storage_plugin::sdk::{BackendConfig, Control, application_policy}; #[tokio::test] async fn endpoints_and_credentials_are_explicit_and_minio_is_loopback_only() { for endpoint in [ diff --git a/tests/support/mod.rs b/tests/support/mod.rs index 4cec1a7..e6d4ace 100644 --- a/tests/support/mod.rs +++ b/tests/support/mod.rs @@ -1,7 +1,7 @@ //! Test-only databases on the fresh container owned by fixtures/postgres.py. use serde_json::Value; +use spitzli_object_storage_plugin::store::Store; use tokio_postgres::Client; -use webdock_object_storage_plugin::store::Store; pub fn database_url(database: &str) -> String { assert!( @@ -11,11 +11,11 @@ pub fn database_url(database: &str) -> String { .all(|b| b.is_ascii_alphanumeric() || b == b'_') ); let path = std::path::PathBuf::from( - std::env::var_os("WEBDOCK_OBJECT_STORAGE_POSTGRES_CONFIG") + std::env::var_os("SPITZLI_OBJECT_STORAGE_POSTGRES_CONFIG") .expect("run fixtures/postgres.py"), ); let config: Value = serde_json::from_slice( - &webdock_plugin_kit::read_file(&path, true).expect("private fixture config"), + &spitzli_plugin_kit::read_file(&path, true).expect("private fixture config"), ) .expect("fixture JSON"); let mut url = @@ -34,7 +34,7 @@ impl Database { let url = database_url(&name); let mut admin = url::Url::parse(&url).unwrap(); admin.set_path("postgres"); - let client = webdock_plugin_kit::postgres::connect(admin.as_str(), None) + let client = spitzli_plugin_kit::postgres::connect(admin.as_str(), None) .await .expect("owned fixture connection"); client @@ -49,7 +49,7 @@ impl Database { .expect("metadata store") } pub async fn client(&self) -> Client { - webdock_plugin_kit::postgres::connect(&self.url, None) + spitzli_plugin_kit::postgres::connect(&self.url, None) .await .expect("owned fixture connection") } diff --git a/tools/manifest-validator/Cargo.lock b/tools/manifest-validator/Cargo.lock index dd69a41..26ce02b 100644 --- a/tools/manifest-validator/Cargo.lock +++ b/tools/manifest-validator/Cargo.lock @@ -991,6 +991,32 @@ version = "1.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8" +[[package]] +name = "spitzli-plugin-protocol" +version = "0.1.0" +source = "git+https://github.com/spitzli/cloud-plugin-sdk?rev=8019f3df67dba3fed3083f22635e4725028c1b5e#8019f3df67dba3fed3083f22635e4725028c1b5e" +dependencies = [ + "base64", + "chrono", + "ed25519-dalek", + "jsonschema", + "node-semver", + "regex", + "serde", + "serde_json", + "sha2", + "url", + "uuid", +] + +[[package]] +name = "spitzli-registry-manifest-validator" +version = "0.1.0" +dependencies = [ + "serde_json", + "spitzli-plugin-protocol", +] + [[package]] name = "spki" version = "0.7.3" @@ -1239,32 +1265,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "webdock-plugin-protocol" -version = "0.1.0" -source = "git+https://github.com/spitzli/cloud-plugin-sdk?rev=8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6#8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6" -dependencies = [ - "base64", - "chrono", - "ed25519-dalek", - "jsonschema", - "node-semver", - "regex", - "serde", - "serde_json", - "sha2", - "url", - "uuid", -] - -[[package]] -name = "webdock-registry-manifest-validator" -version = "0.1.0" -dependencies = [ - "serde_json", - "webdock-plugin-protocol", -] - [[package]] name = "windows-link" version = "0.2.1" diff --git a/tools/manifest-validator/Cargo.toml b/tools/manifest-validator/Cargo.toml index 3d08d68..e4c3b1d 100644 --- a/tools/manifest-validator/Cargo.toml +++ b/tools/manifest-validator/Cargo.toml @@ -1,5 +1,5 @@ ["package"] -"name" = "webdock-registry-manifest-validator" +"name" = "spitzli-registry-manifest-validator" "version" = "0.1.0" "edition" = "2024" "rust-version" = "1.94" @@ -11,10 +11,10 @@ ["dependencies"] "serde_json" = "1" -["dependencies"."webdock-plugin-protocol"] +["dependencies"."spitzli-plugin-protocol"] "git" = "https://github.com/spitzli/cloud-plugin-sdk" -"rev" = "8ed57d89c3263b050f126e4c2ba7f6cdebb0daa6" -"package" = "webdock-plugin-protocol" +"rev" = "8019f3df67dba3fed3083f22635e4725028c1b5e" +"package" = "spitzli-plugin-protocol" ["profile"] diff --git a/tools/manifest-validator/src/main.rs b/tools/manifest-validator/src/main.rs index efb848a..6453517 100644 --- a/tools/manifest-validator/src/main.rs +++ b/tools/manifest-validator/src/main.rs @@ -1,5 +1,5 @@ use std::io::{self, Read, Write}; -use webdock_plugin_protocol::Manifest; +use spitzli_plugin_protocol::Manifest; const MAX_REGISTRY_BYTES: usize = 64 * 1024; diff --git a/ui/index.tsx b/ui/index.tsx index ed77f69..f7d7a5c 100644 --- a/ui/index.tsx +++ b/ui/index.tsx @@ -1,7 +1,7 @@ // Read/status controls use the native SDK. Secret reveal remains an explicit synchronous API action. import { useEffect, useRef, useState } from "react"; import { z } from "zod"; -import { Failure, Loading, ui, usePluginQuery, usePluginReveal, usePluginSubmission, usePluginStorage, usePluginScope, storageKeySchema, storageHashSchema, STORAGE_CONTENT_TYPES, type PluginUI, type ResourceProps, type CreateProps } from "@webdock/plugin-ui"; +import { Failure, Loading, ui, usePluginQuery, usePluginReveal, usePluginSubmission, usePluginStorage, usePluginScope, storageKeySchema, storageHashSchema, STORAGE_CONTENT_TYPES, type PluginUI, type ResourceProps, type CreateProps } from "@spitzli/plugin-ui"; const viewSchema = z.object({ bucket: z.string(), endpoint: z.string(), environment: z.string(), revision: z.number(), state: z.string(),