Skip to content

Commit 3e4230c

Browse files
authored
Merge pull request #43 from rothgar/versions
feat: add versions to docs gen
2 parents ab1a048 + 79605fd commit 3e4230c

File tree

3 files changed

+101
-27
lines changed

3 files changed

+101
-27
lines changed

docs-gen/main.go

Lines changed: 95 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,20 @@ import (
1616

1717
// Config represents the YAML configuration file structure
1818
type Config struct {
19-
Schema string `yaml:"schema"`
20-
Theme string `yaml:"theme"`
21-
Name string `yaml:"name"`
22-
Colors Colors `yaml:"colors"`
23-
Favicon string `yaml:"favicon"`
24-
Banner *Banner `yaml:"banner,omitempty"`
25-
Contextual *Contextual `yaml:"contextual,omitempty"`
26-
Logo *Logo `yaml:"logo,omitempty"`
27-
Navbar *Navbar `yaml:"navbar,omitempty"`
28-
Footer *Footer `yaml:"footer,omitempty"`
29-
Integrations *Integrations `yaml:"integrations,omitempty"`
30-
Redirects []Redirect `yaml:"redirects,omitempty"`
31-
Navigation NavigationConfig `yaml:"navigation"`
19+
Schema string `yaml:"schema"`
20+
Theme string `yaml:"theme"`
21+
Name string `yaml:"name"`
22+
Colors Colors `yaml:"colors"`
23+
Favicon string `yaml:"favicon"`
24+
Banner *Banner `yaml:"banner,omitempty"`
25+
Contextual *Contextual `yaml:"contextual,omitempty"`
26+
Logo *Logo `yaml:"logo,omitempty"`
27+
Navbar *Navbar `yaml:"navbar,omitempty"`
28+
Footer *Footer `yaml:"footer,omitempty"`
29+
Integrations *Integrations `yaml:"integrations,omitempty"`
30+
Redirects []Redirect `yaml:"redirects,omitempty"`
31+
Navigation NavigationConfig `yaml:"navigation"`
32+
VersionsMap map[string][]TabConfig `yaml:"-"` // Internal use only, not from YAML
3233
}
3334

3435
type Colors struct {
@@ -73,14 +74,16 @@ type GA4Integration struct {
7374
}
7475

7576
type NavigationConfig struct {
76-
Tabs []TabConfig `yaml:"tabs"`
77-
Global *GlobalNav `yaml:"global,omitempty"`
77+
Version string `yaml:"version,omitempty"`
78+
Tabs []TabConfig `yaml:"tabs"`
79+
Global *GlobalNav `yaml:"global,omitempty"`
7880
}
7981

8082
type TabConfig struct {
81-
Tab string `yaml:"tab"`
82-
Icon string `yaml:"icon,omitempty"`
83-
Groups []GroupConfig `yaml:"groups"`
83+
Tab string `yaml:"tab"`
84+
Icon string `yaml:"icon,omitempty"`
85+
Version string `yaml:"-"` // Set internally from NavigationConfig.Version
86+
Groups []GroupConfig `yaml:"groups"`
8487
}
8588

8689
type GroupConfig struct {
@@ -154,9 +157,15 @@ type MintlifyNavigation struct {
154157
}
155158

156159
type MintlifyTab struct {
157-
Tab string `json:"tab"`
158-
Icon string `json:"icon,omitempty"`
159-
Groups []MintlifyGroup `json:"groups"`
160+
Tab string `json:"tab"`
161+
Icon string `json:"icon,omitempty"`
162+
Versions []MintlifyVersion `json:"versions,omitempty"`
163+
Groups []MintlifyGroup `json:"groups,omitempty"`
164+
}
165+
166+
type MintlifyVersion struct {
167+
Version string `json:"version"`
168+
Groups []MintlifyGroup `json:"groups"`
160169
}
161170

162171
type MintlifyGroup struct {
@@ -215,7 +224,59 @@ func main() {
215224
}
216225

217226
// Process navigation tabs
227+
processedVersionedTabs := make(map[string]bool)
228+
229+
// First, process versioned tabs
230+
for tabName, versions := range mergedConfig.VersionsMap {
231+
tab := MintlifyTab{
232+
Tab: tabName,
233+
}
234+
235+
// Get icon from first version
236+
if len(versions) > 0 {
237+
tab.Icon = versions[0].Icon
238+
}
239+
240+
// Process each version
241+
for _, versionConfig := range versions {
242+
version := MintlifyVersion{
243+
Version: versionConfig.Version,
244+
}
245+
246+
for _, groupConfig := range versionConfig.Groups {
247+
group := MintlifyGroup{
248+
Group: groupConfig.Group,
249+
}
250+
251+
// Only process explicitly defined pages
252+
if len(groupConfig.Pages) > 0 {
253+
pages, err := processManualPages(groupConfig.Pages, groupConfig.Folder)
254+
if err != nil {
255+
fmt.Fprintf(os.Stderr, "Error processing manual pages for group %s: %v\n", groupConfig.Group, err)
256+
continue
257+
}
258+
group.Pages = pages
259+
} else {
260+
continue
261+
}
262+
263+
version.Groups = append(version.Groups, group)
264+
}
265+
266+
tab.Versions = append(tab.Versions, version)
267+
}
268+
269+
mintlifyConfig.Navigation.Tabs = append(mintlifyConfig.Navigation.Tabs, tab)
270+
processedVersionedTabs[tabName] = true
271+
}
272+
273+
// Then, process non-versioned tabs
218274
for _, tabConfig := range mergedConfig.Navigation.Tabs {
275+
// Skip if already processed as versioned tab
276+
if processedVersionedTabs[tabConfig.Tab] {
277+
continue
278+
}
279+
219280
tab := MintlifyTab{
220281
Tab: tabConfig.Tab,
221282
Icon: tabConfig.Icon,
@@ -266,6 +327,7 @@ func main() {
266327
func mergeConfigs(configPaths []string) (Config, error) {
267328
var mergedConfig Config
268329
var allTabs []TabConfig
330+
versionsMap := make(map[string][]TabConfig) // Map of tab name -> versions
269331

270332
for i, configPath := range configPaths {
271333
configData, err := os.ReadFile(configPath)
@@ -284,12 +346,22 @@ func mergeConfigs(configPaths []string) (Config, error) {
284346
mergedConfig.Navigation.Tabs = nil // Clear tabs to rebuild
285347
}
286348

287-
// Collect tabs from all files in order
288-
allTabs = append(allTabs, config.Navigation.Tabs...)
349+
// If this config has a version, group tabs by name for version support
350+
if config.Navigation.Version != "" {
351+
for _, tab := range config.Navigation.Tabs {
352+
// Store the version on the tab config for later use
353+
tab.Version = config.Navigation.Version
354+
versionsMap[tab.Tab] = append(versionsMap[tab.Tab], tab)
355+
}
356+
} else {
357+
// Collect tabs from all files in order (non-versioned)
358+
allTabs = append(allTabs, config.Navigation.Tabs...)
359+
}
289360
}
290361

291362
// Set merged tabs
292363
mergedConfig.Navigation.Tabs = allTabs
364+
mergedConfig.VersionsMap = versionsMap
293365

294366
return mergedConfig, nil
295367
}

talos-v1.10.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
navigation:
2+
version: "v1.10"
23
tabs:
34
- tab: "Talos"
45
icon: "/images/talos.svg"
@@ -93,7 +94,7 @@ navigation:
9394
- "scaling-up.mdx"
9495
- "scaling-down.mdx"
9596
- "workers-on-controlplane.mdx"
96-
97+
9798
- group: "Networking"
9899
folder: "talos/v1.10/networking"
99100
pages:

talos-v1.11.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
navigation:
2+
version: "v1.11"
23
tabs:
34
- tab: "Talos"
45
icon: "/images/talos.svg"
@@ -93,7 +94,7 @@ navigation:
9394
- "scaling-up.mdx"
9495
- "scaling-down.mdx"
9596
- "workers-on-controlplane.mdx"
96-
97+
9798
- group: "Networking"
9899
folder: "talos/v1.11/networking"
99100
pages:
@@ -166,8 +167,8 @@ navigation:
166167
folder: "talos/v1.11/configure-your-talos-cluster"
167168
pages:
168169
- group: "Disk Management"
169-
pages:
170-
- "storage-and-disk-management/disk-management/overview"
170+
pages:
171+
- "storage-and-disk-management/disk-management/overview"
171172
- "storage-and-disk-management/disk-management/common"
172173
- "storage-and-disk-management/disk-management/existing"
173174
- "storage-and-disk-management/disk-management/layout"

0 commit comments

Comments
 (0)