workspacer_cli/
check_publish_ready_crate.rs1crate::ix!();
3
4#[derive(Debug, StructOpt, Getters, Setters)]
9#[getset(get = "pub")]
10pub struct CheckPublishReadyCrateCommand {
11 #[structopt(long = "crate")]
13 crate_name: String,
14
15 #[structopt(long = "workspace")]
17 workspace_path: Option<PathBuf>,
18
19 #[structopt(long = "skip-git-check")]
21 skip_git_check: bool,
22}
23
24impl CheckPublishReadyCrateCommand {
25 #[tracing::instrument(level = "trace", skip(self))]
26 pub async fn run(&self) -> Result<(), WorkspaceError> {
27 let crate_name_owned = self.crate_name().clone();
28
29 run_with_workspace_and_crate_name(
31 self.workspace_path().clone(),
32 *self.skip_git_check(),
33 crate_name_owned,
34 |ws, name| {
35 Box::pin(async move {
36 let arc_crate = ws.find_crate_by_name(name).await.ok_or_else(|| {
38 error!("No crate named '{}' found in workspace", name);
39 CrateError::CrateNotFoundInWorkspace {
40 crate_name: name.to_owned(),
41 }
42 })?;
43
44 let handle = arc_crate.lock().await.clone();
46
47 handle.ready_for_cargo_publish().await.map_err(|cr_err| {
49 error!("Crate '{}' not ready for publish: {:?}", name, cr_err);
50 WorkspaceError::CrateError(cr_err)
51 })?;
52
53 info!("Crate '{}' is READY for publishing!", name);
54 Ok(())
55 })
56 },
57 )
58 .await
59 }
60}