support zstandard encoding
6 files changed, 21 insertions(+), 3 deletions(-)
M go.mod → go.mod
@@ -18,6 +18,7 @@ github.com/fatih/structtag v1.2.0 github.com/fsnotify/fsnotify v1.7.0 github.com/go-git/go-git/v5 v5.12.0 github.com/kevinpollet/nego v0.0.0-20211010160919-a65cd48cee43 + github.com/klauspost/compress v1.17.11 github.com/osdevisnot/sorvor v0.4.4 github.com/snabb/sitemap v1.0.4 github.com/stefanfritsch/goldmark-fences v1.0.0
M go.sum → go.sum
@@ -96,6 +96,8 @@ github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinpollet/nego v0.0.0-20211010160919-a65cd48cee43 h1:Pdirg1gwhEcGjMLyuSxGn9664p+P8J9SrfMgpFwrDyg= github.com/kevinpollet/nego v0.0.0-20211010160919-a65cd48cee43/go.mod h1:ahLMuLCUyDdXqtqGyuwGev7/PGtO7r7ocvdwDuEN/3E= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
M internal/storage/files/file.go → internal/storage/files/file.go
@@ -17,6 +17,7 @@ var encodings = map[string]string{ "br": ".br", "gzip": ".gz", + "zstd": ".zstd", } func (r *Reader) OpenFile(path string, filename string) (*storage.File, error) {
M internal/storage/files/reader.go → internal/storage/files/reader.go
@@ -57,7 +57,7 @@ } urlPath := fileNameToPathName("/" + relPath) switch filepath.Ext(relPath) { - case ".br", ".gz": + case ".br", ".gz", ".zstd": return nil }
M internal/storage/files/writer.go → internal/storage/files/writer.go
@@ -13,6 +13,7 @@ "go.alanpearce.eu/website/internal/storage" "go.alanpearce.eu/x/log" "github.com/andybalholm/brotli" + "github.com/klauspost/compress/zstd" "gitlab.com/tozd/go/errors" )@@ -104,6 +105,15 @@ return brotli.NewWriterLevel(f, brotliLevel), nil } +func openFileZstd(filename string) (*zstd.Encoder, error) { + f, err := openFileWrite(filename + ".zstd") + if err != nil { + return nil, err + } + + return zstd.NewWriter(f) +} + func multiOpenFile(filename string) (*multibuf.WriteCloser, error) { r, err := openFileWrite(filename) if err != nil {@@ -117,8 +127,12 @@ br, err := openFileBrotli(filename) if err != nil { return nil, err } + zst, err := openFileZstd(filename) + if err != nil { + return nil, err + } - return multibuf.NewWriteCloser(r, gz, br), nil + return multibuf.NewWriteCloser(r, gz, br, zst), nil } func (f *Files) OpenFileAndVariants(filename string) (io.WriteCloser, error) {
M internal/website/mux.go → internal/website/mux.go
@@ -177,7 +177,7 @@ w.Header().Add(k, v) } enc := nego.NegotiateContentEncoding(r, file.AvailableEncodings()...) switch enc { - case "br", "gzip": + case "br", "gzip", "zstd": w.Header().Add("Content-Encoding", enc) } w.Header().Add("Content-Type", file.ContentType)