summaryrefslogtreecommitdiffstats
path: root/pkg/container/docker_auth.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/container/docker_auth.go')
-rw-r--r--pkg/container/docker_auth.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/pkg/container/docker_auth.go b/pkg/container/docker_auth.go
new file mode 100644
index 0000000..e8dfb7d
--- /dev/null
+++ b/pkg/container/docker_auth.go
@@ -0,0 +1,61 @@
+//go:build !(WITHOUT_DOCKER || !(linux || darwin || windows || netbsd))
+
+package container
+
+import (
+ "context"
+ "strings"
+
+ "github.com/docker/cli/cli/config"
+ "github.com/docker/cli/cli/config/credentials"
+ "github.com/docker/docker/api/types/registry"
+ "github.com/nektos/act/pkg/common"
+)
+
+func LoadDockerAuthConfig(ctx context.Context, image string) (registry.AuthConfig, error) {
+ logger := common.Logger(ctx)
+ config, err := config.Load(config.Dir())
+ if err != nil {
+ logger.Warnf("Could not load docker config: %v", err)
+ return registry.AuthConfig{}, err
+ }
+
+ if !config.ContainsAuth() {
+ config.CredentialsStore = credentials.DetectDefaultStore(config.CredentialsStore)
+ }
+
+ hostName := "index.docker.io"
+ index := strings.IndexRune(image, '/')
+ if index > -1 && (strings.ContainsAny(image[:index], ".:") || image[:index] == "localhost") {
+ hostName = image[:index]
+ }
+
+ authConfig, err := config.GetAuthConfig(hostName)
+ if err != nil {
+ logger.Warnf("Could not get auth config from docker config: %v", err)
+ return registry.AuthConfig{}, err
+ }
+
+ return registry.AuthConfig(authConfig), nil
+}
+
+func LoadDockerAuthConfigs(ctx context.Context) map[string]registry.AuthConfig {
+ logger := common.Logger(ctx)
+ config, err := config.Load(config.Dir())
+ if err != nil {
+ logger.Warnf("Could not load docker config: %v", err)
+ return nil
+ }
+
+ if !config.ContainsAuth() {
+ config.CredentialsStore = credentials.DetectDefaultStore(config.CredentialsStore)
+ }
+
+ creds, _ := config.GetAllCredentials()
+ authConfigs := make(map[string]registry.AuthConfig, len(creds))
+ for k, v := range creds {
+ authConfigs[k] = registry.AuthConfig(v)
+ }
+
+ return authConfigs
+}