首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“`go -mod=readonly -m all`”要求访问私人回购协议?

为什么“`go -mod=readonly -m all`”要求访问私人回购协议?
EN

Stack Overflow用户
提问于 2022-06-30 12:47:50
回答 2查看 271关注 0票数 2

我试图在一个Go项目中打印一个直接依赖项列表,该项目有一个供应商目录:

代码语言:javascript
复制
go list -mod=readonly -m -f '{{ if not .Indirect }}{{ .Path }}{{ end }}' all

据我所知,我必须使用-mod=readonly,因为go list拒绝报告基于供应商的部分信息。这在我的笔记本上有效,因为我可以访问私有回购github.com/monzo/argo-rollouts,但是在CI中它失败了:

代码语言:javascript
复制
go list -m: github.com/argoproj/argo-rollouts@v0.0.0-20220309162305-84c86ea52e8f (replaced by github.com/monzo/argo-rollouts@v0.0.0-20220309162305-84c86ea52e8f): version "v0.0.0-20220309162305-84c86ea52e8f" invalid: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /home/circleci/go/pkg/mod/cache/vcs/052bf06be1713582ba9f1144e9982b362ff355fec71675863c108f9cf5a00bb4: exit status 128:
    ERROR: Repository not found.
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.

为什么go list -mod=readonly需要访问私有回购?我没有提供-u

另外,为什么在供应商模式下不能在本地获取这些信息呢?

编辑:我找到了一个以供应商模式将合格模块传递给go list -m的解决方案,但它涉及到解析只用于机器的不稳定供应商/Modes.txt文件。

代码语言:javascript
复制
% cat modules-that-provide-packages.awk
BEGIN {
        mod = ""
}

# Remember the module
/^# / {
        mod = $2
}

# Print the module if it provides a package
!/^# / {
        print mod
}


% awk -f modules-that-provide-packages.awk vendor/modules.txt /
    | sort -u \
    | xargs go list -m -f '{{ if not .Indirect }}{{ .Path }}{{ end }}'
EN

回答 2

Stack Overflow用户

发布于 2022-06-30 16:24:00

我认为答案是:go list -m不需要访问私有的repos,但是填充一个空的GOMODCACHE需要访问。

go list -m从以下任一方面获取模块信息:

  • GOMODCACHE,但这必须已经被填充。它在CI中是空的,所以Go将尝试从私有repos下载。因此出现了错误。
  • vendor目录,但您必须提供特定的模块。go list -m all 在供应商模式下放弃.
票数 1
EN

Stack Overflow用户

发布于 2022-06-30 13:12:55

  • 确保您将GOPRIVATE设置为您的私有GitHub帐户链接(如CI脚本中的github.com/abc* )
  • 添加git配置,以使用GitHub帐户令牌登录到私有回购。在你的词里,你必须在ci剧本里做这样的事情
代码语言:javascript
复制
 git config --global url."https://${{ inputs.token }}:x-oauth-basic@github.com/<useraccount>".insteadOf "https://github.com/<useraccount>"
  • 现在,当您运行该命令时,它将能够访问私有repo或在运行list命令之前,确保首先执行go mod vendor来获取CI上的所有依赖项。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72816128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档