cmd/tip: don't install cmd/tip from the internet

Set the working directory in the Dockerfile to be inside the
golang.org/x/build module before running go install on cmd/tip.
Otherwise, it just installs the latest cmd/tip from the internet
rather than the intended local version. (All other Dockerfiles
in x/build had this line, except cmd/tip.)

Remove duplicate and unneeded WORKDIR instruction from two other
Dockerfiles to improve consistency.

Fix a rare race condition setting p.err when os.MkdirAll fails.

Add a log message when a new server has been started successfully
and the side switches. This will make logs easier to read.

Fixes golang/go#34526
Updates golang/go#34192

Change-Id: Iab8124f5c872fb87844e8e2f9b31637ce395f11b
Reviewed-on: https://go-review.googlesource.com/c/build/+/197302
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Benny Siegert <bsiegert@gmail.com>
diff --git a/cmd/gitmirror/Dockerfile b/cmd/gitmirror/Dockerfile
index d95561a..e66783f 100644
--- a/cmd/gitmirror/Dockerfile
+++ b/cmd/gitmirror/Dockerfile
@@ -30,7 +30,6 @@
 RUN go install golang.org/x/build/maintner/godata
 
 COPY . /go/src/golang.org/x/build/
-WORKDIR /go/src/golang.org/x/build/
 
 RUN go install golang.org/x/build/cmd/gitmirror
 
diff --git a/cmd/tip/Dockerfile b/cmd/tip/Dockerfile
index 4ae8d96..994c394 100644
--- a/cmd/tip/Dockerfile
+++ b/cmd/tip/Dockerfile
@@ -9,6 +9,8 @@
 COPY go.mod /go/src/golang.org/x/build/go.mod
 COPY go.sum /go/src/golang.org/x/build/go.sum
 
+WORKDIR /go/src/golang.org/x/build
+
 # Optimization for iterative docker build speed, not necessary for correctness:
 # TODO: write a tool to make writing Go module-friendly Dockerfiles easier.
 RUN go install golang.org/x/crypto/acme/autocert
diff --git a/cmd/tip/tip.go b/cmd/tip/tip.go
index c7fd161..424ecb9 100644
--- a/cmd/tip/tip.go
+++ b/cmd/tip/tip.go
@@ -203,7 +203,9 @@
 
 	dir := filepath.Join(os.TempDir(), "tip", newSide)
 	if err := os.MkdirAll(dir, 0755); err != nil {
+		p.mu.Lock()
 		p.err = err
+		p.mu.Unlock()
 		return
 	}
 	hostport := "localhost:8081"
@@ -256,6 +258,7 @@
 	}
 	p.cmd = cmd
 	p.err = nil // If we get this far, the process started successfully. Clear the error.
+	logger.Printf("success; starting to serve on side %v", newSide)
 }
 
 type serveOptions struct {
diff --git a/maintner/maintnerd/Dockerfile b/maintner/maintnerd/Dockerfile
index cd531a4..71da253 100644
--- a/maintner/maintnerd/Dockerfile
+++ b/maintner/maintnerd/Dockerfile
@@ -26,7 +26,6 @@
 RUN go install grpc.go4.org
 
 COPY . /go/src/golang.org/x/build/
-WORKDIR /go/src/golang.org/x/build/
 
 RUN go install golang.org/x/build/maintner/maintnerd