progdoc/progdoc.go

67 lines
1.5 KiB
Go

package progdoc
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"
)
type SiteBuilder struct {
}
func Site() *SiteBuilder {
return &SiteBuilder{}
}
func (sb *SiteBuilder) Publish() error {
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"}}},
},
}
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 {
return err
}
return nil
}