progdoc/progdoc.go

89 lines
1.7 KiB
Go
Raw Normal View History

2026-02-01 04:00:26 +00:00
package progdoc
2026-02-01 05:46:48 +00:00
import (
"context"
"errors"
"os"
"github.com/go-openapi/runtime"
"github.com/go-openapi/strfmt"
"github.com/netlify/open-api/v2/go/porcelain"
netlify_ctx "github.com/netlify/open-api/v2/go/porcelain/context"
)
2026-02-01 04:00:26 +00:00
type SiteBuilder struct {
2026-02-01 06:04:15 +00:00
opts []Option
2026-02-01 04:00:26 +00:00
}
2026-02-01 06:04:15 +00:00
func Site(opts ...Option) *SiteBuilder {
return &SiteBuilder{
opts: opts,
}
2026-02-01 04:00:26 +00:00
}
2026-02-02 10:25:43 +00:00
func (sb *SiteBuilder) Generate() error {
_, err := sb.generate()
if err != nil {
return err
}
return err
}
2026-02-01 05:46:48 +00:00
func (sb *SiteBuilder) Publish() error {
2026-02-02 10:25:43 +00:00
genOut, err := sb.generate()
if err != nil {
return err
}
return sb.deployToNetlify(genOut)
}
func (sb *SiteBuilder) generate() (generation, error) {
2026-02-01 06:04:15 +00:00
siteMap := siteMap{}
for _, opt := range sb.opts {
if err := opt.configSitemap(&siteMap); err != nil {
2026-02-02 10:25:43 +00:00
return generation{}, err
2026-02-01 06:04:15 +00:00
}
}
if len(siteMap.Pages) == 0 {
2026-02-02 10:25:43 +00:00
return generation{}, errors.New("No pages found")
2026-02-01 04:00:26 +00:00
}
2026-02-01 05:46:48 +00:00
gen := generator{}
genOut, err := gen.genSite(siteMap)
if err != nil {
2026-02-02 10:25:43 +00:00
return generation{}, err
2026-02-01 05:46:48 +00:00
}
2026-02-02 10:25:43 +00:00
return genOut, nil
2026-02-01 05:46:48 +00:00
}
func (sb *SiteBuilder) deployToNetlify(genOut generation) error {
netlifyAuthToken := os.Getenv("NETLIFY_AUTH_TOKEN")
if netlifyAuthToken == "" {
return errors.New("NETLIFY_AUTH_TOKEN is not set")
}
netlifySiteID := os.Getenv("NETLIFY_SITE_ID")
if netlifySiteID == "" {
return errors.New("NETLIFY_SITE_ID is not set")
}
ctx := context.Background()
ctx = netlify_ctx.WithAuthInfo(ctx, runtime.ClientAuthInfoWriterFunc(func(r runtime.ClientRequest, _ strfmt.Registry) error {
return r.SetHeaderParam("Authorization", "Bearer "+netlifyAuthToken)
}))
client := porcelain.Default
_, err := client.DeploySite(ctx, porcelain.DeployOptions{
SiteID: netlifySiteID,
Dir: genOut.OutDir,
})
if err != nil {
2026-02-01 04:00:26 +00:00
return err
}
2026-02-01 05:46:48 +00:00
2026-02-01 04:00:26 +00:00
return nil
}