github.com/nektos/act@v0.2.63/pkg/container/docker_volume.go (about)

     1  //go:build !(WITHOUT_DOCKER || !(linux || darwin || windows || netbsd))
     2  
     3  package container
     4  
     5  import (
     6  	"context"
     7  
     8  	"github.com/docker/docker/api/types/filters"
     9  	"github.com/docker/docker/api/types/volume"
    10  	"github.com/nektos/act/pkg/common"
    11  )
    12  
    13  func NewDockerVolumeRemoveExecutor(volumeName string, force bool) common.Executor {
    14  	return func(ctx context.Context) error {
    15  		cli, err := GetDockerClient(ctx)
    16  		if err != nil {
    17  			return err
    18  		}
    19  		defer cli.Close()
    20  
    21  		list, err := cli.VolumeList(ctx, volume.ListOptions{Filters: filters.NewArgs()})
    22  		if err != nil {
    23  			return err
    24  		}
    25  
    26  		for _, vol := range list.Volumes {
    27  			if vol.Name == volumeName {
    28  				return removeExecutor(volumeName, force)(ctx)
    29  			}
    30  		}
    31  
    32  		// Volume not found - do nothing
    33  		return nil
    34  	}
    35  }
    36  
    37  func removeExecutor(volume string, force bool) common.Executor {
    38  	return func(ctx context.Context) error {
    39  		logger := common.Logger(ctx)
    40  		logger.Debugf("%sdocker volume rm %s", logPrefix, volume)
    41  
    42  		if common.Dryrun(ctx) {
    43  			return nil
    44  		}
    45  
    46  		cli, err := GetDockerClient(ctx)
    47  		if err != nil {
    48  			return err
    49  		}
    50  		defer cli.Close()
    51  
    52  		return cli.VolumeRemove(ctx, volume, force)
    53  	}
    54  }