From cb816f8d6680add161c18fd628ba5be47cbe9729 Mon Sep 17 00:00:00 2001 From: Sergey Zhemoytel Date: Thu, 21 Nov 2024 12:40:38 +0300 Subject: [PATCH] update --- artifact_types/maven.go | 29 +++------------------- artifact_types/rpm.go | 1 - core/core.go | 52 ++++++++++++++++++++++----------------- go.mod | 2 +- go.sum | 8 ------ logger/logger.go | 2 +- main.go | 10 +++++--- repository/gitea/gitea.go | 8 ++++++ repository/nexus/nexus.go | 42 ++++++++++++++++++++++++++++--- 9 files changed, 88 insertions(+), 66 deletions(-) diff --git a/artifact_types/maven.go b/artifact_types/maven.go index 6d160f1..7b33a97 100644 --- a/artifact_types/maven.go +++ b/artifact_types/maven.go @@ -2,6 +2,7 @@ package artifact_types import ( "fmt" + "strings" ) type MavenArtifact struct { @@ -16,8 +17,8 @@ func (a MavenArtifact) String() string { } func ParseMavenArtifact(artifact string) (*MavenArtifact, error) { - parts := splitArtifact(artifact, 4) - if len(parts) < 4 { + parts := strings.Split(artifact, ":") + if len(parts) != 4 { return nil, fmt.Errorf("invalid Maven artifact format: %s", artifact) } return &MavenArtifact{ @@ -27,27 +28,3 @@ func ParseMavenArtifact(artifact string) (*MavenArtifact, error) { Packaging: parts[3], }, nil } - -func splitArtifact(artifact string, n int) []string { - parts := make([]string, n) - for i := 0; i < n-1; i++ { - index := findNextColon(artifact) - if index == -1 { - break - } - parts[i] = artifact[:index] - artifact = artifact[index+1:] - } - parts[n-1] = artifact - return parts -} - -func findNextColon(s string) int { - for i, r := range s { - if r == ':' { - return i - } - } - return -1 -} - diff --git a/artifact_types/rpm.go b/artifact_types/rpm.go index 10c2e26..52af703 100644 --- a/artifact_types/rpm.go +++ b/artifact_types/rpm.go @@ -30,4 +30,3 @@ func ParseRpmArtifact(artifact string) (*RpmArtifact, error) { Arch: matches[4], }, nil } - diff --git a/core/core.go b/core/core.go index 7299e4f..142533e 100644 --- a/core/core.go +++ b/core/core.go @@ -2,11 +2,11 @@ package core import ( "flag" + "log" "tvoygit.ru/djam/artmigrator/config" - "tvoygit.ru/djam/artmigrator/gitea" - "tvoygit.ru/djam/artmigrator/logger" - "tvoygit.ru/djam/artmigrator/nexus" + "tvoygit.ru/djam/artmigrator/repository/gitea" + "tvoygit.ru/djam/artmigrator/repository/nexus" ) type App struct { @@ -14,6 +14,7 @@ type App struct { } func NewApp(configFile string) (*App, error) { + log.Println("Загрузка конфигурации из файла", configFile) cfg, err := config.LoadConfig(configFile) if err != nil { return nil, err @@ -30,36 +31,43 @@ func NewApp(configFile string) (*App, error) { } func (a *App) Run() error { + log.Println("Начало процесса загрузки артефакта") + nexusClient := nexus.NewClient(a.Config.Nexus.URL, a.Config.Nexus.Username, a.Config.Nexus.Password) + log.Println("Авторизация в Nexus прошла успешно") + giteaClient := gitea.NewClient(a.Config.Gitea.URL, a.Config.Gitea.Token, a.Config) + log.Println("Авторизация в Gitea прошла успешно") repository := "your-repository-name" + log.Println("Начало процесса загрузки артефактов...") artifacts, err := nexusClient.GetArtifacts(repository) if err != nil { return err } + log.Printf("Найдены артефакты для загрузки в Gitea: %v", artifacts) - for _, artifact := range artifacts { - exists, err := giteaClient.ArtifactExists(artifact) - if err != nil { - return err - } - if exists { - logger.Logger.Printf("Artifact %s already exists in Gitea", artifact) - continue - } + if len(artifacts) == 0 { + log.Println("Нет артефактов для загрузки в Gitea") + } else { + for _, artifact := range artifacts { + log.Printf("Загрузка артефакта %s из репозитория Nexus...", artifact) + data, err := nexusClient.GetArtifactData(repository, artifact) + if err != nil { + log.Printf("Ошибка загрузки артефакта %s: %v", artifact, err) + continue + } + log.Printf("Артефакт %s загружен из репозитория Nexus", artifact) - // Загрузка артефакта - data, err := nexusClient.GetArtifactData(repository, artifact) - if err != nil { - return err + log.Printf("Загрузка артефакта %s в репозиторий Gitea...", artifact) + err = giteaClient.UploadArtifact(artifact, data) + if err != nil { + log.Printf("Ошибка загрузки артефакта %s в Gitea: %v", artifact, err) + } else { + log.Printf("Артефакт %s успешно загружен в Gitea", artifact) + } } - - err = giteaClient.UploadArtifact(artifact, data) - if err != nil { - return err - } - logger.Logger.Printf("Artifact %s uploaded to Gitea", artifact) } + log.Println("Процесс загрузки артефактов завершен.") return nil } diff --git a/go.mod b/go.mod index 0d3dd08..f813522 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module tvoygit.ru/djam/artmigrator -go 1.19 +go 1.23.3 require ( github.com/stretchr/testify v1.9.0 diff --git a/go.sum b/go.sum index 3b53c2a..b0965e1 100644 --- a/go.sum +++ b/go.sum @@ -1,19 +1,11 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/logger/logger.go b/logger/logger.go index 067be47..9a8cc16 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -9,4 +9,4 @@ var Logger *log.Logger func init() { Logger = log.New(os.Stdout, "", log.LstdFlags) -} \ No newline at end of file +} diff --git a/main.go b/main.go index a06cde5..ac178b2 100644 --- a/main.go +++ b/main.go @@ -7,13 +7,17 @@ import ( ) func main() { + log.Println("Начало программы") + app, err := core.NewApp("config.yaml") if err != nil { - log.Fatalf("Failed to create app: %v", err) + log.Fatalf("Ошибка загрузки конфигурации: %v", err) } + log.Println("Конфигурация загружена успешно") err = app.Run() if err != nil { - log.Fatalf("Failed to run app: %v", err) + log.Fatalf("Ошибка выполнения программы: %v", err) } -} \ No newline at end of file + log.Println("Программа выполнена успешно") +} diff --git a/repository/gitea/gitea.go b/repository/gitea/gitea.go index b7a5856..350af39 100644 --- a/repository/gitea/gitea.go +++ b/repository/gitea/gitea.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "io/ioutil" + "log" "net/http" "tvoygit.ru/djam/artmigrator/config" @@ -28,6 +29,7 @@ func NewClient(baseURL, token string, config *config.Config) *Client { } func (c *Client) ArtifactExists(artifact string) (bool, error) { + log.Printf("Проверка наличия артефакта %s в репозитории Gitea", artifact) url := fmt.Sprintf("%s/api/v1/repos/%s/%s/contents/%s", c.BaseURL, c.Config.Gitea.Username, c.Config.Gitea.Repo, artifact) req, err := http.NewRequest("GET", url, nil) if err != nil { @@ -42,8 +44,11 @@ func (c *Client) ArtifactExists(artifact string) (bool, error) { defer resp.Body.Close() if resp.StatusCode == http.StatusNotFound { + log.Printf("Артефакт %s не существует в репозитории Gitea", artifact) return false, nil } + + log.Printf("Артефакт %s существует в репозитории Gitea", artifact) return true, nil } @@ -53,6 +58,7 @@ type UploadArtifactRequest struct { } func (c *Client) UploadArtifact(artifactPath string, data []byte) error { + log.Printf("Загрузка артефакта %s в репозиторий Gitea", artifactPath) url := fmt.Sprintf("%s/api/v1/repos/%s/%s/contents/%s?ref=master", c.BaseURL, c.Config.Gitea.Username, c.Config.Gitea.Repo, artifactPath) request := UploadArtifactRequest{ Content: string(data), @@ -94,5 +100,7 @@ func (c *Client) UploadArtifact(artifactPath string, data []byte) error { logger.Logger.Printf("Failed to upload artifact: %s", body) return fmt.Errorf("failed to upload artifact") } + + log.Printf("Артефакт %s загружен в репозиторий Gitea", artifactPath) return nil } diff --git a/repository/nexus/nexus.go b/repository/nexus/nexus.go index 83bc446..0ac25a6 100644 --- a/repository/nexus/nexus.go +++ b/repository/nexus/nexus.go @@ -3,9 +3,9 @@ package nexus import ( "fmt" "io/ioutil" + "log" "net/http" "strings" - ) type Client struct { @@ -25,6 +25,7 @@ func NewClient(baseURL, username, password string) *Client { } func (c *Client) GetArtifacts(repository string) ([]string, error) { + log.Printf("Получение артефактов из репозитория Nexus") url := fmt.Sprintf("%s/repository/%s/", c.BaseURL, repository) req, err := http.NewRequest("GET", url, nil) if err != nil { @@ -43,12 +44,19 @@ func (c *Client) GetArtifacts(repository string) ([]string, error) { return nil, err } - // Здесь нужно парсить ответ и вытащить список артефактов + log.Printf("Артефакты получены из репозитория Nexus") artifacts := strings.Split(string(body), "\n") - return artifacts, nil + var result []string + for _, artifact := range artifacts { + if strings.Contains(artifact, ".jar") || strings.Contains(artifact, ".pom") { + result = append(result, artifact) + } + } + return result, nil } func (c *Client) GetArtifactData(repository, artifact string) ([]byte, error) { + log.Printf("Загрузка артефакта %s из репозитория Nexus", artifact) url := fmt.Sprintf("%s/repository/%s/%s", c.BaseURL, repository, artifact) req, err := http.NewRequest("GET", url, nil) if err != nil { @@ -66,5 +74,31 @@ func (c *Client) GetArtifactData(repository, artifact string) ([]byte, error) { if err != nil { return nil, err } + + log.Printf("Артефакт %s загружен из репозитория Nexus", artifact) return body, nil -} \ No newline at end of file +} + +func (c *Client) ArtifactExists(artifact string) (bool, error) { + log.Printf("Проверка наличия артефакта %s в репозитории Nexus", artifact) + url := fmt.Sprintf("%s/repository/%s/%s", c.BaseURL, "your-repository-name", artifact) + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return false, err + } + req.SetBasicAuth(c.Username, c.Password) + + resp, err := c.HTTPClient.Do(req) + if err != nil { + return false, err + } + defer resp.Body.Close() + + if resp.StatusCode == http.StatusNotFound { + log.Printf("Артефакт %s не существует в репозитории Nexus", artifact) + return false, nil + } + + log.Printf("Артефакт %s существует в репозитории Nexus", artifact) + return true, nil +}