crate-ci / cargo-release

Cargo subcommand `release`: everything about releasing a rust crate.
Apache License 2.0
1.33k stars 112 forks source link

Wrong order of publishing #829

Open chipshort opened 1 week ago

chipshort commented 1 week ago

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, run cargo release 2.2.0-rc.3 -x. It tries to publish cosmwasm-std before cosmwasm-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:

Release
  cosmwasm-core 2.2.0-rc.2
  cosmwasm-crypto 2.2.0-rc.2
  cosmwasm-derive 2.2.0-rc.2
  cosmwasm-std 2.2.0-rc.2
  cosmwasm-vm-derive 2.2.0-rc.2
  cosmwasm-vm 2.2.0-rc.2
  cosmwasm-check 2.2.0-rc.2
  cosmwasm-schema-derive 2.2.0-rc.2
  cosmwasm-schema 2.2.0-rc.2
  Compiling cosmwasm-derive v2.2.0-rc.2 (/Users/christoph/Projects/cosmwasm/target/package/cosmwasm-derive-2.2.0-rc.2)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.78s
    Packaged 5 files, 14.5KiB (3.5KiB compressed)
   Uploading cosmwasm-derive v2.2.0-rc.2 (/Users/christoph/Projects/cosmwasm/packages/derive)
    Uploaded cosmwasm-derive v2.2.0-rc.2 to registry `crates-io`
note: waiting for `cosmwasm-derive v2.2.0-rc.2` to be available at registry `crates-io`.
You may press ctrl-c to skip waiting; the crate should be available shortly.
   Published cosmwasm-derive v2.2.0-rc.2 at registry `crates-io`
  Publishing cosmwasm-std
warning: profiles for the non root package will be ignored, specify profiles at the workspace root:
package:   /Users/christoph/Projects/cosmwasm/packages/vm/Cargo.toml
workspace: /Users/christoph/Projects/cosmwasm/Cargo.toml
    Updating crates.io index
   Packaging cosmwasm-std v2.2.0-rc.2 (/Users/christoph/Projects/cosmwasm/packages/std)
   Verifying cosmwasm-std v2.2.0-rc.2 (/Users/christoph/Projects/cosmwasm/packages/std)
    Updating crates.io index
error: failed to verify package tarball

Caused by:
  failed to select a version for the requirement `cosmwasm-schema = "^2.2.0-rc.2"`
  candidate versions found which didn't match: 2.2.0-rc.1, 2.1.4, 2.1.3, ...
  location searched: crates.io index
  required by package `cosmwasm-std v2.2.0-rc.2 (/Users/christoph/Projects/cosmwasm/target/package/cosmwasm-std-2.2.0-rc.2)`
  if you are looking for the prerelease package it needs to be specified explicitly
      cosmwasm-schema = { version = "2.2.0-rc.1" }

Maybe the problem is that dev-dependencies are not factored into the ordering?

epage commented 1 week 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