From 3f3b25ae84a25f8488f3801e3342bb3f96c6cd8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Brauer?= Date: Thu, 12 Jan 2023 22:29:30 +0100 Subject: [PATCH] feat: add support for building docker actions with private registries (#1557) This commit adds a new `LoadDockerAuthConfigs` function, which loads all registry auths that are configured on the host and sends them with the build command to the docker daemon. This is needed in case act builds a docker action and the images referenced in that docker action are located on private registries or otherwise require authentication (e.g. to get a higher rate limit). The code is adapted from how the docker cli works: https://github.com/docker/cli/blob/257ff41304bf121bdf1acdf00a1c7a896ed038d1/cli/command/image/build.go#L323-L332 Co-authored-by: Markus Wolf Co-authored-by: Markus Wolf --- pkg/container/docker_auth.go | 21 +++++++++++++++++++++ pkg/container/docker_build.go | 7 ++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/pkg/container/docker_auth.go b/pkg/container/docker_auth.go index 466c003..e47fe64 100644 --- a/pkg/container/docker_auth.go +++ b/pkg/container/docker_auth.go @@ -38,3 +38,24 @@ func LoadDockerAuthConfig(ctx context.Context, image string) (types.AuthConfig, return types.AuthConfig(authConfig), nil } + +func LoadDockerAuthConfigs(ctx context.Context) map[string]types.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]types.AuthConfig, len(creds)) + for k, v := range creds { + authConfigs[k] = types.AuthConfig(v) + } + + return authConfigs +} diff --git a/pkg/container/docker_build.go b/pkg/container/docker_build.go index 2c972f4..f05a513 100644 --- a/pkg/container/docker_build.go +++ b/pkg/container/docker_build.go @@ -41,9 +41,10 @@ func NewDockerBuildExecutor(input NewDockerBuildExecutorInput) common.Executor { tags := []string{input.ImageTag} options := types.ImageBuildOptions{ - Tags: tags, - Remove: true, - Platform: input.Platform, + Tags: tags, + Remove: true, + Platform: input.Platform, + AuthConfigs: LoadDockerAuthConfigs(ctx), } var buildContext io.ReadCloser if input.Container != nil {