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.SourceFile("/", "README.md"),
|
||||
progdoc.SourceDir("/", "_site"),
|
||||
).Publish(); err != nil {
|
||||
progdoc.StaticFile("/go.mod", "go.mod"),
|
||||
).Generate(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
32
generator.go
32
generator.go
|
|
@ -1,6 +1,8 @@
|
|||
package progdoc
|
||||
|
||||
import (
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
|
@ -21,6 +23,7 @@ func (g generator) genSite(siteMap siteMap) (_ generation, err error) {
|
|||
return generation{}, err
|
||||
}
|
||||
}
|
||||
log.Printf("Output dir: %s", outDir)
|
||||
|
||||
for _, page := range siteMap.Pages {
|
||||
srcCtx := SourceCtx{Meta: siteMap.Meta}
|
||||
|
|
@ -42,5 +45,34 @@ func (g generator) genSite(siteMap siteMap) (_ generation, err error) {
|
|||
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
|
||||
}
|
||||
|
|
|
|||
10
models.go
10
models.go
|
|
@ -15,9 +15,15 @@ type sitePage struct {
|
|||
Source pageSource
|
||||
}
|
||||
|
||||
type siteStatic struct {
|
||||
Path string
|
||||
Source staticSource
|
||||
}
|
||||
|
||||
type siteMap struct {
|
||||
Meta *SiteMeta
|
||||
Pages []sitePage
|
||||
Meta *SiteMeta
|
||||
Pages []sitePage
|
||||
Static []siteStatic
|
||||
}
|
||||
|
||||
type SourceCtx struct {
|
||||
|
|
|
|||
45
progdoc.go
45
progdoc.go
|
|
@ -21,21 +21,17 @@ func Site(opts ...Option) *SiteBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
func (sb *SiteBuilder) Generate() error {
|
||||
_, err := sb.generate()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (sb *SiteBuilder) Publish() error {
|
||||
siteMap := siteMap{}
|
||||
|
||||
for _, opt := range sb.opts {
|
||||
if err := opt.configSitemap(&siteMap); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if len(siteMap.Pages) == 0 {
|
||||
return errors.New("No pages found")
|
||||
}
|
||||
|
||||
gen := generator{}
|
||||
genOut, err := gen.genSite(siteMap)
|
||||
genOut, err := sb.generate()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -43,6 +39,27 @@ func (sb *SiteBuilder) Publish() error {
|
|||
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 {
|
||||
netlifyAuthToken := os.Getenv("NETLIFY_AUTH_TOKEN")
|
||||
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 {
|
||||
return Option{
|
||||
configSitemap: func(sm *siteMap) error {
|
||||
|
|
|
|||
Loading…
Reference in a new issue