git-preview @ main

static git web frontend but with images and html previews + code truncation

embed.go

 1package main
 2
 3import (
 4	"embed"
 5	"io/fs"
 6	"os"
 7	"path/filepath"
 8)
 9
10//go:embed templates static
11var embeddedAssets embed.FS
12
13// materializeAssets writes the embedded templates/static dirs to a temp
14// directory and returns their paths. Used when the config leaves
15// dirs.templates / dirs.static unset, so the binary is self-contained.
16func materializeAssets() (templates string, static string, err error) {
17	root, err := os.MkdirTemp("", "git-preview-assets-")
18	if err != nil {
19		return "", "", err
20	}
21
22	err = fs.WalkDir(embeddedAssets, ".", func(p string, d fs.DirEntry, err error) error {
23		if err != nil {
24			return err
25		}
26		dest := filepath.Join(root, filepath.FromSlash(p))
27		if d.IsDir() {
28			return os.MkdirAll(dest, 0755)
29		}
30		b, err := embeddedAssets.ReadFile(p)
31		if err != nil {
32			return err
33		}
34		return os.WriteFile(dest, b, 0644)
35	})
36	if err != nil {
37		return "", "", err
38	}
39
40	return filepath.Join(root, "templates"), filepath.Join(root, "static"), nil
41}