Made some improvements to how Hugo is configured

This commit is contained in:
Leon Mika 2025-02-01 15:36:35 +11:00
parent b09a8bd8d8
commit 39611070f8
6 changed files with 61 additions and 40 deletions

22
providers/hugo/config.go Normal file
View file

@ -0,0 +1,22 @@
package hugo
type hugoConfig struct {
BaseURL string `yaml:"baseURL,omitempty"`
LanguageCode string `yaml:"languageCode"`
Title string `yaml:"title"`
Theme string `yaml:"theme"`
Markup hugoConfigMarkup `yaml:"markup"`
}
type hugoConfigMarkup struct {
Goldmark hugoGoldmarkConfig `yaml:"goldmark"`
}
type hugoGoldmarkConfig struct {
Renderer hugoGoldmarkRendererConfig `yaml:"renderer"`
}
type hugoGoldmarkRendererConfig struct {
Unsafe bool `yaml:"unsafe"`
}

View file

@ -1,33 +1,24 @@
package hugo package hugo
import ( import (
"bytes"
"context" "context"
"gopkg.in/yaml.v3"
"lmika.dev/lmika/hugo-cms/models" "lmika.dev/lmika/hugo-cms/models"
"lmika.dev/lmika/hugo-cms/providers/hugo/tmpls"
"log" "log"
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"text/template"
) )
type Provider struct { type Provider struct {
stagingDir string stagingDir string
scratchDir string scratchDir string
tmpls *template.Template
} }
func New(stagingDir, scratchDir string) (*Provider, error) { func New(stagingDir, scratchDir string) (*Provider, error) {
ts, err := template.ParseFS(tmpls.FS, "*.tmpl")
if err != nil {
return nil, err
}
return &Provider{ return &Provider{
stagingDir: stagingDir, stagingDir: stagingDir,
scratchDir: scratchDir, scratchDir: scratchDir,
tmpls: ts,
}, nil }, nil
} }
@ -48,7 +39,9 @@ func (p *Provider) NewSite(ctx context.Context, site models.Site) error {
} }
// Create the new site // Create the new site
if err := exec.CommandContext(ctx, "hugo", "new", "site", p.SiteStagingDir(site, BaseSiteDir)).Run(); err != nil { if err := exec.CommandContext(ctx, "hugo", "new", "site",
"--config=hugo.yaml",
p.SiteStagingDir(site, BaseSiteDir)).Run(); err != nil {
return err return err
} }
return nil return nil
@ -86,18 +79,33 @@ func (p *Provider) PublishSite(ctx context.Context, site models.Site, target mod
} }
func (p *Provider) ReconfigureSite(ctx context.Context, site models.Site) error { func (p *Provider) ReconfigureSite(ctx context.Context, site models.Site) error {
// Reconfigure the site hugoCfg := hugoConfig{
var hugoCfg bytes.Buffer Title: site.Name,
if err := p.tmpls.ExecuteTemplate(&hugoCfg, "config.toml.tmpl", struct { LanguageCode: "en",
Site models.Site Theme: site.Theme,
}{ Markup: hugoConfigMarkup{
Site: site, Goldmark: hugoGoldmarkConfig{
}); err != nil { Renderer: hugoGoldmarkRendererConfig{
Unsafe: true,
},
},
},
}
ymlBytes, err := yaml.Marshal(hugoCfg)
if err != nil {
return err return err
} }
if err := os.WriteFile(filepath.Join(p.SiteStagingDir(site, BaseSiteDir), "hugo.toml"), hugoCfg.Bytes(), 0644); err != nil { if err := os.WriteFile(filepath.Join(p.SiteStagingDir(site, BaseSiteDir), "hugo.yaml"), ymlBytes, 0644); err != nil {
return err return err
} }
if _, err := os.Stat(filepath.Join(p.SiteStagingDir(site, BaseSiteDir), "hugo.toml")); err == nil {
if err := os.Remove(filepath.Join(p.SiteStagingDir(site, BaseSiteDir), "hugo.toml")); err != nil {
return err
}
}
return nil return nil
} }

View file

@ -1,5 +0,0 @@
baseURL = 'https://example.com/'
languageCode = 'en-us'
title = {{.Site.Title | printf "%q"}}
theme = {{.Site.Theme | printf "%q"}}

View file

@ -1,6 +0,0 @@
package tmpls
import "embed"
//go:embed *.tmpl
var FS embed.FS

View file

@ -72,7 +72,7 @@ func (s *Service) fullRebuildNecessary(ctx context.Context, site models.Site) (b
} }
filesMustExists := []string{ filesMustExists := []string{
filepath.Join(s.hugo.SiteStagingDir(site, hugo.BaseSiteDir), "hugo.toml"), filepath.Join(s.hugo.SiteStagingDir(site, hugo.BaseSiteDir), "hugo.yaml"),
} }
for _, dir := range dirsMustExists { for _, dir := range dirsMustExists {

View file

@ -63,15 +63,17 @@ func (s *Service) CreateSite(ctx context.Context, user models.User, name string)
} }
// TEMP // TEMP
if err := s.db.InsertPublishTarget(ctx, &models.PublishTarget{ /*
SiteID: newSite.ID, if err := s.db.InsertPublishTarget(ctx, &models.PublishTarget{
Role: models.TargetRoleProduction, SiteID: newSite.ID,
Type: models.TargetTypeNetlify, Role: models.TargetRoleProduction,
URL: "https://meek-meringue-060cfc.netlify.app/", Type: models.TargetTypeNetlify,
TargetRef: "e628dc6e-e6e1-45a9-847a-982adef940a8", URL: "https://meek-meringue-060cfc.netlify.app/",
}); err != nil { TargetRef: "e628dc6e-e6e1-45a9-847a-982adef940a8",
return models.Site{}, err }); err != nil {
} return models.Site{}, err
}
*/
return newSite, s.jobs.Queue(ctx, s.sb.CreateNewSite(newSite)) return newSite, s.jobs.Queue(ctx, s.sb.CreateNewSite(newSite))
} }