hugo-cms/providers/hugo/provider.go

71 lines
1.6 KiB
Go
Raw Normal View History

2025-01-26 22:26:15 +00:00
package hugo
import (
"bytes"
"context"
"lmika.dev/lmika/hugo-crm/models"
"lmika.dev/lmika/hugo-crm/providers/hugo/tmpls"
"log"
"os"
"os/exec"
"path/filepath"
"text/template"
)
type Provider struct {
stagingDir string
tmpls *template.Template
}
func New(stagingDir string) (*Provider, error) {
ts, err := template.ParseFS(tmpls.FS, "*.tmpl")
if err != nil {
return nil, err
}
return &Provider{
stagingDir: stagingDir,
tmpls: ts,
}, nil
}
func (p *Provider) SiteStagingDir(site models.Site, what SiteDir) string {
switch what {
case BaseSiteDir:
return filepath.Join(p.stagingDir, site.Name)
case ThemeSiteDir:
return filepath.Join(p.stagingDir, site.Name, "themes", site.Theme)
}
2025-01-27 03:23:54 +00:00
return filepath.Join(p.stagingDir, site.Name, string(what))
2025-01-26 22:26:15 +00:00
}
func (p *Provider) NewSite(ctx context.Context, site models.Site) error {
log.Printf(" .. %v", p.SiteStagingDir(site, BaseSiteDir))
if err := os.MkdirAll(p.SiteStagingDir(site, BaseSiteDir), 0755); err != nil {
return err
}
// Create the new site
if err := exec.CommandContext(ctx, "hugo", "new", "site", p.SiteStagingDir(site, BaseSiteDir)).Run(); err != nil {
return err
}
return nil
}
func (p *Provider) ReconfigureSite(ctx context.Context, site models.Site) error {
// Reconfigure the site
var hugoCfg bytes.Buffer
if err := p.tmpls.ExecuteTemplate(&hugoCfg, "config.toml.tmpl", struct {
Site models.Site
}{
Site: site,
}); err != nil {
return err
}
if err := os.WriteFile(filepath.Join(p.SiteStagingDir(site, BaseSiteDir), "hugo.toml"), hugoCfg.Bytes(), 0644); err != nil {
return err
}
return nil
}