diff options
| author | Jamie Hannaford <jamie.hannaford@rackspace.com> | 2017-05-04 17:49:12 +0200 |
|---|---|---|
| committer | Jamie Hannaford <jamie.hannaford@rackspace.com> | 2017-05-16 12:26:37 +0200 |
| commit | 676d8264c66844c78abf48263ccc3e4283e3b5da (patch) | |
| tree | e38d2190fba2b3aa6c89952c8c24d84e6dd612ee /generator | |
| parent | ad450f5ed3bb58d97f4fe4d43cc60e746134bd41 (diff) | |
Reformat directory structure
Diffstat (limited to 'generator')
| -rw-r--r-- | generator/Dockerfile | 1 | ||||
| -rw-r--r-- | generator/README.md | 18 | ||||
| -rw-r--r-- | generator/app.go | 193 | ||||
| -rw-r--r-- | generator/footer.tmpl | 3 | ||||
| -rw-r--r-- | generator/header.tmpl | 10 | ||||
| -rw-r--r-- | generator/sig_index.tmpl | 27 | ||||
| -rw-r--r-- | generator/sig_list.tmpl | 22 |
7 files changed, 274 insertions, 0 deletions
diff --git a/generator/Dockerfile b/generator/Dockerfile new file mode 100644 index 00000000..e07f42e4 --- /dev/null +++ b/generator/Dockerfile @@ -0,0 +1 @@ +FROM golang:1.6-onbuild diff --git a/generator/README.md b/generator/README.md new file mode 100644 index 00000000..f6feccea --- /dev/null +++ b/generator/README.md @@ -0,0 +1,18 @@ +# SIG Doc builder + +This script will generate the following documentation files: + +``` +sig-*/README.md +sig-list.md +``` + +Based off the `sigs.yaml` metadata file. + +## How to use + +To (re)build documentation for all the SIGs, run these commands: + +```bash +make all +``` diff --git a/generator/app.go b/generator/app.go new file mode 100644 index 00000000..bca45db0 --- /dev/null +++ b/generator/app.go @@ -0,0 +1,193 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "io/ioutil" + "log" + "os" + "path/filepath" + "sort" + "strings" + "text/template" + "time" + + "gopkg.in/yaml.v2" +) + +var ( + sigsYamlFile = "sigs.yaml" + templateDir = "generator" + indexTemplate = filepath.Join(templateDir, "sig_index.tmpl") + listTemplate = filepath.Join(templateDir, "sig_list.tmpl") + headerTemplate = filepath.Join(templateDir, "header.tmpl") + footerTemplate = filepath.Join(templateDir, "footer.tmpl") + sigListOutput = "sig-list.md" + sigIndexOutput = "README.md" + githubTeamNames = []string{"misc", "test-failures", "bugs", "feature-requests", "proposals", "pr-reviews", "api-reviews"} +) + +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"` + FullGitHubTeams bool `yaml:"full_github_teams"` + GithubTeamPrefix string `yaml:"github_team_prefix"` + GithubTeamNames []string +} + +type Sig struct { + Page + 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 { + Page + Sigs []Sig +} + +type Page struct { + LastGenerated string +} + +func (slice SigEntries) Len() int { + return len(slice.Sigs) +} + +func (slice SigEntries) Less(i, j int) bool { + return slice.Sigs[i].Name < slice.Sigs[j].Name +} + +func (slice SigEntries) Swap(i, j int) { + slice.Sigs[i], slice.Sigs[j] = slice.Sigs[j], slice.Sigs[i] +} + +func createDirIfNotExists(path string) error { + _, err := os.Stat(path) + if os.IsNotExist(err) { + fmt.Printf("%s directory does not exist, creating\n", path) + return os.Mkdir(path, 0755) + } + return nil +} + +func writeTemplate(templatePath, outputPath string, data interface{}) error { + // set up template + t, err := template.ParseFiles(templatePath, headerTemplate, footerTemplate) + if err != nil { + return err + } + + // open file and truncate + f, err := os.OpenFile(outputPath, os.O_WRONLY, 0644) + if err != nil { + return err + } + defer f.Close() + f.Truncate(0) + + // write template output to file + err = t.Execute(f, data) + if err != nil { + return err + } + + fmt.Printf("Generated %s\n", outputPath) + return nil +} + +func lastGenerated() string { + return time.Now().Format("Mon Jan 2 2006 15:04:05") +} + +func createReadmeFiles(ctx SigEntries) error { + for _, sig := range ctx.Sigs { + dirName := fmt.Sprintf("sig-%s", strings.ToLower(strings.Replace(sig.Name, " ", "-", -1))) + + createDirIfNotExists(dirName) + + sig.LastGenerated = lastGenerated() + + prefix := sig.Contact.GithubTeamPrefix + if prefix == "" { + prefix = dirName + } + + for _, gtn := range githubTeamNames { + sig.Contact.GithubTeamNames = append(sig.Contact.GithubTeamNames, fmt.Sprintf("%s-%s", prefix, gtn)) + } + + outputPath := fmt.Sprintf("%s/%s", dirName, sigIndexOutput) + if err := writeTemplate(indexTemplate, outputPath, sig); err != nil { + return err + } + } + + return nil +} + +func createListFile(ctx SigEntries) error { + ctx.LastGenerated = lastGenerated() + return writeTemplate(listTemplate, sigListOutput, ctx) +} + +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) + } + + sort.Sort(ctx) + + err = createReadmeFiles(ctx) + if err != nil { + log.Fatal(err) + } + + err = createListFile(ctx) + if err != nil { + log.Fatal(err) + } + + fmt.Println("Finished generation!") +} diff --git a/generator/footer.tmpl b/generator/footer.tmpl new file mode 100644 index 00000000..58aef73c --- /dev/null +++ b/generator/footer.tmpl @@ -0,0 +1,3 @@ +{{- define "footer" -}} +Last generated: {{.LastGenerated}} +{{- end -}} diff --git a/generator/header.tmpl b/generator/header.tmpl new file mode 100644 index 00000000..9f53887a --- /dev/null +++ b/generator/header.tmpl @@ -0,0 +1,10 @@ +{{- define "header" -}} +<!--- +This is an autogenerated file! + +Please do not edit this file directly, but instead make changes to the +sigs.yaml file in the project root. + +To understand how this file is generated, see generator/README.md. +--> +{{- end -}} diff --git a/generator/sig_index.tmpl b/generator/sig_index.tmpl new file mode 100644 index 00000000..066d3391 --- /dev/null +++ b/generator/sig_index.tmpl @@ -0,0 +1,27 @@ +{{- template "header" }} +# {{.Name}} SIG + +{{ .MissionStatement }} +## Meetings +{{- range .Meetings }} +* [{{.Day}}s at {{.UTC}} UTC]({{$.MeetingURL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.UTC}}&tz=UTC). +{{- end }} + +Meeting notes and Agenda can be found [here]({{.MeetingArchiveURL}}). + +## Leads +{{- range .Leads }} +* [{{.Name}}](https://github.com/{{.GitHub}}){{if .Company}}, {{.Company}}{{end}} +{{- end }} + +## Contact +* [Slack](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) +* [Mailing list]({{.Contact.MailingList}}) +{{if .Contact.FullGitHubTeams}} +## GitHub Teams +{{range .Contact.GithubTeamNames -}} +* [@{{.}}](https://github.com/kubernetes/teams/{{.}}) +{{end}} +{{end}} + +{{template "footer" . }} diff --git a/generator/sig_list.tmpl b/generator/sig_list.tmpl new file mode 100644 index 00000000..abb0b302 --- /dev/null +++ b/generator/sig_list.tmpl @@ -0,0 +1,22 @@ +{{- template "header" }} +# SIGs and Working Groups + +Most community activity is organized into Special Interest Groups (SIGs), +time bounded Working Groups, and the [community meeting](communication.md#Meeting). + +SIGs follow these [guidelines](governance.md) although each of these groups may operate a little differently +depending on their needs and workflow. + +Each group's material is in its subdirectory in this project. + +When the need arises, a [new SIG can be created](sig-creation-procedure.md) + +### Master SIG List + +| Name | Leads | Contact | Meetings | +|------|-------|---------|----------| +{{- range .Sigs}} +|[{{.Name}}]({{.Dir}}/README.md)|{{range .Leads}}* [{{.Name}}](https://github.com/{{.GitHub}}){{if .Company}}, {{.Company}}{{end}}<br>{{end}}|* [Slack](https://kubernetes.slack.com/messages/{{.Contact.Slack}})<br>* [Mailing List]({{.Contact.MailingList}})|{{ $save := . }}{{range .Meetings}}* [{{.Day}}s at {{.UTC}} UTC ({{.Frequency}})]({{$save.MeetingURL}})<br>{{end}} +{{- end }} + +{{ template "footer" . }} |
