devtools/release_kube: add extra steps.

- Run prod service test after release is done.
- For staging release, write a latest file with version as its content.

Change-Id: I324a8a2199cebde2d92b8d99d58dac1c14c3a90f
diff --git a/jiri-test/internal/test/release_kube.go b/jiri-test/internal/test/release_kube.go
index c24a171..ff0adcf 100644
--- a/jiri-test/internal/test/release_kube.go
+++ b/jiri-test/internal/test/release_kube.go
@@ -9,12 +9,18 @@
 	"os"
 	"path/filepath"
 	"strings"
+	"time"
 
 	"v.io/jiri"
 	"v.io/jiri/collect"
 	"v.io/x/devtools/internal/test"
 )
 
+var (
+	releaseKubeDefaultReleaseTestTimeout = time.Minute * 5
+	releaseKubeReleaseBucket             = "gs://vanadium-release"
+)
+
 func vanadiumReleaseKubeStaging(jirix *jiri.X, testName string, opts ...Opt) (_ *test.Result, e error) {
 	manifestPath := os.Getenv(manifestEnvVar)
 	if manifestPath == "" {
@@ -53,6 +59,42 @@
 	if err := s.Capture(jirix.Stdout(), jirix.Stderr()).Last(vprodupdaterBin, args...); err != nil {
 		return nil, newInternalError(err, "Run vprodupdater")
 	}
+
+	// Run "prod service test" to make sure everything is up and running.
+	hostname := "dev.staging.v.io"
+	if updateType == "production" {
+		hostname = "dev.v.io"
+	}
+	jiriTestArgs := []string{
+		"run",
+		fmt.Sprintf("--v23.namespace.root=/ns.%s:8101", hostname),
+		fmt.Sprintf("--blessings-root=%s", hostname),
+		"vanadium-prod-services-test",
+	}
+	if err := s.
+		Capture(jirix.Stdout(), jirix.Stderr()).
+		Timeout(releaseKubeDefaultReleaseTestTimeout).
+		Last("jiri-test", jiriTestArgs...); err != nil {
+		return nil, newInternalError(err, "Prod service test")
+	}
+
+	// For staging release, write a latest file with the version as
+	// its content.
+	if updateType == "staging" {
+		tmpDir, err := s.TempDir("", "")
+		if err != nil {
+			return nil, newInternalError(err, "Create tmp dir")
+		}
+		defer jirix.NewSeq().RemoveAll(tmpDir)
+		latestFile := filepath.Join(tmpDir, "latest")
+		gsutilArgs := []string{"-q", "cp", latestFile, fmt.Sprintf("%s/latest", releaseKubeReleaseBucket)}
+		if err := s.
+			WriteFile(latestFile, []byte(version), os.FileMode(0600)).
+			Last("gsutil", gsutilArgs...); err != nil {
+			return nil, newInternalError(err, "Write latest file")
+		}
+	}
+
 	return &test.Result{Status: test.Passed}, nil
 }