1package main 2 3import ( 4 "flag" 5 "fmt" 6 "html/template" 7 "log" 8 "os" 9 "path/filepath" 10 "strings" 11 12 "golang.org/x/tools/go/packages" 13) 14 15var tmpl = `<!DOCTYPE html> 16<html lang="en"> 17 <head> 18 <meta http-equiv="refresh" content="5; url=https://godoc.org/go.mongodb.org/mongo-driver/{{.}}"> 19 <meta name=go-import content="go.mongodb.org/mongo-driver git https://github.com/mongodb/mongo-go-driver.git"> 20 <meta name="go-source" content="go.mongodb.org/mongo-driver https://github.com/mongodb/mongo-go-driver https://github.com/mongodb/mongo-go-driver/tree/master{/dir} https://github.com/mongodb/mongo-go-driver/blob/master{/dir}/{file}#L{line}"> 21 </head> 22 <body> 23 Redirecting to docs... 24 </body> 25</html> 26` 27 28func main() { 29 var directory = "." 30 var destination = "s3-website" 31 fs := flag.NewFlagSet("", flag.ExitOnError) 32 fs.Usage = func() { 33 fmt.Fprintln(fs.Output(), "docbuilder is used to create the static site for the import paths for go.mongodb.org.") 34 fmt.Fprintln(fs.Output(), "usage: docbuilder [flags] [destination]") 35 fs.PrintDefaults() 36 } 37 fs.StringVar(&directory, "directory", ".", "directory to run docbuilder on") 38 err := fs.Parse(os.Args[1:]) 39 if err == flag.ErrHelp { 40 fs.Usage() 41 os.Exit(0) 42 } 43 if err != nil { 44 log.Fatalf("Could not parse flags: %v", err) 45 } 46 47 args := fs.Args() 48 if len(args) > 0 { 49 destination = args[0] 50 } 51 52 pkgs, err := packages.Load(&packages.Config{Dir: directory}, "./...") 53 if err != nil { 54 log.Fatalf("Could not load packages: %v", err) 55 } 56 57 dirs := make([]string, 1, len(pkgs)+1) 58 for _, pkg := range pkgs { 59 if !strings.HasPrefix(pkg.PkgPath, "go.mongodb.org") { 60 continue 61 } 62 dirs = append(dirs, strings.TrimPrefix(pkg.PkgPath, "go.mongodb.org/mongo-driver")) 63 } 64 65 err = os.MkdirAll(filepath.Join(destination, "mongo-driver"), os.ModeDir|os.FileMode(0755)) 66 if err != nil { 67 log.Fatalf("Could not make path: %v", err) 68 } 69 70 t, err := template.New("index").Parse(tmpl) 71 if err != nil { 72 log.Fatalf("Could not parse template: %v", err) 73 } 74 75 for _, dir := range dirs { 76 directory := filepath.Join(destination, "mongo-driver", dir) 77 err = os.MkdirAll(directory, os.ModeDir|os.FileMode(0755)) 78 if err != nil { 79 log.Fatalf("Could not create directory (%s): %v", directory, err) 80 } 81 82 file, err := os.Create(filepath.Join(directory, "index.html")) 83 if err != nil { 84 log.Fatalf("Could not create index.html: %v", err) 85 } 86 87 err = t.Execute(file, dir) 88 if err != nil { 89 log.Fatalf("Could not execute template: %v", err) 90 } 91 } 92} 93