diff --git a/cmd/release/release.go b/cmd/release/release.go
index 1d0ad1c..b38b94d 100644
--- a/cmd/release/release.go
+++ b/cmd/release/release.go
@@ -105,7 +105,10 @@
 	if !ok {
 		log.Fatalf("no such target %q in version %q", *flagTarget, *flagVersion)
 	}
-	if *flagLongTest && (*skipTests || target.BuildOnly) {
+	if *skipTests {
+		target.BuildOnly = true
+	}
+	if *flagLongTest && target.BuildOnly {
 		log.Fatalf("long testing requested, but no tests to run: skip=%v, build only=%v", *skipTests, target.BuildOnly)
 	}
 
@@ -114,7 +117,12 @@
 		Logger:  &logger{*flagTarget},
 	}
 	ctx.Printf("Start.")
-	if err := buildTarget(ctx, target, *flagLongTest); err != nil {
+	ctx.Printf("Create source archive.")
+	srcBuf := &bytes.Buffer{}
+	if err := writeSource(*rev, *flagVersion, srcBuf); err != nil {
+		log.Fatalf("Building source archive: %v", err)
+	}
+	if err := buildTarget(ctx, srcBuf, *flagVersion, target, *flagLongTest); err != nil {
 		ctx.Printf("Error: %v", err)
 		os.Exit(1)
 	} else {
@@ -190,7 +198,7 @@
 	return gzWriter.Close()
 }
 
-func buildTarget(ctx *workflow.TaskContext, target *releasetargets.Target, longTest bool) error {
+func buildTarget(ctx *workflow.TaskContext, sourceArchive io.Reader, version string, target *releasetargets.Target, longTest bool) error {
 	builder := target.Builder
 	if longTest {
 		builder = target.LongTestBuilder
@@ -220,12 +228,7 @@
 		go14   = "go1.4"
 	)
 
-	srcBuf := &bytes.Buffer{}
-	if err := writeSource(*rev, *flagVersion, srcBuf); err != nil {
-		return err
-	}
-
-	if err := client.PutTar(ctx, srcBuf, ""); err != nil {
+	if err := client.PutTar(ctx, sourceArchive, ""); err != nil {
 		return fmt.Errorf("failed to put generated source tarball: %v", err)
 	}
 
@@ -302,10 +305,13 @@
 	}
 
 	ctx.Printf("Building release tarball.")
-	stagingFile := func(ext string) string {
-		return filepath.Join(*stagingDir, *flagVersion+"."+*flagTarget+ext+".untested")
+	fileName := func(ext string) string {
+		return fmt.Sprintf("%v.%v.%v", version, target.Name, ext)
 	}
-	untestedTarballPath := stagingFile(".tar.gz")
+	stagingFileName := func(ext string) string {
+		return filepath.Join(*stagingDir, fmt.Sprintf("%v.%v.%v.untested", version, target.Name, ext))
+	}
+	untestedTarballPath := stagingFileName(".tar.gz")
 	if err := buildDistribution(ctx, client, untestedTarballPath, []adjustFunc{
 		dropRegexpMatches(dropPatterns),
 		dropUnwantedSysos(target),
@@ -357,13 +363,13 @@
 	}
 	var releases []releaseFile
 	if !target.BuildOnly && target.GOOS == "windows" {
-		untested := stagingFile(".msi")
+		untested := stagingFileName("msi")
 		if err := fetchFile(ctx, client, untested, "msi"); err != nil {
 			return err
 		}
 		releases = append(releases, releaseFile{
 			Untested: untested,
-			Final:    *flagVersion + "." + *flagTarget + ".msi",
+			Final:    fileName("msi"),
 		})
 	}
 
@@ -371,34 +377,34 @@
 	case !target.BuildOnly && target.GOOS != "windows":
 		releases = append(releases, releaseFile{
 			Untested: untestedTarballPath,
-			Final:    *flagVersion + "." + *flagTarget + ".tar.gz",
+			Final:    fileName("tar.gz"),
 		})
 	case !target.BuildOnly && target.GOOS == "windows":
-		untested := stagingFile(".zip")
+		untested := stagingFileName("zip")
 		if err := tgzToZip(untestedTarballPath, untested); err != nil {
 			return err
 		}
 		releases = append(releases, releaseFile{
 			Untested: untested,
-			Final:    *flagVersion + "." + *flagTarget + ".zip",
+			Final:    fileName("zip"),
 		})
 	case target.BuildOnly:
 		// Use an empty .test-only file to indicate the test outcome.
 		// This file gets moved from its initial location in the
 		// release-staging directory to the final release directory
 		// when the test-only build passes tests successfully.
-		untested := stagingFile(".test-only")
+		untested := stagingFileName("test-only")
 		if err := ioutil.WriteFile(untested, nil, 0600); err != nil {
 			return fmt.Errorf("writing empty test-only file: %v", err)
 		}
 		releases = append(releases, releaseFile{
 			Untested: untested,
-			Final:    *flagVersion + "." + *flagTarget + ".test-only",
+			Final:    fileName("test-only"),
 		})
 	}
 
 	// Execute build (all.bash) if running tests.
-	if *skipTests || target.BuildOnly {
+	if target.BuildOnly {
 		ctx.Printf("Skipping all.bash tests.")
 	} else {
 		if u := buildConfig.GoBootstrapURL(buildEnv); u != "" {
diff --git a/internal/releasetargets/releasetargets.go b/internal/releasetargets/releasetargets.go
index fa2316c..0d670a0 100644
--- a/internal/releasetargets/releasetargets.go
+++ b/internal/releasetargets/releasetargets.go
@@ -5,6 +5,7 @@
 package releasetargets
 
 import (
+	"fmt"
 	"sort"
 	"strings"
 
@@ -12,6 +13,7 @@
 )
 
 type Target struct {
+	Name            string
 	GOOS, GOARCH    string
 	Builder         string
 	BuildOnly       bool
@@ -29,7 +31,7 @@
 // propagated forward unless overridden. To remove a target in a later release,
 // set it to nil explicitly.
 // GOOS and GOARCH will be set automatically from the target name, but can be
-// overridden if necessary.
+// overridden if necessary. Name will also be set and should not be overriden.
 var allReleases = map[int]ReleaseTargets{
 	17: {
 		"darwin-amd64": &Target{
@@ -111,6 +113,10 @@
 func init() {
 	for _, targets := range allReleases {
 		for name, target := range targets {
+			if target.Name != "" {
+				panic(fmt.Sprintf("target.Name in %q should be left inferred", name))
+			}
+			target.Name = name
 			parts := strings.SplitN(name, "-", 2)
 			if target.GOOS == "" {
 				target.GOOS = parts[0]
