1use clap::Args;
2use eyre::Result;
3use lux_lib::{
4 config::Config, package::PackageName, progress::MultiProgress,
5 remote_package_db::RemotePackageDB, upload::ProjectUpload, workspace::Workspace,
6};
7
8#[cfg(feature = "gpgme")]
9use lux_lib::upload::SignatureProtocol;
10
11#[derive(Args)]
12pub struct Upload {
13 #[cfg(feature = "gpgme")]
15 #[arg(long, default_value_t)]
16 sign_protocol: SignatureProtocol,
17
18 #[arg(short, long, visible_short_alias = 'p')]
20 package: Option<PackageName>,
21}
22
23#[cfg(feature = "gpgme")]
24pub async fn upload(data: Upload, config: Config) -> Result<()> {
25 let workspace = Workspace::current_or_err()?;
26
27 let progress = MultiProgress::new(&config);
28 let bar = progress.map(MultiProgress::new_bar);
29 let package_db = RemotePackageDB::from_config(&config, &bar).await?;
30 if let Some(package) = data.package {
31 let project = workspace.select_member(&package)?;
32 ProjectUpload::new()
33 .project(project)
34 .config(&config)
35 .sign_protocol(data.sign_protocol.clone())
36 .progress(&bar)
37 .package_db(&package_db)
38 .upload_to_luarocks()
39 .await?;
40 } else {
41 for project in workspace.members() {
42 ProjectUpload::new()
43 .project(project)
44 .config(&config)
45 .sign_protocol(data.sign_protocol.clone())
46 .progress(&bar)
47 .package_db(&package_db)
48 .upload_to_luarocks()
49 .await?;
50 }
51 }
52
53 Ok(())
54}
55
56#[cfg(not(feature = "gpgme"))]
57pub async fn upload(data: Upload, config: Config) -> Result<()> {
58 let workspace = Workspace::current_or_err()?;
59 let progress = MultiProgress::new(&config);
60 let bar = progress.map(MultiProgress::new_bar);
61 let package_db = RemotePackageDB::from_config(&config, &bar).await?;
62
63 if let Some(package) = data.package {
64 let project = workspace.select_member(&package)?;
65 ProjectUpload::new()
66 .project(project)
67 .config(&config)
68 .progress(&bar)
69 .package_db(&package_db)
70 .upload_to_luarocks()
71 .await?;
72 } else {
73 for project in workspace.members() {
74 ProjectUpload::new()
75 .project(project)
76 .config(&config)
77 .progress(&bar)
78 .package_db(&package_db)
79 .upload_to_luarocks()
80 .await?;
81 }
82 }
83
84 Ok(())
85}