hugo-cms/services/sitebuilder/service.go

58 lines
1.1 KiB
Go

package sitebuilder
import (
"context"
"errors"
"lmika.dev/lmika/hugo-crm/models"
"lmika.dev/lmika/hugo-crm/providers/git"
"lmika.dev/lmika/hugo-crm/providers/hugo"
"lmika.dev/lmika/hugo-crm/providers/themes"
"log"
)
type Service struct {
themes *themes.Provider
git *git.Provider
hugo *hugo.Provider
}
func New(
themes *themes.Provider,
git *git.Provider,
hugo *hugo.Provider,
) *Service {
return &Service{
themes: themes,
git: git,
hugo: hugo,
}
}
func (s *Service) CreateNewSite(site models.Site) models.Job {
return models.Job{
Do: func(ctx context.Context) error {
themeMeta, ok := s.themes.Lookup(site.Theme)
if !ok {
return errors.New("theme not found")
}
// Build the site
log.Printf(" .. build")
if err := s.hugo.NewSite(ctx, site); err != nil {
return err
}
// Setup the theme
log.Printf(" .. theme")
if err := s.git.Clone(ctx, themeMeta.URL, s.hugo.SiteStagingDir(site, hugo.ThemeSiteDir)); err != nil {
return err
}
if err := s.hugo.ReconfigureSite(ctx, site); err != nil {
return err
}
return nil
},
}
}