1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//! # cargo-governor
//!
//! Machine-First Release Automation Tool for Rust workspaces.
//!
//! This library provides core functionality for:
//!
//! - **Version Analysis**: Analyzing commits to determine semantic version bumps
//! - **Dependency Management**: Building publication order from dependency graphs
//! - **Changelog Generation**: Creating and updating changelog files
//! - **Risk Assessment**: Evaluating release risks
//!
//! ## Modules
//!
//! - [`analyze_commits`] - Parse and analyze conventional commits
//! - [`analyze_bump_type`] - Determine version bump type from analysis
//! - [`build_dependency_graph`] - Create dependency graph from workspace
//! - [`build_publication_order`] - Determine optimal publish order
//! - [`update_changelog`] - Update CHANGELOG.md with new entries
//!
//! ## Examples
//!
//! ### Analyzing Commits
//!
//! ```
//! use cargo_governor::analyze_commits;
//! use governor_core::domain::commit::Commit;
//! use chrono::Utc;
//!
//! let commits = vec![
//! Commit::new(
//! "abc123".to_string(),
//! "feat: add new feature".to_string(),
//! "Alice".to_string(),
//! "alice@example.com".to_string(),
//! Utc::now(),
//! ),
//! ];
//!
//! let analysis = analyze_commits(&commits);
//! println!("Breaking: {}, Features: {}, Fixes: {}",
//! analysis.breaking.len(),
//! analysis.features.len(),
//! analysis.fixes.len()
//! );
//! ```
//!
//! ### Determining Version Bump
//!
//! ```
//! use cargo_governor::{analyze_commits, analyze_bump_type};
//! use governor_core::domain::commit::Commit;
//! use governor_core::domain::version::BumpType;
//! use chrono::Utc;
//!
//! let commits = vec![
//! Commit::new(
//! "abc123".to_string(),
//! "feat!: breaking API change".to_string(),
//! "Alice".to_string(),
//! "alice@example.com".to_string(),
//! Utc::now(),
//! ),
//! Commit::new(
//! "def456".to_string(),
//! "feat: add new feature".to_string(),
//! "Bob".to_string(),
//! "bob@example.com".to_string(),
//! Utc::now(),
//! ),
//! ];
//!
//! let analysis = analyze_commits(&commits);
//! let bump = analyze_bump_type(&analysis);
//! assert_eq!(bump, BumpType::Major);
//! ```
// Allow multiple versions from transitive dependencies
// Include modules needed for testing
// Include plan module functions that don't depend on CLI
// Re-export analyze module functions for testing
pub use ;
// Re-export bump module functions for testing
pub use ;
// Re-export plan module functions that don't depend on CLI
pub use ;
// Re-export publish module functions for testing
pub use check_if_published;
// Re-export error types
pub use ;