Added a static file source
This commit is contained in:
parent
64e19d8700
commit
b3ada31245
18
assets.go
Normal file
18
assets.go
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
package progdoc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
type staticSource interface {
|
||||||
|
Open() (io.ReadCloser, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type fileStaticSource struct {
|
||||||
|
Filename string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f fileStaticSource) Open() (io.ReadCloser, error) {
|
||||||
|
return os.Open(f.Filename)
|
||||||
|
}
|
||||||
|
|
@ -11,7 +11,8 @@ func main() {
|
||||||
progdoc.Meta(progdoc.SiteMeta{Title: "Prog Doc"}),
|
progdoc.Meta(progdoc.SiteMeta{Title: "Prog Doc"}),
|
||||||
progdoc.SourceFile("/", "README.md"),
|
progdoc.SourceFile("/", "README.md"),
|
||||||
progdoc.SourceDir("/", "_site"),
|
progdoc.SourceDir("/", "_site"),
|
||||||
).Publish(); err != nil {
|
progdoc.StaticFile("/go.mod", "go.mod"),
|
||||||
|
).Generate(); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
32
generator.go
32
generator.go
|
|
@ -1,6 +1,8 @@
|
||||||
package progdoc
|
package progdoc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
)
|
)
|
||||||
|
|
@ -21,6 +23,7 @@ func (g generator) genSite(siteMap siteMap) (_ generation, err error) {
|
||||||
return generation{}, err
|
return generation{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
log.Printf("Output dir: %s", outDir)
|
||||||
|
|
||||||
for _, page := range siteMap.Pages {
|
for _, page := range siteMap.Pages {
|
||||||
srcCtx := SourceCtx{Meta: siteMap.Meta}
|
srcCtx := SourceCtx{Meta: siteMap.Meta}
|
||||||
|
|
@ -42,5 +45,34 @@ func (g generator) genSite(siteMap siteMap) (_ generation, err error) {
|
||||||
return generation{}, err
|
return generation{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, static := range siteMap.Static {
|
||||||
|
targetFullPath := filepath.Join(outDir, static.Path)
|
||||||
|
targetFullDir := filepath.Dir(targetFullPath)
|
||||||
|
err := os.MkdirAll(targetFullDir, os.ModePerm)
|
||||||
|
if err != nil {
|
||||||
|
return generation{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := (func(fileName string) error {
|
||||||
|
r, err := static.Source.Open()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
f, err := os.Create(fileName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
_, err = io.Copy(f, r)
|
||||||
|
return err
|
||||||
|
})(targetFullPath); err != nil {
|
||||||
|
return generation{}, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return generation{OutDir: outDir}, nil
|
return generation{OutDir: outDir}, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,15 @@ type sitePage struct {
|
||||||
Source pageSource
|
Source pageSource
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type siteStatic struct {
|
||||||
|
Path string
|
||||||
|
Source staticSource
|
||||||
|
}
|
||||||
|
|
||||||
type siteMap struct {
|
type siteMap struct {
|
||||||
Meta *SiteMeta
|
Meta *SiteMeta
|
||||||
Pages []sitePage
|
Pages []sitePage
|
||||||
|
Static []siteStatic
|
||||||
}
|
}
|
||||||
|
|
||||||
type SourceCtx struct {
|
type SourceCtx struct {
|
||||||
|
|
|
||||||
39
progdoc.go
39
progdoc.go
|
|
@ -21,21 +21,17 @@ func Site(opts ...Option) *SiteBuilder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sb *SiteBuilder) Publish() error {
|
func (sb *SiteBuilder) Generate() error {
|
||||||
siteMap := siteMap{}
|
_, err := sb.generate()
|
||||||
|
if err != nil {
|
||||||
for _, opt := range sb.opts {
|
|
||||||
if err := opt.configSitemap(&siteMap); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(siteMap.Pages) == 0 {
|
func (sb *SiteBuilder) Publish() error {
|
||||||
return errors.New("No pages found")
|
genOut, err := sb.generate()
|
||||||
}
|
|
||||||
|
|
||||||
gen := generator{}
|
|
||||||
genOut, err := gen.genSite(siteMap)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -43,6 +39,27 @@ func (sb *SiteBuilder) Publish() error {
|
||||||
return sb.deployToNetlify(genOut)
|
return sb.deployToNetlify(genOut)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sb *SiteBuilder) generate() (generation, error) {
|
||||||
|
siteMap := siteMap{}
|
||||||
|
|
||||||
|
for _, opt := range sb.opts {
|
||||||
|
if err := opt.configSitemap(&siteMap); err != nil {
|
||||||
|
return generation{}, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(siteMap.Pages) == 0 {
|
||||||
|
return generation{}, errors.New("No pages found")
|
||||||
|
}
|
||||||
|
|
||||||
|
gen := generator{}
|
||||||
|
genOut, err := gen.genSite(siteMap)
|
||||||
|
if err != nil {
|
||||||
|
return generation{}, err
|
||||||
|
}
|
||||||
|
return genOut, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (sb *SiteBuilder) deployToNetlify(genOut generation) error {
|
func (sb *SiteBuilder) deployToNetlify(genOut generation) error {
|
||||||
netlifyAuthToken := os.Getenv("NETLIFY_AUTH_TOKEN")
|
netlifyAuthToken := os.Getenv("NETLIFY_AUTH_TOKEN")
|
||||||
if netlifyAuthToken == "" {
|
if netlifyAuthToken == "" {
|
||||||
|
|
|
||||||
26
siteopts.go
26
siteopts.go
|
|
@ -46,6 +46,32 @@ func SourceFile(path, file string) Option {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func StaticFile(path, file string) Option {
|
||||||
|
return Option{
|
||||||
|
configSitemap: func(sm *siteMap) error {
|
||||||
|
_, err := os.Stat(file)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
absName, err := filepath.Abs(file)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Static '%s' -> %s", path, file)
|
||||||
|
sm.Static = append(sm.Static, siteStatic{
|
||||||
|
Path: path,
|
||||||
|
Source: fileStaticSource{
|
||||||
|
Filename: absName,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func SourceDir(basePath, dir string) Option {
|
func SourceDir(basePath, dir string) Option {
|
||||||
return Option{
|
return Option{
|
||||||
configSitemap: func(sm *siteMap) error {
|
configSitemap: func(sm *siteMap) error {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue