diff options
Diffstat (limited to 'pkg/container/docker_volume.go')
-rw-r--r-- | pkg/container/docker_volume.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/pkg/container/docker_volume.go b/pkg/container/docker_volume.go new file mode 100644 index 0000000..f99c584 --- /dev/null +++ b/pkg/container/docker_volume.go @@ -0,0 +1,54 @@ +//go:build !(WITHOUT_DOCKER || !(linux || darwin || windows || netbsd)) + +package container + +import ( + "context" + + "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/volume" + "github.com/nektos/act/pkg/common" +) + +func NewDockerVolumeRemoveExecutor(volumeName string, force bool) common.Executor { + return func(ctx context.Context) error { + cli, err := GetDockerClient(ctx) + if err != nil { + return err + } + defer cli.Close() + + list, err := cli.VolumeList(ctx, volume.ListOptions{Filters: filters.NewArgs()}) + if err != nil { + return err + } + + for _, vol := range list.Volumes { + if vol.Name == volumeName { + return removeExecutor(volumeName, force)(ctx) + } + } + + // Volume not found - do nothing + return nil + } +} + +func removeExecutor(volume string, force bool) common.Executor { + return func(ctx context.Context) error { + logger := common.Logger(ctx) + logger.Debugf("%sdocker volume rm %s", logPrefix, volume) + + if common.Dryrun(ctx) { + return nil + } + + cli, err := GetDockerClient(ctx) + if err != nil { + return err + } + defer cli.Close() + + return cli.VolumeRemove(ctx, volume, force) + } +} |