use anyhow::Result;
use std::collections::BTreeMap;
use std::path::Path;
use crate::config::{PublisherConfig, RegistryConfig};
pub mod cargo;
pub mod npm;
#[allow(dead_code)]
pub struct PublishContext<'a> {
pub package_name: &'a str,
pub package_path: &'a Path,
pub new_version: &'a str,
pub tag: &'a str,
pub registries: &'a BTreeMap<String, RegistryConfig>,
pub dry_run: bool,
pub verbose: bool,
}
#[derive(Debug)]
pub enum PublishOutcome {
Published { url: Option<String> },
Skipped { reason: String },
DryRun,
NotImplementedYet,
}
pub fn run(p: &PublisherConfig, ctx: &PublishContext<'_>) -> Result<PublishOutcome> {
match p {
PublisherConfig::Cargo {
registry,
allow_dirty,
} => cargo::run(registry.as_deref(), *allow_dirty, ctx),
PublisherConfig::Npm {
registry,
tag,
access,
} => npm::run(registry.as_deref(), tag.as_deref(), access.as_deref(), ctx),
PublisherConfig::Docker { .. }
| PublisherConfig::Helm { .. }
| PublisherConfig::GithubReleaseAsset { .. }
| PublisherConfig::Webhook { .. } => Ok(PublishOutcome::NotImplementedYet),
}
}