func createZip()

in gke-windows-builder/builder/builder/bucket.go [129:176]


func createZip(ctx context.Context, fullpath string) (string, error) {
	f, err := ioutil.TempFile("", "")
	if err != nil {
		return "", fmt.Errorf("failed to create temp file: %v", err)
	}
	defer f.Close()

	zipW := zip.NewWriter(f)
	defer zipW.Close()

	err = filepath.Walk(fullpath, func(path string, info os.FileInfo, err error) error {
		fi, err := os.Lstat(path)
		if err != nil {
			return err
		}

		if fi.IsDir() {
			// Skip
			return ctx.Err()
		}

		if fi.Mode()&os.ModeSymlink != 0 {
			log.Printf("Skipping symlink: %q", path)
			return ctx.Err()
		}

		trimmedPath := path
		if filepath.HasPrefix(trimmedPath, fullpath) {
			trimmedPath = trimmedPath[len(fullpath)+1:]
		}

		w, err := zipW.Create(trimmedPath)
		if err != nil {
			return err
		}
		if err := copyFile(w, path); err != nil {
			return err
		}

		return ctx.Err()
	})

	if err != nil {
		return "", fmt.Errorf("failed to walk directory: %v", err)
	}

	return f.Name(), ctx.Err()
}