2 releases

0.1.1 Aug 31, 2023
0.1.0 Apr 11, 2023

#297 in Configuration

Download history 47/week @ 2023-10-29 40/week @ 2023-11-05 43/week @ 2023-11-12 50/week @ 2023-11-19 54/week @ 2023-11-26 45/week @ 2023-12-03 45/week @ 2023-12-10 45/week @ 2023-12-17 51/week @ 2023-12-24 25/week @ 2023-12-31 34/week @ 2024-01-07 42/week @ 2024-01-14 39/week @ 2024-01-21 32/week @ 2024-01-28 47/week @ 2024-02-04 56/week @ 2024-02-11

174 downloads per month
Used in 10 crates (via octocrate)

MIT license

11KB
269 lines

Octocrate (Octocat + Crate)

A Github API library based on Rust

octocrate MIT

Install

Install Octocrate with cargo:

cargo add octocrate

Or modify your Cargo.toml to include octocrate as a dependency:

[dependencies]
octocrate = "0.1.2"

Usage

Github API

use octocrate::{GithubPersonalAccessToken, GithubAPI};

#[tokio::main]
async fn main() {
    let token = GithubPersonalAccessToken::new("YOUR_PERSONAL_ACCESS_TOKEN");

    let api = GithubAPI::with_token(token);

    let repositories = api
        .repositories
        .list_user_repositories("panghu-huang")
        .send()
        .await
        .unwrap();

    println!("Repositories: {:#?}", repositories);
}

Github App

use octocrate::{GithubApp};

#[tokio::main]
async fn main() {
  let app = GithubApp::builder()
    .app_id("GITHUB_APP_ID")
    .private_key("GITHUB_APP_PRIVATE_KEY")
    .build()
    .unwrap();

  let installation = app
    .get_repository_installation("panghu-huang", "octocrate")
    .await
    .unwrap();

  let api = app.get_api(installation.id).await.unwrap();

  let repository = api
    .repositories
    .get_repository("panghu-huang", "octocrate")
    .send()
    .await
    .unwrap();

  println!("Repository: {:?}", repository);
}

Github Webhook Server

Here's a simple example showing how to create a Github webhook server and handle the issue comment event. The webhook-server feature needs to be enabled

use octocrate::{GithubApp, GithubWebhookEvent, WebhookServer};

#[tokio::main]
async fn main() {
  let mut server = WebhookServer::builder()
    .app_id("GITHUB_APP_ID")
    .private_key("GITHUB_APP_PRIVATE_KEY")
    .build()
    .unwrap();

  server
    .on_webhook_event(|event, api| {
      match event {
        GithubWebhookEvent::IssueComment(evt) => {
          // ... handle issue comment event
        }
        _ => {}
      };

      Ok(())
    })
    .start()
    .await
    .unwrap();
}

The github_app.start() method opens a web server to listen for webhook requests from Github, the default path is /github/webhook

Examples

For more examples, please refer to: examples

Dependencies

~11–25MB
~474K SLoC