about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAlan Pearce2024-06-23 17:37:10 +0200
committerAlan Pearce2024-06-23 19:23:20 +0200
commit8cca5de5d0cd6b18c328a18de286eeb3b2c75b84 (patch)
tree2fdf48a815e81d8b6382e3dd9b3bdf6825d5606a
parentfe4a23b550b7450e6e24cd3c78dfd575122d361d (diff)
downloadwebsite-8cca5de5d0cd6b18c328a18de286eeb3b2c75b84.tar.lz
website-8cca5de5d0cd6b18c328a18de286eeb3b2c75b84.tar.zst
website-8cca5de5d0cd6b18c328a18de286eeb3b2c75b84.zip
pre-compress static files
-rw-r--r--go.mod2
-rw-r--r--go.sum6
-rw-r--r--internal/builder/builder.go6
-rw-r--r--internal/builder/files.go29
-rw-r--r--nix/gomod2nix.toml6
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="