Skip to content
This repository was archived by the owner on Dec 6, 2023. It is now read-only.

Commit caa526c

Browse files
use info to detect docker toolbox
1 parent 5fe20a4 commit caa526c

7 files changed

+54
-19
lines changed

iosdk/docker_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ func ExampleDockerIP() {
3030
func ExampleDockerInfo() {
3131
DryRunPush("!bad", "Info: hello")
3232
out, err := dockerInfo()
33-
fmt.Println(1, err, out)
33+
fmt.Println(1, err, out+"*")
3434
out, err = dockerInfo()
35-
fmt.Println(2, err, out)
35+
fmt.Println(2, err, out+"*")
3636
// Output:
3737
// docker info
3838
// 1 Docker is not running

iosdk/ide.go

+23-3
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@ import (
44
"fmt"
55
"os/user"
66
"path/filepath"
7+
"regexp"
8+
"strings"
79
)
810

911
// IdeDeploy deploys and mounts a folder
10-
func IdeDeploy(dir string) error {
12+
func IdeDeploy(dir string, info string) error {
1113
fmt.Println("Deploying IDE...")
1214
if dir != "" {
1315
err := preflightInHomePath(dir)
1416
if err != nil {
1517
return err
1618
}
1719
}
18-
return ideDockerRun(dir)
20+
return ideDockerRun(dir, info)
1921
}
2022

2123
// IdeDestroy destroys ide
@@ -27,7 +29,7 @@ func IdeDestroy() error {
2729

2830
// ideDockerRun starts the ide
2931
// it also mounts the project folder if the directory is not empty
30-
func ideDockerRun(dir string) (err error) {
32+
func ideDockerRun(dir string, info string) (err error) {
3133
image := IdeImage + ":" + Version
3234
if err = dockerPull(image); err != nil {
3335
return err
@@ -37,6 +39,7 @@ func ideDockerRun(dir string) (err error) {
3739
dir, err = filepath.Abs(dir)
3840
LogIf(err)
3941
if err == nil {
42+
dir = fixPathDockerToolbox(dir, info)
4043
mount = fmt.Sprintf("-v %s:/home/project", dir)
4144
}
4245
}
@@ -67,3 +70,20 @@ func OpenWhiskDockerWait() error {
6770
fmt.Println(Sys("docker exec iosdk-whisk waitready"))
6871
return nil
6972
}
73+
74+
// on windows if you are using Docker Toolbox you need to change the path format
75+
// it expects an absolute path starting with `<drive>:` in windows
76+
func fixPathDockerToolbox(dir string, info string) string {
77+
if RuntimeOS != "windows" {
78+
return dir
79+
}
80+
var search = regexp.MustCompile(`Operating System: Boot2Docker`)
81+
if search.FindString(info) == "" {
82+
return dir
83+
}
84+
dir = strings.ReplaceAll(dir, "\\", "/")
85+
if dir[1] == ':' {
86+
dir = "/" + string(dir[0]) + dir[2:]
87+
}
88+
return dir
89+
}

iosdk/ide_test.go

+18-4
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ func ExampleIdeDockerRun() {
1010
"", "Error:",
1111
"", "172.17.0.2")
1212
RuntimeOS = "darwin"
13-
fmt.Println(1, ideDockerRun("/tmp"))
14-
fmt.Println(2, ideDockerRun("/tmp"))
15-
fmt.Println(3, ideDockerRun(""))
13+
fmt.Println(1, ideDockerRun("/tmp", ""))
14+
fmt.Println(2, ideDockerRun("/tmp", ""))
15+
fmt.Println(3, ideDockerRun("", ""))
1616
// Output:
1717
// docker pull pagopa/iosdk-theia:test
1818
// docker inspect --format={{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} iosdk-openwhisk
19-
// docker run -d -p 3000:3000 --rm --name iosdk-theia -e HOME=/home/project -v /tmp:/home/project --add-host=openwhisk:172.17.0.2 pagopa/iosdk-theia:test
19+
// docker run -d -p 3000:3000 --rm --name iosdk-theia -e HOME=/home/project -v /tmp:/home/project --add-host=openwhisk:172.17.0.2 pagopa/iosdk-theia:test
2020
// 1 <nil>
2121
// docker pull pagopa/iosdk-theia:test
2222
// docker inspect --format={{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} iosdk-openwhisk
@@ -36,3 +36,17 @@ func ExampleIdeDockerRm() {
3636
// docker kill iosdk-theia
3737
// 172.17.0.3
3838
}
39+
40+
func ExampleFixPathDockerToolbox() {
41+
RuntimeOS = "linux"
42+
fmt.Println(fixPathDockerToolbox("a\\b", "does not matter"))
43+
RuntimeOS = "windows"
44+
fmt.Println(fixPathDockerToolbox("a\\b", "does not matter"))
45+
fmt.Println(fixPathDockerToolbox("a\\b", "\nOperating System: Boot2Docker etc etc"))
46+
fmt.Println(fixPathDockerToolbox("c:\\a\\b", "\nOperating System: Boot2Docker etc etc"))
47+
// Output:
48+
// a\b
49+
// a\b
50+
// a/b
51+
// /c/a/b
52+
}

iosdk/main.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ func parseDebug(cmd string) bool {
6262
WskPropsSave()
6363
case ideDeployCmd.FullCommand():
6464
FatalIf(ConfigLoad())
65-
IdeDeploy(Config.AppDir)
65+
info, _ := Preflight(Config.AppDir)
66+
IdeDeploy(Config.AppDir, info)
6667
configureIde()
6768
case ideDestroyCmd.FullCommand():
6869
IdeDestroy()

iosdk/preflight.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -48,24 +48,24 @@ func preflightInHomePath(dir string) error {
4848
}
4949

5050
// Preflight perform preflight checks
51-
func Preflight(dir string) error {
51+
func Preflight(dir string) (string, error) {
5252
info, err := dockerInfo()
5353
if err != nil {
54-
return err
54+
return "", err
5555
}
5656
err = preflightDockerMemory(info)
5757
if err != nil {
58-
return err
58+
return "", err
5959
}
6060
err = preflightEnsureDockerVersion()
6161
if err != nil {
62-
return err
62+
return "", err
6363
}
6464
err = preflightInHomePath(dir)
6565
if err != nil {
66-
return err
66+
return "", err
6767
}
68-
return nil
68+
return info, nil
6969
}
7070

7171
// preflightDockerMemory checks docker memory

iosdk/preflight_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,6 @@ func ExamplePreflightDockerMemory() {
4242
// Output:
4343
// docker info
4444
// <nil>
45-
// docker info
45+
/// docker info
4646
// IOSDK needs 4GB memory allocatable on docker
4747
}

iosdk/start.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ func Start() error {
88
fmt.Println("You need to run 'iosdk init ', first.")
99
return err
1010
}
11-
err := Preflight(Config.AppDir)
11+
info, err := Preflight(Config.AppDir)
1212
if err != nil {
1313
return err
1414
}
@@ -25,7 +25,7 @@ func Start() error {
2525
return err
2626
}
2727
if !*skipIde {
28-
err = IdeDeploy(Config.AppDir)
28+
err = IdeDeploy(Config.AppDir, info)
2929
if err != nil {
3030
return err
3131
}

0 commit comments

Comments
 (0)