Skip to main content

lux_cli/
upload.rs

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    /// The protocol to use when signing upload artefacts
14    #[cfg(feature = "gpgme")]
15    #[arg(long, default_value_t)]
16    sign_protocol: SignatureProtocol,
17
18    /// Package to upload.
19    #[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}