如何标记他们的 repo,并让它出现在go mod和/或 pkg.go.dev 中?
我已将我的一个包转换为go mod. 但是,该go mod工具本身似乎只能看到我的包的非常旧版本。
编辑:我只是注意到我的旧版本有一个“v”前缀,而我的新标签没有“v”前缀。
这是根本问题吗?该硬性要求记录在哪里?
我的包裹有问题:https : //github.com/eduncan911/podcast
还有我的标记发布:https : //github.com/eduncan911/podcast/releases
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0 <- this is the current version Go Modules sees available
Run Code Online (Sandbox Code Playgroud)
但是,pkg.go.dev 显示:
v1 – github.com/eduncan911/podcast
v1.3.0 – Feb 19, 2017
v1.1.0 – Feb 6, 2017
v1.0.0 – Feb 5, 2017
Run Code Online (Sandbox Code Playgroud)
https://proxy.golang.org/上的常见问题解答说:
我向存储库提交了新更改(或发布了新版本),为什么在我运行 go get -u 或 go list -m --versions 时它没有显示?
为了改善我们服务的缓存和服务延迟,新版本可能不会立即出现。如果您希望新代码立即在镜像中可用,那么首先要确保在底层源存储库中有此修订版的语义版本标记。然后通过 go get module@version 显式请求该版本。缓存过期一分钟后,go 命令将看到标记的版本。
所以,我试过了:
$ go get github.com/eduncan911/podcast@1.3.1
go: cannot use path@version syntax in GOPATH mode
Run Code Online (Sandbox Code Playgroud)
猜测这意味着我需要参与 repo 或 Go 项目;所以,我创建了一个:
$ cat main.go
package main
import (
"fmt"
"github.com/eduncan911/podcast"
)
func main() {
fmt.Print(podcast.MP3)
}
Run Code Online (Sandbox Code Playgroud)
切换到这个目录,运行go mod init,再次运行:
$ go mod download github.com/eduncan911/podcast@1.3.1
go: finding github.com/eduncan911/podcast 1.3.1
$ go mod download github.com/eduncan911/podcast@1.3.2
go: finding github.com/eduncan911/podcast 1.3.2
$ go mod download github.com/eduncan911/podcast@1.4.0
go: finding github.com/eduncan911/podcast 1.4.0
$ go mod download github.com/eduncan911/podcast@1.4.1
go: finding github.com/eduncan911/podcast 1.4.1
Run Code Online (Sandbox Code Playgroud)
好的,没有响应并返回到提示。也许我正在做某事...
$ go run main.go
go: finding github.com/eduncan911/podcast v1.3.0
go: downloading github.com/eduncan911/podcast v1.3.0
go: extracting github.com/eduncan911/podcast v1.3.0
Run Code Online (Sandbox Code Playgroud)
多。
$ go mod graph
github.com/eduncan911/podcast-test github.com/eduncan911/podcast@v1.3.0
github.com/eduncan911/podcast-test github.com/pkg/errors@v0.9.1
Run Code Online (Sandbox Code Playgroud)
也许我需要下载显式版本,就像常见问题解答中所说的 module@version。
我编辑了 go.mod 并指定了 1.3.1。然后:
$ go mod download
go: github.com/eduncan911/podcast@v1.3.1: reading github.com/eduncan911/podcast/go.mod at revision v1.3.1: unknown revision v1.3.1
Run Code Online (Sandbox Code Playgroud)
我的最后一次尝试是回到 FAQ 声明并go get module@version像它说的那样运行:
$ go get github.com/eduncan911/podcast@1.4.1
go: github.com/eduncan911/podcast@v1.4.1: reading github.com/eduncan911/podcast/go.mod at revision v1.4.1: unknown revision v1.4.1
Run Code Online (Sandbox Code Playgroud)
请注意,我一直在更改上述某些陈述之间的版本。但每次,它都是一个不存在的版本。
我已经等了几个小时并重试了许多这些语句以清除任何缓存。
提前致谢!
OP有两个问题。
v@Flimzy指出的没有前缀的包标签pkg.go.dev 一旦被标记,就不会显示/公开新版本,依靠“社区”在找到新版本之前请求更新版本第一个是一个简单的修复 - 用v前缀重新标记所有内容。
第二个可以通过将其添加到 CICD 管道来修复:
curl https://sum.golang.org/lookup/github.com/eduncan911/podcast@v1.4.1
Run Code Online (Sandbox Code Playgroud)
这是强制 pkg.go.dev 更新并使新标签立即可供其他管道运行和测试的最可靠方法。它的工作原理是强制 pkg.go.dev 获取该特定版本的哈希值。如果版本不存在,它将获取它 - 然后将其散列。因此,添加到 Go Mod 数据源。
我必须注意它没有很好的文档记录,所以 API 可能会随着时间的推移而改变。他们希望你使用 Proxy 命令;但是,在许多测试发布中,我对它的可靠性并不高。但是,上面的 curl 命令每次都能 100% 工作,并且立即可用(重置缓存)。