governor-core 1.10.3

Core domain and application logic for cargo-governor
Documentation

governor-core

Core domain library for cargo-governor, providing fundamental entities and traits for release automation.

Overview

This library contains the pure domain layer and core abstractions used throughout the cargo-governor ecosystem. It follows Domain-Driven Design (DDD) principles with Clean Architecture.

Features

  • Domain Entities: Pure data structures for Version, Commit, Release, Crate, Workspace, etc.
  • Core Traits: Abstractions for SourceControl, VersionStrategy, WorkflowStep, CheckpointStore
  • Zero Unsafe Code: Entirely safe Rust with forbid(unsafe_code)
  • Semantic Versioning: Full support for semantic version parsing and bumping
  • Conventional Commits: Parse and analyze conventional commit messages

Modules

Domain (domain)

Core domain entities following DDD principles:

  • [version] - Semantic versioning with bump types (major, minor, patch, none)
  • [commit] - Git commit with conventional commit parsing
  • [changelog] - Changelog generation and management
  • [release] - Release planning and execution
  • [crate_entity] - Crate metadata and dependencies
  • [workspace] - Workspace metadata and status
  • [dependency] - Dependency information

Traits (traits)

Core abstractions for infrastructure implementations:

  • [version_strategy] - Strategy pattern for version analysis
  • [source_control] - Git/VCS operations abstraction
  • [workflow_step] - Workflow execution step abstraction
  • [checkpoint_store] - State persistence for resume capability
  • [reversible_operation] - Operations with rollback support

Usage

use governor_core::{
    domain::{
        version::{SemanticVersion, BumpType},
        commit::{Commit, CommitType}
    },
    traits::version_strategy::{VersionStrategy, ConventionalStrategy},
};

// Parse a version
let version = SemanticVersion::parse("1.0.0").unwrap();
let new_version = version.bump(BumpType::Minor);

// Create a commit
let commit = Commit::new(
    "abc123".to_string(),
    "feat: add new feature".to_string(),
    "Author".to_string(),
    "author@example.com".to_string(),
    chrono::Utc::now(),
);

// Analyze commits for version bump
let strategy = ConventionalStrategy::new();
let recommendation = strategy.analyze(&context).await?;

Design Principles

  1. Pure Domain: Domain entities have no external dependencies
  2. Trait-Based Abstractions: All external interactions through traits
  3. Serialization Support: All entities support serde serialization
  4. Error Handling: Comprehensive error types with thiserror

License

MIT OR Apache-2.0