Merge "v.io/jiri: remove support for old style profiles"
diff --git a/data/config.v1.xml b/data/config.v1.xml
index df7939d..3862c5c 100644
--- a/data/config.v1.xml
+++ b/data/config.v1.xml
@@ -232,6 +232,9 @@
       <test>vanadium-js-vom</test>
     </group>
     <group name="mojo">
+      <!-- NOTE(caprita): this is flaky. See v.io/i/1240
+      <test>vanadium-mojo-discovery-test</test>
+      -->
       <test>vanadium-mojo-syncbase-test</test>
       <test>vanadium-mojo-v23proxy-unit-test</test>
       <!-- NOTE(caprita): this is flaky.  See v.io/i/1226
diff --git a/data/oncall.v1.xml b/data/oncall.v1.xml
index 960f50e..087f553 100644
--- a/data/oncall.v1.xml
+++ b/data/oncall.v1.xml
@@ -19,7 +19,7 @@
     <startDate>Mar 21, 2016 08:00:00 AM</startDate>
   </shift>
   <shift>
-    <primary>jyh</primary>
+    <primary>afergan</primary>
     <secondary>alexfandrianto</secondary>
     <startDate>Mar 28, 2016 08:00:00 AM</startDate>
   </shift>
@@ -50,11 +50,11 @@
   </shift>
   <shift>
     <primary>nlacasse</primary>
-    <secondary>p</secondary>
+    <secondary>suharshs</secondary>
     <startDate>May 09, 2016 08:00:00 AM</startDate>
   </shift>
   <shift>
-    <primary>p</primary>
+    <primary>suharshs</primary>
     <secondary>nlacasse</secondary>
     <startDate>May 16, 2016 08:00:00 AM</startDate>
   </shift>
diff --git a/jiri-test/internal/test/mojo.go b/jiri-test/internal/test/mojo.go
index 28c60b2..dc8db62 100644
--- a/jiri-test/internal/test/mojo.go
+++ b/jiri-test/internal/test/mojo.go
@@ -16,8 +16,17 @@
 	defaultMojoTestTimeout = 10 * time.Minute
 )
 
-// vanadiumMojoSyncbaseTest runs the tests for the Vanadium Mojo Syncbase
-// service.
+// vanadiumMojoDiscoveryTest runs the tests for the Vanadium Mojo Discovery service.
+func vanadiumMojoDiscoveryTest(jirix *jiri.X, testName string, _ ...Opt) (*test.Result, error) {
+	testDir := filepath.Join(jirix.Root, "release", "mojo", "discovery")
+	if r, err := runMakefileTest(jirix, testName, testDir, "test", nil, []string{"v23:mojo", "v23:dart"}, defaultMojoTestTimeout); err != nil {
+		return r, err
+	}
+	// For android, just make sure that everything builds.
+	return runMakefileTest(jirix, testName, testDir, "build", map[string]string{"ANDROID": "1"}, []string{"v23:mojo", "v23:android"}, defaultMojoTestTimeout)
+}
+
+// vanadiumMojoSyncbaseTest runs the tests for the Vanadium Mojo Syncbase service.
 func vanadiumMojoSyncbaseTest(jirix *jiri.X, testName string, _ ...Opt) (*test.Result, error) {
 	testDir := filepath.Join(jirix.Root, "release", "mojo", "syncbase")
 	return runMakefileTest(jirix, testName, testDir, "test", nil, []string{"v23:dart", "v23:mojo"}, defaultMojoTestTimeout)
diff --git a/jiri-test/internal/test/prod.go b/jiri-test/internal/test/prod.go
index 7dd9b19..0daa78a 100644
--- a/jiri-test/internal/test/prod.go
+++ b/jiri-test/internal/test/prod.go
@@ -219,7 +219,7 @@
 	s := jirix.NewSeq()
 	dir := filepath.Join(tmpdir, "credentials")
 	bin := filepath.Join(jirix.Root, "release", "go", "bin", "principal")
-	if err := s.Timeout(test.DefaultTimeout).Last(bin, "create", dir, "prod-services-tester"); err != nil {
+	if err := s.Timeout(test.DefaultTimeout).Last(bin, "create", "-with-passphrase=false", dir, "prod-services-tester"); err != nil {
 		fmt.Fprintf(jirix.Stderr(), "principal create failed: %v\n", err)
 		return "", err
 	}
diff --git a/jiri-test/internal/test/release.go b/jiri-test/internal/test/release.go
index 44bda1f..375b9cc 100644
--- a/jiri-test/internal/test/release.go
+++ b/jiri-test/internal/test/release.go
@@ -7,7 +7,6 @@
 import (
 	"bytes"
 	"fmt"
-	"io"
 	"os"
 	"path/filepath"
 	"regexp"
@@ -44,6 +43,14 @@
 	defaultReleaseTestTimeout = time.Minute * 5
 	manifestRE                = regexp.MustCompile(`^devmgr/.*<manifest snapshotpath="manifest/(.*)">`)
 
+	toolsPackages = []string{
+		"v.io/x/ref/services/agent/gcreds/",
+		"v.io/x/ref/services/agent/vbecome/",
+		"v.io/x/ref/services/debug/debug/",
+		"v.io/x/ref/services/device/device/",
+		"v.io/x/devtools/vbinary/",
+	}
+
 	serviceBinaries = []string{
 		"applicationd",
 		"binaryd",
@@ -85,16 +92,16 @@
 	}
 }
 
-// buildVanadiumBinaries builds all vanadium binaries.
-func (u *updater) buildVanadiumBinaries() error {
+// buildBinaries builds binaries for the given package pattern.
+func (u *updater) buildBinaries(pkgs ...string) error {
 	s := u.jirix.NewSeq()
 	args := []string{
 		"jiri",
 		"go",
 		"install",
 		"-tags=leveldb",
-		"v.io/...",
 	}
+	args = append(args, pkgs...)
 	u.outputCmd(args)
 	return s.Last(args[0], args[1:]...)
 }
@@ -138,11 +145,13 @@
 func (u *updater) downloadReleaseBinaries(binDir string) error {
 	s := u.jirix.NewSeq()
 	args := []string{
+		u.bin("vbinary"),
 		"--release",
 		"download",
 		"--output-dir=" + binDir,
 	}
-	return s.Last(u.bin("vbinary"), args...)
+	u.outputCmd(args)
+	return s.Last(args[0], args[1:]...)
 }
 
 // checkReleaseCandidateStatus checks whether the "latest" file in
@@ -153,11 +162,10 @@
 	s := u.jirix.NewSeq()
 	args := []string{
 		"cat",
-		fmt.Sprintf("%s/latest"),
+		fmt.Sprintf("%s/latest", bucket),
 	}
 	var out bytes.Buffer
-	stdout := io.MultiWriter(u.jirix.Stdout(), &out)
-	if err := s.Capture(stdout, nil).Last("gsutil", args...); err != nil {
+	if err := s.Capture(&out, nil).Last("gsutil", args...); err != nil {
 		return "", err
 	}
 	t, err := time.Parse(rcTimeFormat, out.String())
@@ -168,6 +176,7 @@
 	if t.Year() != now.Year() || t.Month() != now.Month() || t.Day() != now.Day() {
 		return "", fmt.Errorf("Release candidate (%v) not done for today", t)
 	}
+	fmt.Fprintf(u.jirix.Stdout(), "Snapshot timestamp: %s\n", out.String())
 	return out.String(), nil
 }
 
@@ -383,7 +392,7 @@
 		step{
 			msg: "Prepare binaries",
 			fn: func() error {
-				if err := u.buildVanadiumBinaries(); err != nil {
+				if err := u.buildBinaries("v.io/..."); err != nil {
 					return err
 				}
 				return u.uploadVanadiumBinaries(rcTimestamp)
@@ -406,7 +415,7 @@
 
 // vanadiumReleaseProduction updates binaries of production cloud services and runs tests for them.
 func vanadiumReleaseProduction(jirix *jiri.X, testName string, opts ...Opt) (_ *test.Result, e error) {
-	cleanup, err := initTest(jirix, testName, []string{"base"})
+	cleanup, err := initTest(jirix, testName, []string{"v23:base"})
 	if err != nil {
 		return nil, newInternalError(err, "Init")
 	}
@@ -421,13 +430,20 @@
 	defer u.jirix.NewSeq().RemoveAll(binDir)
 
 	// Make sure we got a release candidate today.
-	rcTimestamp, err := u.checkReleaseCandidateStatus()
-	if err != nil {
-		return nil, newInternalError(err, "Check release candidate")
+	rcTimestamp := ""
+	if result, err := invoker(jirix, "Check release candidate status", func() error {
+		rcTimestamp, err = u.checkReleaseCandidateStatus()
+		return err
+	}); result != nil || err != nil {
+		return result, err
 	}
 
 	steps := []step{
 		step{
+			msg: "Prepare tools",
+			fn:  func() error { return u.buildBinaries(toolsPackages...) },
+		},
+		step{
 			msg: "Download release binaries",
 			fn:  func() error { return u.downloadReleaseBinaries(binDir) },
 		},
diff --git a/jiri-test/internal/test/release_kube.go b/jiri-test/internal/test/release_kube.go
new file mode 100644
index 0000000..8c10423
--- /dev/null
+++ b/jiri-test/internal/test/release_kube.go
@@ -0,0 +1,52 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package test
+
+import (
+	"fmt"
+	"os"
+	"path/filepath"
+
+	"v.io/jiri"
+	"v.io/jiri/collect"
+	"v.io/x/devtools/internal/test"
+)
+
+func vanadiumReleaseKubeStaging(jirix *jiri.X, testName string, opts ...Opt) (_ *test.Result, e error) {
+	version := os.Getenv("SNAPSHOT_MANIFEST")
+	if version == "" {
+		return nil, fmt.Errorf("SNAPSHOT_MANIFEST environment variable not set")
+	}
+	return vanadiumReleaseKubeCommon(jirix, testName, "staging", version)
+}
+
+func vanadiumReleaseKubeProduction(jirix *jiri.X, testName string, opts ...Opt) (_ *test.Result, e error) {
+	return vanadiumReleaseKubeCommon(jirix, testName, "production", "")
+}
+
+func vanadiumReleaseKubeCommon(jirix *jiri.X, testName, updateType, version string) (_ *test.Result, e error) {
+	cleanup, err := initTest(jirix, testName, []string{"v23:base"})
+	if err != nil {
+		return nil, newInternalError(err, "Init")
+	}
+	defer collect.Error(func() error { return cleanup() }, &e)
+
+	// Build and run vprodupdater.
+	s := jirix.NewSeq()
+	if err := s.Last("jiri", "go", "install", "v.io/infrastructure/vprodupdater/"); err != nil {
+		return nil, newInternalError(err, "Build vprodupdater")
+	}
+	vprodupdaterBin := filepath.Join(jirix.Root, "infrastructure", "go", "bin", "vprodupdater")
+	args := []string{
+		fmt.Sprintf("-type=%s", updateType),
+	}
+	if version != "" {
+		args = append(args, fmt.Sprintf("-tag=%s", version))
+	}
+	if err := s.Last(vprodupdaterBin, args...); err != nil {
+		return nil, newInternalError(err, "Run vprodupdater")
+	}
+	return &test.Result{Status: test.Passed}, nil
+}
diff --git a/jiri-test/internal/test/run.go b/jiri-test/internal/test/run.go
index b670b69..d9ec6b7 100644
--- a/jiri-test/internal/test/run.go
+++ b/jiri-test/internal/test/run.go
@@ -119,6 +119,7 @@
 	"vanadium-js-vdl":                         vanadiumJSVdl,
 	"vanadium-js-vdl-audit":                   vanadiumJSVdlAudit,
 	"vanadium-js-vom":                         vanadiumJSVom,
+	"vanadium-mojo-discovery-test":            vanadiumMojoDiscoveryTest,
 	"vanadium-mojo-syncbase-test":             vanadiumMojoSyncbaseTest,
 	"vanadium-mojo-v23proxy-unit-test":        vanadiumMojoV23ProxyUnitTest,
 	"vanadium-mojo-v23proxy-integration-test": vanadiumMojoV23ProxyIntegrationTest,
@@ -137,6 +138,8 @@
 	"vanadium-release-candidate":              vanadiumReleaseCandidate,
 	"vanadium-release-candidate-snapshot":     vanadiumReleaseCandidateSnapshot,
 	"vanadium-release-production":             vanadiumReleaseProduction,
+	"vanadium-release-kube-staging":           vanadiumReleaseKubeStaging,
+	"vanadium-release-kube-production":        vanadiumReleaseKubeProduction,
 	"vanadium-signup-github":                  vanadiumSignupGithub,
 	"vanadium-signup-github-new":              vanadiumSignupGithubNew,
 	"vanadium-signup-group":                   vanadiumSignupGroup,