fix: restore inline navigation in docs-generator writers.go

This commit is contained in:
“Naeel”
2026-08-10 12:43:10 +04:00
parent 2af2d2af16
commit 8d53a4c499
@@ -22,18 +22,27 @@ var CloudOutputByServiceID = map[int]types.CloudOutputSnapshot{}
func ResourceDocs(docsDir string, spec types.ServiceSpec, version string, apiEndpoint string, providerSource string) { func ResourceDocs(docsDir string, spec types.ServiceSpec, version string, apiEndpoint string, providerSource string) {
base := spec.Name base := spec.Name
WriteFile(filepath.Join(docsDir, base+".md"), buildManualPage(spec)) navManual := fmt.Sprintf("**Manual** · [Create params](%s_params_create.md) · [Modify params](%s_params_modify.md) · [Output params](%s_outputs.md) · [Operations](%s_ops.md) · [Example](%s_example.md)", base, base, base, base, base)
WriteFile(filepath.Join(docsDir, base+"_example.md"), buildExamplePage(spec, version, apiEndpoint, providerSource)) navCreate := fmt.Sprintf("[Manual](%s.md) · **Create params** · [Modify params](%s_params_modify.md) · [Output params](%s_outputs.md) · [Operations](%s_ops.md) · [Example](%s_example.md)", base, base, base, base, base)
WriteFile(filepath.Join(docsDir, base+"_params_create.md"), buildCreateParamsPage(spec)) navModify := fmt.Sprintf("[Manual](%s.md) · [Create params](%s_params_create.md) · **Modify params** · [Output params](%s_outputs.md) · [Operations](%s_ops.md) · [Example](%s_example.md)", base, base, base, base, base)
WriteFile(filepath.Join(docsDir, base+"_params_modify.md"), buildModifyParamsPage(spec)) navOutputs := fmt.Sprintf("[Manual](%s.md) · [Create params](%s_params_create.md) · [Modify params](%s_params_modify.md) · **Output params** · [Operations](%s_ops.md) · [Example](%s_example.md)", base, base, base, base, base)
WriteFile(filepath.Join(docsDir, base+"_outputs.md"), buildOutputsPage(spec)) navOps := fmt.Sprintf("[Manual](%s.md) · [Create params](%s_params_create.md) · [Modify params](%s_params_modify.md) · [Output params](%s_outputs.md) · **Operations** · [Example](%s_example.md)", base, base, base, base, base)
WriteFile(filepath.Join(docsDir, base+"_ops.md"), buildOpsPage(spec, docsDir)) navExample := fmt.Sprintf("[Manual](%s.md) · [Create params](%s_params_create.md) · [Modify params](%s_params_modify.md) · [Output params](%s_outputs.md) · [Operations](%s_ops.md) · **Example**", base, base, base, base, base)
WriteFile(filepath.Join(docsDir, base+"_params.md"), buildParamsLandingPage(spec))
WriteFile(filepath.Join(docsDir, base+".md"), buildManualPage(spec, navManual))
WriteFile(filepath.Join(docsDir, base+"_example.md"), buildExamplePage(spec, navExample, version, apiEndpoint, providerSource))
WriteFile(filepath.Join(docsDir, base+"_params_create.md"), buildCreateParamsPage(spec, navCreate))
WriteFile(filepath.Join(docsDir, base+"_params_modify.md"), buildModifyParamsPage(spec, navModify))
WriteFile(filepath.Join(docsDir, base+"_outputs.md"), buildOutputsPage(spec, navOutputs))
WriteFile(filepath.Join(docsDir, base+"_ops.md"), buildOpsPage(spec, navOps, docsDir))
WriteFile(filepath.Join(docsDir, base+"_params.md"), buildParamsLandingPage(spec, navManual))
for _, srName := range CollectSubresources(spec) { for _, srName := range CollectSubresources(spec) {
srBase := fmt.Sprintf("%s_%s", base, Slug(srName)) srBase := fmt.Sprintf("%s_%s", base, Slug(srName))
WriteFile(filepath.Join(docsDir, srBase+".md"), buildSubresourcePage(spec, srName)) srNav := fmt.Sprintf("[%s (основной)](%s.md) | [Operations](%s_ops.md) | [%s](%s.md) | [Example](%s_example.md)",
WriteFile(filepath.Join(docsDir, srBase+"_example.md"), buildSubresourceExamplePage(spec, srName, version, apiEndpoint, providerSource)) spec.ServiceDisplayName, base, base, Capitalize(srName), srBase, srBase)
WriteFile(filepath.Join(docsDir, srBase+".md"), buildSubresourcePage(spec, srName, srNav))
WriteFile(filepath.Join(docsDir, srBase+"_example.md"), buildSubresourceExamplePage(spec, srName, srNav, version, apiEndpoint, providerSource))
} }
} }
@@ -114,17 +123,17 @@ func FindSubresourceParams(ops []types.OperationSpec, srName, action string) []t
// ===== internal helpers ===== // ===== internal helpers =====
func buildHeader(spec types.ServiceSpec) string { func buildHeader(spec types.ServiceSpec, nav string) string {
name := spec.ServiceDisplayName name := spec.ServiceDisplayName
if name == "" { if name == "" {
name = spec.Name name = spec.Name
} }
return fmt.Sprintf("# Resource nubes_%s · Service ID: %d · Service Name: %s\n\n", spec.Name, spec.ServiceID, name) return fmt.Sprintf("# Resource nubes_%s · Service ID: %d · Service Name: %s\n\n%s\n\n", spec.Name, spec.ServiceID, name, nav)
} }
func buildManualPage(spec types.ServiceSpec) string { func buildManualPage(spec types.ServiceSpec, nav string) string {
var b strings.Builder var b strings.Builder
b.WriteString(buildHeader(spec)) b.WriteString(buildHeader(spec, nav))
b.WriteString("## MAN\n\n") b.WriteString("## MAN\n\n")
man := strings.TrimSpace(spec.ServiceMan) man := strings.TrimSpace(spec.ServiceMan)
if man == "" { if man == "" {
@@ -175,9 +184,9 @@ func htmlToMarkdown(s string) string {
return strings.TrimSpace(s) return strings.TrimSpace(s)
} }
func buildExamplePage(spec types.ServiceSpec, version string, apiEndpoint string, providerSource string) string { func buildExamplePage(spec types.ServiceSpec, nav string, version string, apiEndpoint string, providerSource string) string {
var b strings.Builder var b strings.Builder
b.WriteString(buildHeader(spec)) b.WriteString(buildHeader(spec, nav))
b.WriteString(fmt.Sprintf("## Minimal example — only required parameters\n\n")) b.WriteString(fmt.Sprintf("## Minimal example — only required parameters\n\n"))
b.WriteString("```hcl\n") b.WriteString("```hcl\n")
b.WriteString(minimalExampleBlock(spec, version, apiEndpoint, providerSource)) b.WriteString(minimalExampleBlock(spec, version, apiEndpoint, providerSource))
@@ -272,9 +281,9 @@ func minimalExampleBlock(spec types.ServiceSpec, version string, apiEndpoint str
return b.String() return b.String()
} }
func buildCreateParamsPage(spec types.ServiceSpec) string { func buildCreateParamsPage(spec types.ServiceSpec, nav string) string {
var b strings.Builder var b strings.Builder
b.WriteString(buildHeader(spec)) b.WriteString(buildHeader(spec, nav))
b.WriteString("## Create params\n\n") b.WriteString("## Create params\n\n")
createParams := FindParams(spec.Operations, "create") createParams := FindParams(spec.Operations, "create")
requiredParams, defaultParams := SplitParams(createParams) requiredParams, defaultParams := SplitParams(createParams)
@@ -313,18 +322,18 @@ func buildCreateParamsPage(spec types.ServiceSpec) string {
return b.String() return b.String()
} }
func buildModifyParamsPage(spec types.ServiceSpec) string { func buildModifyParamsPage(spec types.ServiceSpec, nav string) string {
var b strings.Builder var b strings.Builder
b.WriteString(buildHeader(spec)) b.WriteString(buildHeader(spec, nav))
b.WriteString("## Modify params\n\n") b.WriteString("## Modify params\n\n")
modifyParams := FindParams(spec.Operations, "modify") modifyParams := FindParams(spec.Operations, "modify")
b.WriteString(renderModifyTable(modifyParams)) b.WriteString(renderModifyTable(modifyParams))
return b.String() return b.String()
} }
func buildOutputsPage(spec types.ServiceSpec) string { func buildOutputsPage(spec types.ServiceSpec, nav string) string {
var b strings.Builder var b strings.Builder
b.WriteString(buildHeader(spec)) b.WriteString(buildHeader(spec, nav))
b.WriteString("## Output params\n\n") b.WriteString("## Output params\n\n")
if len(spec.Outputs.Params) == 0 { if len(spec.Outputs.Params) == 0 {
b.WriteString("None.\n") b.WriteString("None.\n")
@@ -397,9 +406,9 @@ func containsString(values []string, target string) bool {
return false return false
} }
func buildOpsPage(spec types.ServiceSpec, docsDir string) string { func buildOpsPage(spec types.ServiceSpec, nav string, docsDir string) string {
var b strings.Builder var b strings.Builder
b.WriteString(buildHeader(spec)) b.WriteString(buildHeader(spec, nav))
b.WriteString("## Operations\n\n") b.WriteString("## Operations\n\n")
for _, op := range spec.Operations { for _, op := range spec.Operations {
name := op.Name name := op.Name
@@ -445,16 +454,16 @@ func buildOpsPage(spec types.ServiceSpec, docsDir string) string {
return b.String() return b.String()
} }
func buildParamsLandingPage(spec types.ServiceSpec) string { func buildParamsLandingPage(spec types.ServiceSpec, nav string) string {
var b strings.Builder var b strings.Builder
b.WriteString(buildHeader(spec)) b.WriteString(buildHeader(spec, nav))
b.WriteString("## Parameters\n\n") b.WriteString("## Parameters\n\n")
b.WriteString(fmt.Sprintf("- [Create params](%s_params_create.md)\n", spec.Name)) b.WriteString(fmt.Sprintf("- [Create params](%s_params_create.md)\n", spec.Name))
b.WriteString(fmt.Sprintf("- [Modify params](%s_params_modify.md)\n", spec.Name)) b.WriteString(fmt.Sprintf("- [Modify params](%s_params_modify.md)\n", spec.Name))
return b.String() return b.String()
} }
func buildSubresourcePage(spec types.ServiceSpec, srName string) string { func buildSubresourcePage(spec types.ServiceSpec, srName string, nav string) string {
var b strings.Builder var b strings.Builder
srResourceName := fmt.Sprintf("nubes_%s_%s", spec.Name, Slug(srName)) srResourceName := fmt.Sprintf("nubes_%s_%s", spec.Name, Slug(srName))
b.WriteString(fmt.Sprintf("# Resource %s\n\n", srResourceName)) b.WriteString(fmt.Sprintf("# Resource %s\n\n", srResourceName))
@@ -491,7 +500,7 @@ func buildSubresourcePage(spec types.ServiceSpec, srName string) string {
return b.String() return b.String()
} }
func buildSubresourceExamplePage(spec types.ServiceSpec, srName string, version string, apiEndpoint string, providerSource string) string { func buildSubresourceExamplePage(spec types.ServiceSpec, srName string, nav string, version string, apiEndpoint string, providerSource string) string {
var b strings.Builder var b strings.Builder
srResourceName := fmt.Sprintf("nubes_%s_%s", spec.Name, Slug(srName)) srResourceName := fmt.Sprintf("nubes_%s_%s", spec.Name, Slug(srName))
b.WriteString(fmt.Sprintf("# Resource %s — Example\n\n", srResourceName)) b.WriteString(fmt.Sprintf("# Resource %s — Example\n\n", srResourceName))