mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			106 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
package build
 | 
						|
 | 
						|
import (
 | 
						|
	"crypto/md5"
 | 
						|
	"crypto/sha256"
 | 
						|
	"fmt"
 | 
						|
	"io"
 | 
						|
	"log"
 | 
						|
	"os"
 | 
						|
	"path/filepath"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
func logAndClose(c io.Closer) {
 | 
						|
	if err := c.Close(); err != nil {
 | 
						|
		log.Println("error closing:", err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func shaDir(dir string) error {
 | 
						|
	return filepath.Walk(dir, func(path string, f os.FileInfo, err error) error {
 | 
						|
		if path == dir {
 | 
						|
			return nil
 | 
						|
		}
 | 
						|
 | 
						|
		if strings.Contains(path, ".sha256") {
 | 
						|
			return nil
 | 
						|
		}
 | 
						|
		if err := shaFile(path); err != nil {
 | 
						|
			log.Printf("Failed to create sha file. error: %v\n", err)
 | 
						|
		}
 | 
						|
		return nil
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
func shaFile(file string) error {
 | 
						|
	// Ignore gosec G304 as this function is only used in the build process.
 | 
						|
	//nolint:gosec
 | 
						|
	r, err := os.Open(file)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	defer logAndClose(r)
 | 
						|
 | 
						|
	h := sha256.New()
 | 
						|
	_, err = io.Copy(h, r)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	// Ignore gosec G304 as this function is only used in the build process.
 | 
						|
	//nolint:gosec
 | 
						|
	out, err := os.Create(file + ".sha256")
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	_, err = fmt.Fprintf(out, "%x\n", h.Sum(nil))
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	return out.Close()
 | 
						|
}
 | 
						|
 | 
						|
func md5File(file string) error {
 | 
						|
	// Ignore gosec G304 as this function is only used in the build process.
 | 
						|
	//nolint:gosec
 | 
						|
	fd, err := os.Open(file)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	defer logAndClose(fd)
 | 
						|
 | 
						|
	h := md5.New()
 | 
						|
	_, err = io.Copy(h, fd)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	// Ignore gosec G304 as this function is only used in the build process.
 | 
						|
	//nolint:gosec
 | 
						|
	out, err := os.Create(file + ".md5")
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	_, err = fmt.Fprintf(out, "%x\n", h.Sum(nil))
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	return out.Close()
 | 
						|
}
 | 
						|
 | 
						|
// basically `rm -r`s the list of files provided
 | 
						|
func rmr(paths ...string) {
 | 
						|
	for _, path := range paths {
 | 
						|
		log.Println("rm -r", path)
 | 
						|
		if err := os.RemoveAll(path); err != nil {
 | 
						|
			log.Println("error deleting folder", path, "error:", err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |