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

     1  //go:build !(WITHOUT_DOCKER || !(linux || darwin || windows || netbsd))
     2  
     3  package container
     4  
     5  import (
     6  	"context"
     7  	"fmt"
     8  
     9  	"github.com/docker/docker/api/types"
    10  	"github.com/docker/docker/client"
    11  )
    12  
    13  // ImageExistsLocally returns a boolean indicating if an image with the
    14  // requested name, tag and architecture exists in the local docker image store
    15  func ImageExistsLocally(ctx context.Context, imageName string, platform string) (bool, error) {
    16  	cli, err := GetDockerClient(ctx)
    17  	if err != nil {
    18  		return false, err
    19  	}
    20  	defer cli.Close()
    21  
    22  	inspectImage, _, err := cli.ImageInspectWithRaw(ctx, imageName)
    23  	if client.IsErrNotFound(err) {
    24  		return false, nil
    25  	} else if err != nil {
    26  		return false, err
    27  	}
    28  
    29  	if platform == "" || platform == "any" || fmt.Sprintf("%s/%s", inspectImage.Os, inspectImage.Architecture) == platform {
    30  		return true, nil
    31  	}
    32  
    33  	return false, nil
    34  }
    35  
    36  // RemoveImage removes image from local store, the function is used to run different
    37  // container image architectures
    38  func RemoveImage(ctx context.Context, imageName string, force bool, pruneChildren bool) (bool, error) {
    39  	cli, err := GetDockerClient(ctx)
    40  	if err != nil {
    41  		return false, err
    42  	}
    43  	defer cli.Close()
    44  
    45  	inspectImage, _, err := cli.ImageInspectWithRaw(ctx, imageName)
    46  	if client.IsErrNotFound(err) {
    47  		return false, nil
    48  	} else if err != nil {
    49  		return false, err
    50  	}
    51  
    52  	if _, err = cli.ImageRemove(ctx, inspectImage.ID, types.ImageRemoveOptions{
    53  		Force:         force,
    54  		PruneChildren: pruneChildren,
    55  	}); err != nil {
    56  		return false, err
    57  	}
    58  
    59  	return true, nil
    60  }