release: upload asc files

Updates golang/go#14739.

Change-Id: Idf023b208b3a0605cb8841f572984f1b3053e2d8
Reviewed-on: https://go-review.googlesource.com/58270
Reviewed-by: Andrew Bonventre <andybons@golang.org>
diff --git a/cmd/release/upload.go b/cmd/release/upload.go
index eb0d2ca..08667ba 100644
--- a/cmd/release/upload.go
+++ b/cmd/release/upload.go
@@ -46,7 +46,7 @@
 //   go1.5beta2.src.tar.gz
 //   go1.5.1.linux-386.tar.gz
 //   go1.5.windows-amd64.msi
-var fileRe = regexp.MustCompile(`^(go[a-z0-9-.]+)\.(src|([a-z0-9]+)-([a-z0-9]+)(?:-([a-z0-9.]+))?)\.(tar\.gz|zip|pkg|msi)$`)
+var fileRe = regexp.MustCompile(`^(go[a-z0-9-.]+)\.(src|([a-z0-9]+)-([a-z0-9]+)(?:-([a-z0-9.]+))?)\.(tar\.gz|zip|pkg|msi)(.asc)?$`)
 
 func upload(files []string) error {
 	ctx := context.Background()
@@ -84,12 +84,18 @@
 		return err
 	}
 	base := filepath.Base(filename)
-	checksum := fmt.Sprintf("%x", sha256.Sum256(file))
 
 	// Upload file to Google Cloud Storage.
 	if err := putObject(ctx, c, base, file); err != nil {
 		return fmt.Errorf("uploading %q: %v", base, err)
 	}
+
+	if strings.HasSuffix(base, ".asc") {
+		// Don't add asc files to the download page, just upload it.
+		return nil
+	}
+
+	checksum := fmt.Sprintf("%x", sha256.Sum256(file))
 	// Upload file.sha256.
 	if err := putObject(ctx, c, base+".sha256", []byte(checksum)); err != nil {
 		return fmt.Errorf("uploading %q: %v", base+".sha256", err)
@@ -129,7 +135,6 @@
 		return fmt.Errorf("upload failed: %v\n%s", resp.Status, b)
 	}
 	return nil
-
 }
 
 func putObject(ctx context.Context, c *storage.Client, name string, body []byte) error {
diff --git a/cmd/release/upload_test.go b/cmd/release/upload_test.go
new file mode 100644
index 0000000..cb4c1fa
--- /dev/null
+++ b/cmd/release/upload_test.go
@@ -0,0 +1,22 @@
+package main
+
+import "testing"
+
+func TestFileRe(t *testing.T) {
+	shouldMatch := []string{
+		"go1.5beta2.src.tar.gz",
+		"go1.5.1.linux-386.tar.gz",
+		"go1.5.windows-amd64.msi",
+
+		"go1.5beta2.src.tar.gz.asc",
+		"go1.5.1.linux-386.tar.gz.asc",
+		"go1.5.windows-amd64.msi.asc",
+	}
+	for _, fn := range shouldMatch {
+		t.Run(fn, func(t *testing.T) {
+			if !fileRe.MatchString(fn) {
+				t.Fatalf("want %q to match, didn't", fn)
+			}
+		})
+	}
+}