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 }