You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:42:23