diff --git a/Dockerfile b/Dockerfile index 59736f6..195c844 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,5 +31,7 @@ USER nonroot:nonroot LABEL org.opencontainers.image.version="${VERSION}" LABEL org.opencontainers.image.source="https://gitea.com/gitea/gitea-mcp" +LABEL org.opencontainers.image.title="Gitea MCP Server" +LABEL org.opencontainers.image.description="Model Context Protocol server connecting Gitea instances to MCP clients, published as docker.gitea.com/gitea-mcp-server." CMD ["/app/gitea-mcp"] diff --git a/README.md b/README.md index 91311de..be12c04 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ Download a binary from the [releases page](https://gitea.com/gitea/gitea-mcp/releases) and put it in your `PATH`, use the `docker.gitea.com/gitea-mcp-server` image, or build from source into `$GOPATH/bin` with `make` and Go 1.26 or later: +> The published Docker image is `docker.gitea.com/gitea-mcp-server`, which does not match the `gitea-mcp` repository name. This is a known mismatch, tracked in [issue #181](https://gitea.com/gitea/gitea-mcp/issues/181); the image name stays as-is for now to avoid breaking existing installs. See [docs/adr/docker-image-naming.md](docs/adr/docker-image-naming.md) for details. + ```bash git clone https://gitea.com/gitea/gitea-mcp.git cd gitea-mcp diff --git a/README.zh-cn.md b/README.zh-cn.md index deb926a..1cd1d0e 100644 --- a/README.zh-cn.md +++ b/README.zh-cn.md @@ -10,6 +10,8 @@ 可从 [发布页面](https://gitea.com/gitea/gitea-mcp/releases) 下载二进制文件并放入 `PATH`,或使用 `docker.gitea.com/gitea-mcp-server` 镜像,也可用 `make` 和 Go 1.26 及以上从源码构建到 `$GOPATH/bin`: +> 已发布的 Docker 镜像名为 `docker.gitea.com/gitea-mcp-server`,与 `gitea-mcp` 仓库名不一致。这是 [issue #181](https://gitea.com/gitea/gitea-mcp/issues/181) 中记录的已知不一致,为避免破坏现有安装,镜像名暂不改动。详见 [docs/adr/docker-image-naming.md](docs/adr/docker-image-naming.md)。 + ```bash git clone https://gitea.com/gitea/gitea-mcp.git cd gitea-mcp diff --git a/README.zh-tw.md b/README.zh-tw.md index 9dc812e..92d9b91 100644 --- a/README.zh-tw.md +++ b/README.zh-tw.md @@ -10,6 +10,8 @@ 可從 [發布頁面](https://gitea.com/gitea/gitea-mcp/releases) 下載二進位檔並放入 `PATH`,或使用 `docker.gitea.com/gitea-mcp-server` 映像檔,也可用 `make` 與 Go 1.26 以上從原始碼建置到 `$GOPATH/bin`: +> 已發布的 Docker 映像檔名稱為 `docker.gitea.com/gitea-mcp-server`,與 `gitea-mcp` 倉庫名稱不一致。這是 [issue #181](https://gitea.com/gitea/gitea-mcp/issues/181) 中記錄的已知不一致,為避免破壞現有安裝,映像檔名稱暫不變更。詳見 [docs/adr/docker-image-naming.md](docs/adr/docker-image-naming.md)。 + ```bash git clone https://gitea.com/gitea/gitea-mcp.git cd gitea-mcp diff --git a/docs/adr/docker-image-naming.md b/docs/adr/docker-image-naming.md new file mode 100644 index 0000000..2310fe3 --- /dev/null +++ b/docs/adr/docker-image-naming.md @@ -0,0 +1,29 @@ +# Docker image naming mismatch (issue #181) + +## Current state + +The project repository is `gitea.com/gitea/gitea-mcp`, but the Docker image is +published as `docker.gitea.com/gitea-mcp-server`. This mismatch was raised in +[issue #181](https://gitea.com/gitea/gitea-mcp/issues/181). + +## Maintainers' direction + +Per the issue discussion, the maintainers' preferred long-term name is +`gitea/mcp-server`, matching the naming scheme used by `gitea/act_runner` +(published as a `runner`-style short name) and by comparable projects such as +`github/github-mcp-server`. The name `mcp-server` was preferred over +`gitea-mcp-server` because the repository is primarily run as a local client +process, not a traditional long-running server. + +## Decision + +No rename has happened yet; the discussion was explicitly left open in the +issue. The current image name, `docker.gitea.com/gitea-mcp-server`, remains in +use so that existing user configurations and documentation keep working. +`org.opencontainers.image.title` and `org.opencontainers.image.description` +labels were added to the `Dockerfile` to make the image self-describing +regardless of the tag it is published under. + +If the image is renamed in the future, update the `docker.gitea.com/gitea-mcp-server` +references across `README.md`, `README.zh-cn.md` and `README.zh-tw.md` together +with this document. diff --git a/operation/readme_test.go b/operation/readme_test.go index 51406ec..6ed1ee8 100644 --- a/operation/readme_test.go +++ b/operation/readme_test.go @@ -22,6 +22,38 @@ var readmeAccessLabels = map[string]map[string]string{ "../README.zh-tw.md": {"讀取": "read", "寫入": "write"}, } +// publishedDockerImage is the image name published for this project. See +// docs/adr/docker-image-naming.md for why it differs from the repository name. +const publishedDockerImage = "docker.gitea.com/gitea-mcp-server" + +// dockerImageReference matches any docker.gitea.com/ image reference so +// stray typos or partial renames in the README files can be caught. +var dockerImageReference = regexp.MustCompile(`docker\.gitea\.com/[a-zA-Z0-9._-]+`) + +// TestReadmeDockerImageReferencesAreConsistent ensures every README mentions +// the same, currently published Docker image name. A partial rename, where +// one example is updated but another is missed, would otherwise leave users +// copying a command that pulls a nonexistent image. +func TestReadmeDockerImageReferencesAreConsistent(t *testing.T) { + for _, path := range []string{"../README.md", "../README.zh-cn.md", "../README.zh-tw.md"} { + t.Run(filepath.Base(path), func(t *testing.T) { + content, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + references := dockerImageReference.FindAllString(string(content), -1) + if len(references) == 0 { + t.Fatalf("no docker.gitea.com image reference found in %s", path) + } + for _, ref := range references { + if ref != publishedDockerImage { + t.Errorf("found image reference %q in %s, want %q", ref, path, publishedDockerImage) + } + } + }) + } +} + // toolInfo is what TestReadmeToolTables tracks per tool, both as registered // in code and as documented in a README, so the two can be compared. type toolInfo struct {