📦

cargo package

2022/12/25に公開

あまり直接使わないcargoのコマンドにcargo-packageというのがあります:

https://doc.rust-lang.org/cargo/reference/publishing.html

cargo-publishかさらにそれをラップしたcargo-releaseを使うことが多いと思います。またcargo publish --dry-runcargo packageが同じ動作になります。

.crateファイル

cargo-packageコマンドは実行するとtarget/release以下に{crate name}-{version}.crateなる命名規則のファイルを作ります。少なくともLinuxではこれはtar.gzファイルなので、tarコマンドで中身を見ることが出来ます:

$ tar tf ocipkg-0.2.8.crate | head
ocipkg-0.2.8/.cargo_vcs_info.json
ocipkg-0.2.8/Cargo.toml
ocipkg-0.2.8/Cargo.toml.orig
ocipkg-0.2.8/README.md
ocipkg-0.2.8/src/digest.rs
ocipkg-0.2.8/src/distribution/auth.rs
ocipkg-0.2.8/src/distribution/client.rs
ocipkg-0.2.8/src/distribution/mod.rs
ocipkg-0.2.8/src/distribution/name.rs
ocipkg-0.2.8/src/distribution/reference.rs

.crateに入るファイルはCargo.tomlで調整出来て、例えば特定のファイルを除きたい場合には次のように書きます:

[package]
# ...
exclude = [
    "public/assets/*",
    "videos/*",
]

このファイルのリストを取得する為に、cargo pacakge --listというコマンドも用意されています。

cargo-packageコマンドはこの.crateファイルを作った後、このアーカイブを別の場所に展開してちゃんとビルドできるかを検証してくれます。--no-verifyを指定すると作るだけになります。cargo-publishではこのファイルをcrates.io、あるいは別のレジストリにアップロードします。この.crateファイルのサイズ上限がcrates.ioでは10MBとなります。

GitHubで編集を提案

Discussion