如何为 Go Mod / pkg.go.dev 消费者发布更新包?

edu*_*911 4 go go-modules

如何标记他们的 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)

请注意,我一直在更改上述某些陈述之间的版本。但每次,它都是一个不存在的版本。

我已经等了几个小时并重试了许多这些语句以清除任何缓存。

提前致谢!

edu*_*911 6

OP有两个问题。

  1. Go Mod忽略了v@Flimzy指出的没有前缀的包标签
  2. 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% 工作,并且立即可用(重置缓存)。