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 auth;
40pub mod client;
41pub mod issues;
42pub mod labels;
43pub mod projects;
44pub mod pull_requests;
45
46// Re-export main types
47pub use auth::{check_gh_cli_status, discover_token, validate_token_format, GhCliStatus};
48pub use client::GitHubClient;
49pub use labels::Label;
50pub use projects::{ContentType, KPIReport, ProjectItem};
51
52// Re-export commonly used types from miyabi-types
53pub use miyabi_types::issue::{Issue, IssueState, IssueStateGithub, PRResult, PRState};
54
55#[cfg(test)]
56mod tests {
57 use super::*;
58
59 #[test]
60 fn test_lib_exports() {
61 // Verify all exports are accessible
62 let _: Option<GitHubClient> = None;
63 let _: Option<Label> = None;
64 let _: Option<Issue> = None;
65 let _: Option<IssueState> = None;
66 }
67}