cmd/release: remove the tmp and gocache dirs, validate it doesn't happen again
Fixes golang/go#29906
Change-Id: I163aee41ea1ce5af3da058bd48b582257d96f60a
Reviewed-on: https://go-review.googlesource.com/c/159257
Reviewed-by: Filippo Valsorda <filippo@golang.org>
diff --git a/cmd/release/release.go b/cmd/release/release.go
index 53844bd..ddfa4cf 100644
--- a/cmd/release/release.go
+++ b/cmd/release/release.go
@@ -499,7 +499,7 @@
return err
}
- cleanFiles := []string{"releaselet.go", goPath, go14}
+ cleanFiles := []string{"releaselet.go", goPath, go14, "tmp", "gocache"}
switch b.OS {
case "darwin":
@@ -523,12 +523,35 @@
return err
}
+ // And verify there's no other top-level stuff besides the "go" directory:
+ if err := checkTopLevelDirs(client); err != nil {
+ return fmt.Errorf("verifying no unwanted top-level directories: %v", err)
+ }
+
if b.OS == "windows" {
return b.fetchZip(client)
}
return b.fetchTarball(client)
}
+// checkTopLevelDirs checks that all files under client's "."
+// ($WORKDIR) are are under "go/".
+func checkTopLevelDirs(client *buildlet.Client) error {
+ var badFileErr error // non-nil once an unexpected file/dir is found
+ if err := client.ListDir(".", buildlet.ListDirOpts{Recursive: true}, func(ent buildlet.DirEntry) {
+ if badFileErr != nil {
+ return
+ }
+ name := ent.Name()
+ if !(strings.HasPrefix(name, "go/") || strings.HasPrefix(name, `go\`)) {
+ badFileErr = fmt.Errorf("unexpected filename %q found after cleaning", name)
+ }
+ }); err != nil {
+ return err
+ }
+ return badFileErr
+}
+
func (b *Build) fetchTarball(client *buildlet.Client) error {
b.logf("Downloading tarball.")
tgz, err := client.GetTar(context.Background(), ".")