blob: 30553ddbadd37ea45e8c9512dcde4453a86148b3 [file] [log] [blame] [view]
# cargo-package(1)
{{~*set command="package"}}
{{~*set actionverb="Package"}}
{{~*set noall=true}}
{{~*set multitarget=true}}
## NAME
cargo-package --- Assemble the local package into a distributable tarball
## SYNOPSIS
`cargo package` [_options_]
## DESCRIPTION
This command will create a distributable, compressed `.crate` file with the
source code of the package in the current directory. The resulting file will be
stored in the `target/package` directory. This performs the following steps:
1. Load and check the current workspace, performing some basic checks.
- Path dependencies are not allowed unless they have a version key. Cargo
will ignore the path key for dependencies in published packages.
`dev-dependencies` do not have this restriction.
2. Create the compressed `.crate` file.
- The original `Cargo.toml` file is rewritten and normalized.
- `[patch]`, `[replace]`, and `[workspace]` sections are removed from the
manifest.
- `Cargo.lock` is always included. When missing, a new lock file will be
generated unless the `--exclude-lockfile` flag is used. {{man "cargo-install" 1}}
will use the packaged lock file if the `--locked` flag is used.
- A `.cargo_vcs_info.json` file is included that contains information
about the current VCS checkout hash if available, as well as a flag if the
worktree is dirty.
- Symlinks are flattened to their target files.
- Files and directories are included or excluded based on rules mentioned in
[the `[include]` and `[exclude]` fields](../reference/manifest.html#the-exclude-and-include-fields).
3. Extract the `.crate` file and build it to verify it can build.
- This will rebuild your package from scratch to ensure that it can be
built from a pristine state. The `--no-verify` flag can be used to skip
this step.
4. Check that build scripts did not modify any source files.
The list of files included can be controlled with the `include` and `exclude`
fields in the manifest.
See [the reference](../reference/publishing.html) for more details about
packaging and publishing.
### .cargo_vcs_info.json format
Will generate a `.cargo_vcs_info.json` in the following format
```javascript
{
"git": {
"sha1": "aac20b6e7e543e6dd4118b246c77225e3a3a1302",
"dirty": true
},
"path_in_vcs": ""
}
```
`dirty` indicates that the Git worktree was dirty when the package
was built.
`path_in_vcs` will be set to a repo-relative path for packages
in subdirectories of the version control repository.
The compatibility of this file is maintained under the same policy
as the JSON output of {{man "cargo-metadata" 1}}.
Note that this file provides a best-effort snapshot of the VCS information.
However, the provenance of the package is not verified.
There is no guarantee that the source code in the tarball matches the VCS information.
## OPTIONS
### Package Options
{{#options}}
{{#option "`-l`" "`--list`" }}
Print files included in a package without making one.
{{/option}}
{{#option "`--no-verify`" }}
Don't verify the contents by building them.
{{/option}}
{{#option "`--no-metadata`" }}
Ignore warnings about a lack of human-usable metadata (such as the description
or the license).
{{/option}}
{{#option "`--allow-dirty`" }}
Allow working directories with uncommitted VCS changes to be packaged.
{{/option}}
{{#option "`--exclude-lockfile`" }}
Don't include the lock file when packaging.
This flag is not for general use.
Some tools may expect a lock file to be present (e.g. `cargo install --locked`).
Consider other options before using this.
{{/option}}
{{> options-index }}
{{#option "`--registry` _registry_"}}
Name of the registry to package for; see `cargo publish --help` for more details
about configuration of registry names. The packages will not be published
to this registry, but if we are packaging multiple inter-dependent crates,
lock-files will be generated under the assumption that dependencies will be
published to this registry.
{{/option}}
{{#option "`--message-format` _fmt_" }}
Specifies the output message format.
Currently, it only works with `--list` and affects the file listing format.
This is unstable and requires `-Zunstable-options`.
Valid output formats:
- `human` (default): Display in a file-per-line format.
- `json`: Emit machine-readable JSON information about each package.
One package per JSON line (Newline delimited JSON).
```javascript
{
/* The Package ID Spec of the package. */
"id": "path+file:///home/foo#0.0.0",
/* Files of this package */
"files" {
/* Relative path in the archive file. */
"Cargo.toml.orig": {
/* Where the file is from.
- "generate" for file being generated during packaging
- "copy" for file being copied from another location.
*/
"kind": "copy",
/* For the "copy" kind,
it is an absolute path to the actual file content.
For the "generate" kind,
it is the original file the generated one is based on.
*/
"path": "/home/foo/Cargo.toml"
},
"Cargo.toml": {
"kind": "generate",
"path": "/home/foo/Cargo.toml"
},
"src/main.rs": {
"kind": "copy",
"path": "/home/foo/src/main.rs"
}
}
}
```
{{/option}}
{{/options}}
{{> section-package-selection }}
### Compilation Options
{{#options}}
{{> options-target-triple }}
{{> options-target-dir }}
{{/options}}
{{> section-features }}
### Manifest Options
{{#options}}
{{> options-manifest-path }}
{{> options-locked }}
{{/options}}
### Miscellaneous Options
{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{/options}}
### Display Options
{{#options}}
{{> options-display }}
{{/options}}
{{> section-options-common }}
{{> section-environment }}
{{> section-exit-status }}
## EXAMPLES
1. Create a compressed `.crate` file of the current package:
cargo package
## SEE ALSO
{{man "cargo" 1}}, {{man "cargo-publish" 1}}