(req dto.ImagePush)
| 442 | } |
| 443 | |
| 444 | func (u *ImageService) ImagePush(req dto.ImagePush) error { |
| 445 | client, err := docker.NewDockerClient() |
| 446 | if err != nil { |
| 447 | return err |
| 448 | } |
| 449 | defer client.Close() |
| 450 | |
| 451 | taskItem, err := task.NewTaskWithOps(req.Name, task.TaskPush, task.TaskScopeImage, req.TaskID, 1) |
| 452 | if err != nil { |
| 453 | return fmt.Errorf("new task for image push failed, err: %v", err) |
| 454 | } |
| 455 | |
| 456 | go func() { |
| 457 | options := image.PushOptions{All: true} |
| 458 | var imageRepo model.ImageRepo |
| 459 | newName := "" |
| 460 | taskItem.AddSubTask(i18n.GetMsgByKey("ImagePush"), func(t *task.Task) error { |
| 461 | imageRepo, err = imageRepoRepo.Get(repo.WithByID(req.RepoID)) |
| 462 | newName = fmt.Sprintf("%s/%s", imageRepo.DownloadUrl, req.Name) |
| 463 | taskItem.LogWithStatus(i18n.GetMsgByKey("ImageRepoAuthFromDB"), err) |
| 464 | if err != nil { |
| 465 | return err |
| 466 | } |
| 467 | options = image.PushOptions{All: true} |
| 468 | authConfig := registry.AuthConfig{ |
| 469 | Username: imageRepo.Username, |
| 470 | Password: imageRepo.Password, |
| 471 | } |
| 472 | encodedJSON, _ := json.Marshal(authConfig) |
| 473 | authStr := base64.URLEncoding.EncodeToString(encodedJSON) |
| 474 | options.RegistryAuth = authStr |
| 475 | return nil |
| 476 | }, nil) |
| 477 | taskItem.AddSubTask(i18n.GetMsgByKey("ImageRenameTag"), func(t *task.Task) error { |
| 478 | taskItem.Log(i18n.GetWithName("ImageNewTag", newName)) |
| 479 | if newName != req.TagName { |
| 480 | if err := client.ImageTag(context.TODO(), req.TagName, newName); err != nil { |
| 481 | return err |
| 482 | } |
| 483 | } |
| 484 | return nil |
| 485 | }, nil) |
| 486 | taskItem.AddSubTask(i18n.GetMsgByKey("TaskPush"), func(t *task.Task) error { |
| 487 | dockerCli := docker.NewClientWithExist(client) |
| 488 | if err := dockerCli.PushImageWithProcessAndOptions(taskItem, newName, options); err != nil { |
| 489 | return err |
| 490 | } |
| 491 | return nil |
| 492 | }, nil) |
| 493 | _ = taskItem.Execute() |
| 494 | }() |
| 495 | |
| 496 | return nil |
| 497 | } |
| 498 | |
| 499 | func (u *ImageService) ImageRemove(req dto.BatchDelete) error { |
| 500 | client, err := docker.NewDockerClient() |
nothing calls this directly
no test coverage detected