all: replace io/ioutil with io and os package

This PR replaces the deprecated in Go 1.17 `io/ioutil` package with `io` and `os` packages.

Changes are the same as in [CL 430799](https://go.dev/cl/430799) but with test fixes.

Change-Id: I69095e5d62b10879fd273305876fd7498803705d
GitHub-Last-Rev: 28cdff9b8c971556da0006d955d60551930cebde
GitHub-Pull-Request: golang/mod#17
Reviewed-on: https://go-review.googlesource.com/c/mod/+/462278
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
diff --git a/gosumcheck/main.go b/gosumcheck/main.go
index c1d8fc2..668b46c 100644
--- a/gosumcheck/main.go
+++ b/gosumcheck/main.go
@@ -34,7 +34,6 @@
 	"flag"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"log"
 	"net/http"
 	"os"
@@ -84,7 +83,7 @@
 	client.SetGONOSUMDB(env)
 
 	for _, arg := range flag.Args() {
-		data, err := ioutil.ReadFile(arg)
+		data, err := os.ReadFile(arg)
 		if err != nil {
 			log.Fatal(err)
 		}
@@ -201,7 +200,7 @@
 	if resp.StatusCode != 200 {
 		return nil, fmt.Errorf("GET %v: %v", target, resp.Status)
 	}
-	data, err := ioutil.ReadAll(io.LimitReader(resp.Body, 1<<20))
+	data, err := io.ReadAll(io.LimitReader(resp.Body, 1<<20))
 	if err != nil {
 		return nil, err
 	}
diff --git a/modfile/read_test.go b/modfile/read_test.go
index e43f693..82c778d 100644
--- a/modfile/read_test.go
+++ b/modfile/read_test.go
@@ -7,7 +7,6 @@
 import (
 	"bytes"
 	"fmt"
-	"io/ioutil"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -43,13 +42,13 @@
 // It reads the file named in, reformats it, and compares
 // the result to the file named out.
 func testPrint(t *testing.T, in, out string) {
-	data, err := ioutil.ReadFile(in)
+	data, err := os.ReadFile(in)
 	if err != nil {
 		t.Error(err)
 		return
 	}
 
-	golden, err := ioutil.ReadFile(out)
+	golden, err := os.ReadFile(out)
 	if err != nil {
 		t.Error(err)
 		return
@@ -157,7 +156,7 @@
 		}
 		t.Run(name, func(t *testing.T) {
 			t.Parallel()
-			data, err := ioutil.ReadFile(out)
+			data, err := os.ReadFile(out)
 			if err != nil {
 				t.Fatal(err)
 			}
@@ -212,7 +211,7 @@
 			}
 
 			if strings.HasSuffix(out, ".in") {
-				golden, err := ioutil.ReadFile(strings.TrimSuffix(out, ".in") + ".golden")
+				golden, err := os.ReadFile(strings.TrimSuffix(out, ".in") + ".golden")
 				if err != nil {
 					t.Fatal(err)
 				}
@@ -346,14 +345,14 @@
 
 // diff returns the output of running diff on b1 and b2.
 func diff(b1, b2 []byte) (data []byte, err error) {
-	f1, err := ioutil.TempFile("", "testdiff")
+	f1, err := os.CreateTemp("", "testdiff")
 	if err != nil {
 		return nil, err
 	}
 	defer os.Remove(f1.Name())
 	defer f1.Close()
 
-	f2, err := ioutil.TempFile("", "testdiff")
+	f2, err := os.CreateTemp("", "testdiff")
 	if err != nil {
 		return nil, err
 	}
diff --git a/modfile/work_test.go b/modfile/work_test.go
index 332df97..46115a5 100644
--- a/modfile/work_test.go
+++ b/modfile/work_test.go
@@ -6,7 +6,7 @@
 
 import (
 	"bytes"
-	"io/ioutil"
+	"os"
 	"path/filepath"
 	"strings"
 	"testing"
@@ -308,7 +308,7 @@
 		name := filepath.Base(out)
 		t.Run(name, func(t *testing.T) {
 			t.Parallel()
-			data, err := ioutil.ReadFile(out)
+			data, err := os.ReadFile(out)
 			if err != nil {
 				t.Fatal(err)
 			}
@@ -360,7 +360,7 @@
 			}
 
 			if strings.HasSuffix(out, ".in") {
-				golden, err := ioutil.ReadFile(strings.TrimSuffix(out, ".in") + ".golden")
+				golden, err := os.ReadFile(strings.TrimSuffix(out, ".in") + ".golden")
 				if err != nil {
 					t.Fatal(err)
 				}
diff --git a/sumdb/dirhash/hash_test.go b/sumdb/dirhash/hash_test.go
index f3c504d..08beb85 100644
--- a/sumdb/dirhash/hash_test.go
+++ b/sumdb/dirhash/hash_test.go
@@ -10,7 +10,6 @@
 	"encoding/base64"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"strings"
@@ -29,7 +28,7 @@
 func TestHash1(t *testing.T) {
 	files := []string{"xyz", "abc"}
 	open := func(name string) (io.ReadCloser, error) {
-		return ioutil.NopCloser(strings.NewReader("data for " + name)), nil
+		return io.NopCloser(strings.NewReader("data for " + name)), nil
 	}
 	want := htop("h1", fmt.Sprintf("%s  %s\n%s  %s\n", h("data for abc"), "abc", h("data for xyz"), "xyz"))
 	out, err := Hash1(files, open)
@@ -47,15 +46,11 @@
 }
 
 func TestHashDir(t *testing.T) {
-	dir, err := ioutil.TempDir("", "dirhash-test-")
-	if err != nil {
+	dir := t.TempDir()
+	if err := os.WriteFile(filepath.Join(dir, "xyz"), []byte("data for xyz"), 0666); err != nil {
 		t.Fatal(err)
 	}
-	defer os.RemoveAll(dir)
-	if err := ioutil.WriteFile(filepath.Join(dir, "xyz"), []byte("data for xyz"), 0666); err != nil {
-		t.Fatal(err)
-	}
-	if err := ioutil.WriteFile(filepath.Join(dir, "abc"), []byte("data for abc"), 0666); err != nil {
+	if err := os.WriteFile(filepath.Join(dir, "abc"), []byte("data for abc"), 0666); err != nil {
 		t.Fatal(err)
 	}
 	want := htop("h1", fmt.Sprintf("%s  %s\n%s  %s\n", h("data for abc"), "prefix/abc", h("data for xyz"), "prefix/xyz"))
@@ -69,11 +64,10 @@
 }
 
 func TestHashZip(t *testing.T) {
-	f, err := ioutil.TempFile("", "dirhash-test-")
+	f, err := os.CreateTemp(t.TempDir(), "dirhash-test-")
 	if err != nil {
 		t.Fatal(err)
 	}
-	defer os.Remove(f.Name())
 	defer f.Close()
 
 	z := zip.NewWriter(f)
@@ -106,21 +100,17 @@
 
 func TestDirFiles(t *testing.T) {
 	t.Run("valid directory with files", func(t *testing.T) {
-		dir, err := ioutil.TempDir("", "dirfiles-test-")
-		if err != nil {
+		dir := t.TempDir()
+		if err := os.WriteFile(filepath.Join(dir, "xyz"), []byte("data for xyz"), 0666); err != nil {
 			t.Fatal(err)
 		}
-		defer os.RemoveAll(dir)
-		if err := ioutil.WriteFile(filepath.Join(dir, "xyz"), []byte("data for xyz"), 0666); err != nil {
-			t.Fatal(err)
-		}
-		if err := ioutil.WriteFile(filepath.Join(dir, "abc"), []byte("data for abc"), 0666); err != nil {
+		if err := os.WriteFile(filepath.Join(dir, "abc"), []byte("data for abc"), 0666); err != nil {
 			t.Fatal(err)
 		}
 		if err := os.Mkdir(filepath.Join(dir, "subdir"), 0777); err != nil {
 			t.Fatal(err)
 		}
-		if err := ioutil.WriteFile(filepath.Join(dir, "subdir", "xyz"), []byte("data for subdir xyz"), 0666); err != nil {
+		if err := os.WriteFile(filepath.Join(dir, "subdir", "xyz"), []byte("data for subdir xyz"), 0666); err != nil {
 			t.Fatal(err)
 		}
 		prefix := "foo/bar@v2.3.4"
diff --git a/sumdb/tlog/ct_test.go b/sumdb/tlog/ct_test.go
index c2d9aeb..f8c364b 100644
--- a/sumdb/tlog/ct_test.go
+++ b/sumdb/tlog/ct_test.go
@@ -7,7 +7,7 @@
 import (
 	"encoding/json"
 	"fmt"
-	"io/ioutil"
+	"io"
 	"net/http"
 	"net/url"
 	"os"
@@ -80,7 +80,7 @@
 		t.Fatal(err)
 	}
 	defer resp.Body.Close()
-	data, err := ioutil.ReadAll(resp.Body)
+	data, err := io.ReadAll(resp.Body)
 	if err != nil {
 		t.Fatal(err)
 	}
diff --git a/zip/zip.go b/zip/zip.go
index 0328705..c5eca4b 100644
--- a/zip/zip.go
+++ b/zip/zip.go
@@ -51,7 +51,6 @@
 	"errors"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"os"
 	"os/exec"
 	"path"
@@ -753,7 +752,7 @@
 
 	// Check that the directory is empty. Don't create it yet in case there's
 	// an error reading the zip.
-	if files, _ := ioutil.ReadDir(dir); len(files) > 0 {
+	if files, _ := os.ReadDir(dir); len(files) > 0 {
 		return fmt.Errorf("target directory %v exists and is not empty", dir)
 	}
 
diff --git a/zip/zip_test.go b/zip/zip_test.go
index 89d5555..84a3ecd 100644
--- a/zip/zip_test.go
+++ b/zip/zip_test.go
@@ -12,7 +12,6 @@
 	"errors"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"os"
 	"os/exec"
 	"path"
@@ -128,7 +127,7 @@
 		if err := os.MkdirAll(filepath.Dir(filePath), 0777); err != nil {
 			return "", err
 		}
-		if err := ioutil.WriteFile(filePath, f.Data, 0666); err != nil {
+		if err := os.WriteFile(filePath, f.Data, 0666); err != nil {
 			return "", err
 		}
 	}
@@ -174,12 +173,12 @@
 func (f fakeFile) Lstat() (os.FileInfo, error) { return fakeFileInfo{f}, nil }
 func (f fakeFile) Open() (io.ReadCloser, error) {
 	if f.data != nil {
-		return ioutil.NopCloser(bytes.NewReader(f.data)), nil
+		return io.NopCloser(bytes.NewReader(f.data)), nil
 	}
 	if f.size >= uint64(modzip.MaxZipFile<<1) {
 		return nil, fmt.Errorf("cannot open fakeFile of size %d", f.size)
 	}
-	return ioutil.NopCloser(io.LimitReader(zeroReader{}, int64(f.size))), nil
+	return io.NopCloser(io.LimitReader(zeroReader{}, int64(f.size))), nil
 }
 
 type fakeFileInfo struct {
@@ -399,13 +398,13 @@
 
 func TestCreate(t *testing.T) {
 	testDir := filepath.FromSlash("testdata/create")
-	testInfos, err := ioutil.ReadDir(testDir)
+	testEntries, err := os.ReadDir(testDir)
 	if err != nil {
 		t.Fatal(err)
 	}
-	for _, testInfo := range testInfos {
-		testInfo := testInfo
-		base := filepath.Base(testInfo.Name())
+	for _, testEntry := range testEntries {
+		testEntry := testEntry
+		base := filepath.Base(testEntry.Name())
 		if filepath.Ext(base) != ".txt" {
 			continue
 		}
@@ -413,22 +412,19 @@
 			t.Parallel()
 
 			// Load the test.
-			testPath := filepath.Join(testDir, testInfo.Name())
+			testPath := filepath.Join(testDir, testEntry.Name())
 			test, err := readTest(testPath)
 			if err != nil {
 				t.Fatal(err)
 			}
 
 			// Write zip to temporary file.
-			tmpZip, err := ioutil.TempFile("", "TestCreate-*.zip")
+			tmpZip, err := os.CreateTemp(t.TempDir(), "TestCreate-*.zip")
 			if err != nil {
 				t.Fatal(err)
 			}
 			tmpZipPath := tmpZip.Name()
-			defer func() {
-				tmpZip.Close()
-				os.Remove(tmpZipPath)
-			}()
+			defer tmpZip.Close()
 			m := module.Version{Path: test.path, Version: test.version}
 			files := make([]modzip.File, len(test.archive.Files))
 			for i, tf := range test.archive.Files {
@@ -465,13 +461,13 @@
 
 func TestCreateFromDir(t *testing.T) {
 	testDir := filepath.FromSlash("testdata/create_from_dir")
-	testInfos, err := ioutil.ReadDir(testDir)
+	testEntries, err := os.ReadDir(testDir)
 	if err != nil {
 		t.Fatal(err)
 	}
-	for _, testInfo := range testInfos {
-		testInfo := testInfo
-		base := filepath.Base(testInfo.Name())
+	for _, testEntry := range testEntries {
+		testEntry := testEntry
+		base := filepath.Base(testEntry.Name())
 		if filepath.Ext(base) != ".txt" {
 			continue
 		}
@@ -479,7 +475,7 @@
 			t.Parallel()
 
 			// Load the test.
-			testPath := filepath.Join(testDir, testInfo.Name())
+			testPath := filepath.Join(testDir, testEntry.Name())
 			test, err := readTest(testPath)
 			if err != nil {
 				t.Fatal(err)
@@ -492,15 +488,12 @@
 			}
 
 			// Create zip from the directory.
-			tmpZip, err := ioutil.TempFile("", "TestCreateFromDir-*.zip")
+			tmpZip, err := os.CreateTemp(t.TempDir(), "TestCreateFromDir-*.zip")
 			if err != nil {
 				t.Fatal(err)
 			}
 			tmpZipPath := tmpZip.Name()
-			defer func() {
-				tmpZip.Close()
-				os.Remove(tmpZipPath)
-			}()
+			defer tmpZip.Close()
 			m := module.Version{Path: test.path, Version: test.version}
 			if err := modzip.CreateFromDir(tmpZip, m, tmpDir); err != nil {
 				if test.wantErr == "" {
@@ -561,7 +554,7 @@
 					t.Fatal(err)
 				}
 				goModData := []byte("module example.com/m\n\ngo 1.13\n")
-				if err := ioutil.WriteFile(filepath.Join(vendorDir, "go.mod"), goModData, 0666); err != nil {
+				if err := os.WriteFile(filepath.Join(vendorDir, "go.mod"), goModData, 0666); err != nil {
 					t.Fatal(err)
 				}
 				return vendorDir
@@ -570,22 +563,14 @@
 		},
 	} {
 		t.Run(test.desc, func(t *testing.T) {
-			tmpDir, err := ioutil.TempDir("", "TestCreateFromDirSpecial-"+test.desc)
-			if err != nil {
-				t.Fatal(err)
-			}
-			defer os.RemoveAll(tmpDir)
-			dir := test.setup(t, tmpDir)
+			dir := test.setup(t, t.TempDir())
 
-			tmpZipFile, err := ioutil.TempFile("", "TestCreateFromDir-*.zip")
+			tmpZipFile, err := os.CreateTemp(t.TempDir(), "TestCreateFromDir-*.zip")
 			if err != nil {
 				t.Fatal(err)
 			}
 			tmpZipPath := tmpZipFile.Name()
-			defer func() {
-				tmpZipFile.Close()
-				os.Remove(tmpZipPath)
-			}()
+			defer tmpZipFile.Close()
 
 			m := module.Version{Path: "example.com/m", Version: "v1.0.0"}
 			if err := modzip.CreateFromDir(tmpZipFile, m, dir); err != nil {
@@ -606,18 +591,18 @@
 
 func TestUnzip(t *testing.T) {
 	testDir := filepath.FromSlash("testdata/unzip")
-	testInfos, err := ioutil.ReadDir(testDir)
+	testEntries, err := os.ReadDir(testDir)
 	if err != nil {
 		t.Fatal(err)
 	}
-	for _, testInfo := range testInfos {
-		base := filepath.Base(testInfo.Name())
+	for _, testEntry := range testEntries {
+		base := filepath.Base(testEntry.Name())
 		if filepath.Ext(base) != ".txt" {
 			continue
 		}
 		t.Run(base[:len(base)-len(".txt")], func(t *testing.T) {
 			// Load the test.
-			testPath := filepath.Join(testDir, testInfo.Name())
+			testPath := filepath.Join(testDir, testEntry.Name())
 			test, err := readTest(testPath)
 			if err != nil {
 				t.Fatal(err)
@@ -630,11 +615,7 @@
 			}
 
 			// Extract to a temporary directory.
-			tmpDir, err := ioutil.TempDir("", "TestUnzip")
-			if err != nil {
-				t.Fatal(err)
-			}
-			defer os.RemoveAll(tmpDir)
+			tmpDir := t.TempDir()
 			m := module.Version{Path: test.path, Version: test.version}
 			if err := modzip.Unzip(tmpDir, m, tmpZipPath); err != nil {
 				if test.wantErr == "" {
@@ -790,7 +771,7 @@
 			if wantCreateErr == "" {
 				wantCreateErr = test.wantErr
 			}
-			if err := modzip.Create(ioutil.Discard, sizeLimitVersion, test.files); err == nil && wantCreateErr != "" {
+			if err := modzip.Create(io.Discard, sizeLimitVersion, test.files); err == nil && wantCreateErr != "" {
 				t.Fatalf("Create: unexpected success; want error containing %q", wantCreateErr)
 			} else if err != nil && wantCreateErr == "" {
 				t.Fatalf("Create: got error %q; want success", err)
@@ -809,17 +790,12 @@
 		test := test
 		t.Run(test.desc, func(t *testing.T) {
 			t.Parallel()
-			tmpZipFile, err := ioutil.TempFile("", "TestUnzipSizeLimits-*.zip")
+			tmpZipFile, err := os.CreateTemp(t.TempDir(), "TestUnzipSizeLimits-*.zip")
 			if err != nil {
 				t.Fatal(err)
 			}
 			tmpZipPath := tmpZipFile.Name()
-			defer func() {
-				tmpZipFile.Close()
-				if err := os.Remove(tmpZipPath); err != nil {
-					t.Errorf("removing temp zip file: %v", err)
-				}
-			}()
+			defer tmpZipFile.Close()
 
 			zw := zip.NewWriter(tmpZipFile)
 			prefix := fmt.Sprintf("%s@%s/", sizeLimitVersion.Path, sizeLimitVersion.Version)
@@ -845,16 +821,6 @@
 				t.Fatal(err)
 			}
 
-			tmpDir, err := ioutil.TempDir("", "TestUnzipSizeLimits")
-			if err != nil {
-				t.Fatal(err)
-			}
-			defer func() {
-				if err := os.RemoveAll(tmpDir); err != nil {
-					t.Errorf("removing temp dir: %v", err)
-				}
-			}()
-
 			wantCheckZipErr := test.wantCheckZipErr
 			if wantCheckZipErr == "" {
 				wantCheckZipErr = test.wantErr
@@ -875,7 +841,7 @@
 			if wantUnzipErr == "" {
 				wantUnzipErr = test.wantErr
 			}
-			if err := modzip.Unzip(tmpDir, sizeLimitVersion, tmpZipPath); err == nil && wantUnzipErr != "" {
+			if err := modzip.Unzip(t.TempDir(), sizeLimitVersion, tmpZipPath); err == nil && wantUnzipErr != "" {
 				t.Fatalf("Unzip: unexpected success; want error containing %q", wantUnzipErr)
 			} else if err != nil && wantUnzipErr == "" {
 				t.Fatalf("Unzip: got error %q; want success", err)
@@ -975,27 +941,18 @@
 		test := test
 		t.Run(test.desc, func(t *testing.T) {
 			t.Parallel()
-			tmpZipFile, err := ioutil.TempFile("", "TestUnzipSizeLimitsSpecial-*.zip")
+			tmpZipFile, err := os.CreateTemp(t.TempDir(), "TestUnzipSizeLimitsSpecial-*.zip")
 			if err != nil {
 				t.Fatal(err)
 			}
 			tmpZipPath := tmpZipFile.Name()
-			defer func() {
-				tmpZipFile.Close()
-				os.Remove(tmpZipPath)
-			}()
+			defer tmpZipFile.Close()
 
 			test.writeZip(t, tmpZipFile)
 			if err := tmpZipFile.Close(); err != nil {
 				t.Fatal(err)
 			}
 
-			tmpDir, err := ioutil.TempDir("", "TestUnzipSizeLimitsSpecial")
-			if err != nil {
-				t.Fatal(err)
-			}
-			defer os.RemoveAll(tmpDir)
-
 			want := func() string {
 				s := fmt.Sprintf("%q", test.wantErr1)
 				if test.wantErr2 != "" {
@@ -1004,7 +961,7 @@
 				return s
 			}
 
-			if err := modzip.Unzip(tmpDir, test.m, tmpZipPath); err == nil && test.wantErr1 != "" {
+			if err := modzip.Unzip(t.TempDir(), test.m, tmpZipPath); err == nil && test.wantErr1 != "" {
 				t.Fatalf("unexpected success; want error containing %s", want())
 			} else if err != nil && test.wantErr1 == "" {
 				t.Fatalf("got error %q; want success", err)
@@ -1328,15 +1285,12 @@
 				})
 			}
 
-			tmpModZipFile, err := ioutil.TempFile("", "TestVCS-*.zip")
+			tmpModZipFile, err := os.CreateTemp(t.TempDir(), "TestVCS-*.zip")
 			if err != nil {
 				t.Fatal(err)
 			}
 			tmpModZipPath := tmpModZipFile.Name()
-			defer func() {
-				tmpModZipFile.Close()
-				os.Remove(tmpModZipPath)
-			}()
+			defer tmpModZipFile.Close()
 			h := sha256.New()
 			w := io.MultiWriter(tmpModZipFile, h)
 			if err := modzip.Create(w, test.m, files); err != nil {
@@ -1401,8 +1355,7 @@
 		}
 
 		// Create an archive.
-		zipPath := filepath.Join(t.TempDir(), "vcs.zip")
-		tmpZipFile, err := os.Create(zipPath)
+		tmpZipFile, err := os.CreateTemp(t.TempDir(), "downloadVCSZip-*.zip")
 		if err != nil {
 			return "", nil, err
 		}
@@ -1442,13 +1395,12 @@
 		}
 
 		// Create an archive.
-		tmpZipFile, err := ioutil.TempFile("", "downloadVCSZip-*.zip")
+		tmpZipFile, err := os.CreateTemp(t.TempDir(), "downloadVCSZip-*.zip")
 		if err != nil {
 			return "", nil, err
 		}
 		tmpZipPath := tmpZipFile.Name()
 		tmpZipFile.Close()
-		t.Cleanup(func() { os.Remove(tmpZipPath) })
 		args := []string{"archive", "-t", "zip", "--no-decode", "-r", rev, "--prefix=prefix/"}
 		if subdir != "" {
 			args = append(args, "-I", subdir+"/**")
@@ -1702,15 +1654,11 @@
 	}
 
 	// Create zip from the directory.
-	tmpZip, err := ioutil.TempFile("", "TestCreateFromDir-*.zip")
+	tmpZip, err := os.CreateTemp(t.TempDir(), "TestCreateFromDir-*.zip")
 	if err != nil {
 		t.Fatal(err)
 	}
-	tmpZipPath := tmpZip.Name()
-	defer func() {
-		tmpZip.Close()
-		os.Remove(tmpZipPath)
-	}()
+	defer tmpZip.Close()
 
 	m := module.Version{Path: "example.com/foo/bar", Version: "v0.0.1"}
 
@@ -1746,15 +1694,11 @@
 	gitInit(t, tmpDir)
 
 	// Create zip from the directory.
-	tmpZip, err := ioutil.TempFile("", "TestCreateFromDir-*.zip")
+	tmpZip, err := os.CreateTemp(t.TempDir(), "TestCreateFromDir-*.zip")
 	if err != nil {
 		t.Fatal(err)
 	}
-	tmpZipPath := tmpZip.Name()
-	defer func() {
-		tmpZip.Close()
-		os.Remove(tmpZipPath)
-	}()
+	defer tmpZip.Close()
 
 	m := module.Version{Path: "example.com/foo/bar", Version: "v0.0.1"}