community/build/app.go

140 lines
2.3 KiB
Go

package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"github.com/cbroglie/mustache"
"gopkg.in/yaml.v2"
)
var (
sigsYamlFile = "sigs.yaml"
templateDir = "build"
indexTemplate = fmt.Sprintf("%s/sig_index.mustache", templateDir)
listTemplate = fmt.Sprintf("%s/sig_list.mustache", templateDir)
sigListOutput = "sig-list.md"
sigIndexOutput = "README.md"
)
type Lead struct {
Name string
Company string
GitHub string
}
type Meeting struct {
Day string
UTC string
PST string
Frequency string
}
type Contact struct {
Slack string
MailingList string `yaml:"mailing_list"`
GitHubTeam string `yaml:"github_team"`
}
type Sig struct {
Name string
Dir string
MissionStatement string `yaml:"mission_statement"`
Leads []Lead
Meetings []Meeting
MeetingURL string `yaml:"meeting_url"`
MeetingArchiveURL string `yaml:"meeting_archive_url"`
Contact Contact
}
type SigEntries struct {
Sigs []Sig
}
func dirExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return true, err
}
func createReadmeFiles(ctx SigEntries) error {
template, err := mustache.ParseFile(indexTemplate)
if err != nil {
return err
}
for _, sig := range ctx.Sigs {
data, err := template.Render(sig)
if err != nil {
return err
}
exists, err := dirExists(sig.Dir)
if err != nil {
return err
}
if !exists {
err = os.Mkdir(sig.Dir, 0755)
if err != nil {
return err
}
}
err = ioutil.WriteFile(fmt.Sprintf("%s/%s", sig.Dir, sigIndexOutput), []byte(data), 0644)
if err != nil {
return err
}
}
return nil
}
func createListFile(ctx SigEntries) error {
template, err := mustache.ParseFile(listTemplate)
if err != nil {
return err
}
data, err := template.Render(ctx)
if err != nil {
return err
}
err = ioutil.WriteFile(sigListOutput, []byte(data), 0644)
if err != nil {
return err
}
return nil
}
func main() {
yamlData, err := ioutil.ReadFile(sigsYamlFile)
if err != nil {
log.Fatal(err)
}
var ctx SigEntries
err = yaml.Unmarshal(yamlData, &ctx)
if err != nil {
log.Fatal(err)
}
err = createReadmeFiles(ctx)
if err != nil {
log.Fatal(err)
}
err = createListFile(ctx)
if err != nil {
log.Fatal(err)
}
}