Skip to content

packaging: omit generated Cargo.lock if binaries and examples are package-excluded #11557

@bromls

Description

@bromls

Problem

When running cargo package --no-verify --no-metadata -p <my_package>

Expected behavior: a generated Cargo.lock is produced for the package if and only if the package contains one or more examples or binaries.

Observed behavior: If the package has examples/**, but has marked the path as excluded (https://doc.rust-lang.org/cargo/reference/manifest.html#the-exclude-and-include-fields), a Cargo.lock is still generated despite the examples being excluded from the <package>.crate file.

Steps

No response

Possible Solution(s)

No response

Notes

This is admittedly an edge condition, but we have a CI flow where it is important to be able to avoid the Cargo.lock generation step. We are packaging multiple dependent crates from a workspace simultaneously for submission to an alternative registry with no API (direct registry index manipulation), so the failed registry lookups that occur during Cargo.lock generation break our ability to package the crates simultaneously.

We would not want to .gitignore the examples, as we want them there for developers of the crates. However, any other exclusion mechanism (if there are reasons not to overload https://doc.rust-lang.org/cargo/reference/manifest.html#the-exclude-and-include-fields) would be appropriate.

The workaround we currently use is to avoid examples inside publishing crates, instead putting them in separate crate(s) in the same workspace.

This is related to:

Version

cargo 1.65.0 (4bc8f24d3 2022-10-20)
release: 1.65.0
commit-hash: 4bc8f24d3e899462e43621aab981f6383a370365
commit-date: 2022-10-20
host: aarch64-apple-darwin
libgit2: 1.5.0 (sys:0.15.0 vendored)
libcurl: 7.85.0 (sys:0.4.55+curl-7.83.1 system ssl:(SecureTransport) LibreSSL/3.3.6)
os: Mac OS 13.1.0 [64-bit]

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-lockfileArea: Cargo.lock issuesC-feature-requestCategory: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted`Command-packageS-triageStatus: This issue is waiting on initial triage.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions