diff --git a/cmd/werf/compose/main.go b/cmd/werf/compose/main.go index 788b7041dd..6488e53a8a 100644 --- a/cmd/werf/compose/main.go +++ b/cmd/werf/compose/main.go @@ -101,7 +101,7 @@ func NewUpCmd(ctx context.Context) *cobra.Command { } func NewDownCmd(ctx context.Context) *cobra.Command { - return newCmd(ctx, "down", &newCmdOptions{ + cmd := newCmd(ctx, "down", &newCmdOptions{ Use: "down [IMAGE_NAME...] [options] [--docker-compose-options=\"OPTIONS\"] [--docker-compose-command-options=\"OPTIONS\"]", Example: ` # Run docker-compose down with forwarded image names $ werf compose down @@ -113,6 +113,10 @@ func NewDownCmd(ctx context.Context) *cobra.Command { FollowSupport: false, ArgsSupport: false, }) + + cmd.Flag("without-images").DefValue = "true" + + return cmd } func newCmd(ctx context.Context, composeCmdName string, options *newCmdOptions) *cobra.Command { @@ -345,81 +349,82 @@ func runMain(ctx context.Context, dockerComposeCmdName string, cmdData composeCm } func run(ctx context.Context, containerBackend container_backend.ContainerBackend, giterminismManager giterminism_manager.Interface, commonCmdData common.CmdData, cmdData composeCmdData, dockerComposeCmdName string) error { - imagesToProcess := common.GetImagesToProcess(cmdData.WerfImagesToProcess, *commonCmdData.WithoutImages) - - _, werfConfig, err := common.GetRequiredWerfConfig(ctx, &commonCmdData, giterminismManager, common.GetWerfConfigOptions(&commonCmdData, true)) - if err != nil { - return fmt.Errorf("unable to load werf config: %w", err) - } - if err := werfConfig.CheckThatImagesExist(imagesToProcess.OnlyImages); err != nil { - return err - } - - projectName := werfConfig.Meta.Project - var envArray []string + if dockerComposeCmdName != "down" { + imagesToProcess := common.GetImagesToProcess(cmdData.WerfImagesToProcess, *commonCmdData.WithoutImages) - if !imagesToProcess.WithoutImages && (len(werfConfig.StapelImages)+len(werfConfig.ImagesFromDockerfile) > 0) { - projectTmpDir, err := tmp_manager.CreateProjectDir(ctx) - if err != nil { - return fmt.Errorf("getting project tmp dir failed: %w", err) - } - defer tmp_manager.ReleaseProjectDir(projectTmpDir) - - stagesStorage, err := common.GetStagesStorage(ctx, containerBackend, &commonCmdData) - if err != nil { - return err - } - finalStagesStorage, err := common.GetOptionalFinalStagesStorage(ctx, containerBackend, &commonCmdData) - if err != nil { - return err - } - synchronization, err := common.GetSynchronization(ctx, &commonCmdData, projectName, stagesStorage) - if err != nil { - return err - } - storageLockManager, err := common.GetStorageLockManager(ctx, synchronization) - if err != nil { - return err - } - secondaryStagesStorageList, err := common.GetSecondaryStagesStorageList(ctx, stagesStorage, containerBackend, &commonCmdData) + _, werfConfig, err := common.GetRequiredWerfConfig(ctx, &commonCmdData, giterminismManager, common.GetWerfConfigOptions(&commonCmdData, true)) if err != nil { - return err + return fmt.Errorf("unable to load werf config: %w", err) } - cacheStagesStorageList, err := common.GetCacheStagesStorageList(ctx, containerBackend, &commonCmdData) - if err != nil { + if err := werfConfig.CheckThatImagesExist(imagesToProcess.OnlyImages); err != nil { return err } - storageManager := manager.NewStorageManager(projectName, stagesStorage, finalStagesStorage, secondaryStagesStorageList, cacheStagesStorageList, storageLockManager) + projectName := werfConfig.Meta.Project - logboek.Context(ctx).Info().LogOptionalLn() + if !imagesToProcess.WithoutImages && (len(werfConfig.StapelImages)+len(werfConfig.ImagesFromDockerfile) > 0) { + projectTmpDir, err := tmp_manager.CreateProjectDir(ctx) + if err != nil { + return fmt.Errorf("getting project tmp dir failed: %w", err) + } + defer tmp_manager.ReleaseProjectDir(projectTmpDir) - conveyorWithRetry := build.NewConveyorWithRetryWrapper(werfConfig, giterminismManager, giterminismManager.ProjectDir(), projectTmpDir, ssh_agent.SSHAuthSock, containerBackend, storageManager, storageLockManager, common.GetConveyorOptions(&commonCmdData, imagesToProcess)) - defer conveyorWithRetry.Terminate() + stagesStorage, err := common.GetStagesStorage(ctx, containerBackend, &commonCmdData) + if err != nil { + return err + } + finalStagesStorage, err := common.GetOptionalFinalStagesStorage(ctx, containerBackend, &commonCmdData) + if err != nil { + return err + } + synchronization, err := common.GetSynchronization(ctx, &commonCmdData, projectName, stagesStorage) + if err != nil { + return err + } + storageLockManager, err := common.GetStorageLockManager(ctx, synchronization) + if err != nil { + return err + } + secondaryStagesStorageList, err := common.GetSecondaryStagesStorageList(ctx, stagesStorage, containerBackend, &commonCmdData) + if err != nil { + return err + } + cacheStagesStorageList, err := common.GetCacheStagesStorageList(ctx, containerBackend, &commonCmdData) + if err != nil { + return err + } - if err := conveyorWithRetry.WithRetryBlock(ctx, func(c *build.Conveyor) error { - if *commonCmdData.SkipBuild { - if err := c.ShouldBeBuilt(ctx, build.ShouldBeBuiltOptions{}); err != nil { - return err - } - } else { - if err := c.Build(ctx, build.BuildOptions{SkipImageMetadataPublication: *commonCmdData.Dev}); err != nil { - return err + storageManager := manager.NewStorageManager(projectName, stagesStorage, finalStagesStorage, secondaryStagesStorageList, cacheStagesStorageList, storageLockManager) + + logboek.Context(ctx).Info().LogOptionalLn() + + conveyorWithRetry := build.NewConveyorWithRetryWrapper(werfConfig, giterminismManager, giterminismManager.ProjectDir(), projectTmpDir, ssh_agent.SSHAuthSock, containerBackend, storageManager, storageLockManager, common.GetConveyorOptions(&commonCmdData, imagesToProcess)) + defer conveyorWithRetry.Terminate() + + if err := conveyorWithRetry.WithRetryBlock(ctx, func(c *build.Conveyor) error { + if *commonCmdData.SkipBuild { + if err := c.ShouldBeBuilt(ctx, build.ShouldBeBuiltOptions{}); err != nil { + return err + } + } else { + if err := c.Build(ctx, build.BuildOptions{SkipImageMetadataPublication: *commonCmdData.Dev}); err != nil { + return err + } } - } - for _, imageName := range c.GetExportedImagesNames() { - if err := c.FetchLastImageStage(ctx, imageName); err != nil { - return err + for _, imageName := range c.GetExportedImagesNames() { + if err := c.FetchLastImageStage(ctx, imageName); err != nil { + return err + } } - } - envArray = c.GetImagesEnvArray() + envArray = c.GetImagesEnvArray() - return nil - }); err != nil { - return err + return nil + }); err != nil { + return err + } } }