@emulators/github
v0.5.0
Published
Fully stateful GitHub API emulation. Creates, updates, and deletes persist in memory and affect related entities.
Readme
@emulators/github
Fully stateful GitHub API emulation. Creates, updates, and deletes persist in memory and affect related entities.
Part of emulate — local drop-in replacement services for CI and no-network sandboxes.
Install
npm install @emulators/githubEndpoints
Users
GET /user— authenticated userPATCH /user— update profileGET /users/:username— get userGET /users— list usersGET /users/:username/repos— list user reposGET /users/:username/orgs— list user orgsGET /users/:username/followers— list followersGET /users/:username/following— list following
Repositories
GET /repos/:owner/:repo— get repoPOST /user/repos— create user repoPOST /orgs/:org/repos— create org repoPATCH /repos/:owner/:repo— update repoDELETE /repos/:owner/:repo— delete repo (cascades)GET/PUT /repos/:owner/:repo/topics— get/replace topicsGET /repos/:owner/:repo/languages— languagesGET /repos/:owner/:repo/contributors— contributorsGET /repos/:owner/:repo/forks— list forksPOST /repos/:owner/:repo/forks— create forkGET/PUT/DELETE /repos/:owner/:repo/collaborators/:username— collaboratorsGET /repos/:owner/:repo/collaborators/:username/permissionPOST /repos/:owner/:repo/transfer— transfer repoGET /repos/:owner/:repo/tags— list tags
Issues
GET /repos/:owner/:repo/issues— list (filter by state, labels, assignee, milestone, creator, since)POST /repos/:owner/:repo/issues— createGET /repos/:owner/:repo/issues/:number— getPATCH /repos/:owner/:repo/issues/:number— update (state transitions, events)PUT/DELETE /repos/:owner/:repo/issues/:number/lock— lock/unlockGET /repos/:owner/:repo/issues/:number/timeline— timeline eventsGET /repos/:owner/:repo/issues/:number/events— eventsPOST/DELETE /repos/:owner/:repo/issues/:number/assignees— manage assignees
Pull Requests
GET /repos/:owner/:repo/pulls— list (filter by state, head, base)POST /repos/:owner/:repo/pulls— createGET /repos/:owner/:repo/pulls/:number— getPATCH /repos/:owner/:repo/pulls/:number— updatePUT /repos/:owner/:repo/pulls/:number/merge— merge (with branch protection enforcement)GET /repos/:owner/:repo/pulls/:number/commits— list commitsGET /repos/:owner/:repo/pulls/:number/files— list filesPOST/DELETE /repos/:owner/:repo/pulls/:number/requested_reviewers— manage reviewersPUT /repos/:owner/:repo/pulls/:number/update-branch— update branch
Comments
- Issue comments: full CRUD on
/repos/:owner/:repo/issues/:number/comments - Review comments: full CRUD on
/repos/:owner/:repo/pulls/:number/comments - Commit comments: full CRUD on
/repos/:owner/:repo/commits/:sha/comments - Repo-wide listings for each type
Reviews
GET /repos/:owner/:repo/pulls/:number/reviews— listPOST /repos/:owner/:repo/pulls/:number/reviews— create (with inline comments)GET/PUT /repos/:owner/:repo/pulls/:number/reviews/:id— get/updatePOST /repos/:owner/:repo/pulls/:number/reviews/:id/events— submitPUT /repos/:owner/:repo/pulls/:number/reviews/:id/dismissals— dismiss
Labels & Milestones
- Labels: full CRUD, add/remove from issues, replace all
- Milestones: full CRUD, state transitions, issue counts
Branches & Git Data
- Branches: list, get, protection CRUD (status checks, PR reviews, enforce admins)
- Refs: get, match, create, update, delete
- Commits: get, create
- Trees: get (with recursive), create (with inline content)
- Blobs: get, create
- Tags: get, create
Organizations & Teams
- Orgs: get, update, list
- Org members: list, check, remove, get/set membership
- Teams: full CRUD, members, repos
Releases
- Releases: full CRUD, latest, by tag
- Release assets: full CRUD, upload
- Generate release notes
Webhooks
- Repo webhooks: full CRUD, ping, test, deliveries
- Org webhooks: full CRUD, ping
- Real HTTP delivery to registered URLs on all state changes
Search
GET /search/repositories— full query syntax (user, org, language, topic, stars, forks, etc.)GET /search/issues— issues + PRs (repo, is, author, label, milestone, state, etc.)GET /search/users— users + orgsGET /search/code— blob content searchGET /search/commits— commit message searchGET /search/topics— topic searchGET /search/labels— label search
Actions
- Workflows: list, get, enable/disable, dispatch
- Workflow runs: list, get, cancel, rerun, delete, logs
- Jobs: list, get, logs
- Artifacts: list, get, delete
- Secrets: repo + org CRUD
Checks
- Check runs: create, update, get, annotations, rerequest, list by ref/suite
- Check suites: create, get, preferences, rerequest, list by ref
- Automatic suite status rollup from check run results
Misc
GET /rate_limit— rate limit statusGET /meta— server metadataGET /octocat— ASCII artGET /emojis— emoji URLsGET /zen— random zen phraseGET /versions— API versions
Auth
Public repo endpoints work without auth. Private repos and write operations require a valid token. Pagination uses page/per_page with Link headers.
Seed Configuration
github:
users:
- login: octocat
name: The Octocat
email: [email protected]
orgs:
- login: my-org
name: My Organization
repos:
- owner: octocat
name: hello-world
language: JavaScript
auto_init: true
oauth_apps:
- client_id: "Iv1.abc123"
client_secret: "secret_abc123"
name: "My Web App"
redirect_uris:
- "http://localhost:3000/api/auth/callback/github"
apps:
- app_id: 12345
slug: "my-github-app"
name: "My GitHub App"
private_key: |
-----BEGIN RSA PRIVATE KEY-----
...your PEM key...
-----END RSA PRIVATE KEY-----
permissions:
contents: read
issues: write
events: [push, pull_request]
installations:
- installation_id: 100
account: my-org
repository_selection: all