From 9ef68fbbb59402442616389853dae222e806a177 Mon Sep 17 00:00:00 2001
From: Cian Johnston <cian@coder.com>
Date: Fri, 6 Sep 2024 17:04:40 +0100
Subject: [PATCH 1/2] fix: set DOCKER_CONFIG dynamically

---
 envbuilder.go      | 6 ++++++
 scripts/Dockerfile | 2 --
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/envbuilder.go b/envbuilder.go
index ac64beea..f9716c5f 100644
--- a/envbuilder.go
+++ b/envbuilder.go
@@ -1497,9 +1497,15 @@ func initDockerConfigJSON(logf log.Func, magicDir magicdir.MagicDir, dockerConfi
 		return noop, fmt.Errorf("write docker config: %w", err)
 	}
 	logf(log.LevelInfo, "Wrote Docker config JSON to %s", cfgPath)
+	oldDockerConfig := os.Getenv("DOCKER_CONFIG")
+	os.Setenv("DOCKER_CONFIG", magicDir.String())
+	logf(log.LevelInfo, "Set DOCKER_CONFIG to %s", magicDir.String())
 	cleanup := func() error {
 		var cleanupErr error
 		cleanupOnce.Do(func() {
+			// Restore the old DOCKER_CONFIG value.
+			os.Setenv("DOCKER_CONFIG", oldDockerConfig)
+			logf(log.LevelInfo, "Restored DOCKER_CONFIG to %s", oldDockerConfig)
 			// Remove the Docker config secret file!
 			if cleanupErr = os.Remove(cfgPath); err != nil {
 				if !errors.Is(err, fs.ErrNotExist) {
diff --git a/scripts/Dockerfile b/scripts/Dockerfile
index b8198a1d..6259407b 100644
--- a/scripts/Dockerfile
+++ b/scripts/Dockerfile
@@ -4,7 +4,5 @@ ARG TARGETARCH
 COPY envbuilder-${TARGETARCH} /.envbuilder/bin/envbuilder
 
 ENV KANIKO_DIR /.envbuilder
-# Kaniko looks for the Docker config at $DOCKER_CONFIG/config.json
-ENV DOCKER_CONFIG /.envbuilder
 
 ENTRYPOINT ["/.envbuilder/bin/envbuilder"]

From 5672adaa68fcc6c7411712e2ddc18a46713ed1ad Mon Sep 17 00:00:00 2001
From: Cian Johnston <cian@coder.com>
Date: Mon, 9 Sep 2024 23:13:21 +0100
Subject: [PATCH 2/2] fixup

---
 envbuilder.go | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/envbuilder.go b/envbuilder.go
index f9716c5f..934c51e3 100644
--- a/envbuilder.go
+++ b/envbuilder.go
@@ -1475,7 +1475,7 @@ func initDockerConfigJSON(logf log.Func, magicDir magicdir.MagicDir, dockerConfi
 	if dockerConfigBase64 == "" {
 		return noop, nil
 	}
-	cfgPath := filepath.Join(magicDir.Path(), "config.json")
+	cfgPath := magicDir.Join("config.json")
 	decoded, err := base64.StdEncoding.DecodeString(dockerConfigBase64)
 	if err != nil {
 		return noop, fmt.Errorf("decode docker config: %w", err)
@@ -1498,8 +1498,9 @@ func initDockerConfigJSON(logf log.Func, magicDir magicdir.MagicDir, dockerConfi
 	}
 	logf(log.LevelInfo, "Wrote Docker config JSON to %s", cfgPath)
 	oldDockerConfig := os.Getenv("DOCKER_CONFIG")
-	os.Setenv("DOCKER_CONFIG", magicDir.String())
-	logf(log.LevelInfo, "Set DOCKER_CONFIG to %s", magicDir.String())
+	_ = os.Setenv("DOCKER_CONFIG", magicDir.Path())
+	newDockerConfig := os.Getenv("DOCKER_CONFIG")
+	logf(log.LevelInfo, "Set DOCKER_CONFIG to %s", newDockerConfig)
 	cleanup := func() error {
 		var cleanupErr error
 		cleanupOnce.Do(func() {