mirror of
https://github.com/portainer/portainer.git
synced 2025-07-25 16:29:44 +02:00
47 lines
1.5 KiB
Go
47 lines
1.5 KiB
Go
package liboras
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
"github.com/portainer/portainer/api/http/proxy/factory/gitlab"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
// GitlabListRepoClient implements RepositoryListClient specifically for GitLab registries
|
|
// This client handles the GitLab Container Registry API's unique repository listing implementation
|
|
type GitlabListRepoClient struct {
|
|
registry *portainer.Registry
|
|
client *gitlab.Client
|
|
}
|
|
|
|
// NewGitlabListRepoClient creates a new GitLab repository listing client
|
|
func NewGitlabListRepoClient(registry *portainer.Registry) *GitlabListRepoClient {
|
|
client := gitlab.NewClient(registry.Gitlab.InstanceURL, registry.Password)
|
|
|
|
return &GitlabListRepoClient{
|
|
registry: registry,
|
|
client: client,
|
|
}
|
|
}
|
|
|
|
// ListRepositories fetches repositories from a GitLab registry using the GitLab API
|
|
func (c *GitlabListRepoClient) ListRepositories(ctx context.Context) ([]string, error) {
|
|
repositories, err := c.client.GetRegistryRepositoryNames(ctx, c.registry.Gitlab.ProjectID)
|
|
if err != nil {
|
|
log.Error().
|
|
Str("registry_name", c.registry.Name).
|
|
Err(err).
|
|
Msg("Failed to list GitLab repositories")
|
|
return nil, fmt.Errorf("failed to list GitLab repositories: %w", err)
|
|
}
|
|
|
|
log.Debug().
|
|
Str("gitlab_url", c.registry.Gitlab.InstanceURL).
|
|
Int("project_id", c.registry.Gitlab.ProjectID).
|
|
Int("repository_count", len(repositories)).
|
|
Msg("Successfully listed GitLab repositories")
|
|
|
|
return repositories, nil
|
|
}
|