miyabi_github/
lib.rs

1//! GitHub API integration for Miyabi
2//!
3//! This crate provides a high-level wrapper around the Octocrab GitHub API client,
4//! tailored for Miyabi's autonomous development workflow.
5//!
6//! # Features
7//!
8//! - **Issue Management**: Create, read, update, close issues
9//! - **Label Management**: Full CRUD operations for labels, bulk sync for 53-label system
10//! - **Pull Request Management**: Create, merge, close PRs
11//! - **State-based Queries**: Filter issues by Miyabi state labels
12//! - **Type Safety**: Uses miyabi-types for consistent type definitions
13//!
14//! # Example
15//!
16//! ```no_run
17//! use miyabi_github::GitHubClient;
18//! use miyabi_types::issue::IssueState;
19//!
20//! #[tokio::main]
21//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
22//!     let client = GitHubClient::new("ghp_xxx", "owner", "repo")?;
23//!
24//!     // Get issues in "pending" state
25//!     let pending = client.get_issues_by_state(IssueState::Pending).await?;
26//!     println!("Found {} pending issues", pending.len());
27//!
28//!     // Create a new issue
29//!     let issue = client.create_issue(
30//!         "Implement new feature",
31//!         Some("Feature description here")
32//!     ).await?;
33//!     println!("Created issue #{}", issue.number);
34//!
35//!     Ok(())
36//! }
37//! ```
38
39pub mod client;
40pub mod issues;
41pub mod labels;
42pub mod projects;
43pub mod pull_requests;
44
45// Re-export main types
46pub use client::GitHubClient;
47pub use labels::Label;
48pub use projects::{ContentType, KPIReport, ProjectItem};
49
50// Re-export commonly used types from miyabi-types
51pub use miyabi_types::issue::{Issue, IssueState, IssueStateGithub, PRResult, PRState};
52
53#[cfg(test)]
54mod tests {
55    use super::*;
56
57    #[test]
58    fn test_lib_exports() {
59        // Verify all exports are accessible
60        let _: Option<GitHubClient> = None;
61        let _: Option<Label> = None;
62        let _: Option<Issue> = None;
63        let _: Option<IssueState> = None;
64    }
65}