feat: GitHub App manifest 全量获取:仓库/组织/企业/账号四类最高档

接上轮仓库最大权限:用户明确要求无论什么身份,取该身份
授权范围内的所有权限。manifest 现按四类全拉满(74 项权限、
39 个事件):仓库补 codespaces_lifecycle_admin、repository_
creation、metadata 只读;组织 members 升 write 并补
organization_administration 等 15 项;企业补 8 项;账号补
blocking、email_addresses、gists、密钥类等 22 项。
身份边界写进注释:GitHub 只授予安装身份能给的那部分,个人
装不上组织/企业、企业装不上仓库/组织;换 token 不传子集,
token 本就是安装全量;企业安装另需 App 公开/内部
(GITHUB_APP_PUBLIC=1)。诚实边界:企业类键名未用真实
GitHub 建 App 实测,新建时表单会校验,某键被拒删键再建,
线上旧 App 不受影响。
This commit is contained in:
host committed 2026-10-30 02:53:46 +08:00
1 parent 668c000394
commit 8fc4e27241
2 files changed
+108 -13

No files matched your search

+12
View File
@@ -91,11 +91,23 @@ class ManifestTestCase(unittest.TestCase):
self.assertEqual(m["default_permissions"]["administration"], "write")
self.assertEqual(m["default_permissions"]["actions"], "write")
self.assertEqual(m["default_permissions"]["checks"], "write")
# 全量:组织 / 企业 / 账号三类也必须在 manifest 里,不只仓库。
self.assertEqual(m["default_permissions"]["members"], "write")
self.assertEqual(
m["default_permissions"]["organization_administration"],
"write")
self.assertEqual(
m["default_permissions"]["enterprise_organization_installations"],
"write")
self.assertEqual(m["default_permissions"]["email_addresses"], "write")
self.assertEqual(m["default_permissions"]["gists"], "write")
self.assertIn("issue_comment", m["default_events"])
self.assertIn("pull_request", m["default_events"])
self.assertIn("push", m["default_events"])
self.assertIn("check_run", m["default_events"])
self.assertIn("workflow_run", m["default_events"])
self.assertIn("organization", m["default_events"])
self.assertIn("member", m["default_events"])
self.assertFalse(m["public"])
def test_manifest_requires_base(self):