Github.js provides a minimal higher-level wrapper around git's plumbing commands, exposing an API for manipulating GitHub repositories on the file level. It is being developed in the context of Prose, a content editor for GitHub.
This repo is now officially maintained by DevelopmentSeed, the people behind Prose.io.
Either grab github.js from this repo or install via NPM:
npm install github-api
Create a Github instance.
var github = new Github({
username: "YOU_USER",
password: "YOUR_PASSWORD",
auth: "basic"
});Or if you prefer OAuth, it looks like this:
var github = new Github({
token: "OAUTH_TOKEN",
auth: "oauth"
});You can use either:
- Authorised App Tokens (via client/secret pairs), used for bigger applications, created in web-flows/on the fly
- Personal Access Tokens (simpler to set up), used on command lines, scripts etc, created in GitHub web UI
See these pages for more info:
Creating an access token for command-line use
[Github API OAuth Overview] (http://developer.github.com/v3/oauth)
var repo = github.getRepo(username, reponame);Show repository information
repo.show(function(err, repo) {});Get contents at a particular path in a particular branch. Set sync to true to get contents via sync method.
repo.contents(branch, "path/to/dir", function(err, contents) {}, sync);Fork repository. This operation runs asynchronously. You may want to poll for repo.contents until the forked repo is ready.
repo.fork(function(err) {});Create new branch for repo. You can omit oldBranchName to default to "master".
repo.branch(oldBranchName, newBranchName, function(err) {}); Create Pull Request.
var pull = {
title: message,
body: "This pull request has been automatically generated by Prose.io.",
base: "gh-pages",
head: "michael" + ":" + "prose-patch"
};
repo.createPullRequest(pull, function(err, pullRequest) {});Retrieve all available branches (aka heads) of a repository.
repo.listBranches(function(err, branches) {});Store contents at a certain path, where files that don't yet exist are created on the fly.
repo.write('master', 'path/to/file', 'YOUR_NEW_CONTENTS', 'YOUR_COMMIT_MESSAGE', function(err) {});Not only can you can write files, you can of course read them.
repo.read('master', 'path/to/file', function(err, data) {});Move a file from A to B.
repo.move('master', 'path/to/file', 'path/to/new_file', function(err) {});Remove a file.
repo.remove('master', 'path/to/file', function(err) {});Exploring files of a repository is easy too by accessing the top level tree object.
repo.getTree('master', function(err, tree) {});If you want to access all blobs and trees recursively, you can add ?recursive=true.
repo.getTree('master?recursive=true', function(err, tree) {});Given a filepath, retrieve the reference blob or tree sha.
repo.getSha('master', '/path/to/file', function(err, sha) {});For a given reference, get the corresponding commit sha.
repo.getRef('heads/master', function(err, sha) {});Create a new reference.
var refSpec = {
"ref": "refs/heads/my-new-branch-name",
"sha": "827efc6d56897b048c772eb4087f854f46256132"
};
repo.createRef(refSpec, function(err) {});Delete a reference.
repo.deleteRef('heads/gh-pages', function(err) {});var user = github.getUser();List all repositories of the authenticated user, including private repositories and repositories in which the user is a collaborator and not an owner.
user.repos(function(err, repos) {});List organizations the autenticated user belongs to.
user.orgs(function(err, orgs) {});List authenticated user's gists.
user.gists(function(err, gists) {});List unread notifications for the authenticated user.
user.notifications(function(err, notifications) {});Show user information for a particular username. Also works for organizations.
user.show(username, function(err, user) {});List public repositories for a particular user.
user.userRepos(username, function(err, repos) {});List repositories for a particular organization. Includes private repositories if you are authorized.
user.orgRepos(orgname, function(err, repos) {});List all gists of a particular user. If username is ommitted gists of the current authenticated user are returned.
user.userGists(username, function(err, gists) {});var gist = github.getGist(3165654);Read the contents of a Gist.
gist.read(function(err, gist) {
});Updating the contents of a Git. Please consult the documentation on GitHub.
var delta = {
"description": "the description for this gist",
"files": {
"file1.txt": {
"content": "updated file contents"
},
"old_name.txt": {
"filename": "new_name.txt",
"content": "modified contents"
},
"new_file.txt": {
"content": "a new file"
},
"delete_this_file.txt": null
}
};
gist.update(delta, function(err, gist) {
});
