From a8448384eac5ffa73db7debe3eb7a1095d28b8f0 Mon Sep 17 00:00:00 2001 From: "huanyang@alauda.io" Date: Mon, 11 May 2026 15:01:53 +0800 Subject: [PATCH 1/2] feat: add raw repository format support Add CreateRawHostedRepository / CreateRawProxyRepository / CreateRawGroupRepository methods to the Nexus client, and wire them into the apply.go format switch. This lets nexus-cli provision raw hosted/proxy/group repositories declared in the config file, matching the pattern of existing maven2/docker/npm/pypi formats. Motivation: tektoncd-operator e2e for the catalog nexus-upload Task needs a raw hosted repository to upload artifacts into, and prepare-nexus-data should provision it automatically alongside the existing maven hosted repository. --- pkg/nexus/repository.go | 27 +++++++++++++++++++++++++++ pkg/service/apply.go | 9 +++++++++ 2 files changed, 36 insertions(+) diff --git a/pkg/nexus/repository.go b/pkg/nexus/repository.go index d02feb0..9eb389a 100644 --- a/pkg/nexus/repository.go +++ b/pkg/nexus/repository.go @@ -163,6 +163,33 @@ func (c *Client) CreateNpmGroupRepository(req RepositoryRequest) error { return nil } +// CreateRawHostedRepository 创建 Raw hosted 仓库 +func (c *Client) CreateRawHostedRepository(req RepositoryRequest) error { + _, err := c.post("/service/rest/v1/repositories/raw/hosted", req) + if err != nil { + return fmt.Errorf("failed to create raw hosted repository %s: %w", req.Name, err) + } + return nil +} + +// CreateRawProxyRepository 创建 Raw proxy 仓库 +func (c *Client) CreateRawProxyRepository(req RepositoryRequest) error { + _, err := c.post("/service/rest/v1/repositories/raw/proxy", req) + if err != nil { + return fmt.Errorf("failed to create raw proxy repository %s: %w", req.Name, err) + } + return nil +} + +// CreateRawGroupRepository 创建 Raw group 仓库 +func (c *Client) CreateRawGroupRepository(req RepositoryRequest) error { + _, err := c.post("/service/rest/v1/repositories/raw/group", req) + if err != nil { + return fmt.Errorf("failed to create raw group repository %s: %w", req.Name, err) + } + return nil +} + // GetRepository 获取仓库信息 func (c *Client) GetRepository(name string) (map[string]interface{}, error) { data, err := c.get(fmt.Sprintf("/service/rest/v1/repositories/%s", name)) diff --git a/pkg/service/apply.go b/pkg/service/apply.go index e2cadd3..42448d8 100644 --- a/pkg/service/apply.go +++ b/pkg/service/apply.go @@ -319,6 +319,15 @@ func (s *ApplyService) createRepository(repo config.Repository) error { default: return fmt.Errorf("go format only supports proxy and group types") } + case "raw": + switch repo.Type { + case "hosted": + return s.client.CreateRawHostedRepository(req) + case "proxy": + return s.client.CreateRawProxyRepository(req) + case "group": + return s.client.CreateRawGroupRepository(req) + } default: return fmt.Errorf("unsupported repository format: %s", repo.Format) } From 5acbf7308a1e451248af70f2e1605d36e5b0e2d7 Mon Sep 17 00:00:00 2001 From: "huanyang@alauda.io" Date: Mon, 11 May 2026 15:24:15 +0800 Subject: [PATCH 2/2] refactor: extract repository dispatch to lower cyclomatic complexity Move the format/type dispatch switch out of createRepository into a new dispatchRepositoryCreate helper. createRepository becomes a pure request builder + single delegation, satisfying gocyclo's min-complexity=30 threshold (was 34 after adding raw support, now 11 / 26 for the two functions). --- pkg/service/apply.go | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/pkg/service/apply.go b/pkg/service/apply.go index 42448d8..81bc174 100644 --- a/pkg/service/apply.go +++ b/pkg/service/apply.go @@ -272,10 +272,15 @@ func (s *ApplyService) createRepository(repo config.Repository) error { } } - // 根据格式和类型调用相应的创建方法 - switch repo.Format { + return s.dispatchRepositoryCreate(repo.Format, repo.Type, req) +} + +// dispatchRepositoryCreate 根据 format/type 分发到具体的 Create*Repository 客户端调用。 +// 抽出为独立函数避免 createRepository 整体超过 gocyclo 复杂度阈值。 +func (s *ApplyService) dispatchRepositoryCreate(format, repoType string, req nexus.RepositoryRequest) error { + switch format { case "maven2": - switch repo.Type { + switch repoType { case "hosted": return s.client.CreateMavenHostedRepository(req) case "proxy": @@ -284,7 +289,7 @@ func (s *ApplyService) createRepository(repo config.Repository) error { return s.client.CreateMavenGroupRepository(req) } case "docker": - switch repo.Type { + switch repoType { case "hosted": return s.client.CreateDockerHostedRepository(req) case "proxy": @@ -293,7 +298,7 @@ func (s *ApplyService) createRepository(repo config.Repository) error { return s.client.CreateDockerGroupRepository(req) } case "npm": - switch repo.Type { + switch repoType { case "hosted": return s.client.CreateNpmHostedRepository(req) case "proxy": @@ -302,7 +307,7 @@ func (s *ApplyService) createRepository(repo config.Repository) error { return s.client.CreateNpmGroupRepository(req) } case "pypi": - switch repo.Type { + switch repoType { case "hosted": return s.client.CreatePypiHostedRepository(req) case "proxy": @@ -311,7 +316,7 @@ func (s *ApplyService) createRepository(repo config.Repository) error { return s.client.CreatePypiGroupRepository(req) } case "go": - switch repo.Type { + switch repoType { case "proxy": return s.client.CreateGoProxyRepository(req) case "group": @@ -320,7 +325,7 @@ func (s *ApplyService) createRepository(repo config.Repository) error { return fmt.Errorf("go format only supports proxy and group types") } case "raw": - switch repo.Type { + switch repoType { case "hosted": return s.client.CreateRawHostedRepository(req) case "proxy": @@ -329,10 +334,10 @@ func (s *ApplyService) createRepository(repo config.Repository) error { return s.client.CreateRawGroupRepository(req) } default: - return fmt.Errorf("unsupported repository format: %s", repo.Format) + return fmt.Errorf("unsupported repository format: %s", format) } - return fmt.Errorf("unsupported repository type: %s for format: %s", repo.Type, repo.Format) + return fmt.Errorf("unsupported repository type: %s for format: %s", repoType, format) } // applyUsers 应用用户配置