mirror of
https://tvoygit.ru/Djam/artmigrator.git
synced 2025-02-23 18:32:46 +00:00
93 lines
3.4 KiB
Go
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
|
|
}
|