12 个版本 (1 个稳定版)
1.0.0 | 2020年2月29日 |
---|---|
0.4.2 | 2020年2月25日 |
0.4.1 | 2020年1月15日 |
0.3.1 | 2017年4月16日 |
0.1.5 | 2017年4月9日 |
#308 在 Cargo 插件 中
每月下载量 41 次
34KB
636 行
cargocook
一个第三方 Cargo 扩展,允许您处理您的软件包。它的功能
- 收集所有指定的文件(原料)作为与软件包的工件(二进制文件或库)相同的格式。
- 将所有内容从
.1
放入一个可能压缩的容器中。 - 从
.2
开始为容器计算哈希值。 - 从
.3
将所有文件上传到指定位置。
如果您仍然不理解它是做什么的,请阅读下面的内容
在构建软件包后,您将得到一个生成的二进制文件(或库)。您可能希望将其上传到某个地方以供进一步下载和使用。例如,您用纯 Rust 制作了一个名为
rustquake
的游戏。您想发布它,因此以发布模式编译它,启用所有优化,然后您可能想将二进制文件(以及一些其他文件,如配置文件、库、图像、着色器等)上传到某个地方。将所有这些压缩起来也很好。所以,您手动创建一个存档,例如,rustquake-0.1.1.tar.gz
,其中您手动放置所有需要的文件。然后您去您的服务器,将存档放在一些您的 web 服务器知道的文件夹中。这是一项非常繁琐的工作。但是所有这些步骤都可以通过cargo cook
自动完成。
配置
为了使其与您的软件包一起使用,您必须在您的软件包根目录中创建一个名为 Cook.toml
的文件。让我们看看 cargo-cook
软件包的 Cook.toml.example
示例
[cook]
target_directory = "target/release"
target_rename = "cargocook"
hashes = ["md5", "sha256", "sha512"]
containers = ["tar", "tar.bzip2"]
pre_cook = "pre_cook.sh"
post_cook = "post_cook.sh"
include_dependencies = true
cook_directory = "cooked/"
[cook.deploy]
targets = ["fscopy", "ssh"]
[cook.deploy.fscopy]
path = "/tmp"
[cook.deploy.ssh]
hostname = "" # Host:port format.
username = ""
remote_path = "" # must be absolute path!
deploy_script = "ssh_deploy.sh" # Will be executed on remote server.
# If source is a file then it will be copied to the destination.
# If the source is a directory then the destination field is also a directory and `filter` field can be used to determine which files to take.
[[cook.ingredient]]
source = "Cargo.toml"
destination = "Cargo.toml"
[[cook.ingredient]]
source = "src"
destination = "src"
[[cook.ingredient]]
source = "./"
filter = "(LICENSE-*)"
destination = "licenses/"
cook
target_directory
- 一个用于查找您的软件包工件(artifacts)的目录。target_rename
(可选) - 在将目标文件打包到容器之前重命名目标文件。hashes
(可选) - 用于计算容器哈希值的哈希算法列表。containers
- 你要装填原料的容器列表。pre_cook
(可选) - 在烹饪前执行的脚本。post_cook
(可选) - 在烹饪后执行的脚本。include_dependencies
(可选) - 将crate依赖包含到容器中。cook_directory
- 容器将被放入的目录。
部署
targets
- 部署目标列表。
deploy.fscopy
path
- 要复制烹饪文件的字符串。
deploy.ssh
hostname
- 包含主机名和端口的字符串(例如:github.com:80
)。username
- 用于部署的用户名。部署期间会询问密码。remote_path
- 指向远程路径的字符串,烹饪文件将复制到此路径。deploy_script
(可选) - 在远程服务器上执行,将remote_path
作为工作目录的字符串。
原料
source
- 字符串,是文件或目录的路径。如果是目录,则可以使用filter
字段。filter
(可选) - 用于确定原料的正则表达式。destination
- 字符串,是文件或目录的路径。如果source
是文件,则destination
也是文件;否则,它是source
目录中文件的存放目录。
因此,如果你只在包含 cargo cook
crate 的目录中执行 cargo cook
,则它将给出
$ cd cargo-cook
$ cargo cook
Cooking cargo-cook v0.1.5
Executing Pre-cook
Hello from pre_cook.sh
Pre-cook returned 0
Cooked /home/workspace/cargo-cook/cooked/cargo-cook-0.1.5.tar
Executing Post-cook
Hello from post_cook.sh
Post-cook returned 0
Finished cooking
$ ls cooked/
cargo-cook-0.1.5.tar
cargo-cook-0.1.5.tar.md5
cargo-cook-0.1.5.tar.sha256
cargo-cook-0.1.5.tar.sha512
$ tar -xvf cargo-cook-0.1.5.tar
Cargo.toml
src/main.rs
src/container.rs
src/hash.rs
licenses/LICENSE-APACHE
licenses/LICENSE-MIT
cargocook
编译
假设你已经设置了 Rust 和 cargo。
克隆此存储库并进入创建的目录
git clone https://github.com/vityafx/cargo-cook.git
cd cargo-cook
并编译一个发布版本
cargo build --release
现在你应该在 [起始目录]/cargo-cook/target/release/cargo-cook
中有一个可执行文件。
安装和使用
按照上一节所示编译代码,然后将 cargo-cook
可执行文件放入你的 PATH。
我最喜欢的做法是在 ~/bin
中有一个现有的目录,其中包含我的一些小脚本,该目录添加到我的 .bashrc
,这样它总是可用,然后我从发布版本所在的位置创建到该目录的符号链接
ln -s [starting directory]/cargo-cook/target/release/cargo-cook ~/bin/
完成这些后,由于 cargo 设置为使用第三方扩展,因此在你自己的任何其他 Rust 项目中,你应该能够运行
cargo cook
然后那个 crate 将被烹饪。
有一个选项可以指定配方文件的非默认文件名(默认为 Cook.toml
)
cargo cook -r MyCustomRecipe.toml
这样你也可以使用不同的配方调用 cargo cook
cargo cook -r MyCustomRecipeForLinux.toml
cargo cook -r MyCustomRecipeForWindows.toml
贡献
如果您想独立工作在代码版本上,请 fork 这个仓库,并按照上述步骤进行编译,但使用您的 fork。
如果您直接运行二进制文件而不是通过 cargo
插件系统,会发现一个奇怪的现象,那就是 clap 认为您没有使用子命令。如果您尝试这样做,您将得到
$ ./target/release/cargo-cook whatever
error: Found argument 'whatever', but cargo wasn't expecting any
USAGE:
cargo <SUBCOMMAND>
For more information try --help
为了解决这个问题,您可以选择按照上面的安装和用法说明操作,并始终使用 cargo cook whatever
,或者重新指定 cook
作为子命令
./target/release/cargo-cook cook whatever
许可证
cargo cook
主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。
有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。
依赖项
~8–20MB
~261K SLoC