diff --git a/readme.md b/readme.md index a3b2eb1f..87aa821f 100644 --- a/readme.md +++ b/readme.md @@ -1,31 +1,41 @@ -# Octokit.GraphQL +

Octokit.GraphQL.NET

-[![Build status](https://ci.appveyor.com/api/projects/status/falhvlth7og0nkw4/branch/main?svg=true)](https://ci.appveyor.com/project/github-windows/octokit-graphql/branch/main) -[![codecov](https://codecov.io/gh/octokit/octokit.graphql.net/branch/main/graph/badge.svg)](https://codecov.io/gh/octokit/octokit.graphql.net) -[![NuGet](http://img.shields.io/nuget/v/Octokit.GraphQL.svg)](https://www.nuget.org/packages/Octokit.GraphQL) +

+ + CI Status + + CodeCov Status + + NuGet +

-**Note**: This software is currently beta. There are few things left, and there might be bugs - be warned! +Octokit.GraphQL.NET gives you access to the GitHub GraphQL API from within the .NET Framework. It exposes the GitHub GraphQL API as a strongly-typed LINQ-like API, aiming to follow the GraphQL query syntax as closely as possible, giving the benefits of strong typing across the world's leading programming framework, .NET. -Octokit.GraphQL gives you access to the GitHub GraphQL API from .NET. It exposes the GitHub GraphQL API as a strongly-typed LINQ-like API, aiming to follow the GraphQL query syntax as closely as possible, which giving the benefits of strong typing in your favorite .NET language. +> [!NOTE] +> This software is currently in beta. There are few things left, and there might be bugs - be warned! -## Documentation +## Getting started -You can find our documentation [here](docs/readme.md). +The full documentation of GraphQL API can be found on [GitHub Docs](https://docs.github.com/graphql/overview): -## Installing from Nuget +- [GraphQL public schema](https://docs.github.com/graphql/overview/public-schema) +- [GraphQL explorer](https://docs.github.com/graphql/overview/explorer) +- [Octokit.GraphQL.NET API spec](https://github.com/octokit/octokit.graphql.net/tree/main/docs) -``` +To install the package from the command line, run the following command: + +```ps1 Install-Package Octokit.GraphQL -IncludePrerelease ``` -## Usage Example +## Usage scenarios -```csharp +```cs using Octokit.GraphQL; using static Octokit.GraphQL.Variable; -var productInformation = new ProductHeaderValue("YOUR_PRODUCT_NAME", "YOUR_PRODUCT_VERSION"); -var connection = new Connection(productInformation, YOUR_OAUTH_TOKEN); +// Authenticate with a PAT with a scope 'read:user' +var connection = new Connection(new("Octokit.GraphQL.Net.SampleApp", "1.0"), "LOGGED_IN_GITHUB_USER_TOKEN"); var query = new Query() .RepositoryOwner(Var("owner")) @@ -50,52 +60,85 @@ var result = await connection.Run(query, vars); Console.WriteLine(result.Login + " & " + result.Name + " Rocks!"); ``` -```csharp +```cs using Octokit.GraphQL; using Octokit.GraphQL.Model; using System; using System.Linq; using System.Threading.Tasks; -namespace Octokit -{ - class Program +// Authenticate with a PAT with a scope 'read:user' +var connection = new Connection(new("Octokit.GraphQL.Net.SampleApp", "1.0"), "LOGGED_IN_GITHUB_USER_TOKEN"); + +// A query to list out who you are actively sponsoring +// That auto pages through all sponsors +var query = new Query() + .Viewer + .SponsorshipsAsSponsor() + .AllPages() + .Select(sponsoring => new { - static async Task Main(string[] args) - { - var productInformation = new ProductHeaderValue("ExampleCode", "1.0"); - - // Personal Access Token - needs a scope of 'read:user' - var connection = new Connection(productInformation, "LOGGED_IN_GITHUB_USER_TOKEN"); - - // A query to list out who you are actively sponsoring - // That auto pages through all sponsors - var query = new Query() - .Viewer - .SponsorshipsAsSponsor() - .AllPages() - .Select(sponsoring => new - { - User = sponsoring.Sponsorable - .Cast() - .Select(x => new { - x.Login, - x.Name, - x.Id - }) - .Single() - }) - .Compile(); - - var result = await connection.Run(query); - - // Sponsoring 'warrenbuckley' ? - var activeSponsor = result.SingleOrDefault(x => x.User.Login.ToLowerInvariant() == "warrenbuckley"); - if(activeSponsor != null) + User = sponsoring.Sponsorable + .Cast() + .Select(x => new { - Console.WriteLine("Thanks for sponsoring Warren"); - } - } - } + x.Login, + x.Name, + x.Id + }.Single() + }).Compile(); + +// Queries from the GraphQL API end point +var result = await connection.Run(query); + +// Check if sponsoring 'warrenbuckley' +var activeSponsor = result.SingleOrDefault(x => x.User.Login.ToLowerInvariant() == "warrenbuckley"); +if(activeSponsor != null) +{ + Console.WriteLine("Thanks for sponsoring Warren"); } ``` + +## Contributing & Feedback + +There are multiple ways to participate in the community: + +- Upvote popular feature requests +- [Submit a new feature](https://github.com/octokit/octokit.graphql.net/pulls) +- [File bugs and feature requests](https://github.com/octokit/octokit.graphql.net/issues/new/choose). +- Review source [code changes](https://github.com/octokit/octokit.graphql.net/commits) + +## Building from source + +### Prerequisites + +1. Ensure you have following components: + - [Git](https://git-scm.com/) + - [Visual Studio and the .NET SDK](https://visualstudio.microsoft.com/vs/) +2. Clone the repository: + ```git + git clone https://github.com/octokit/octokit.graphql.net + ``` + +### Building the project + +- Open `Octokit.GraphQL.sln`. +- Set the Startup Project to `Octokit.GraphQL` or a test project as appropriate +- Build with `DEBUG|x64` (or `DEBUG|Any CPU`) + +### Codebase structure + +``` +. +├──Scripts // Code quality scripts +│ └──configure-integration-tests.ps1 // Integration tests configuration script +├──Tools // Code quality tools +│ └──Generate // GraphQL .NET entity generator +├──Octokit.GraphQL // Main API data contracts library +├──Octokit.GraphQL.Core // Octokit core code +├──Octokit.GraphQL.Core.Generation // Core entity generator tools +├──Octokit.GraphQL.Core.Generation.UnitTests // Core entity generator unit tests +├──Octokit.GraphQL.Core.UnitTests // Octokit core unit tests +├──Octokit.GraphQL.IntegrationTests // Octokit integration tests +└──Octokit.GraphQL.UnitTests // Octokit unit tests +```