跳到主要内容
翻译页面

本页面由 AI 辅助从英文翻译而来。如两者存在差异,以英文版本为准。

如何使用 StackQL 查询 GitHub 仓库

GitHub 仓库以表 github.repos.repos 的形式公开。按组织或按用户列出仓库分别映射到相应的 GitHub REST 操作,由 WHERE 子句选择:org = '...' 使用组织列表操作,username = '...' 使用用户列表操作。

前提条件​

列出组织的仓库​

SELECT name, description, language, stargazers_count
FROM github.repos.repos
WHERE org = 'stackql';

针对公开的 stackql 组织运行时,此查询返回的行包括 stackql 引擎仓库(Go,撰写本文时有 861 个星标)和 stackql-provider-registry 等。这些是实时 API 数据,不涉及快照。

按仓库属性过滤​

标准 SQL 谓词适用于任何列:

SELECT name, visibility, default_branch, archived
FROM github.repos.repos
WHERE org = 'my-org'
AND archived = false
AND visibility = 'public';

对治理有用的列包括 private、visibility、archived、fork、default_branch、delete_branch_on_merge、has_wiki、topics、created_at、pushed_at 和 security_and_analysis。DESCRIBE github.repos.repos 会列出所有列。

仓库列表之外​

github.repos 服务将仓库接口的其余部分公开为同级表:github.repos.branches、github.repos.commits、github.repos.releases、github.repos.collaborators、github.repos.webhooks、github.repos.deployments 等。使用以下语句发现这些表:

SHOW RESOURCES IN github.repos;

更新仓库​

更改仓库设置使用 UPDATE 语句;该方法需要 owner 和 repo,请求体字段使用 data__ 前缀:

UPDATE github.repos.repos
SET data__delete_branch_on_merge = true
WHERE owner = 'my-org' AND repo = 'my-repo';

将其应用于列表查询返回的整个结果集,只需 2 条语句即可实现覆盖全部仓库的治理。这种模式与将 GitHub 数据和云资源连接起来的跨 Provider 查询自然契合。