extract decompresses a tar file and saves it to a tmp directory
(data []byte)
| 17 | |
| 18 | // extract decompresses a tar file and saves it to a tmp directory |
| 19 | func Extract(data []byte) (string, error) { |
| 20 | tempFile, err := os.CreateTemp("", "temp.tar.gz") |
| 21 | if err != nil { |
| 22 | return "", err |
| 23 | } |
| 24 | defer os.Remove(tempFile.Name()) |
| 25 | defer tempFile.Close() |
| 26 | |
| 27 | _, err = tempFile.Write(data) |
| 28 | if err != nil { |
| 29 | return "", err |
| 30 | } |
| 31 | |
| 32 | tempDir, err := os.MkdirTemp("", "temp") |
| 33 | if err != nil { |
| 34 | return "", err |
| 35 | } |
| 36 | |
| 37 | cmd := exec.Command("tar", "-xf", tempFile.Name(), "-C", tempDir) |
| 38 | |
| 39 | if err = cmd.Run(); err != nil { |
| 40 | var exitErr *exec.ExitError |
| 41 | if errors.As(err, &exitErr) { |
| 42 | waitStatus := exitErr.Sys().(syscall.WaitStatus) |
| 43 | return "", fmt.Errorf( |
| 44 | "tar extraction failed with exit code: %d", |
| 45 | waitStatus.ExitStatus(), |
| 46 | ) |
| 47 | } |
| 48 | return "", err |
| 49 | } |
| 50 | |
| 51 | return tempDir, nil |
| 52 | } |
| 53 | |
| 54 | func Compress(dir string) (string, error) { |
| 55 | tmpDir, err := fileutil.CreateDevboxTempDir() |