octonode
octonode is a library for nodejs to access the github v3 api
Installation
npm install octonode
Usage
var github = require('octonode');
var ghme = client.me();
var ghuser = client.user('pksunkara');
var ghrepo = client.repo('pksunkara/hub');
var ghorg = client.org('flatiron');
var ghissue = client.issue('pksunkara/hub', 37);
var ghmilestone = client.milestone('pksunkara/hub', 37);
var ghlabel = client.label('pksunkara/hub', 'todo');
var ghpr = client.pr('pksunkara/hub', 37);
var ghrelease = client.release('pksunkara/hub', 37);
var ghgist = client.gist();
var ghteam = client.team(37);
var ghproject = client.project(37);
var ghnotification = client.notification(37);
var ghsearch = client.search();
Build a client which accesses any public information
var client = github.client();
client.get('/users/pksunkara', {}, function (err, status, body, headers) {
console.log(body);
});
Build a client from an access token
var client = github.client('some_access_token');
client.get('/user', {}, function (err, status, body, headers) {
console.log(body);
});
Build a client from a different host
You can configure the protocol
, hostname
and port
to use. For example to connect to a GitHub Enterprise instance.
var client = github.client('some_access_token', {
hostname: 'mydomain.com/api/v3'
});
client.get('/user', {}, function (err, status, body, headers) {
console.log(body);
});
Request Options
Request options can be set by setting defaults on the client. (e.g. Proxies)
var client = github.client();
client.requestDefaults['proxy'] = 'https://myproxy.com:1085'
These options are passed through to request
, see their API here: https://github.com/request/request#requestoptions-callback
Proxies
You can set proxies dynamically by using the example above, but Octonode will respect environment proxies by default. Just set this using:
export HTTP_PROXY='https://myproxy.com:1085'
if you are using the command line
Many of the below use cases use parts of the above code
Conditional requests
The client supports conditional requests and helps you respecting rate limits by caching information that hasn't changed.
You can add the If-None-Match
header to each request calling the conditional
method.
var client = github.client();
github.repo().conditional('ETAG').issues();
More info about conditional requests can be founded here.
Authentication
Authenticate to github in cli mode (desktop application)
Note: Ensure that the scopes argument is an object containing the required note
property. For two-factor authentication add the One Time Password otp
key with its corresponding code to the configuration object.
var scopes = {
'scopes': ['user', 'repo', 'gist'],
'note': 'admin script'
};
github.auth.config({
username: 'pksunkara',
password: 'password'
}).login(scopes, function (err, id, token, headers) {
console.log(id, token);
});
Authenticate to github in web mode (web application)
var http = require('http')
, url = require('url')
, qs = require('querystring')
, github = require('octonode');
var auth_url = github.auth.config({
id: 'mygithubclientid',
secret: 'mygithubclientsecret',
apiUrl: 'https://optional-internal-github-enterprise/api/v3',
webUrl: 'https://optional-internal-github-enterprise'
}).login(['user', 'repo', 'gist']);
var state = auth_url.match(/&state=([0-9a-z]{32})/i);
http.createServer(function (req, res) {
uri = url.parse(req.url);
if (uri.pathname=='/login') {
res.writeHead(302, {'Content-Type': 'text/plain', 'Location': auth_url})
res.end('Redirecting to ' + auth_url);
}
else if (uri.pathname=='/auth') {
var values = qs.parse(uri.query);
if (!state || state[1] != values.state) {
res.writeHead(403, {'Content-Type': 'text/plain'});
res.end('');
} else {
github.auth.login(values.code, function (err, token, headers) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(token);
});
}
} else {
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end('');
}
}).listen(3000);
console.log('Server started on 3000');
Rate Limiting
You can also check your rate limit status by calling the following.
client.limit(function (err, left, max, reset) {
console.log(left);
console.log(max);
console.log(reset);
});
API Callback Structure
All the callbacks for the following will take first an error argument, then a data argument, like this:
ghme.info(function(err, data, headers) {
console.log("error: " + err);
console.log("data: " + data);
console.log("headers:" + headers);
});
Async / Promises
If you would like to work with promises rather than callbacks, you can call the promise based version of any of the api calls by appending Async
to the function call.
For example prs()
becomes prsAsync()
like this:
async function getPullRequests () {
const client = github.client(config.githubAccessToken)
const repo = client.repo('pksunkara/octonode')
const result = await repo.prsAsync({ per_page: 100 })
return result[0]
}
If a function is said to be supporting pagination, then that function can be used in many ways as shown below. Results from the function are arranged in pages.
The page argument is optional and is used to specify which page of issues to retrieve.
The perPage argument is also optional and is used to specify how many issues per page.
ghrepo.issues(callback);
ghrepo.issues(2, 100, callback);
ghrepo.issues(10, callback);
ghrepo.issues({
page: 2,
per_page: 100,
state: 'closed'
}, callback);
Github authenticated user api
Token/Credentials required for the following:
Get information about the user (GET /user)
ghme.info(callback);
Update user profile (PATCH /user)
ghme.update({
"name": "monalisa octocat",
"email": "octocat@github.com",
}, callback);
Get emails of the user (GET /user/emails)
ghme.emails(callback);
Set emails of the user (POST /user/emails)
ghme.emails(['new1@ma.il', 'new2@ma.il'], callback);
ghme.emails('new@ma.il', callback);
Delete emails of the user (DELETE /user/emails)
ghme.emails(['new1@ma.il', 'new2@ma.il']);
ghme.emails('new@ma.il');
Get the followers of the user (GET /user/followers)
ghme.followers(callback);
Get users whom the user is following (GET /user/following)
This query supports pagination.
ghme.following(callback);
Check if the user is following a user (GET /user/following/marak)
ghme.following('marak', callback);
Follow a user (PUT /user/following/marak)
ghme.follow('marak');
Unfollow a user (DELETE /user/following/marak)
ghme.unfollow('marak');
Get public keys of a user (GET /user/keys)
ghme.keys(callback);
Get a single public key (GET /user/keys/1)
ghme.keys(1, callback);
Create a public key (POST /user/keys)
ghme.keys({"title":"laptop", "key":"ssh-rsa AAA..."}, callback);
Update a public key (PATCH /user/keys/1)
ghme.keys(1, {"title":"desktop", "key":"ssh-rsa AAA..."}, callback);
Delete a public key (DELETE /user/keys/1)
ghme.keys(1);
Get the starred repos for the user (GET /user/starred)
This query supports pagination.
ghme.starred(callback);
Check if you have starred a repository (GET /user/starred/pksunkara/octonode)
ghme.checkStarred('flatiron/flatiron', callback);
Star a repository (PUT /user/starred/pksunkara/octonode)
ghme.star('flatiron/flatiron');
Unstar a repository (DELETE /user/starred/pksunkara/octonode)
ghme.unstar('flatiron/flatiron');
Get the subscriptions of the user (GET /user/subscriptions)
This query supports pagination.
ghme.watched(callback);
List your public and private organizations (GET /user/orgs)
This query supports pagination.
ghme.orgs(callback);
List your repositories (GET /user/repos)
This query supports pagination.
ghme.repos(callback);
Create a repository (POST /user/repos)
ghme.repo({
"name": "Hello-World",
"description": "This is your first repo",
}, callback);
Fork a repository (POST /repos/pksunkara/hub/forks)
ghme.fork('pksunkara/hub', callback);
List all issues across owned and member repositories (GET /user/issues)
This query supports pagination.
ghme.issues({
page: 2,
per_page: 100,
filter: 'assigned',
state: 'open',
sort: 'created'
}, callback);
List user teams (GET /user/teams)
This query supports pagination.
ghme.teams({
page: 1,
per_page: 50
}, callback);
List notifications
Options based on http://git.io/vYYOx
ghme.notifications({}, callback);
Github users api
No token required for the following
Get information about a user (GET /users/pksunkara)
ghuser.info(callback);
Get user followers (GET /users/pksunkara/followers)
This query supports pagination.
ghuser.followers(callback);
Get user followings (GET /users/pksunkara/following)
This query supports pagination.
ghuser.following(callback);
Get user public repos (GET /users/pksunkara/repos)
This query supports pagination.
ghuser.repos(callback);
Get events performed by a user (GET /users/pksunkara/events)
This query supports pagination.
Optionally, supply an array of Event Types to filter by.
ghuser.events(['PushEvent'], callback);
Or leave it out to get all Event Types.
ghuser.events(callback);
Get user public organizations (GET /users/pksunkara/orgs)
This query supports pagination.
ghuser.orgs(callback);
Github repositories api
Get information about a repository (GET /repos/pksunkara/hub)
ghrepo.info(callback);
Edit a repository (PATCH /repos/pksunkara/hub)
ghrepo.update({
private: false
}, callback);
Get the collaborators for a repository (GET /repos/pksunkara/hub/collaborators)
ghrepo.collaborators(callback);
Check if a user is collaborator for a repository (GET /repos/pksunkara/hub/collaborators/marak)
ghrepo.collaborators('marak', callback);
Get the commits for a repository (GET /repos/pksunkara/hub/commits)
ghrepo.commits(callback);
Get a certain commit for a repository (GET /repos/pksunkara/hub/commits/18293abcd72)
ghrepo.commit('18293abcd72', callback);
Get a comparison between branches for a repository (GET /repos/pksunkara/hub/compare/master...develop)
ghrepo.compare('master', 'develop', callback);
Get the tags for a repository (GET /repos/pksunkara/hub/tags)
ghrepo.tags(callback);
Get the releases for a repository (GET /repos/pksunkara/hub/releases)
ghrepo.releases(callback);
Get the languages for a repository (GET /repos/pksunkara/hub/languages)
ghrepo.languages(callback);
Get the contributors for a repository (GET /repos/pksunkara/hub/contributors)
ghrepo.contributors(callback);
Get the branches for a repository (GET /repos/pksunkara/hub/branches)
This query supports pagination.
ghrepo.branches(callback);
Get a branch for a repository (GET /repos/pksunkara/hub/branches/master)
ghrepo.branch('master', callback);
Create a Reference (POST /repos/pksunkara/hub/git/refs)
ghrepo.createReference('master', '18293abcd72', callback);
Get the issues for a repository (GET /repos/pksunkara/hub/issues)
This query supports pagination.
ghrepo.issues(callback);
Create an issue for a repository (POST /repos/pksunkara/hub/issues)
ghrepo.issue({
"title": "Found a bug",
"body": "I'm having a problem with this.",
"assignee": "octocat",
"milestone": 1,
"labels": ["Label1", "Label2"]
}, callback);
Get the milestones for a repository (GET /repos/pksunkara/hub/milestones)
This query supports pagination.
ghrepo.milestones(callback);
Create a milestone for a repository (POST /repos/pksunkara/hub/milestones)
ghrepo.milestone({
"title": "Sprint 345",
"description": "The sprint where we fix all the things!",
"due_on": new Date(2014, 7, 1)
}, callback);
Get the projects for a repository (GET /repos/pksunkara/hub/projects)
This query supports pagination.
ghrepo.projects(callback);
Create a project for a repository (POST /repos/pksunkara/hub/projects)
ghrepo.project({
"name": "Sprint 345",
"body": "The sprint where we fix all the things!"
}, callback);
Get the labels for a repository (GET /repos/pksunkara/hub/labels)
This query supports pagination.
ghrepo.labels(callback);
Create a label for a repository (POST /repos/pksunkara/hub/labels)
ghrepo.label({
"name": "Priority",
"color": "ff0000",
}, callback);
Get the pull requests for a repository (GET /repos/pksunkara/hub/pulls)
This query supports pagination.
ghrepo.prs(callback);
Create a pull request (POST /repos/pksunkara/hub/pulls)
ghrepo.pr({
"title": "Amazing new feature",
"body": "Please pull this in!",
"head": "octocat:new-feature",
"base": "master"
}, callback);
Get the hooks for a repository (GET /repos/pksunkara/hub/hooks)
This query supports pagination.
ghrepo.hooks(callback);
Create a hook (POST /repos/pksunkara/hub/hooks)
ghrepo.hook({
"name": "web",
"active": true,
"events": ["push", "pull_request"],
"config": {
"url": "http://myawesomesite.com/github/events"
}
}, callback);
Delete a hook (DELETE /repos/pksunkara/hub/hooks/37)
ghrepo.deleteHook(37, callback);
Get the README for a repository (GET /repos/pksunkara/hub/readme)
ghrepo.readme(callback);
ghrepo.readme('v0.1.0', callback);
Get the root contents on a branch called "myBranch"
ghrepo.contents('', "myBranch", callback);
Get the contents of a path in repository
ghrepo.contents('lib/index.js', callback);
ghrepo.contents('lib/index.js', 'v0.1.0', callback);
Create a file at a path in repository
ghrepo.createContents('lib/index.js', 'commit message', 'content', callback);
ghrepo.createContents('lib/index.js', 'commit message', 'content', 'v0.1.0', callback);
Update a file at a path in repository
ghrepo.updateContents('lib/index.js', 'commit message', 'content', 'put-sha-here', callback);
ghrepo.updateContents('lib/index.js', 'commit message', 'content', 'put-sha-here', 'master', callback);
ghrepo.updateContents('lib/index.js', 'commit message', 'content', 'put-sha-here', 'v0.1.0', callback);
Delete a file at a path in repository
ghrepo.deleteContents('lib/index.js', 'commit message', 'put-sha-here', callback);
ghrepo.deleteContents('lib/index.js', 'commit message', 'put-sha-here', 'v0.1.0', callback);
Get archive link for a repository
ghrepo.archive('tarball', callback);
ghrepo.archive('zipball', 'v0.1.0', callback);
Get the blob for a repository (GET /repos/pksunkara/hub/git/blobs/SHA)
ghrepo.blob('18293abcd72', callback);
Get users who starred a repository (GET /repos/pksunkara/hub/stargazers)
ghrepo.stargazers(1, 100, callback);
ghrepo.stargazers(10, callback);
ghrepo.stargazers(callback);
Get the teams for a repository (GET /repos/pksunkara/hub/teams)
ghrepo.teams(callback);
Get a git tree (GET /repos/pksunkara/hub/git/trees/18293abcd72)
ghrepo.tree('18293abcd72', callback);
ghrepo.tree('18293abcd72', true, callback);
Delete the repository (DELETE /repos/pksunkara/hub)
ghrepo.destroy();
List statuses for a specific ref (GET /repos/pksunkara/hub/statuses/master)
ghrepo.statuses('master', callback);
List the combined status for a specific ref (GET /repos/pksunkara/hub/commits/master/status)
ghrepo.combinedStatus('master', callback);
Create status (POST /repos/pksunkara/hub/statuses/SHA)
ghrepo.status('18e129c213848c7f239b93fe5c67971a64f183ff', {
"state": "success",
"target_url": "http://ci.mycompany.com/job/hub/3",
"description": "Build success."
}, callback);
GitHub notifications api
Mark a thread as read
ghnotification.markAsRead(callback);
Subscribe to a thread
ghnotification.subscribe(callback);
Unsubscribe from a thread
ghnotification.unsubscribe(callback);
Mute a thread
ghnotification.mute(callback);
Github organizations api
Get information about an organization (GET /orgs/flatiron)
ghorg.info(callback);
Update an organization (POST /orgs/flatiron)
ghorg.update({
blog: 'https://blog.com'
}, callback);
List organization repositories (GET /orgs/flatiron/repos)
This query supports pagination.
ghorg.repos(callback);
Create an organization repository (POST /orgs/flatiron/repos)
ghorg.repo({
name: 'Hello-world',
description: 'My first world program'
}, callback);
Get an organization's teams (GET /orgs/flatiron/teams)
This query supports pagination.
ghorg.teams(callback);
Get an organization's members (GET /orgs/flatiron/members)
This query supports pagination.
ghorg.members(callback);
Check an organization member (GET /orgs/flatiron/members/pksunkara)
ghorg.member('pksunkara', callback);
Check a member's public membership in an org (GET /orgs/flatiron/public_members/pksunkara)
ghorg.publicMember('pksunkara', callback);
Publicize a user’s membership (PUT /orgs/flatiron/public_members/pksunkara)
ghorg.publicizeMembership('pksunkara', callback);
Conceal a user’s membership (DELETE /orgs/flatiron/public_members/pksunkara)
ghorg.concealMembership('pksunkara', callback);
Check a member's membership status (GET /orgs/flatiron/memberships/pksunkara)
ghorg.membership('pksunkara', callback);
Create an organization team (POST /orgs/flatiron/teams)
ghorg.createTeam({
"name": "new team name",
"permission": "push",
"repo_names": [
"flatiron/utile"
]
}, callback);
Get the hooks for a Organization (GET /orgs/flatiron/hooks)
This query supports pagination.
ghorg.hooks(callback);
Create a hook (POST /orgs/flatiron/hooks)
ghorg.hook({
"name": "web",
"active": true,
"events": ["push", "pull_request"],
"config": {
"url": "http://myawesomesite.com/github/events"
}
}, callback);
Delete a hook (DELETE /orgs/flatiron/hooks/37)
ghorg.deleteHook(37, callback);
Github issues api
Get a single issue (GET /repos/pksunkara/hub/issues/37)
ghissue.info(callback);
Edit an issue for a repository (PATCH /repos/pksunkara/hub/issues/37)
ghissue.update({
"title": "Found a bug and I am serious",
}, callback);
This query supports pagination.
ghissue.comments(callback);
ghissue.createComment({
body: 'Me too.'
}, callback);
ghissue.updateComment(3, {
body: 'The updated body of the comment.'
}, callback);
ghissue.deleteComment(3, callback);
List labels on an issue (GET /repos/pksunkara/hub/issues/37/labels)
ghissue.labels(callback);
Add label(s) (POST /repos/pksunkara/hub/issues/37/labels)
ghissue.addLabels(['label-name'], callback);
Replace all labels (PUT /repos/pksunkara/hub/issues/37/labels)
ghissue.replaceAllLabels(['label-name'], callback);
Remove a single label (DELETE /repos/pksunkara/hub/issues/37/labels/label-name)
ghissue.removeLabel('label-name', callback);
Remove all labels (DELETE /repos/pksunkara/hub/issues/37/labels)
ghissue.removeAllLabels(callback);
Github milestones api
Get a single milestone (GET /repos/pksunkara/hub/milestones/37)
ghmilestone.info(callback);
Edit a milestone for a repository (PATCH /repos/pksunkara/hub/milestones/37)
ghmilestone.update({
"title": "Updated milestone title",
}, callback);
Delete a milestone for a repository (DELETE /repos/pksunkara/hub/milestones/37)
ghmilestone.delete(callback);
Github projects api
Get a single project (GET /projects/37)
ghproject.info(callback);
Edit a project for a repository (PATCH /projects/37)
ghproject.update({
"name": "Updated project name",
}, callback);
Delete a project for a repository (DELETE /projects/37)
ghproject.delete(callback);
Github labels api
Get a single label (GET /repos/pksunkara/hub/labels/todo)
ghlabel.info(callback);
Edit a label for a repository (PATCH /repos/pksunkara/hub/labels/todo)
ghlabel.update({
"color": "000000",
}, callback);
Delete a label for a repository (PATCH /repos/pksunkara/hub/labels/todo)
ghlabel.delete(callback);
Github Merge API
Merge a branch (POST /repose/pksunkara/hub/merges)
ghrepo.merge({ base: baseBranch, head: destinationBranch }, callback);
Github pull requests api
Get a single pull request (GET /repos/pksunkara/hub/pulls/37)
ghpr.info(callback);
Update a pull request (PATCH /repos/pksunkara/hub/pulls/37)
ghpr.update({
'title': 'Wow this pr'
}, callback);
Close a pull request
ghpr.close(callback);
Get if a pull request has been merged (GET /repos/pksunkara/hub/pulls/37/merge)
ghpr.merged(callback);
List commits on a pull request (GET /repos/pksunkara/hub/pulls/37/commits)
ghpr.commits(callback);
ghpr.comments(callback);
ghpr.createComment({
body: 'my comment',
commit_id: '8cde3b6c5be2c3067cd87ee4117c0f65e30f3e1f',
path: 'file.txt',
position: 4
}, callback);
ghpr.removecomment(104, callback);
List files in pull request (GET /repos/pksunkara/hub/pulls/37/files)
ghpr.files(callback);
List pull request reviews (GET /repos/pksunkara/hub/pulls/37/reviews)
ghpr.reviews(callback);
Get a single pull request review (GET /repos/pksunkara/hub/pulls/37/reviews/104)
ghpr.review(104, callback);
Delete a pending pull request review (DELETE /repos/pksunkara/hub/pulls/37/reviews/104)
ghpr.removeReview(104, callback);
ghpr.reviewComments(104, callback);
Create a pull request review (POST /repos/pksunkara/hub/pulls/37/reviews)
ghpr.createReview({
body: 'review message',
comments: [
{
body: 'comment message',
path: 'file.txt',
position: 4
}
],
event: 'APPROVE || COMMENT || REQUEST_CHANGES'
}, callback);
Submit a pull request review (POST /repos/pksunkara/hub/pulls/37/reviews/104/events)
ghpr.submitReview(104, {
body: 'review message',
event: 'APPROVE || COMMENT || REQUEST_CHANGES'
}, callback);
Dismiss a pull request review (PUT /repos/pksunkara/hub/pulls/37/reviews/104/dismissals)
ghpr.dismissReview(104, 'dismissal message', callback);
List review requests (GET /repos/pksunkara/hub/pulls/37/requested_reviewers)
ghpr.reviewRequests(callback);
Create review request(s) (POST /repos/pksunkara/hub/pulls/37/requested_reviewers)
ghpr.createReviewRequests(['user1', 'user2'], callback);
Delete review request(s) (DELETE /repos/pksunkara/hub/pulls/37/requested_reviewers)
ghpr.removeReviewRequests(['user1', 'user2'], callback);
Github releases api
Create release (POST /repos/pksunkara/releases)
ghrepo.release({
tag_name: 'v1.0.0',
draft: true
}, callback);
Upload assets in a release (POST /uploads.github.com/repos/pksunkara/hub/releases/37/assets?name=archve-v0.0.1.zip)
var archive = fs.readFileSync(__dirname, 'archive-v0.0.1.zip');
ghrelease.uploadAssets(archive, callback);
var image = fs.readFileSync(__dirname, 'octonode.png');
var options = {
name: 'octonode.png',
contentType: 'image/png',
uploadHost: 'uploads.github.com'
};
ghrelease.uploadAssets(image, options, callback)
Github gists api
List authenticated user's gists (GET /gists)
This query supports pagination.
ghgist.list(callback);
List authenticated user's public gists (GET /gists/public)
This query supports pagination.
ghgist.public(callback);
List authenticated user's starred gists (GET /gists/starred)
This query supports pagination.
ghgist.starred(callback);
List a user's public gists (GET /users/pksunkara/gists)
This query supports pagination.
ghgist.user('pksunkara', callback);
Get a single gist (GET /gists/37)
ghgist.get(37, callback);
Create a gist (POST /gists)
ghgist.create({
description: "the description",
files: { ... }
}), callback);
Edit a gist (PATCH /gists/37)
ghgist.edit(37, {
description: "hello gist"
}, callback);
Delete a gist (DELETE /gists/37)
ghgist.delete(37);
Fork a gist (POST /gists/37/forks)
ghgist.fork(37, callback);
Star a gist (PUT /gists/37/star)
ghgist.star(37);
Unstar a gist (DELETE /gists/37/unstar)
ghgist.unstar(37);
Check if a gist is starred (GET /gists/37/star)
ghgist.check(37);
ghgist.comments(37, callback);
ghgist.comments(37, {
body: "Just commenting"
}, callback);
ghgist.comment(1, callback);
ghgist.comment(1, {
body: "lol at commenting"
}, callback);
ghgist.comment(1);
Github teams api
Get a team (GET /team/37)
ghteam.info(callback);
Get the team members (GET /team/37/members)
ghteam.members(callback);
Check if a user is part of the team (GET /team/37/members/pksunkara)
ghteam.member('pksunkara', callback);
Add a user to a team (PUT /team/37/members/pksunkara)
ghteam.addUser("pksunkara", callback);
Remove a user from a team (DELETE /team/37/members/pksunkara)
ghteam.removeUser("pksunkara", callback);
Get team membership (GET /teams/37/memberships/pksunkara)
ghteam.membership("pksunkara", callback);
Add team membership (PUT /teams/37/memberships/pksunkara)
ghteam.addMembership("pksunkara", callback);
Remove team membership (DELETE /team/37/memberships/pksunkara)
ghteam.removeMembership("pksunkara", callback);
List all repos of a team (GET /team/37/repos)
ghteam.repos(callback);
Remove a repo from a team (DELETE /team/37/repos/flatiron/hub)
ghteam.removeRepo("flatiron/hub", callback);
Delete a team (DELETE /team/37)
ghteam.destroy(callback);
Github search api
Search issues
ghsearch.issues({
q: 'windows+state:open+repo:pksunkara/hub',
sort: 'created',
order: 'asc'
}, callback);
Search repositories
ghsearch.repos({
q: 'hub+language:go',
sort: 'created',
order: 'asc'
}, callback);
Search users
ghsearch.users({
q: 'tom+followers:>100',
sort: 'created',
order: 'asc'
}, callback);
Search code
ghsearch.code({
q: 'auth+in:file+repo:pksunkara/hub',
sort: 'created',
order: 'asc'
}, callback);
Get all Organizations / Users
This query supports pagination.
Note: For listing all Organizations / Users pagination is powered exclusively by the since
parameter
( Github APIs ) .
since
denotes the login ID
of last org / user you encountered. Also, note that it's important to pass
true
as third param when using pagination.
Organizations
var client = github.client();
client.get('/organizations', callback);
client.get('/organizations', since, per_page, true, callback);
Users
var client = github.client();
client.get('/users', callback);
client.get('/users', since, per_page, true, callback);
Testing
Before run test copy the config.example.json
file in test
folder to config.json
and populate it with your github information.
Is suggested to fork https://github.com/octocat/Spoon-Knife
repo and run test on your copy.
npm test
If you like this project, please watch this and follow me.
Contributors
Here is a list of Contributors
TODO
The following method names use underscore as an example. The library contains camel cased method names.
me.get_watched_repositories(callback);
me.is_watching('repo', callback);
me.start_watching('repo', callback);
me.stop_watching('repo', callback);
var org = octonode.Organization('bulletjs');
org.update(dict_with_update_properties, callback);
org.get_public_members(callback);
org.is_public_member('user', callback);
org.make_member_public('user', callback);
org.conceal_member('user', callback);
org.get_team('team', callback);
org.create_team({name:'', repo_names:'', permission:''}, callback);
org.edit_team({name:'', permission:''}, callback);
org.delete_team('name', callback);
org.get_team_members('team', callback);
org.get_team_member('team', 'user', callback);
org.remove_member_from_team('user', 'team', callback);
org.get_repositories(callback);
org.create_repository({name: ''}, callback);
org.get_team_repositories('team', callback);
org.get_team_repository('team', 'name', callback);
org.add_team_repository('team', 'name', callback);
org.remove_team_repository('team', 'name', callback);
var repo = octonode.Repository('pksunkara/octonode');
repo.update({name: ''}, callback);
repo.add_collaborator('name', callback);
repo.remove_collaborator('name', callback);
repo.get_commit('sha-id', callback);
repo.get_all_comments(callback);
repo.get_commit_comments('SHA ID', callback);
repo.comment_on_commit({body: '', commit_id: '', line: '', path: '', position: ''}, callback);
repo.get_single_comment('comment id', callback);
repo.edit_single_comment('comment id', callback);
repo.delete_single_comment('comment id', callback);
repo.get_downloads(callback);
repo.get_download(callback);
repo.create_download({name: ''}, 'filepath', callback);
repo.delete_download(callback);
repo.get_deploy_keys(callback);
repo.get_deploy_key('id', callback);
repo.create_deploy_key({title: '', key: ''}, callback);
repo.edit_deploy_key({title: '', key: ''}, callback);
repo.delete_deploy_key('id', callback);
repo.get_watchers(callback);
repo.get_all_pull_request_comments(callback);
repo.get_pull_request_comment('id', callback);
repo.reply_to_pull_request_comment('id', 'body', callback);
repo.edit_pull_request_comment('id', 'body', callback);
repo.get_issues(params, callback);
repo.get_issue('id', callback);
repo.create_issue({title: ''}, callback);
repo.edit_issue({title: ''}, callback);
repo.get_issue_comments('issue', callback);
repo.get_issue_comment('id', callback);
repo.create_issue_comment('id', 'comment', callback);
repo.edit_issue_comment('id', 'comment', callback);
repo.delete_issue_comment('id', callback);
repo.get_issue_events('id', callback);
repo.get_events(callback);
repo.get_event('id', callback);
repo.get_labels(callback);
repo.get_label('id', callback);
repo.create_label('name', 'color', callback);
repo.edit_label('name', 'color', callback);
repo.delete_label('id', callback);
repo.get_labels_for_milestone_issues('milestone', callback);
repo.get_milestones(callback);
repo.get_milestone('id', callback);
repo.create_milestone('title', callback);
repo.edit_milestone('title', callback);
repo.delete_milestone('id', callback);
repo.create_blob('content', 'encoding', callback);
repo.get_commit('sha-id', callback);
repo.create_commit('message', 'tree', [parents], callback);
repo.get_reference('ref', callback);
repo.get_all_references(callback);
repo.update_reference('ref', 'sha', force, callback);
I accept pull requests
License
MIT/X11
Bug Reports
Report here.
Contact
Pavan Kumar Sunkara (pavan.sss1991@gmail.com)
Follow me on github, twitter