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 }