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

     1  //go:build !(WITHOUT_DOCKER || !(linux || darwin || windows || netbsd))
     2  
     3  package container
     4  
     5  import (
     6  	"context"
     7  	"strings"
     8  
     9  	"github.com/docker/cli/cli/config"
    10  	"github.com/docker/cli/cli/config/credentials"
    11  	"github.com/docker/docker/api/types/registry"
    12  	"github.com/nektos/act/pkg/common"
    13  )
    14  
    15  func LoadDockerAuthConfig(ctx context.Context, image string) (registry.AuthConfig, error) {
    16  	logger := common.Logger(ctx)
    17  	config, err := config.Load(config.Dir())
    18  	if err != nil {
    19  		logger.Warnf("Could not load docker config: %v", err)
    20  		return registry.AuthConfig{}, err
    21  	}
    22  
    23  	if !config.ContainsAuth() {
    24  		config.CredentialsStore = credentials.DetectDefaultStore(config.CredentialsStore)
    25  	}
    26  
    27  	hostName := "index.docker.io"
    28  	index := strings.IndexRune(image, '/')
    29  	if index > -1 && (strings.ContainsAny(image[:index], ".:") || image[:index] == "localhost") {
    30  		hostName = image[:index]
    31  	}
    32  
    33  	authConfig, err := config.GetAuthConfig(hostName)
    34  	if err != nil {
    35  		logger.Warnf("Could not get auth config from docker config: %v", err)
    36  		return registry.AuthConfig{}, err
    37  	}
    38  
    39  	return registry.AuthConfig(authConfig), nil
    40  }
    41  
    42  func LoadDockerAuthConfigs(ctx context.Context) map[string]registry.AuthConfig {
    43  	logger := common.Logger(ctx)
    44  	config, err := config.Load(config.Dir())
    45  	if err != nil {
    46  		logger.Warnf("Could not load docker config: %v", err)
    47  		return nil
    48  	}
    49  
    50  	if !config.ContainsAuth() {
    51  		config.CredentialsStore = credentials.DetectDefaultStore(config.CredentialsStore)
    52  	}
    53  
    54  	creds, _ := config.GetAllCredentials()
    55  	authConfigs := make(map[string]registry.AuthConfig, len(creds))
    56  	for k, v := range creds {
    57  		authConfigs[k] = registry.AuthConfig(v)
    58  	}
    59  
    60  	return authConfigs
    61  }