release-tool 0.2.1

Configuration-driven release lifecycle for computed-parameter repositories
Documentation
use crate::tag::CalendarTag;

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ReleaseIntent {
    Existing,
    New,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseCandidate {
    pub repository: String,
    pub commit: String,
    pub tag: CalendarTag,
    pub intent: ReleaseIntent,
    pub tag_already_sealed: bool,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct SealedRelease {
    pub release: ReleaseCandidate,
    pub tag_object: String,
}

#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub enum ArtifactIdentity {
    GithubReleaseAsset {
        name: String,
    },
    MavenPackage {
        group_id: String,
        artifact_id: String,
        version: String,
        extension: String,
    },
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TargetPlan {
    pub name: String,
    pub publisher: String,
    pub release: ReleaseCandidate,
    pub artifacts: Vec<ArtifactIdentity>,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct PreparedArtifact {
    pub identity: ArtifactIdentity,
    pub path: std::path::PathBuf,
    pub sha256: String,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ArtifactManifest {
    pub target: String,
    pub publisher: String,
    pub release: ReleaseCandidate,
    pub artifacts: Vec<PreparedArtifact>,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleasePlan {
    pub tool_version: String,
    pub release: ReleaseCandidate,
    pub targets: Vec<TargetPlan>,
}