From 39611070f85c4ebab1c483f2967388c668990147 Mon Sep 17 00:00:00 2001 From: Leon Mika Date: Sat, 1 Feb 2025 15:36:35 +1100 Subject: [PATCH] Made some improvements to how Hugo is configured --- providers/hugo/config.go | 22 +++++++++++++ providers/hugo/provider.go | 46 ++++++++++++++++----------- providers/hugo/tmpls/config.toml.tmpl | 5 --- providers/hugo/tmpls/fs.go | 6 ---- services/sitebuilder/service.go | 2 +- services/sites/service.go | 20 ++++++------ 6 files changed, 61 insertions(+), 40 deletions(-) create mode 100644 providers/hugo/config.go delete mode 100644 providers/hugo/tmpls/config.toml.tmpl delete mode 100644 providers/hugo/tmpls/fs.go diff --git a/providers/hugo/config.go b/providers/hugo/config.go new file mode 100644 index 0000000..e888090 --- /dev/null +++ b/providers/hugo/config.go @@ -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"` +} diff --git a/providers/hugo/provider.go b/providers/hugo/provider.go index e88f614..462d1c2 100644 --- a/providers/hugo/provider.go +++ b/providers/hugo/provider.go @@ -1,33 +1,24 @@ package hugo import ( - "bytes" "context" + "gopkg.in/yaml.v3" "lmika.dev/lmika/hugo-cms/models" - "lmika.dev/lmika/hugo-cms/providers/hugo/tmpls" "log" "os" "os/exec" "path/filepath" - "text/template" ) type Provider struct { stagingDir string scratchDir string - tmpls *template.Template } func New(stagingDir, scratchDir string) (*Provider, error) { - ts, err := template.ParseFS(tmpls.FS, "*.tmpl") - if err != nil { - return nil, err - } - return &Provider{ stagingDir: stagingDir, scratchDir: scratchDir, - tmpls: ts, }, nil } @@ -48,7 +39,9 @@ func (p *Provider) NewSite(ctx context.Context, site models.Site) error { } // 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 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 { - // Reconfigure the site - var hugoCfg bytes.Buffer - if err := p.tmpls.ExecuteTemplate(&hugoCfg, "config.toml.tmpl", struct { - Site models.Site - }{ - Site: site, - }); err != nil { + hugoCfg := hugoConfig{ + Title: site.Name, + LanguageCode: "en", + Theme: site.Theme, + Markup: hugoConfigMarkup{ + Goldmark: hugoGoldmarkConfig{ + Renderer: hugoGoldmarkRendererConfig{ + Unsafe: true, + }, + }, + }, + } + + ymlBytes, err := yaml.Marshal(hugoCfg) + if err != nil { 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 } + + 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 } diff --git a/providers/hugo/tmpls/config.toml.tmpl b/providers/hugo/tmpls/config.toml.tmpl deleted file mode 100644 index 8960ff4..0000000 --- a/providers/hugo/tmpls/config.toml.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -baseURL = 'https://example.com/' -languageCode = 'en-us' -title = {{.Site.Title | printf "%q"}} - -theme = {{.Site.Theme | printf "%q"}} \ No newline at end of file diff --git a/providers/hugo/tmpls/fs.go b/providers/hugo/tmpls/fs.go deleted file mode 100644 index f3d0429..0000000 --- a/providers/hugo/tmpls/fs.go +++ /dev/null @@ -1,6 +0,0 @@ -package tmpls - -import "embed" - -//go:embed *.tmpl -var FS embed.FS diff --git a/services/sitebuilder/service.go b/services/sitebuilder/service.go index ad909b2..0b3084a 100644 --- a/services/sitebuilder/service.go +++ b/services/sitebuilder/service.go @@ -72,7 +72,7 @@ func (s *Service) fullRebuildNecessary(ctx context.Context, site models.Site) (b } 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 { diff --git a/services/sites/service.go b/services/sites/service.go index 53a0492..1395ad0 100644 --- a/services/sites/service.go +++ b/services/sites/service.go @@ -63,15 +63,17 @@ func (s *Service) CreateSite(ctx context.Context, user models.User, name string) } // TEMP - if err := s.db.InsertPublishTarget(ctx, &models.PublishTarget{ - SiteID: newSite.ID, - Role: models.TargetRoleProduction, - Type: models.TargetTypeNetlify, - URL: "https://meek-meringue-060cfc.netlify.app/", - TargetRef: "e628dc6e-e6e1-45a9-847a-982adef940a8", - }); err != nil { - return models.Site{}, err - } + /* + if err := s.db.InsertPublishTarget(ctx, &models.PublishTarget{ + SiteID: newSite.ID, + Role: models.TargetRoleProduction, + Type: models.TargetTypeNetlify, + URL: "https://meek-meringue-060cfc.netlify.app/", + TargetRef: "e628dc6e-e6e1-45a9-847a-982adef940a8", + }); err != nil { + return models.Site{}, err + } + */ return newSite, s.jobs.Queue(ctx, s.sb.CreateNewSite(newSite)) }