diff --git a/cli/tools/registry/mod.rs b/cli/tools/registry/mod.rs index c6508fd493..a86e15dd63 100644 --- a/cli/tools/registry/mod.rs +++ b/cli/tools/registry/mod.rs @@ -388,14 +388,28 @@ async fn perform_publish( .send() .await?; - let mut task = parse_response::(response) - .await - .with_context(|| { - format!( - "Failed to publish @{}/{} at {}", - package.scope, package.package, package.version - ) - })?; + let res = parse_response::(response).await; + let mut task = match res { + Ok(task) => task, + Err(err) if err.code == "versionAlreadyExists" => { + println!( + "{} @{}/{}@{}", + colors::yellow("Skipping, already published"), + package.scope, + package.package, + package.version + ); + continue; + } + Err(err) => { + return Err(err).with_context(|| { + format!( + "Failed to publish @{}/{} at {}", + package.scope, package.package, package.version + ) + }) + } + }; let interval = std::time::Duration::from_secs(2); while task.status != "success" && task.status != "failure" {