@ 模拟器/ github
完全状态的 GitHub API 模拟 。 创建、更新和删除在内存中持续存在,并影响相关的实体.
部分 模拟 ——为CI和无网络沙盒提供本地出入口替换服务.
安装
npm install @emulators/github
终点
用户
GET /user——认证用户PATCH /user——更新简介GET /users/:username——获得用户GET /users列表用户GET /users/:username/repos——列表用户重置GET /users/:username/orgs——列表用户群GET /users/:username/followers- 名单追随者GET /users/:username/following- 名单如下:
仓库
GET /repos/:owner/:repo- 拿回钱GET /repositories/:id——通过数字标识重取POST /user/repos——创建用户repoPOST /orgs/:org/repos——创建org repoPATCH /repos/:owner/:repo- 更新重播DELETE /repos/:owner/:repo- 删除还本付息(cascades)GET/PUT /repos/:owner/:repo/topics- 获得/取代专题GET /repos/:owner/:repo/languages- 语文GET /repos/:owner/:repo/contributors——捐助者GET /repos/:owner/:repo/forks——列表叉POST /repos/:owner/:repo/forks——创建分叉GET/PUT/DELETE /repos/:owner/:repo/collaborators/:username- 合作者GET /repos/:owner/:repo/collaborators/:username/permissionPOST /repos/:owner/:repo/transfer——转回GET /repos/:owner/:repo/tags——列表标签
目录提交历史( C)
GET /repos/:owner/:repo/readme获取存储器 READMEGET /repos/:owner/:repo/contents/:path—— 在参考文献中获取文件或列出目录- 发送
Accept: application/vnd.github.raw或者说application/vnd.github.raw+json以文件内容和 README 请求接收原始字节;目录和子模块回复仍为 JSON GET /:owner/:repo/raw/:ref/:path——从已公布的原始 URL 下载文件内容;这与接受谈判分开PUT/DELETE /repos/:owner/:repo/contents/:path—— 创建、更新或删除文件并输入更改GET /repos/:owner/:repo/commits- 列表带有参考、路径、作者和日期过滤器GET /repos/:owner/:repo/commits/:ref——取得文件diffs和数据的承诺GET /repos/:owner/:repo/compare/:base...:head- 比较两名裁判
问题
GET /repos/:owner/:repo/issues列表(按状态、标签、受让人、里程碑、创建者分列,自此)POST /repos/:owner/:repo/issues——创建GET /repos/:owner/:repo/issues/:number- 获取PATCH /repos/:owner/:repo/issues/:number——更新(状态过渡,事件)PUT/DELETE /repos/:owner/:repo/issues/:number/lock- 锁定/解锁GET /repos/:owner/:repo/issues/:number/timeline- 时间表活动GET /repos/:owner/:repo/issues/:number/events- 活动POST/DELETE /repos/:owner/:repo/issues/:number/assignees- 管理受让人
调取请求
GET /repos/:owner/:repo/pulls——列表(按状态,头,底来过滤)POST /repos/:owner/:repo/pulls——创建GET /repos/:owner/:repo/pulls/:number- 获取PATCH /repos/:owner/:repo/pulls/:number- 最新情况PUT /repos/:owner/:repo/pulls/:number/merge——合并(与分行保护执法)GET /repos/:owner/:repo/pulls/:number/commits- 清单承诺GET /repos/:owner/:repo/pulls/:number/files——列表文件POST/DELETE /repos/:owner/:repo/pulls/:number/requested_reviewers管理审查员PUT /repos/:owner/:repo/pulls/:number/update-branch——更新分支
评论
- 问题评论:全文
/repos/:owner/:repo/issues/:number/comments - 审查评论:全文
/repos/:owner/:repo/pulls/:number/comments - 提交评论: 完整 CRUD 打开
/repos/:owner/:repo/commits/:sha/comments - 每种类型的全程列表
审查
GET /repos/:owner/:repo/pulls/:number/reviews清单POST /repos/:owner/:repo/pulls/:number/reviews——创建(带有内置注释)GET/PUT /repos/:owner/:repo/pulls/:number/reviews/:id- 获得/更新POST /repos/:owner/:repo/pulls/:number/reviews/:id/events提交PUT /repos/:owner/:repo/pulls/:number/reviews/:id/dismissals开除
标签和里程碑
- 标签:完整的 CRUD, 添加/删除问题, 替换全部
- 里程碑:完整的 CRUD, 状态过渡, 发行计数
分支和 Git 数据
- 部门:清单、获取、保护 CRUD(状态检查、公关审查、执行管理员)
- 参考文件:获取、匹配、创建、更新、删除
- 提交: 获取, 创建
- 树:得到(带有递归性),创建(带有内含内容)
- Blobs: 获取, 创建
- 标记: 获取, 创建
组织和团队
- 类:获取、更新、列表
- 成员:名单、检查、删除、获得/确定成员
- 团队:完全CRUD,成员,重置
释放
- 释放: 完整的 CRUD, 最新的, 通过标签
- 释放资产:完整 CRUD,上传
- 生成发布注释
网络呼号
- Repo webhoks: 完整 CRUD, ping, 测试, 交付
- Org Webhooks: 完整 CRUD, ping 软件
- 在所有状态变化中向注册的 URL 发送真实的 HTTP
搜索
GET /search/repositories——全查询语法(用户,org,语言,话题,恒星,叉等)GET /search/issues——发行+PRs(repo,是,是,是,是,是,是标签,是里程碑,状态等)GET /search/users——用户+角数GET /search/code——blob 内容搜索GET /search/commits——承诺信息搜索GET /search/topics- 专题搜索GET /search/labels——标签搜索
行动
- 工作流程:列表、获取、启用/残疾、调度
- 工作流程运行: 列表、 获取、 取消、 重运行、 删除、 日志
- 任务:列表、获取、日志
- 艺术: 列表、 获取、 删除
- 秘诀: repo + org CRUD
检查
- 检查运行:创建,更新,获取,注释,重新请求,列表通过ref/suite. 基于参考的外观接受含有鞭打的分支和标记参考.
- 请检查access-date=中的日期值 (帮助) 检查套接字:创建,获得,首选,再请求,列表通过ref. 基于参考的外观接受含有鞭打的分支和标记参考.
- 从检查结果自动滚动套件状态
杂项
GET /_emulate/installation-tokens检查无秘密的 GitHub App 安装到的元数据GET /rate_limit——费率限制状况GET /meta——服务器元数据GET /octocat- ASCII艺术GET /emojis- emoji URLs (英语)GET /zen——随机zen短语GET /versions—— API 版本
认证
公共回波端点工作没有认证. 私人重置和写入操作需要有效的符号. 增殖用途 page编号 :per_page 与 Link 头.
安装访问令牌作为配置的 GitHub App bot 用于寄存器写入 。 仓库所有权,所选的寄存器访问,以及请求的App权限仍然执行. 需要拉动请求合并 contents: write 数据库中。 拉动请求分支更新需要 pull_requests: write 和 contents: write 在主仓库.
种子配置
github:
users:
- login: octocat
name: The Octocat
email: [email protected]
orgs:
- login: my-org
name: My Organization
members:
- login: octocat
role: admin
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
组织 members 是可选的。 每个条目引用一个种子用户 login· ; role 默认为 member时 admin 创建一个组织管理员。 未知用户被忽略 。 成员由合成成员支持 members 因此,他们也通过团队成员端点出现,并允许进入私人组织的储存库.
这个 private_key 调用时需要字段 seedFromConfig 直接说 要生成省略的密钥, 请先生成种子, 使用 materializeGitHubSeedConfig 并保留返回的关键材料:
import { materializeGitHubSeedConfig, seedFromConfig } from '@emulators/github'
const materialized = await materializeGitHubSeedConfig({
apps: [{ app_id: 12345, slug: 'my-github-app', name: 'My GitHub App' }],
})
seedFromConfig(store, baseUrl, materialized.config)
const privateKey = materialized.generatedPrivateKeys[0]?.private_key
这个 emulate 软件包在 createEmulator 并打开生成的密钥 generatedSecrets。当请求私人递送文件时,CLI也可以这样做:
Next.js和Nuxt适配器也实现省去密钥. 他们返回的服务器处理器曝光 generatedSecrets(),而持久性则在寒冷的开始中恢复同样的特性。 保持持续快照的隐私,因为它们包含签名密钥. 自定义持久性后端必须执行原子 initialize() 使用生成身份时的语义.
npx emulate start --service github --seed emulate.config.yaml \
--generated-secrets-file .emulate-secrets.json
目的地决不能存在。 模拟去除所继承的ACL,验证有效的所有者独有访问,并在打开收听器或配置无埠之前发布完整的JSON. 处理起步失败取出引号自有文物. 硬性终止可以留下一个完整的文物,在确认没有引用时必须手动取出. 明确密钥不列入文物. Linux 要求 setfacl 财务报告和审定财务报表 getfacl 从 acl 软件包。 当访问控制无法被校验且不支持在Windows上时,会关闭此旗帜. 无 --generated-secrets-file, CLI 种子文件继续需要 private_key。 。 。 .