2 releases

0.1.1 Aug 31, 2023
0.1.0 Apr 11, 2023

#10 in #github-webhook

Download history 14/week @ 2023-12-17 19/week @ 2023-12-24 12/week @ 2024-01-07 14/week @ 2024-01-14 5/week @ 2024-01-21 3/week @ 2024-01-28 16/week @ 2024-02-04 27/week @ 2024-02-11 102/week @ 2024-02-18 79/week @ 2024-02-25 32/week @ 2024-03-03 73/week @ 2024-03-10 36/week @ 2024-03-17 50/week @ 2024-03-24 85/week @ 2024-03-31

248 downloads per month

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
~468K SLoC