2 个不稳定版本

0.4.0 2023 年 10 月 26 日
0.3.6 2023 年 10 月 26 日

#276Cargo 插件

Apache-2.0

28KB
487

Cargo Wasmer

Continuous Integration

(API 文档)

A cargo 子命令,用于将 Rust 包发布到 Wasmer 包注册表

如果您想深入了解 cargo wasmer 的工作原理,请查看 宣布 Cargo WAPM

注意: 这个命令过去被称为 cargo wapm,当时 wapm 是一个独立的命令。现在大多数与 Wasmer 注册表的交互都已合并到 wasmer CLI 中,因此该命令已被重命名为 cargo wasmer

入门指南

您可以从 crates.io 安装 cargo wasmer 命令。

$ cargo install cargo-wasmer --locked

您还需要安装 wasmer CLI认证 注册表。

$ curl https://get.wasmer.io -sSfL | sh
$ wasmer login
Username: my-user
Password: ****

一旦完成这些,打开您的包的 Cargo.toml 文件,并添加一个元数据部分来告诉 cargo wasmer 如何打包您的包。

# Cargo.toml
[package.metadata.wasmer]
namespace = "Michael-F-Bryan"
abi = "none"

abi 参数告诉 cargo wasmer 在编译到 WebAssembly 时使用哪个目标。

ABI 目标三元组
wasm32-unknown-unknown
wasi wasm32-wasi
emscripten wasm32-emscripten

还需要将 cdylib 添加到 crate-type 列表中。如果其他crate依赖此crate(集成测试、文档测试、示例等),还应添加 rlib crate类型。

# Cargo.toml
[lib]
crate-type = ["cdylib", "rlib"]

现在 Cargo.toml 已经是最新的,我们可以进行一次dry run来确保一切正确。

$ cd examples/hello-world/
$ cargo wasmer --dry-run
2022-05-03T17:33:31.929353Z  INFO publish: cargo_wasmer: Publishing dry_run=true pkg="hello-world"
Successfully published package `Michael-F-Bryan/[email protected]`
[INFO] Publish succeeded, but package was not published because it was run in dry-run mode
2022-05-03T17:33:32.366576Z  INFO publish: cargo_wasmer: Published! pkg="hello-world"

我们可以看到一些文件已经写入到 target/wasmer/ 文件夹。

$ tree ../../target/wasmer
../../target/wasmer
└── hello-world
    ├── hello_world.wasm
    ├── LICENSE_MIT.md
    ├── README.md
    └── wasmer.toml

1 directory, 4 files

$ cat ../../target/wasmer/hello-world/wasmer.toml
[package]
name = "Michael-F-Bryan/hello-world"
version = "0.1.0"
description = "A dummy package."
license-file = "LICENSE_MIT.md"
readme = "README.md"

[[module]]
name = "hello-world"
source = "hello_world.wasm"
abi = "none"

如果你对生成的文件满意,请移除 --dry-run 命令以实际发布crate。

命令 cargo wasmer 不处理任何版本升级,所以发布的 version 直接从 Cargo.toml 中读取。如果你需要管理日常发布任务,如升级版本、标记提交或更新更改日志,请查看 这个 cargo release 工具

工作区

通常,cargo wasmer 命令只会发布当前目录中的crate。

但是,通过使用 --workspace 标志,你可以在当前工作区中发布每个crate,只要它们在 Cargo.toml 中有 [package.metadata.wasmer] 部分。使用 --exclude 参数可以在发布时跳过一个特定的crate。

发布

此存储库使用 Release Please来自动化创建发布的大部分工作。

每当遵循 Conventional Commit Style 的提交合并到 main 时,release-please.yml 工作流程将运行并更新“发布PR”以反映新更改。

对于仅修复bug的提交(即消息以 "fix: " 开头),相关的crate将收到更改日志条目和补丁版本升级。同样,添加新功能(即 "feat:")将进行小版本升级,添加破坏性更改(即 "fix!:""feat!:")将导致主版本升级。

当发布PR合并时,更新的更改日志和升级的版本号将合并到 main 分支,release-please.yml 工作流程将自动生成GitHub Releases,如果需要,CI将发布crate。

TL;DR

  1. 每次进行有意义的更改时,请使用 Conventional Commit Messages
  2. 准备好发布时,合并发布PR
  3. 让自动化处理其他所有事情

许可证

本项目采用Apache许可证,版本2.0(LICENSE-APACHEhttp://www.apache.org/licenses/LICENSE-2.0)。

建议始终使用 cargo-crev 来验证每个依赖项的可信度,包括此依赖项。

贡献

除非你明确表示否则,根据Apache-2.0许可证定义,你提交的任何有意包含在本作品中的贡献,都将按照上述方式双许可,无需任何额外条款或条件。

此crate的目的是不包含任何安全性错误。开发者将尽最大努力避免它们,并欢迎帮助分析和修复它们。

依赖项

约11MB
约201K SLoC