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 }