diff options
Diffstat (limited to 'internal/builder')
-rw-r--r-- | internal/builder/builder.go | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/internal/builder/builder.go b/internal/builder/builder.go index 90df0f1..7b12315 100644 --- a/internal/builder/builder.go +++ b/internal/builder/builder.go @@ -2,6 +2,9 @@ package builder import ( "fmt" + "io" + "io/fs" + "os" "path" "path/filepath" "slices" @@ -34,6 +37,38 @@ func joinSourcePath(src string) func(string) string { } } +func copyRecursive(storage storage.Writer, src string) error { + return filepath.WalkDir(src, func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + rel, err := filepath.Rel(src, path) + if err != nil { + return err + } + if d.IsDir() { + return storage.Mkdirp(rel) + } + + sf, err := os.Open(path) + if err != nil { + return err + } + defer sf.Close() + df, err := storage.OpenFileAndVariants(rel) + if err != nil { + return err + } + defer df.Close() + if _, err := io.Copy(df, sf); err != nil { + return err + } + + return nil + }) + +} + func build(ioConfig *IOConfig, config *config.Config, log *log.Logger) (*Result, error) { storage := files.NewWriter(ioConfig.Destination, log, &files.Options{ Compress: !ioConfig.Development, @@ -46,7 +81,7 @@ func build(ioConfig *IOConfig, config *config.Config, log *log.Logger) (*Result, Hashes: make([]string, 0), } - err := storage.CopyRecursive(joinSource("static")) + err := copyRecursive(storage, joinSource("static")) if err != nil { return nil, errors.WithMessage(err, "could not copy static files") } |