From 8cca5de5d0cd6b18c328a18de286eeb3b2c75b84 Mon Sep 17 00:00:00 2001 From: Alan Pearce Date: Sun, 23 Jun 2024 17:37:10 +0200 Subject: pre-compress static files --- go.mod | 2 -- go.sum | 6 ------ internal/builder/builder.go | 6 +----- internal/builder/files.go | 29 +++++++++++++++++++++++++++++ nix/gomod2nix.toml | 6 ------ 5 files changed, 30 insertions(+), 19 deletions(-) diff --git a/go.mod b/go.mod index 8595437..989a82c 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,6 @@ require ( github.com/fatih/structtag v1.2.0 github.com/fsnotify/fsnotify v1.7.0 github.com/osdevisnot/sorvor v0.4.4 - github.com/otiai10/copy v1.14.0 github.com/pkg/errors v0.9.1 github.com/snabb/sitemap v1.0.4 github.com/stefanfritsch/goldmark-fences v1.0.0 @@ -45,7 +44,6 @@ require ( github.com/microcosm-cc/bluemonday v1.0.26 // indirect github.com/snabb/diagio v1.0.4 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.20.0 // indirect golang.org/x/text v0.15.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index a8bf342..8fc9606 100644 --- a/go.sum +++ b/go.sum @@ -69,10 +69,6 @@ github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3r github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs= github.com/osdevisnot/sorvor v0.4.4 h1:hcMWsWOKpUtDUE3F7dra1Jf12ftLHfgDcxlyPeVlz0Y= github.com/osdevisnot/sorvor v0.4.4/go.mod h1:D/j+vvJEmjIXndJf37uwFWD0Hjcq9DiGojyt4yMo7H0= -github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= -github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= -github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= -github.com/otiai10/mint v1.5.1/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -129,8 +125,6 @@ golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/internal/builder/builder.go b/internal/builder/builder.go index 4f305db..f3e61dc 100644 --- a/internal/builder/builder.go +++ b/internal/builder/builder.go @@ -17,7 +17,6 @@ import ( "github.com/a-h/templ" mapset "github.com/deckarep/golang-set/v2" - cp "github.com/otiai10/copy" "github.com/pkg/errors" ) @@ -102,10 +101,7 @@ func build(outDir string, config config.Config) (*Result, error) { return nil, errors.WithMessage(err, "could not create public directory") } - err := cp.Copy("static", publicDir, cp.Options{ - PreserveTimes: true, - PermissionControl: cp.AddPermission(0755), - }) + err := copyRecursive("static", publicDir) if err != nil { return nil, errors.WithMessage(err, "could not copy static files") } diff --git a/internal/builder/files.go b/internal/builder/files.go index 57d4d2e..20fedf9 100644 --- a/internal/builder/files.go +++ b/internal/builder/files.go @@ -3,7 +3,9 @@ package builder import ( "compress/gzip" "io" + "io/fs" "os" + "path/filepath" "github.com/andybalholm/brotli" ) @@ -81,3 +83,30 @@ func openFileAndVariants(filename string) (io.WriteCloser, error) { return openFileWrite(filename) } } + +func copyRecursive(src, dst string) error { + return filepath.WalkDir(src, func(path string, d fs.DirEntry, err error) error { + rel, err := filepath.Rel(src, path) + if err != nil { + return err + } + if d.IsDir() { + return mkdirp(dst, rel) + } else { + sf, err := os.Open(path) + if err != nil { + return err + } + defer sf.Close() + df, err := openFileAndVariants(filepath.Join(dst, rel)) + if err != nil { + return err + } + defer df.Close() + if _, err := io.Copy(df, sf); err != nil { + return err + } + } + return nil + }) +} diff --git a/nix/gomod2nix.toml b/nix/gomod2nix.toml index 268262c..459fc49 100644 --- a/nix/gomod2nix.toml +++ b/nix/gomod2nix.toml @@ -80,9 +80,6 @@ schema = 3 [mod."github.com/osdevisnot/sorvor"] version = "v0.4.4" hash = "sha256-BhyO7bvwxIdEV+c6Eo1uqahhcgsHiS8nJpg2aT8t+8s=" - [mod."github.com/otiai10/copy"] - version = "v1.14.0" - hash = "sha256-xsaL1ddkPS544y0Jv7u/INUALBYmYq29ddWvysLXk4A=" [mod."github.com/pkg/errors"] version = "v0.9.1" hash = "sha256-mNfQtcrQmu3sNg/7IwiieKWOgFQOVVe2yXgKBpe/wZw=" @@ -113,9 +110,6 @@ schema = 3 [mod."golang.org/x/net"] version = "v0.25.0" hash = "sha256-IjFfXLYNj27WLF7vpkZ6mfFXBnp+7QER3OQ0RgjxN54=" - [mod."golang.org/x/sync"] - version = "v0.7.0" - hash = "sha256-2ETllEu2GDWoOd/yMkOkLC2hWBpKzbVZ8LhjLu0d2A8=" [mod."golang.org/x/sys"] version = "v0.20.0" hash = "sha256-mowlaoG2k4n1c1rApWef5EMiXd3I77CsUi8jPh6pTYA=" -- cgit 1.4.1