use anyhow::Result;
use std::collections::BTreeMap;
use std::path::Path;
use crate::config::{PublisherConfig, RegistryConfig};
pub mod cargo;
pub mod docker;
pub mod github_release_asset;
pub mod helm;
pub mod npm;
pub mod webhook;
#[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,
}
pub fn run(p: &PublisherConfig, ctx: &PublishContext<'_>) -> Result<PublishOutcome> {
match p {
PublisherConfig::Cargo {
registry,
allow_dirty,
no_verify,
} => cargo::run(registry.as_deref(), *allow_dirty, *no_verify, ctx),
PublisherConfig::Npm {
registry,
tag,
access,
} => npm::run(registry.as_deref(), tag.as_deref(), access.as_deref(), ctx),
PublisherConfig::Docker {
image,
tags,
platforms,
context,
dockerfile,
sign,
} => docker::run(image, tags, platforms, context, dockerfile, *sign, ctx),
PublisherConfig::Helm { chart, registry } => helm::run(chart, registry, ctx),
PublisherConfig::GithubReleaseAsset { path, display_name } => {
github_release_asset::run(path, display_name.as_deref(), ctx)
}
PublisherConfig::Webhook { url, body, headers } => {
webhook::run(url, body.as_ref(), headers, ctx)
}
}
}