cmd/relui: add metadata-based security comm fetching for RC releases

This has been working well for the "two minor releases" relui workflow.
Continue by making it available in "next RC" relui workflow next.

For golang/go#79037.

Change-Id: Idad7bfc19ab7dd94610842024933d64d80de2bf1
Reviewed-on: https://go-review.googlesource.com/c/build/+/795800
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Junyang Shao <shaojunyang@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/internal/relui/workflows.go b/internal/relui/workflows.go
index 761e297..64160bd 100644
--- a/internal/relui/workflows.go
+++ b/internal/relui/workflows.go
@@ -406,19 +406,21 @@
 		return err
 	}
 	type release struct {
-		major  int
-		kind   task.ReleaseKind
-		suffix string
+		major       int
+		kind        task.ReleaseKind
+		suffix      string
+		useMetadata bool
 	}
 	releases := []release{
-		{currentMajor + 1, task.KindMajor, "final"},
-		{currentMajor + 1, task.KindRC, "next RC"},
-		{currentMajor + 1, task.KindBeta, "next beta"},
-		{currentMajor, task.KindMinor, "next minor"},     // Current minor only.
-		{currentMajor - 1, task.KindMinor, "next minor"}, // Previous minor only.
+		{currentMajor + 1, task.KindMajor, "final", false},
+		{currentMajor + 1, task.KindRC, "next RC (manually input security comms)", false},
+		{currentMajor + 1, task.KindRC, "next RC (metadata-based security comms)", true},
+		{currentMajor + 1, task.KindBeta, "next beta", false},
+		{currentMajor, task.KindMinor, "next minor", false},     // Current minor only.
+		{currentMajor - 1, task.KindMinor, "next minor", false}, // Previous minor only.
 	}
 	if time.Since(majorReleaseTime) < 7*24*time.Hour {
-		releases = append(releases, release{currentMajor, task.KindMajor, "final"})
+		releases = append(releases, release{currentMajor, task.KindMajor, "final", false})
 	}
 	for _, r := range releases {
 		wd := wf.New(wf.ACL{Groups: []string{groups.ReleaseTeam}})
@@ -430,8 +432,14 @@
 		securitySummary := wf.Const("")
 		securityFixes := wf.Slice[string]()
 		if r.kind == task.KindMinor || r.kind == task.KindRC {
-			securitySummary = wf.Param(wd, securitySummaryParameter)
-			securityFixes = wf.Param(wd, securityFixesParameter)
+			if r.useMetadata {
+				milestoneNum := wf.Param(wd, task.SecurityMilestoneParameter)
+				securitySummary = wf.Task1(wd, "Get short security content summary from metadata", comm.GetSecuritySummary, milestoneNum)
+				securityFixes = wf.Task1(wd, "Get security release notes from metadata", comm.GetSecurityReleaseNotes, milestoneNum)
+			} else {
+				securitySummary = wf.Param(wd, securitySummaryParameter)
+				securityFixes = wf.Param(wd, securityFixesParameter)
+			}
 		}
 		addCommTasks(wd, build, comm, r.kind, wf.Slice(published), securitySummary, securityFixes, coordinators)
 		if r.major >= currentMajor {