Have got site creation working
This commit is contained in:
parent
4ecc12f035
commit
f8e7ea482b
15 changed files with 281 additions and 11 deletions
|
|
@ -10,7 +10,7 @@ func (db *DB) InsertSite(ctx context.Context, site *models.Site) error {
|
|||
id, err := db.q.NewSite(ctx, dbq.NewSiteParams{
|
||||
Name: site.Name,
|
||||
Url: site.URL,
|
||||
Theme: "default",
|
||||
Theme: site.Theme,
|
||||
Props: []byte("{}"),
|
||||
})
|
||||
if err != nil {
|
||||
|
|
|
|||
17
providers/git/provider.go
Normal file
17
providers/git/provider.go
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
package git
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
type Provider struct {
|
||||
}
|
||||
|
||||
func New() *Provider {
|
||||
return &Provider{}
|
||||
}
|
||||
|
||||
func (p *Provider) Clone(ctx context.Context, url string, targetDir string) error {
|
||||
return exec.CommandContext(ctx, "git", "clone", url, targetDir).Run()
|
||||
}
|
||||
8
providers/hugo/dirs.go
Normal file
8
providers/hugo/dirs.go
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
package hugo
|
||||
|
||||
type SiteDir string
|
||||
|
||||
const (
|
||||
BaseSiteDir SiteDir = "base"
|
||||
ThemeSiteDir SiteDir = "theme"
|
||||
)
|
||||
70
providers/hugo/provider.go
Normal file
70
providers/hugo/provider.go
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
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)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
5
providers/hugo/tmpls/config.toml.tmpl
Normal file
5
providers/hugo/tmpls/config.toml.tmpl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
baseURL = {{.Site.URL | printf "%q"}}
|
||||
languageCode = 'en-us'
|
||||
title = {{.Site.Title | printf "%q"}}
|
||||
|
||||
theme = {{.Site.Theme | printf "%q"}}
|
||||
6
providers/hugo/tmpls/fs.go
Normal file
6
providers/hugo/tmpls/fs.go
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
package tmpls
|
||||
|
||||
import "embed"
|
||||
|
||||
//go:embed *.tmpl
|
||||
var FS embed.FS
|
||||
10
providers/themes/meta.go
Normal file
10
providers/themes/meta.go
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
package themes
|
||||
|
||||
import "lmika.dev/lmika/hugo-crm/models"
|
||||
|
||||
var themes = map[string]models.ThemeMeta{
|
||||
"bear": models.ThemeMeta{
|
||||
Name: "bear",
|
||||
URL: "https://github.com/janraasch/hugo-bearblog",
|
||||
},
|
||||
}
|
||||
14
providers/themes/provider.go
Normal file
14
providers/themes/provider.go
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
package themes
|
||||
|
||||
import "lmika.dev/lmika/hugo-crm/models"
|
||||
|
||||
type Provider struct{}
|
||||
|
||||
func New() *Provider {
|
||||
return &Provider{}
|
||||
}
|
||||
|
||||
func (p *Provider) Lookup(name string) (models.ThemeMeta, bool) {
|
||||
t, ok := themes[name]
|
||||
return t, ok
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue