internal/task: move shared security release symbols to privx

For golang/go#79034
For golang/go#78458

Change-Id: I4b1dc87dd1eb7ae25edc9c3d7f41b3492730580a
Reviewed-on: https://go-review.googlesource.com/c/build/+/801100
Reviewed-by: Nicholas Husin <nsh@golang.org>
Reviewed-by: Nicholas Husin <husin@google.com>
Reviewed-by: Neal Patel <nealpatel@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/task/privx.go b/internal/task/privx.go
index efe285a..c8cba49 100644
--- a/internal/task/privx.go
+++ b/internal/task/privx.go
@@ -6,10 +6,12 @@
 
 import (
 	"bytes"
+	"context"
 	"errors"
 	"fmt"
 	"net/http"
 	"net/mail"
+	"path"
 	"regexp"
 	"slices"
 	"strings"
@@ -21,8 +23,45 @@
 	wf "golang.org/x/build/internal/workflow"
 	"golang.org/x/build/relmeta"
 	"golang.org/x/sync/errgroup"
+	yaml "gopkg.in/yaml.v3"
 )
 
+// Security release parameter definitions.
+var (
+	SecurityMilestoneParameter = wf.ParamDef[string]{
+		Name:      "Release Milestone",
+		ParamType: wf.BasicString,
+		Doc: `Release Milestone is the security-metadata milestone for the security patch(es) being included in a Go release.
+
+You can check with the security release coordinator for this release to confirm this input.`,
+		Example: "123456",
+		Check: func(num string) error {
+			if !numOnlyRE.MatchString(num) {
+				return errors.New("milestone number must contain only numbers")
+			}
+			return nil
+		},
+	}
+	numOnlyRE = regexp.MustCompile(`^\d+$`)
+)
+
+func fetchReleaseMilestone(ctx context.Context, private GerritClient, milestoneNum string) (relmeta.ReleaseMilestone, error) {
+	const project = "security-metadata"
+	head, err := private.ReadBranchHead(ctx, project, "main")
+	if err != nil {
+		return relmeta.ReleaseMilestone{}, err
+	}
+	b, err := private.ReadFile(ctx, project, head, path.Join("data", "milestones", milestoneNum+".yaml"))
+	if err != nil {
+		return relmeta.ReleaseMilestone{}, err
+	}
+	var rm relmeta.ReleaseMilestone
+	if err := yaml.Unmarshal(b, &rm); err != nil {
+		return relmeta.ReleaseMilestone{}, fmt.Errorf("cannot YAML unmarshal the milestone: %v", err)
+	}
+	return rm, nil
+}
+
 type PrivXPatch struct {
 	Git           *Git
 	PublicGerrit  GerritClient
diff --git a/internal/task/security_release_coalesce.go b/internal/task/security_release_coalesce.go
index a0d5029..9023877 100644
--- a/internal/task/security_release_coalesce.go
+++ b/internal/task/security_release_coalesce.go
@@ -5,12 +5,10 @@
 package task
 
 import (
-	"context"
 	"errors"
 	"fmt"
 	goversion "go/version"
 	"net/http"
-	"path"
 	"regexp"
 	"strings"
 	"time"
@@ -19,26 +17,6 @@
 	"golang.org/x/build/internal/relui/groups"
 	wf "golang.org/x/build/internal/workflow"
 	"golang.org/x/build/relmeta"
-	yaml "gopkg.in/yaml.v3"
-)
-
-// Security release parameter definitions.
-var (
-	SecurityMilestoneParameter = wf.ParamDef[string]{
-		Name:      "Release Milestone",
-		ParamType: wf.BasicString,
-		Doc: `Release Milestone is the security-metadata milestone for the security patch(es) being included in a Go release.
-
-You can check with the security release coordinator for this release to confirm this input.`,
-		Example: "123456",
-		Check: func(num string) error {
-			if !numOnlyRE.MatchString(num) {
-				return errors.New("milestone number must contain only numbers")
-			}
-			return nil
-		},
-	}
-	numOnlyRE = regexp.MustCompile(`^\d+$`)
 )
 
 // SecurityReleaseCoalesceTask is the workflow used to preparing patches for
@@ -148,23 +126,6 @@
 	return clNums, nil
 }
 
-func fetchReleaseMilestone(ctx context.Context, private GerritClient, milestoneNum string) (relmeta.ReleaseMilestone, error) {
-	const project = "security-metadata"
-	head, err := private.ReadBranchHead(ctx, project, "main")
-	if err != nil {
-		return relmeta.ReleaseMilestone{}, err
-	}
-	b, err := private.ReadFile(ctx, project, head, path.Join("data", "milestones", milestoneNum+".yaml"))
-	if err != nil {
-		return relmeta.ReleaseMilestone{}, err
-	}
-	var rm relmeta.ReleaseMilestone
-	if err := yaml.Unmarshal(b, &rm); err != nil {
-		return relmeta.ReleaseMilestone{}, fmt.Errorf("cannot YAML unmarshal the milestone: %v", err)
-	}
-	return rm, nil
-}
-
 func (x *SecurityReleaseCoalesceTask) CheckChanges(ctx *wf.TaskContext, clNums []string) ([]*gerrit.ChangeInfo, error) {
 	var (
 		cls      []*gerrit.ChangeInfo