2个版本

0.3.1 2023年6月2日
0.3.0 2023年4月11日

#1414 in WebAssembly

Download history 9/week @ 2024-03-13 9/week @ 2024-03-20 15/week @ 2024-03-27 32/week @ 2024-04-03 6/week @ 2024-04-10 7/week @ 2024-04-17 37/week @ 2024-04-24 1/week @ 2024-05-01 6/week @ 2024-05-08 13/week @ 2024-05-15 10/week @ 2024-05-22 22/week @ 2024-05-29 68/week @ 2024-06-05 109/week @ 2024-06-12 236/week @ 2024-06-19 198/week @ 2024-06-26

622 每月下载
2 crates 中使用

Apache-2.0 WITH LLVM-exception

63KB
1.5K SLoC

描述

wit-deps 是一个简单的 WIT 依赖管理二进制文件和 Rust 库,用于管理您的 wit/deps。它的主要目标是确保您的 wit/deps 中的内容与依赖清单(默认:wit/deps.toml)和依赖锁定文件(默认:wit/deps.lock)保持一致。

清单

依赖清单是一个将依赖名称映射到其源规范的 TOML 编码的表。在其最简单的形式中,源规范是一个包含具有 wit 子目录(包含 wit 文件)的目录树的 gzipped tarball 的 URL 字符串。

示例

# wit/deps.toml
# Use `wit-deps update` to pull in latest changes from "dynamic" branch references
clocks = "https://github.com/WebAssembly/wasi-clocks/archive/main.tar.gz"
http = "https://github.com/WebAssembly/wasi-http/archive/main.tar.gz"
messaging = "https://github.com/WebAssembly/wasi-messaging/archive/main.tar.gz"
sockets = "https://github.com/WebAssembly/wasi-sockets/archive/main.tar.gz"
sql = "https://github.com/WebAssembly/wasi-sql/archive/main.tar.gz"

# Pin to a tag
io = "https://github.com/rvolosatovs/wasi-io/archive/v0.1.0.tar.gz" # this fork renames `streams` interface for compatiblity with wasi-snapshot-preview1

# Pin a dependency to a particular revision and source digests. Each digest is optional
[keyvalue]
url = "https://github.com/WebAssembly/wasi-keyvalue/archive/6f3bd6bca07cb7b25703a13f633e05258d56a2dc.tar.gz"
sha256 = "1755b8f1e9f2e70d0bde06198bf50d12603b454b52bf1f59064c1877baa33dff"
sha512 = "7bc43665a9de73ec7bef075e32f67ed0ebab04a1e47879f9328e8e52edfb35359512c899ab8a52240fecd0c53ff9c036abefe549e5fb99225518a2e0446d66e0"

源规范也可以是一个具有以下字段的结构

  • url - 与 URL 字符串相同的格式
  • sha256 -(可选)URL 内容的 sha256 校验和的十六进制编码
  • sha512(可选)URL 内容的 sha512 校验和的十六进制编码
  • path - 包含 WIT 定义目录的路径

必须指定 urlpath(两者都支持字符串格式)

示例

# wit/deps.toml
mywit = "./path/to/my/wit"

[logging]
url = "https://github.com/WebAssembly/wasi-logging/archive/d106e59b25297d0496e6a5d221ad090e19c3aaa3.tar.gz"
sha256 = "4bb4aeab99e7323b30d107aab78e88b2265c1598cc438bc5fbc0d16bb63e798f"
sha512 = "13b52b59afd98dd4938e3a651fad631d41a2e84ce781df5d8957eded77a8e1ac4277e771a10225cd4a3a9eae369ed7e8fee6e26f9991a2caa7c97c4a758b1ae6"

用法

请注意,wit-deps 假设它完全控制 wit/deps,因此它可以在任何时候删除和修改 wit/deps 的内容!

交互式

使用 wit-depswit-deps lock 通过 wit/deps.toml 清单和 wit/deps.lock(如果不存在则创建)来填充 wit/deps

Rust

在您的项目的 build.rs 中使用 wit-deps::lock! 宏来自动锁定您的 wit/deps

有关更复杂用法的示例,请参阅crate文档

设计决策

  • wit-deps 默认情况下是懒惰的,只有在绝对必要时才会进行获取/写入。
  • wit-deps 假设从 URL 获取的结果是确定的,即 URL 的 GET 请求 domain.com 必须始终返回完全相同的内 容。注意,在这种情况下,您可以在您的清单条目中使用 sha256sha512 字段来使缓存失效。

依赖项

~14-28MB
~457K SLoC