Skip to content

Commit ac9b534

Browse files
committed
feat: allow using tilde in tmp dir
1 parent dcdfb6e commit ac9b534

3 files changed

Lines changed: 43 additions & 2 deletions

File tree

internal/config/load.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,22 @@ func readConfig(path string) (*Config, error) {
176176
}
177177
if cfg.Docker == nil {
178178
cfg.Docker = &Docker{Bin: "docker"}
179-
} else if cfg.Docker.Bin == "" {
180-
cfg.Docker.Bin = "docker"
179+
} else {
180+
if cfg.Docker.Bin == "" {
181+
cfg.Docker.Bin = "docker"
182+
}
183+
if cfg.Docker.Tmp != "" {
184+
tmp := cfg.Docker.Tmp
185+
dir, err := expandTilde(tmp)
186+
if err != nil {
187+
return nil, err
188+
}
189+
err = os.MkdirAll(dir, 0755)
190+
if err != nil {
191+
return nil, err
192+
}
193+
cfg.Docker.Tmp = dir
194+
}
181195
}
182196

183197
return cfg, err
@@ -232,6 +246,21 @@ func readBoxesFile(path string) (map[string]*Box, error) {
232246
return boxes, err
233247
}
234248

249+
// userHomeDir returns the current user's home directory.
250+
var userHomeDir = os.UserHomeDir
251+
252+
// expandTilde expands strings like "~/.local" with the path.
253+
func expandTilde(dir string) (string, error) {
254+
if strings.HasPrefix(dir, "~/") {
255+
homeDir, err := userHomeDir()
256+
if err != nil {
257+
return "", err
258+
}
259+
dir = strings.Replace(dir, "~", homeDir, 1)
260+
}
261+
return dir, nil
262+
}
263+
235264
// readCommands reads command configs from a set of JSON files in the given path.
236265
func readCommands(cfg *Config, path string, pattern string) (*Config, error) {
237266
logx.Debug("reading commands from %s/%s", path, pattern)

internal/config/load_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
package config
22

33
import (
4+
"path/filepath"
45
"testing"
56

67
"github.com/nalgeon/be"
78
)
89

910
func TestRead(t *testing.T) {
11+
home := filepath.Join(t.TempDir(), "HOME")
12+
userHomeDir = func() (string, error) { return home, nil }
13+
1014
cfg, err := Read("testdata")
1115
be.Err(t, err, nil)
1216
be.Equal(t, cfg.PoolSize, 8)
1317
be.Equal(t, cfg.Verbose, true)
1418
be.Equal(t, cfg.Box.Memory, 64)
1519
be.Equal(t, cfg.Step.User, "sandbox")
1620

21+
// docker
22+
be.Equal(t, cfg.Docker.Bin, "docker")
23+
be.Equal(t, cfg.Docker.Tmp, home+"/tmp")
24+
1725
// alpine box
1826
be.True(t, cfg.Boxes["custom-alpine"] != nil)
1927
be.Equal(t, cfg.Boxes["custom-alpine"].Image, "custom/alpine")

internal/config/testdata/codapi.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
{
22
"pool_size": 8,
33
"verbose": true,
4+
"docker": {
5+
"bin": "",
6+
"tmp": "~/tmp"
7+
},
48
"box": {
59
"memory": 64
610
},

0 commit comments

Comments
 (0)