Skip to main content

releasaurus_core/
lib.rs

1//! # releasaurus-core
2//!
3//! Core library powering [Releasaurus] release automation. Use this
4//! crate to embed the full release pipeline in your own Rust tooling
5//! without taking a dependency on the CLI binary.
6//!
7//! ## Architecture
8//!
9//! ```text
10//! Orchestrator        (pipeline entry point)
11//!   └─ OrchestratorConfig   (merged settings)
12//!   └─ ForgeManager         (caching + dry-run wrapper)
13//!        └─ Forge           (GitHub / GitLab / Gitea / Local)
14//! ```
15//!
16//! ## Quick start
17//!
18//! ```rust,no_run
19//! use std::{collections::HashMap, rc::Rc};
20//! use releasaurus_core::{
21//!     forge::{
22//!         github::Github,
23//!         manager::{ForgeManager, ForgeOptions},
24//!         config::{RepoUrl, Scheme},
25//!     },
26//!     orchestrator::{
27//!         Orchestrator,
28//!         config::{
29//!             CommitModifiers, GlobalOverrides, OrchestratorConfig,
30//!         },
31//!         package::resolved::{
32//!             ResolvedPackage, ResolvedPackageHash,
33//!         },
34//!     },
35//! };
36//!
37//! #[tokio::main]
38//! async fn main() -> releasaurus_core::error::Result<()> {
39//!     let url = RepoUrl {
40//!         scheme: Scheme::Https,
41//!         host: "github.com".into(),
42//!         owner: "my-org".into(),
43//!         name: "my-repo".into(),
44//!         path: "my-org/my-repo".into(),
45//!         port: None,
46//!         token: None,
47//!     };
48//!
49//!     // 1. Build a forge client.
50//!     let forge = Github::new(url, None).await?;
51//!     let forge_manager = ForgeManager::new(
52//!         Box::new(forge),
53//!         ForgeOptions { dry_run: false },
54//!     );
55//!
56//!     // 2. Load releasaurus.toml from the repository.
57//!     let config = Rc::new(
58//!         forge_manager.load_config(None).await?,
59//!     );
60//!
61//!     // 3. Build the orchestrator config.
62//!     let orch_config = Rc::new(
63//!         OrchestratorConfig::builder()
64//!             .toml_config(Rc::clone(&config))
65//!             .repo_name(forge_manager.repo_name())
66//!             .repo_default_branch(
67//!                 forge_manager.default_branch(),
68//!             )
69//!             .release_link_base_url(
70//!                 forge_manager.release_link_base_url().clone(),
71//!             )
72//!             .compare_link_base_url(
73//!                 forge_manager.compare_link_base_url().clone(),
74//!             )
75//!             .global_overrides(GlobalOverrides::default())
76//!             .package_overrides(HashMap::new())
77//!             .commit_modifiers(CommitModifiers::default())
78//!             .build()?,
79//!     );
80//!
81//!     // 4. Resolve each package declared in releasaurus.toml.
82//!     let mut resolved = vec![];
83//!     for pkg in config.packages.iter() {
84//!         resolved.push(
85//!             ResolvedPackage::builder()
86//!                 .orchestrator_config(Rc::clone(&orch_config))
87//!                 .package_config(pkg.clone())
88//!                 .build()?,
89//!         );
90//!     }
91//!
92//!     // 5. Build the orchestrator and run the pipeline.
93//!     let fm = Rc::new(forge_manager);
94//!     let orchestrator = Orchestrator::builder()
95//!         .config(Rc::clone(&orch_config))
96//!         .package_configs(Rc::new(
97//!             ResolvedPackageHash::new(resolved)?,
98//!         ))
99//!         .forge(Rc::clone(&fm))
100//!         .build()?;
101//!
102//!     orchestrator.create_release_prs(None).await
103//! }
104//! ```
105//!
106//! ## Modules
107//!
108//! - [`analyzer`] — conventional commit parsing and version
109//!   calculation
110//! - [`config`] — TOML configuration types and deserialization
111//! - [`error`] — [`ReleasaurusError`][error::ReleasaurusError]
112//!   and [`Result`][error::Result]
113//! - [`file_loader`] — trait for loading files from a forge or
114//!   filesystem
115//! - [`forge`] — [`Forge`][forge::traits::Forge] trait and
116//!   platform implementations (GitHub, GitLab, Gitea, Local)
117//! - [`orchestrator`] — all release operations flow through
118//!   [`Orchestrator`][orchestrator::Orchestrator]
119//! - [`updater`] — language-specific version file updaters
120//!
121//! [Releasaurus]: https://releasaurus.rgon.io
122
123pub mod analyzer;
124pub mod config;
125pub mod error;
126pub mod file_loader;
127pub mod forge;
128pub mod orchestrator;
129pub mod updater;