artmigrator/core/core.go
2024-11-21 17:49:21 +03:00

93 lines
3.4 KiB
Go

package core
import (
"flag"
"log"
"strings"
"tvoygit.ru/djam/artmigrator/config"
"tvoygit.ru/djam/artmigrator/repository/gitea"
"tvoygit.ru/djam/artmigrator/repository/nexus"
)
type App struct {
Config *config.Config
}
func NewApp(configFile string) (*App, error) {
log.Println("Загрузка конфигурации из файла", configFile)
cfg, err := config.LoadConfig(configFile)
if err != nil {
return nil, err
}
flag.StringVar(&cfg.Nexus.URL, "nexus-url", cfg.Nexus.URL, "Nexus URL")
flag.StringVar(&cfg.Nexus.Username, "nexus-username", cfg.Nexus.Username, "Nexus Username")
flag.StringVar(&cfg.Nexus.Password, "nexus-password", cfg.Nexus.Password, "Nexus Password")
flag.StringVar(&cfg.Gitea.URL, "gitea-url", cfg.Gitea.URL, "Gitea URL")
flag.StringVar(&cfg.Gitea.Token, "gitea-token", cfg.Gitea.Token, "Gitea Token")
flag.Parse()
return &App{Config: cfg}, nil
}
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 := a.Config.Nexus.Repository
log.Println("Начало процесса загрузки артефактов...")
artifacts, err := nexusClient.GetArtifacts(repository)
if err != nil {
return err
}
log.Printf("Найдены артефакты для загрузки в Gitea: %v", artifacts)
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)
parts := strings.Split(artifact, "/")
if len(parts) < 4 {
log.Printf("Некорректный формат артефакта %s", artifact)
continue
}
groupId := parts[0]
artifactId := parts[1]
version := parts[2]
fileParts := strings.Split(parts[3], ".")
if len(fileParts) < 2 {
log.Printf("Некорректный формат файла %s", parts[3])
continue
}
if fileParts[len(fileParts)-1] == "md5" || fileParts[len(fileParts)-1] == "sha1" || fileParts[len(fileParts)-1] == "sha256" || fileParts[len(fileParts)-1] == "sha512" {
log.Printf("Пропускаем файл %s, так как он имеет расширение .md5, .sha1, .sha256 или .sha512", artifact)
continue
}
packaging := fileParts[len(fileParts)-1]
log.Printf("Загрузка артефакта %s в репозиторий Gitea...", artifact)
err = giteaClient.UploadArtifact(groupId, artifactId, version, packaging, data)
if err != nil {
log.Printf("Ошибка загрузки артефакта %s в Gitea: %v", artifact, err)
} else {
log.Printf("Артефакт %s успешно загружен в Gitea", artifact)
}
}
}
log.Println("Процесс загрузки артефактов завершен.")
return nil
}