Skip to content

Commit 8995f54

Browse files
committed
Auto merge of #14496 - tweag:cargo-package-doc, r=epage
Document -Zpackage-workspace Adds some unstable documentation on the `-Zpackage-workspace` feature, as requested in [#10948](#10948 (comment)). This documentation assumes that #14433 gets merged.
2 parents 978b4fe + e262c48 commit 8995f54

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

src/doc/src/reference/unstable.md

+43
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ Each new feature described below should explain how to use it.
116116
* [gitoxide](#gitoxide) --- Use `gitoxide` instead of `git2` for a set of operations.
117117
* [script](#script) --- Enable support for single-file `.rs` packages.
118118
* [lockfile-path](#lockfile-path) --- Allows to specify a path to lockfile other than the default path `<workspace_root>/Cargo.lock`.
119+
* [package-workspace](#package-workspace) --- Allows for packaging and publishing multiple crates in a workspace.
119120

120121
## allow-features
121122

@@ -1643,6 +1644,48 @@ Example:
16431644
cargo +nightly metadata --lockfile-path=$LOCKFILES_ROOT/my-project/Cargo.lock -Z unstable-options
16441645
```
16451646

1647+
## package-workspace
1648+
* Tracking Issue: [#10948](https://github.com/rust-lang/cargo/issues/10948)
1649+
1650+
This allows cargo to package (or publish) multiple crates in a workspace, even
1651+
if they have inter-dependencies. For example, consider a workspace containing
1652+
packages `foo` and `dep`, where `foo` depends on `dep`. Then
1653+
1654+
```sh
1655+
cargo +nightly -Zpackage-workspace package -p foo -p dep
1656+
```
1657+
1658+
will package both `foo` and `dep`, while
1659+
1660+
```sh
1661+
cargo +nightly -Zpackage-workspace publish -p foo -p dep
1662+
```
1663+
1664+
will publish both `foo` and `dep`.
1665+
If `foo` and `dep` are the only crates in the workspace, you can use the `--workspace`
1666+
flag instead of specifying the crates individually:
1667+
1668+
```sh
1669+
cargo +nightly -Zpackage-workspace package --workspace
1670+
cargo +nightly -Zpackage-workspace publish --workspace
1671+
```
1672+
1673+
#### Lock-file behavior
1674+
1675+
When packaging a binary at the same time as one of its dependencies, the binary
1676+
will be packaged with a lock-file pointing at the dependency's registry entry
1677+
*as though the dependency were already published*, even though it has not yet
1678+
been. In this case, `cargo` needs to know the registry that the dependency
1679+
will eventually be published on. `cargo` will attempt to infer this registry
1680+
by examining the [the `publish` field](manifest.md#the-publish-field), falling back
1681+
to `crates.io` if no `publish` field is set. To explicitly set the registry,
1682+
pass a `--registry` or `--index` flag.
1683+
1684+
```sh
1685+
cargo +nightly -Zpackage-workspace --registry=my-registry package -p foo -p dep
1686+
cargo +nightly -Zpackage-workspace --index=https://example.com package -p foo -p dep
1687+
```
1688+
16461689
# Stabilized and removed features
16471690

16481691
## Compile progress

0 commit comments

Comments
 (0)