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 {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Site() *SiteBuilder {
|
|
|
|
|
return &SiteBuilder{}
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-01 05:46:48 +00:00
|
|
|
func (sb *SiteBuilder) Publish() error {
|
2026-02-01 04:00:26 +00:00
|
|
|
siteMap := siteMap{
|
|
|
|
|
Meta: &siteMeta{
|
|
|
|
|
Title: "Prog Doc",
|
|
|
|
|
},
|
|
|
|
|
Pages: []sitePage{
|
|
|
|
|
{Target: "/", Source: stdLayoutSource{MainSource: mdSource{MDFile: "README.md"}}},
|
|
|
|
|
{Target: "/more", Source: stdLayoutSource{MainSource: mdSource{MDFile: "_site/more.md"}}},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-01 05:46:48 +00:00
|
|
|
gen := generator{}
|
|
|
|
|
genOut, err := gen.genSite(siteMap)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return sb.deployToNetlify(genOut)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|