Select Git revision
utils.go 2.11 KiB
package utils
import (
"os"
"io"
"fmt"
"bytes"
"errors"
"net/mail"
"archive/tar"
"path/filepath"
"compress/gzip"
"github.com/google/uuid"
)
func Print(a ...any) {
os.Stdout.WriteString(fmt.Sprint(a ...))
}
func Println(a ...any) {
Print(a...)
Print("\n")
}
func PrintErr(a ...any) {
os.Stderr.WriteString(fmt.Sprint(a ...))
}
func PrintlnErr(a ...any) {
PrintErr(a...)
PrintErr("\n")
}
// Returns true if the specified file exists, false otherwise.
func FileExists(filename string) bool {
info, err := os.Stat(filename)
if os.IsNotExist(err) {
return false
}
return !info.IsDir()
}
// Creates a tar.gz archive of dir and all its files and subdirectories.
// Source code slightly modified from: https://gist.github.com/mimoo/25fc9716e0f1353791f5908f94d6e726
func TarGzDir(dir, archive string) error {
var buf bytes.Buffer
gzWriter := gzip.NewWriter(&buf)
tarWriter := tar.NewWriter(gzWriter)
// Walks through every file in the directory
filepath.Walk(dir, func(file string, fi os.FileInfo, err error) error {
header, err := tar.FileInfoHeader(fi, file)
if err != nil {
return err
}
header.Name = filepath.ToSlash(file)
if err := tarWriter.WriteHeader(header); err != nil {
return err
}
// if not a dir, write file content
if !fi.IsDir() {
data, err := os.Open(file)
if err != nil {
return err
}
if _, err := io.Copy(tarWriter, data); err != nil {
return err
}
}
return nil
})
if err := tarWriter.Close(); err != nil {
return err
}
if err := gzWriter.Close(); err != nil {
return err
}
fileToWrite, err := os.OpenFile(archive, os.O_CREATE|os.O_RDWR, os.FileMode(0750))
if err != nil {
return err
}
if _, err := io.Copy(fileToWrite, &buf); err != nil {
return err
}
return nil
}
func GetRandomTempFilename() (string, error) {
tempDir := os.TempDir()
uuid, err := uuid.NewRandom()
if err != nil {
return "", errors.New("Failed creating random UUID: "+err.Error())
}
randName := "temp_"+uuid.String()
return filepath.Join(tempDir, randName), nil
}
func IsEmail(email string) bool {
_, err := mail.ParseAddress(email)
return err == nil
}