dockerimg: add support for passing env vars to Docker via git config
Co-Authored-By: sketch <hello@sketch.dev>
diff --git a/dockerimg/dockerimg.go b/dockerimg/dockerimg.go
index 90e9d8f..292c8b6 100644
--- a/dockerimg/dockerimg.go
+++ b/dockerimg/dockerimg.go
@@ -177,7 +177,7 @@
// Create the sketch container
if err := createDockerContainer(ctx, cntrName, hostPort, relPath, imgName, config); err != nil {
- return err
+ return fmt.Errorf("failed to create docker container: %w", err)
}
// Copy the sketch linux binary into the container
@@ -415,8 +415,6 @@
}
func createDockerContainer(ctx context.Context, cntrName, hostPort, relPath, imgName string, config ContainerConfig) error {
- //, config.SessionID, config.GitUsername, config.GitEmail, config.SkabandAddr
- // sessionID, gitUsername, gitEmail, skabandAddr string
cmdArgs := []string{
"create",
"-it",
@@ -424,6 +422,10 @@
"-p", hostPort + ":80", // forward container port 80 to a host port
"-e", "ANTHROPIC_API_KEY=" + config.AntAPIKey,
}
+
+ for _, envVar := range getEnvForwardingFromGitConfig(ctx) {
+ cmdArgs = append(cmdArgs, "-e", envVar)
+ }
if config.AntURL != "" {
cmdArgs = append(cmdArgs, "-e", "ANT_URL="+config.AntURL)
}
@@ -808,3 +810,27 @@
return os.Remove(src)
}
+
+// getEnvForwardingFromGitConfig retrieves environment variables to pass through to Docker
+// from git config using the sketch.envfwd multi-valued key.
+func getEnvForwardingFromGitConfig(ctx context.Context) []string {
+ outb, err := exec.CommandContext(ctx, "git", "config", "--get-all", "sketch.envfwd").CombinedOutput()
+ out := string(outb)
+ if err != nil {
+ if strings.Contains(out, "key does not exist") {
+ return nil
+ }
+ slog.ErrorContext(ctx, "failed to get sketch.envfwd from git config", "err", err, "output", out)
+ return nil
+ }
+
+ var envVars []string
+ for envVar := range strings.Lines(out) {
+ envVar = strings.TrimSpace(envVar)
+ if envVar == "" {
+ continue
+ }
+ envVars = append(envVars, envVar+"="+os.Getenv(envVar))
+ }
+ return envVars
+}