This library provides an OCaml interface to the GitHub APIv3 (JSON). It is compatible with MirageOS and also compiles to pure JavaScript via js_of_ocaml.
It is not yet complete but lib/github.atd contains the data types that have been bound so far.
There are several tests and examples in lib_test for small bits of functionality. jar contains utility programs that use the git jar facility for stored tokens.
If you are interested in easily using this library to listen for GitHub web hook events, you should look at dsheets/ocaml-github-hooks.
Two environment variables will cause more debugging to be output:
GITHUB_DEBUG=1 # API calls output to stderr
COHTTP_DEBUG=1 # even more HTTP-level debugging
If using the bindings from the toplevel, you can also set Github.log_active
to true
to get the same effect as setting the GITHUB_DEBUG
environment
variable.
Applications that use this library will need to save authorization
tokens locally, and the Github_cookie_jar
module in
unix helps
handle this more naturally. It maps local application name to an
authorization token so that the application can query the cookie jar at
runtime and use the resulting token in Github API calls.
The tokens are all stored in $HOME/.github/jar/<name>
, where <name>
is the
local name of the application.
A git-jar
command will be installed to add, remove, and list the contents
of this cookie jar.
$ git jar
...will display the man page.
$ git jar make avsm rwo
Enter Github password: **********
Enter 2FA code from 'app': 172217
Github cookie jar: created /home/avsm/.github/jar/rwo
Created token rwo (236241): <token>
$ git jar show avsm
Enter Github password: **********
Enter 2FA code from 'app': 001221
Cookie Name | ID | Application | Note
----------------------------------------------------------------------------------
rwo | 236241 | Real World OCaml (API) |
<remote> | 340988 | Travis |
Your Github application can now use it via the Github_cookie_jar
module:
# #require "github.unix";;
# Github_cookie_jar.(init () |> Lwt_main.run |> get ~name:"rwo");;
- : Github_t.auth option =
Some
{Github_t.auth_scopes = [`Public_repo];
auth_token = "<token>";
auth_app =
{Github_t.app_name = "Real World OCaml";
app_url = "https://docs.github.com/rest/reference/oauth-authorizations"};
auth_url = "https://api.github.com/authorizations/236241";
auth_id = 236241; auth_note = Some "rwo"; auth_note_url = None}
The Releases API in GitHub cannot itself be synched via Git, so this command-line tool lets you specify a source user/repo and destination user/repo pair, and copies all the releases from one to the other.
The git-sync-releases
binary can copy all the releases from one
repository to another for you.
$ git sync-releases mirage ocaml-uri avsm ocaml-uri
You can also associate binary files with any release, for example to
include pregenerated build files. The git upload-release
binary
will do this for you.
$ git upload-release mirage ocaml-uri v1.4.0 release.tar.gz
Supported: application/vnd.github.v3+json
Not yet supported: Other media types
Supported:
- Web and non-Web flows with two-factor authentication
- Basic Authorizations API
Not yet supported:
- Check (see #83)
- Reset (see #83)
- Fingerprint retrieval (see #83)
- get-or-create, update, revoke
- fingerprint endpoints
Supported:
- All Events endpoints
- Event types: commit comment, create, delete, deployment, deployment status, download, follow, fork, fork apply, gist, gollum, issue comment, issues, member, page build, public, pull request, pull request review comment, push, release, repository, status, team add, watch
Not yet supported:
- Event types: membership
- Feeds
- Notifications
- Starring
- Watching
Supported:
- All endpoints
Not yet supported:
- Special media types
- Truncation helpers
Not yet supported: everything (see #40)
Supported:
- All basic endpoints
- Basic comments endpoints
- Milestones
- Labels
- Repository issue comments
- Get a single issue comment
- Edit an issue comment (see #87)
- Delete an issue comment
- Issue events
- Timeline
Not yet supported:
- Custom media types
- Assignees
Supported:
Not yet supported:
Supported:
- List teams
- Get team
- List team repos
- List your organizations
- List (public) user organizations
- Webhooks
Not yet supported: everything else
Supported:
- All endpoints
Not yet supported:
- Link relations
- Custom media types
Supported:
- Create
- List user repositories
- Get
- Delete repository
- List tags
- List branches
- Get a single commit
- Deploy keys
- Forks
- Most Releases endpoints
- Create a status
- List statuses for a specific ref
- Get the combined status for a specific ref
- List contributors
- Most Webhooks endpoints
- Ping a hook
- Get contributors list with additions, deletions, and commit counts
- Collaborators
- List organization repositories
- Get the last year of commit activity data (see #86)
- Get the number of additions and deletions per week (see #86)
- Get the weekly commit count for the repository owner and everyone else (see #86)
- Get the number of commits per hour in each day (see #86)
- Get the latest release
- List assets for a release
- Get a release by tag name
- Get a single release asset
- Delete a release asset
Not yet supported:
- List your repositories
- List all public repositories
- Edit
- List languages
- List teams
- Get branch
- Commit comments
- List commits
- Compare two commits
- Contents
- Deployments
- Merging
- Pages
- Get the latest release
- Edit a release asset
- PubSubHubbub
- Receiving Webhooks helpers
Supported:
Not yet supported:
Supported:
Not yet supported:
Not yet supported: everything