Open chipshort opened 1 month ago
We ignore dev-dependencies to break cycles https://github.com/crate-ci/cargo-release/blob/06a4e446ce18217536a16f0fddb3d843db0cc36d/src/ops/cargo.rs#L434-L451
However, we should only do that if the package is missing a version
Hi @epage,
I experienced this issue today (I see it slightly related to #624). I understand we only can get the resolved version, not the specified version, but I think it is fine and expected by some users.
As it can also be of surprise for others, I propose to add a parameter to cargo-release
that enables this behavior of considering resolved dev-dependency
version to define the order. It could be something like: --use-dev-dependencies
or just --dev-dependencies
, or similar.
If you like this, I may get some time to propose the fix as a PR.
A flag is the wrong tool for this. You don't know you need the flag until you've already hit the problem. You then have to remember it every time. This is more a property of your package and should be a config. Ideally, we would have a way to tell this on a users behalf, so they don't have to run into the problem first and have to investigate to find that what they need is a flag. That leads back to what I said before about finding a way to do this where we only skip them if they are local-only, like cargo publish
.
Understood. One thing we can do is to filter out by the publish
member in Package
struct. From the docs:
publish: Option<Vec<String>>
List of registries to which this package may be published (derived from the publish field).
Publishing is unrestricted if None, and forbidden if the Vec is empty.
So, if publish
is Some
and Vec
is empty, then we can safely assume it is a non-publishable dev-dependency and skip it. Does this logic make sense to you?
publish = true
is the default and so someone could have a dependency they don't publish that doesn't set publish = false
. Making an assumption like that would just mean that we still strip dev-dependencies more than we should. So it is strictly an improvement over the current state though not fully fixed.
However, if work is being done to fix this, I think effort should be put towards a proper fix and not a hack. While a proper fix isn't as trivial, I'm hopeful its not burdensome to implement. If it is, then we can move forward with a hack.
We set up cargo-release for the https://github.com/CosmWasm/cosmwasm workspace, but it seems the order of publishing for crates is not detected correctly. It tries to publish the dependent before the dependency, resulting in a failure mid-publishing.
To reproduce: From the
release/2.2
branch in cosmwasm, runcargo release 2.2.0-rc.3 -x
. It tries to publishcosmwasm-std
beforecosmwasm-schema
even though the former has a dev-dependency on the latter. This causes cargo to fail publishing. Here are the relevant outputs for when I encountered this with rc.2:Maybe the problem is that dev-dependencies are not factored into the ordering?