devtools/jiri-test: improvement to release automation.
Allow users to specify arbitrary snapshot timestamp (version)
to update services to.
Change-Id: I794cd44c9ec080aa31dcc343f649acb886f620ac
diff --git a/jiri-test/internal/test/release.go b/jiri-test/internal/test/release.go
index 375b9cc..cd09ddf 100644
--- a/jiri-test/internal/test/release.go
+++ b/jiri-test/internal/test/release.go
@@ -35,6 +35,7 @@
mounttableWaitRetryPeriod = 10 * time.Second
propertiesFile = ".release_candidate_properties"
rcTimeFormat = "2006-01-02.15:04"
+ snapshotTimestampEnvVar = "SNAPSHOT_TIMESTAMP"
snapshotName = "rc"
testsEnvVar = "TESTS"
)
@@ -429,11 +430,21 @@
}
defer u.jirix.NewSeq().RemoveAll(binDir)
- // Make sure we got a release candidate today.
+ // Try to get the snapshot timestamp from SNAPSHOT_TIMESTAMP environment variable.
+ // If it is empty, get the timestamp from the gs://vanadium-release/latest file.
rcTimestamp := ""
- if result, err := invoker(jirix, "Check release candidate status", func() error {
- rcTimestamp, err = u.checkReleaseCandidateStatus()
- return err
+ if result, err := invoker(jirix, "Get release candidate snapshot timestamp", func() error {
+ s := u.jirix.NewSeq()
+ if rcTimestamp = os.Getenv(snapshotTimestampEnvVar); rcTimestamp == "" {
+ args := []string{"cat", fmt.Sprintf("%s/latest", bucket)}
+ var out bytes.Buffer
+ if err := s.Capture(&out, nil).Last("gsutil", args...); err != nil {
+ return err
+ }
+ rcTimestamp = out.String()
+ }
+ fmt.Fprintf(jirix.Stdout(), "Timestamp: %s\n", rcTimestamp)
+ return nil
}); result != nil || err != nil {
return result, err
}
diff --git a/jiri-test/internal/test/release_kube.go b/jiri-test/internal/test/release_kube.go
index ed7b53a..d8c84ca 100644
--- a/jiri-test/internal/test/release_kube.go
+++ b/jiri-test/internal/test/release_kube.go
@@ -16,21 +16,20 @@
)
func vanadiumReleaseKubeStaging(jirix *jiri.X, testName string, opts ...Opt) (_ *test.Result, e error) {
- manifestPath := os.Getenv("SNAPSHOT_MANIFEST")
+ manifestPath := os.Getenv(manifestEnvVar)
if manifestPath == "" {
- return nil, fmt.Errorf("SNAPSHOT_MANIFEST environment variable not set")
+ return nil, fmt.Errorf("%s environment variable not set", manifestEnvVar)
}
- // Remove all separators to make the version string look cleaner.
- version := filepath.Base(manifestPath)
- for _, s := range []string{"-", ".", ":"} {
- version = strings.Replace(version, s, "", -1)
- }
- version = "manifest-" + version
+ version := cleanupVersionString(filepath.Base(manifestPath))
return vanadiumReleaseKubeCommon(jirix, testName, "staging", version)
}
func vanadiumReleaseKubeProduction(jirix *jiri.X, testName string, opts ...Opt) (_ *test.Result, e error) {
- return vanadiumReleaseKubeCommon(jirix, testName, "production", "")
+ version := ""
+ if snapshotTimestamp := os.Getenv(snapshotTimestampEnvVar); snapshotTimestamp != "" {
+ version = cleanupVersionString(snapshotTimestamp)
+ }
+ return vanadiumReleaseKubeCommon(jirix, testName, "production", version)
}
func vanadiumReleaseKubeCommon(jirix *jiri.X, testName, updateType, version string) (_ *test.Result, e error) {
@@ -48,12 +47,18 @@
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))
+ fmt.Sprintf("-tag=%s", version),
}
if err := s.Capture(jirix.Stdout(), jirix.Stderr()).Last(vprodupdaterBin, args...); err != nil {
return nil, newInternalError(err, "Run vprodupdater")
}
return &test.Result{Status: test.Passed}, nil
}
+
+func cleanupVersionString(version string) string {
+ // Remove all separators to make the version string look cleaner.
+ for _, s := range []string{"-", ".", ":"} {
+ version = strings.Replace(version, s, "", -1)
+ }
+ return "manifest-" + version
+}