devtools/cmd/wait_available: add timeout flag

And properly set the timeout flag in devtools/docker/compose.yaml and
tests/screentest/run.sh instead of dropping it.

Change-Id: I6aeee276b5fe1d01bef2b809b017a570c4f73368
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/553535
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Run-TryBot: Michael Matloob <matloob@golang.org>
kokoro-CI: kokoro <noreply+kokoro@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dan Peterson <danp@danp.net>
diff --git a/devtools/cmd/wait_available/main.go b/devtools/cmd/wait_available/main.go
index 31fa72e..e067f5b 100644
--- a/devtools/cmd/wait_available/main.go
+++ b/devtools/cmd/wait_available/main.go
@@ -8,6 +8,7 @@
 
 import (
 	"context"
+	"flag"
 	"net"
 	"os"
 	"os/exec"
@@ -18,27 +19,29 @@
 	"golang.org/x/pkgsite/internal/log"
 )
 
-var timeout = 15 * time.Second
+var timeout = flag.Duration("timeout", 15*time.Second, "timeout duration")
 
 func main() {
+	flag.Parse()
 	ctx := context.Background()
 
-	if len(os.Args) < 2 {
+	args := flag.Args()
+	if len(args) < 1 {
 		log.Fatalf(ctx, "expected at least one argument; got none")
 	}
-	hostport := os.Args[1]
+	hostport := args[0]
 	var command []string
 
-	if len(os.Args) > 2 {
-		if os.Args[2] != "--" {
-			log.Fatalf(ctx, "expected second argument to be \"--\"; got %q", os.Args[2])
+	if len(args) > 1 {
+		if args[1] != "--" {
+			log.Fatalf(ctx, "expected second argument to be \"--\"; got %q", args[1])
 		}
-		command = os.Args[3:]
+		command = args[2:]
 	}
 
 	start := time.Now()
 	for {
-		if time.Since(start) > timeout {
+		if time.Since(start) > *timeout {
 			break
 		}
 		if conn, err := net.DialTimeout("tcp", hostport, 1*time.Second); err != nil {
diff --git a/devtools/docker/compose.yaml b/devtools/docker/compose.yaml
index c6bb713..52a029f 100644
--- a/devtools/docker/compose.yaml
+++ b/devtools/docker/compose.yaml
@@ -37,8 +37,7 @@
       GO_DISCOVERY_TESTDB: ${GO_DISCOVERY_TESTDB:-"true"}
       # TERM is set to xterm-256color for use by devtools/lib.sh.
       TERM: xterm-256color
-      WAITFORIT_TIMEOUT: 300
-    entrypoint: go run ./devtools/cmd/wait_available db:5432 -- ./all.bash
+    entrypoint: go run ./devtools/cmd/wait_available --timeout 300s db:5432 -- ./all.bash
     volumes:
       - ../../:/pkgsite
     working_dir: /pkgsite
@@ -48,8 +47,7 @@
       - frontend
     environment:
       <<: [*database-variables, *go-variables]
-      WAITFORIT_TIMEOUT: 300
-    entrypoint: go run ./devtools/cmd/wait_available frontend:8080 -- go run
+    entrypoint: go run ./devtools/cmd/wait_available --timeout 300s frontend:8080 -- go run
     command: "tests/search/main.go -frontend http://frontend:8080"
     volumes:
       - ../../:/pkgsite
@@ -60,8 +58,7 @@
       - frontend
     environment:
       <<: *go-variables
-      WAITFORIT_TIMEOUT: 300
-    entrypoint: go run ./devtools/cmd/wait_available frontend:8080 -- go run
+    entrypoint: go run ./devtools/cmd/wait_available --timeout 300s frontend:8080 -- go run
     command: "tests/api/main.go -frontend http://frontend:8080 -all compare "
     volumes:
       - ../../:/pkgsite
@@ -72,14 +69,13 @@
     depends_on:
       - db
     command: bash -c "
-        go run ./devtools/cmd/wait_available db:5432 --
+        go run ./devtools/cmd/wait_available --timeout 300s db:5432 --
           go run ./devtools/cmd/db/main.go create &&
           go run ./devtools/cmd/db/main.go migrate &&
           go run ./cmd/frontend -host=0.0.0.0:8080"
     environment:
       <<: [*database-variables, *go-variables]
       PORT: 8080
-      WAITFORIT_TIMEOUT: 300
     volumes:
       - ../../:/pkgsite
       - gomodcache:/gomodcache
@@ -94,13 +90,12 @@
     # time seeddb runs. If this ends up being flaky, we should add a check here.
     command: bash -c "
         echo GO_DISCOVERY_CONFIG_DYNAMIC=$GO_DISCOVERY_CONFIG_DYNAMIC &&
-        go run ./devtools/cmd/wait_available db:5432 --
+        go run ./devtools/cmd/wait_available --timeout 300s db:5432 --
           go run ./devtools/cmd/db/main.go create &&
           go run ./devtools/cmd/db/main.go migrate &&
           go run ./devtools/cmd/seeddb/main.go -seed ${GO_DISCOVERY_SEED_DB_FILE:-seed.txt}"
     environment:
       <<: [*database-variables, *go-variables]
-      WAITFORIT_TIMEOUT: 300
     volumes:
       - ../../:/pkgsite
       - gomodcache:/gomodcache
diff --git a/tests/screentest/run.sh b/tests/screentest/run.sh
index 3edb33d..c3a1a52 100755
--- a/tests/screentest/run.sh
+++ b/tests/screentest/run.sh
@@ -131,9 +131,8 @@
     dcompose up --detach chromedp
     dcompose up --detach --force-recreate frontend
     dcompose run --rm --entrypoint bash go -c "
-      export WAITFORIT_TIMEOUT=120
       go install golang.org/x/website/cmd/screentest@latest
-      go run ./devtools/cmd/wait_available frontend:8080 --
+      go run ./devtools/cmd/wait_available --timeout 120s frontend:8080 --
       $(echo $cmd)"
   elif [ "$env" = local ]; then
     if ! nc -z localhost 9222; then