Giter Site home page Giter Site logo

octokit's Introduction

Octokit: .NET SDK

Build and test .NET SDK CodeQL Publish Release to NuGet

An "alpha" version of a generated .NET SDK in C# from GitHub's OpenAPI spec, built on Kiota. View on NuGet.

How do I use it?

Installation

To install the package, you can use either of the following options:

  • In Visual Studio, from the Package Explorer, search for GitHub.Octokit.SDK, or
  • Type Install-Package GitHub.Octokit.SDK into the Package Manager Console, or
  • Type dotnet add ./path/to/myproject.csproj package GitHub.Octokit.SDK in a terminal (replace ./path/to/myproject.csproj by the path to the *.csproj file you want to add the dependency)

Make your first request

using GitHub;
using GitHub.Octokit.Client;
using GitHub.Octokit.Authentication;

var token = Environment.GetEnvironmentVariable("GITHUB_TOKEN") ?? "";
var request = RequestAdapter.Create(new TokenAuthenticationProvider("Octokit.Gen", token));
var gitHubClient = new GitHubClient(request);

var pullRequests = await gitHubClient.Repos["octokit"]["octokit.net"].Pulls.GetAsync();

foreach (var pullRequest in pullRequests)
{
    Console.WriteLine($"#{pullRequest.Number} {pullRequest.Title}");
}

Important

This SDK is not yet stable. Breaking changes may occur at any time.

Authentication

This SDK supports Personal Access Tokens (classic), fine-grained Personal Access Tokens, and GitHub Apps authentication.

In order to use either type of Personal Access token, you can use the TokenAuthProvider constructor option when constructing a new token provider, like so:

    var tokenProvider = new TokenProvider(Environment.GetEnvironmentVariable("GITHUB_TOKEN") ?? "");
    var adapter = RequestAdapter.Create(new TokenAuthProvider(tokenProvider));
    var gitHubClient = new GitHubClient(adapter);

In order to authenticate as a GitHub App, you can use the AppInstallationAuthProvider constructor option:

    var githubAppTokenProvider = new GitHubAppTokenProvider();
    var rsa = RSA.Create();
    rsa.ImportFromPem(PRIVATE_KEY_PATH);

    var aiAccessTokenProvider = new AppInstallationTokenProvider(CLIENT_ID, rsa, INSTALLATION_ID, githubAppTokenProvider);
    var aiAdapter = RequestAdapter.Create(new AppInstallationAuthProvider(aiAccessTokenProvider));
    var aiGitHubClient = new GitHubClient(aiAdapter);

To see more detailed examples, view the cli/ directory in this repo.

โš ๏ธ Note: There are three types of GitHub App authentication:

  1. As the App itself (meta endpoints)
  2. As an App installation
  3. On behalf of a user

Authenticating on behalf of a user is not supported in an SDK, as it requires a UI authentication flow with redirects. This SDK supports authenticating as the App itself and as an App installation.

Note that the SDK does not yet support authenticating as the App itself and as an App installation using the same client transparently to the user. Authenticating as the App itself requires creating a JSON Web Token (JWT) and using that as token authentication. For helpers to create and sign a JWT in .NET, you may use the helpers in the GitHubAppTokenProvider class.

Why a generated SDK?

We want to...

  1. provide 100% coverage of the API in our SDK
  2. use this as a building block for future SDK tooling

Why .NET?

We have a substantial userbase that uses .NET and we wanted them to get access to our generated SDK as early as possible.

How can I report on my experience or issues with the SDK?

Please use this project's issues!

Source organization

Currently this project is fairly simple (we hope it can stay that way). All of the package based source is contained in the GitHub folder.

  • Authentication - everything related to authenticating requests
  • Client - the logic for constructing the plumbing to interact with the GitHub API
  • Middleware - this represents object and handlers that can mutate the request and are "injected" into the request/response flow.
  • Octokit - types which represent request/response objects

Testing

  • Run tests: dotnet test
  • Generate test coverage: dotnet test -p:CollectCoverage=true -p:CoverletOutput=coverage/ -p:CoverletOutputFormat=opencover -p:ExcludeByFile="$(pwd)/src/GitHub/**/*.cs"
  • Generate test report: dotnet reportgenerator -targetdir:$(pwd)/test/coverage/Report/ -reports:$(pwd)/test/coverage/coverage.opencover.xml
    • Note that this requires installing ReportGenerator, whose installation instructions can be found here
    • We're using the dotnet-reportgenerator-globaltool, so follow that set of installation instructions
  • The test report can be viewed by opening the generated report file (logged to CLI output, something like /path/to/your/repo/dotnet-sdk/test/coverage/Report/index.html) in a browser

More details on this SDK and repo

octokit's People

Contributors

octokitbot avatar nickfloyd avatar kfcampbell avatar ievangelist avatar baywet avatar iq220 avatar

Forkers

thebanksmoney

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.