cmd/releasebot, cmd/release: use releasebot work dir for staging releases
Using a directory inside the system temporary directory for staging
releases can be problematic, because os.Rename may fail to move the
file if /tmp is mounted on a filesystem that is different from where
the releasebot work directory is.
Use $HOME/go-releasebot-work/goX.Y.Z/release-staging as the staging
directory instead.
Change-Id: I74f5f6ace1c0df154a1de989e825f67e808d3c34
Reviewed-on: https://go-review.googlesource.com/c/build/+/191159
Reviewed-by: Andrew Bonventre <andybons@golang.org>
Reviewed-by: Alexander Rakoczy <alex@golang.org>
diff --git a/cmd/release/release.go b/cmd/release/release.go
index ec39483..09e0c7f 100644
--- a/cmd/release/release.go
+++ b/cmd/release/release.go
@@ -38,6 +38,8 @@
target = flag.String("target", "", "If specified, build specific target platform (e.g. 'linux-amd64'). Default is to build all.")
watch = flag.Bool("watch", false, "Watch the build. Only compatible with -target")
+ stagingDir = flag.String("staging_dir", "", "If specified, use this as the staging directory for untested release artifacts. Default is the system temporary directory.")
+
rev = flag.String("rev", "", "Go revision to build, alternative to -tarball")
tarball = flag.String("tarball", "", "Go tree tarball to build, alternative to -rev")
toolsRev = flag.String("tools", "", "Tools revision to build")
@@ -504,17 +506,21 @@
Final string // Final location where to move the file after the release has been tested.
}
var releases []releaseFile
- tempFile := func(ext string) string {
- tempDir, err := ioutil.TempDir("", "")
+ stagingDir := *stagingDir
+ if stagingDir == "" {
+ var err error
+ stagingDir, err = ioutil.TempDir("", "")
if err != nil {
log.Fatal(err)
}
- return filepath.Join(tempDir, *version+"."+b.String()+ext+".untested")
+ }
+ stagingFile := func(ext string) string {
+ return filepath.Join(stagingDir, *version+"."+b.String()+ext+".untested")
}
switch b.OS {
case "darwin":
- untested := tempFile(".pkg")
+ untested := stagingFile(".pkg")
if err := b.fetchFile(client, untested, "pkg"); err != nil {
return err
}
@@ -524,7 +530,7 @@
})
cleanFiles = append(cleanFiles, "pkg")
case "windows":
- untested := tempFile(".msi")
+ untested := stagingFile(".msi")
if err := b.fetchFile(client, untested, "msi"); err != nil {
return err
}
@@ -553,7 +559,7 @@
switch b.OS {
default:
- untested := tempFile(".tar.gz")
+ untested := stagingFile(".tar.gz")
if err := b.fetchTarball(client, untested); err != nil {
return fmt.Errorf("fetching and writing tarball: %v", err)
}
@@ -562,7 +568,7 @@
Final: *version + "." + b.String() + ".tar.gz",
})
case "windows":
- untested := tempFile(".zip")
+ untested := stagingFile(".zip")
if err := b.fetchZip(client, untested); err != nil {
return fmt.Errorf("fetching and writing zip: %v", err)
}