mirror of
https://github.com/zoriya/octokit.net.git
synced 2025-12-06 07:16:09 +00:00
* add islocker filter to SeachIssuesRequest * update docs * Update docs/search.md with review suggestions Co-authored-by: Keegan Campbell <me@kfcampbell.com> Co-authored-by: notauserx <notauserx@users.noreply.github.com> Co-authored-by: Keegan Campbell <me@kfcampbell.com>
295 lines
8.0 KiB
Markdown
295 lines
8.0 KiB
Markdown
# Search
|
|
|
|
You can use Octokit to search for different sorts of data available
|
|
on the GitHub or GitHub Enterprise server:
|
|
|
|
- issues
|
|
- repositories
|
|
- code
|
|
- users
|
|
|
|
## Search Issues
|
|
|
|
A common scenario is to search for issues to triage:
|
|
|
|
```csharp
|
|
// you can also specify a search term here
|
|
var request = new SearchIssuesRequest();
|
|
|
|
// you can add individual repos to focus your search
|
|
request.Repos.Add("aspnet/home");
|
|
request.Repos.Add("dotnet", "core");
|
|
|
|
// or use a series of repositories
|
|
request.Repos = new RepositoryCollection {
|
|
"aspnet/home",
|
|
"dotnet/core"
|
|
};
|
|
```
|
|
|
|
There's many other options available here to tweak
|
|
your search criteria:
|
|
|
|
```csharp
|
|
// if you're searching for a specific term, you can
|
|
// focus your search on specific criteria
|
|
request.In = new[] {
|
|
IssueInQualifier.Title,
|
|
IssueInQualifier.Body
|
|
};
|
|
|
|
// you can restrict your search to issues or pull requests
|
|
request.Type = IssueTypeQualifier.Issue;
|
|
|
|
// you can filter on when the issue was created or updated
|
|
var aWeekAgo = DateTime.Now.Subtract(TimeSpan.FromDays(7));
|
|
request.Created = new DateRange(aWeekAgo, SearchQualifierOperator.GreaterThan)
|
|
|
|
// you can search for issues created by, assigned to
|
|
// or mentioning a specific user
|
|
request.Author = "davidfowl";
|
|
request.Assignee = "damianedwards";
|
|
request.Mentions = "shiftkey";
|
|
request.Commenter = "haacked";
|
|
|
|
// rather than setting all these, you can use this to find
|
|
// all the above for a specific user with this one-liner
|
|
request.Involves = "terrajobst";
|
|
|
|
// by default this will search on open issues, set this if
|
|
// you want to get all issues
|
|
request.State = ItemState.All;
|
|
// or to just search closed issues
|
|
request.State = ItemState.Closed;
|
|
|
|
// you can filter by the "Is" qualifier
|
|
// the enum IssueIsQualifier contains the supported values
|
|
// you can filter for locked issues like this:
|
|
request.Is = new List<IssueIsQualifier> {
|
|
IssueIsQualifier.Issue,
|
|
IssueIsQualifier.Locked
|
|
};
|
|
```
|
|
|
|
There's other options available to control how the results are returned:
|
|
|
|
```csharp
|
|
request.SortField = IssueSearchSort.Created;
|
|
request.Order = SortDirection.Descending;
|
|
|
|
// 100 results per page as default
|
|
request.PerPage = 30;
|
|
|
|
// set this when you want to fetch subsequent pages
|
|
request.Page = 2;
|
|
```
|
|
|
|
Once you've set the right parameters, execute the request:
|
|
|
|
```csharp
|
|
var repos = await client.Search.SearchIssues(request);
|
|
|
|
Console.WriteLine("Query has {0} matches.", repos.TotalCount);
|
|
Console.WriteLine("Response has {0} items.", repos.Items.Count);
|
|
```
|
|
|
|
## Search Pull Requests
|
|
|
|
Another scenario to consider is how to search broadly:
|
|
|
|
```csharp
|
|
var threeMonthsAgoIsh = DateTime.Now.Subtract(TimeSpan.FromDays(90));
|
|
|
|
// search for a specific term
|
|
var request = new SearchIssuesRequest("linux")
|
|
{
|
|
// only search pull requests
|
|
Type = IssueTypeQualifier.PR,
|
|
|
|
// search across open and closed PRs
|
|
State = ItemState.All,
|
|
|
|
// search repositories which contain code
|
|
// matching a given language
|
|
Language = Language.CSharp,
|
|
|
|
// focus on pull requests updated recently
|
|
Updated = new DateRange(threeMonthsAgoIsh, SearchQualifierOperator.GreaterThan)
|
|
};
|
|
```
|
|
|
|
## Search Repositories
|
|
|
|
To search for repositories using Octokit you need to create a `SearchRepositoriesRequest` and populate it with the search criteria.
|
|
|
|
```csharp
|
|
// Initialize a new instance of the SearchRepositoriesRequest class
|
|
var request = new SearchRepositoriesRequest();
|
|
|
|
// you can also specify a search term here
|
|
var request = new SearchRepositoriesRequest("bootstrap");
|
|
|
|
var result = await githubClient.Search.SearchRepo(request);
|
|
```
|
|
|
|
Now we can further filter our search.
|
|
|
|
```csharp
|
|
var request = new SearchRepositoriesRequest("mvc client side framework")
|
|
{
|
|
// lets find a library with over 1k stars
|
|
Stars = Range.GreaterThan(1000),
|
|
|
|
// we can specify how big we want the repo to be in kilobytes
|
|
Size = Range.GreaterThan(1),
|
|
|
|
// maybe we want the library to have over 50 forks?
|
|
Forks = Range.GreaterThan(50),
|
|
|
|
// we may want to include or exclude the forks too
|
|
Fork = ForkQualifier.IncludeForks,
|
|
|
|
// how about we restrict the language the library is written in?
|
|
Language = Language.JavaScript,
|
|
|
|
// maybe we want to include searching in the read me?
|
|
In = new[] { InQualifier.Readme },
|
|
|
|
// or go all out and search the readme, name or description?
|
|
In = new[] { InQualifier.Readme, InQualifier.Description, InQualifier.Name },
|
|
|
|
// how about searching for libraries created after a given date?
|
|
Created = DateRange.GreaterThan(new DateTime(2015, 1, 1)),
|
|
|
|
// or maybe check for repos that have been updated between a given date range?
|
|
Updated = DateRange.Between(new DateTime(2012, 4, 30), new DateTime(2012, 7, 4)),
|
|
|
|
// we can also restrict the owner of the repo if we so wish
|
|
User = "dhh"
|
|
};
|
|
```
|
|
|
|
We can also sort our results, the default sort direction is descending
|
|
|
|
```csharp
|
|
var request = new SearchRepositoriesRequest("mvc client side framework")
|
|
{
|
|
// sort by the number of stars
|
|
SortField = RepoSearchSort.Stars,
|
|
|
|
// or by forks?
|
|
SortField = RepoSearchSort.Forks,
|
|
|
|
// how about changing that sort direction?
|
|
Order = SortDirection.Ascending
|
|
}
|
|
```
|
|
|
|
## Search Code
|
|
|
|
To search for code using Octokit you need to create a `SearchCodeRequest` and populate it with the search criteria.
|
|
|
|
```csharp
|
|
// Initialize a new instance of the SearchCodeRequest class with a search term
|
|
var request = new SearchCodeRequest("auth");
|
|
|
|
// Or we can restrict the search to a specific repo
|
|
var request = new SearchCodeRequest("auth", "dhh", "rails");
|
|
|
|
var result = await githubClient.Search.SearchCode(request);
|
|
```
|
|
|
|
Now we can further filter our search.
|
|
|
|
```csharp
|
|
var request = new SearchCodeRequest("auth")
|
|
{
|
|
// we can restrict search to the file, path or search both
|
|
In = new[] { CodeInQualifier.File, CodeInQualifier.Path },
|
|
|
|
// how about we find a file based on a certain language
|
|
Language = Language.JavaScript,
|
|
|
|
// do we want to search forks too?
|
|
Forks = true,
|
|
|
|
// find files that are above 1000 bytes
|
|
Size = Range.GreaterThan(1000),
|
|
|
|
// we may want to restrict the search to the path of a file
|
|
Path = "app/assets",
|
|
|
|
// we may want to restrict the file based on file extension
|
|
Extensions = new[] { "json", "sql" },
|
|
|
|
// restrict search to a specific file name
|
|
FileName = "app.json",
|
|
|
|
// search within a users or orgs repo
|
|
Users = new[] { "johnDoe", "janeDoe" }
|
|
Organizations = new[] { "johnDoe", "janeDoe" }
|
|
};
|
|
```
|
|
|
|
We can also sort our results by indexed or leave as null for best match.
|
|
|
|
```csharp
|
|
var request = new SearchCodeRequest("dhh")
|
|
{
|
|
// sort by last indexed
|
|
SortField = CodeSearchSort.Indexed
|
|
}
|
|
```
|
|
|
|
## Search Users
|
|
|
|
To search for users using Octokit you need to create a `SearchUsersRequest` and populate it with the search criteria.
|
|
|
|
```csharp
|
|
// Initialize a new instance of the SearchUsersRequest class with a search term
|
|
var request = new SearchUsersRequest("dhh");
|
|
|
|
var result = await githubClient.Search.SearchUsers(request);
|
|
```
|
|
|
|
Now we can further filter our search.
|
|
|
|
```csharp
|
|
var request = new SearchUsersRequest("dhh")
|
|
{
|
|
// lets find user with over 1k followers
|
|
Followers = Range.GreaterThan(1000),
|
|
|
|
// find a user created after the date
|
|
Created = DateRange.GreaterThan(new DateTime(2015, 1, 1)),
|
|
|
|
// we can search the location of a user, found a martian anyone?
|
|
Location = "Mars",
|
|
|
|
// find a user that has over 100 repos
|
|
Repositories = Range.GreaterThan(100),
|
|
|
|
// how about we find users that have a repo that match a certain language
|
|
Language = Language.JavaScript,
|
|
|
|
// we may want to restrict to orgs or users only
|
|
AccountType = AccountSearchType.Org,
|
|
|
|
// maybe we want to peek the username only?
|
|
In = new[] { UserInQualifier.Username },
|
|
|
|
// or go all out and search username, email and fullname?
|
|
In = new[] { UserInQualifier.Username, UserInQualifier.Email, UserInQualifier.Fullname },
|
|
};
|
|
```
|
|
|
|
We can also sort our results, by Followers, Repositories, Joined or leave as null for best match.
|
|
|
|
```csharp
|
|
var request = new SearchUsersRequest("dhh")
|
|
{
|
|
// sort by the number of followers
|
|
SortField = UsersSearchSort.Followers
|
|
}
|
|
```
|