Skip to main content

lux_cli/
upload.rs

1use clap::Args;
2use eyre::{OptionExt, Result};
3use lux_lib::{
4    config::Config, progress::MultiProgress, project::Project, remote_package_db::RemotePackageDB,
5    upload::ProjectUpload,
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
19#[cfg(feature = "gpgme")]
20pub async fn upload(data: Upload, config: Config) -> Result<()> {
21    let project = Project::current()?.ok_or_eyre("No project found")?;
22
23    let progress = MultiProgress::new(&config);
24    let bar = progress.map(MultiProgress::new_bar);
25    let package_db = RemotePackageDB::from_config(&config, &bar).await?;
26    ProjectUpload::new()
27        .project(project)
28        .config(&config)
29        .sign_protocol(data.sign_protocol)
30        .progress(&bar)
31        .package_db(&package_db)
32        .upload_to_luarocks()
33        .await?;
34
35    Ok(())
36}
37
38#[cfg(not(feature = "gpgme"))]
39pub async fn upload(_data: Upload, config: Config) -> Result<()> {
40    let project = Project::current()?.ok_or_eyre("No project found")?;
41    let progress = MultiProgress::new(&config);
42    let bar = progress.map(MultiProgress::new_bar);
43    let package_db = RemotePackageDB::from_config(&config, &bar).await?;
44
45    ProjectUpload::new()
46        .project(project)
47        .config(&config)
48        .progress(&bar)
49        .package_db(&package_db)
50        .upload_to_luarocks()
51        .await?;
52
53    Ok(())
54}