pages: some fixups

This commit is contained in:
Leon Mika 2025-02-18 21:26:24 +11:00
parent 68aa9c0e13
commit 295811411e
7 changed files with 64 additions and 39 deletions

View file

@ -2,26 +2,33 @@ package hugo
import (
"context"
"fmt"
"gopkg.in/yaml.v3"
"lmika.dev/lmika/hugo-cms/models"
"log"
"net/url"
"os"
"os/exec"
"path/filepath"
)
type Provider struct {
stagingDir string
previewDir string
scratchDir string
stagingDir string
previewDir string
previewBaseURL *url.URL
scratchDir string
}
func New(stagingDir, previewDir, scratchDir string) (*Provider, error) {
func New(stagingDir, previewBaseURL, previewDir, scratchDir string) (*Provider, error) {
baseURL, err := url.Parse(previewBaseURL)
if err != nil {
return nil, err
}
return &Provider{
stagingDir: stagingDir,
previewDir: previewDir,
scratchDir: scratchDir,
stagingDir: stagingDir,
previewBaseURL: baseURL,
previewDir: previewDir,
scratchDir: scratchDir,
}, nil
}
@ -51,8 +58,12 @@ func (p *Provider) NewSite(ctx context.Context, site models.Site) error {
}
func (p *Provider) PreviewSite(ctx context.Context, site models.Site) (outDir string, err error) {
previewURL, err := p.previewBaseURL.Parse("preview/" + site.Name)
if err != nil {
return "", err
}
previewTarget := models.PublishTarget{
URL: fmt.Sprintf("http://localhost:3000/preview/%s", site.Name),
URL: previewURL.String(),
}
return p.publishSiteAt(ctx, p.previewDir, site, previewTarget, "hugoPreview.yaml")
@ -80,6 +91,7 @@ func (p *Provider) publishSiteAt(ctx context.Context, dir string, site models.Si
cmd := exec.CommandContext(ctx, "hugo",
"--source", baseSiteDir,
"--destination", outDir,
"--quiet",
"--config", filepath.Join(baseSiteDir, configFile),
"--baseURL", target.URL)
cmd.Stderr = os.Stderr
@ -91,12 +103,11 @@ func (p *Provider) publishSiteAt(ctx context.Context, dir string, site models.Si
return outDir, nil
}
func (p *Provider) ReconfigureSite(ctx context.Context, configBase string, site models.Site) error {
func (p *Provider) ReconfigureSite(ctx context.Context, isPreviewConfig bool, configBase string, site models.Site) error {
hugoCfg := hugoConfig{
Title: site.Title,
LanguageCode: "en",
Theme: site.Theme,
CanonifyURLs: configBase == "hugoPreview",
Markup: hugoConfigMarkup{
Goldmark: hugoGoldmarkConfig{
Renderer: hugoGoldmarkRendererConfig{
@ -106,6 +117,10 @@ func (p *Provider) ReconfigureSite(ctx context.Context, configBase string, site
},
}
if isPreviewConfig {
hugoCfg.CanonifyURLs = true
}
ymlBytes, err := yaml.Marshal(hugoCfg)
if err != nil {
return err