140 lines
2.3 KiB
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)
|
|
}
|
|
}
|