如何让GitHub依赖图关联GitHub Enterprise内部仓库获取版本信息?
问题描述
我通过GitHub GraphQL API查询dependencyGraphManifests获取项目依赖信息,查询语句如下:
query Repository { repository(name: "repo-name", owner: "my-org") { name nameWithOwner dependencyGraphManifests(first: 100) { totalCount nodes { filename dependencies(first: 100) { totalCount nodes { packageName requirements packageManager repository { latestRelease { name tagName } } } pageInfo { endCursor hasNextPage hasPreviousPage startCursor } } id } } defaultBranchRef { name target { oid } } } }
但对于托管在GitHub Enterprise上的内部包,返回结果中repository字段为null,示例返回:
[ { "packageName": "cloud.google.com/go/pubsub", "requirements": "= 1.44.0", "packageManager": "GO", "repository": { "latestRelease": { "name": "spanner: v1.76.0", "tagName": "spanner/v1.76.0" } } }, { "packageName": "github.com/my-org/internal-package", "requirements": "= 1.9.2", "packageManager": "GO", "repository": null } ]
这些内部包的实际制品存储在Google Artifact Register (GAR)中,我想知道如何让依赖图关联对应仓库,以获取可用版本信息?
解决方案
1. 对齐Go模块路径与GitHub仓库地址
GitHub依赖图通过包的模块路径匹配对应的GitHub仓库,确保你的内部包Go模块路径严格对应GitHub仓库地址(即github.com/my-org/internal-package必须存在同名的GitHub私有仓库)。如果路径不匹配,依赖图无法自动关联仓库信息。
2. 配置私有仓库的权限与依赖图设置
- 在GitHub Enterprise的仓库设置中,启用Dependency graph功能,同时确保组织级设置允许依赖图扫描私有依赖。
- 确保用于查询GraphQL API的账号拥有该内部私有仓库的读取权限,否则API会返回
repository: null。
3. 通过CI/CD同步GAR包版本到GitHub仓库
GitHub依赖图无法直接读取GAR的元数据,但可以通过CI/CD流程在发布包到GAR时,同步版本信息到GitHub仓库:
- 在发布脚本中,给对应的GitHub仓库打上与GAR包版本一致的标签(比如
v1.9.2)。 - 若需要更详细的发布信息,可在GitHub仓库创建对应的Release,这样依赖图就能通过仓库的
latestRelease字段获取版本数据。
4. 自定义逻辑补充GAR版本信息
如果上述方法无法满足需求,可以在获取GitHub API结果后,通过GAR的API自行查询版本信息并合并:
- 遍历GitHub返回的依赖列表,筛选出
repository: null的内部包。 - 调用GAR的版本查询接口(如Go语言的
artifactregistry.Client.ListVersions),获取对应包的所有可用版本。 - 将查询到的版本信息补充到原依赖数据中。
内容的提问来源于stack exchange,提问作者SynackSA
相关产品推荐
相关产品推荐

