summaryrefslogtreecommitdiffstats
path: root/pkg/container/docker_volume.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/container/docker_volume.go')
-rw-r--r--pkg/container/docker_volume.go54
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)
+ }
+}