github.com/nektos/act@v0.2.63/pkg/common/file.go (about)

     1  package common
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"os"
     7  )
     8  
     9  // CopyFile copy file
    10  func CopyFile(source string, dest string) (err error) {
    11  	sourcefile, err := os.Open(source)
    12  	if err != nil {
    13  		return err
    14  	}
    15  
    16  	defer sourcefile.Close()
    17  
    18  	destfile, err := os.Create(dest)
    19  	if err != nil {
    20  		return err
    21  	}
    22  
    23  	defer destfile.Close()
    24  
    25  	_, err = io.Copy(destfile, sourcefile)
    26  	if err == nil {
    27  		sourceinfo, err := os.Stat(source)
    28  		if err != nil {
    29  			_ = os.Chmod(dest, sourceinfo.Mode())
    30  		}
    31  	}
    32  
    33  	return
    34  }
    35  
    36  // CopyDir recursive copy of directory
    37  func CopyDir(source string, dest string) (err error) {
    38  	// get properties of source dir
    39  	sourceinfo, err := os.Stat(source)
    40  	if err != nil {
    41  		return err
    42  	}
    43  
    44  	// create dest dir
    45  
    46  	err = os.MkdirAll(dest, sourceinfo.Mode())
    47  	if err != nil {
    48  		return err
    49  	}
    50  
    51  	objects, err := os.ReadDir(source)
    52  
    53  	for _, obj := range objects {
    54  		sourcefilepointer := source + "/" + obj.Name()
    55  
    56  		destinationfilepointer := dest + "/" + obj.Name()
    57  
    58  		if obj.IsDir() {
    59  			// create sub-directories - recursively
    60  			err = CopyDir(sourcefilepointer, destinationfilepointer)
    61  			if err != nil {
    62  				fmt.Println(err)
    63  			}
    64  		} else {
    65  			// perform copy
    66  			err = CopyFile(sourcefilepointer, destinationfilepointer)
    67  			if err != nil {
    68  				fmt.Println(err)
    69  			}
    70  		}
    71  	}
    72  	return err
    73  }