Skip to content

Commit a6174b7

Browse files
committed
docsgen script
1 parent b73066b commit a6174b7

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ fmt:
55

66
gen:
77
go run github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs@latest
8+
go run ./scripts/docsgen/...
89

910
build: terraform-provider-coder
1011

scripts/docsgen/main.go

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package main
2+
3+
import (
4+
"bytes"
5+
"fmt"
6+
"log"
7+
"os"
8+
"path/filepath"
9+
"regexp"
10+
"strings"
11+
12+
"github.com/coder/terraform-provider-coder/provider"
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
14+
)
15+
16+
// This script patches Markdown docs generated by `terraform-plugin-docs` to expose the original deprecation message.
17+
18+
var (
19+
reDeprecatedProperty = regexp.MustCompile("`([^`]+)` \\(([^,\\)]+), Deprecated\\) ([^\n]+)")
20+
)
21+
22+
func main() {
23+
p := provider.New()
24+
err := exposeDeprecationMessage(p)
25+
if err != nil {
26+
log.Fatal(err)
27+
}
28+
// FIXME flag to select dir
29+
}
30+
31+
func exposeDeprecationMessage(p *schema.Provider) error {
32+
// Patch data-sources
33+
for dataSourceName, dataSource := range p.DataSourcesMap {
34+
docFile := filepath.Join("docs", "data-sources", strings.Replace(dataSourceName, "coder_", "", 1)+".md")
35+
36+
err := adjustDocFile(docFile, dataSource.Schema)
37+
if err != nil {
38+
return err
39+
}
40+
}
41+
42+
// Patch resources
43+
for resourceName, resource := range p.ResourcesMap {
44+
docFile := filepath.Join("docs", "resources", strings.Replace(resourceName, "coder_", "", 1)+".md")
45+
46+
err := adjustDocFile(docFile, resource.Schema)
47+
if err != nil {
48+
return err
49+
}
50+
}
51+
52+
// Patch index
53+
docFile := filepath.Join("docs", "index.md")
54+
err := adjustDocFile(docFile, p.Schema)
55+
if err != nil {
56+
return err
57+
}
58+
return nil
59+
}
60+
61+
func adjustDocFile(docPath string, schemas map[string]*schema.Schema) error {
62+
doc, err := os.ReadFile(docPath)
63+
if err != nil {
64+
return err
65+
}
66+
67+
result := writeDeprecationMessage(doc, schemas)
68+
69+
err = os.WriteFile(docPath, result, 0644)
70+
if err != nil {
71+
return err
72+
}
73+
return nil
74+
}
75+
76+
func writeDeprecationMessage(doc []byte, schemas map[string]*schema.Schema) []byte {
77+
return reDeprecatedProperty.ReplaceAllFunc(doc, func(m []byte) []byte {
78+
matches := reDeprecatedProperty.FindSubmatch(m)
79+
propertyName := matches[1]
80+
description := matches[3]
81+
82+
sch := schemas[string(propertyName)]
83+
if string(description) != sch.Description {
84+
return m // same property name but description does not match, most likely a different property
85+
}
86+
return bytes.Replace(m, []byte("Deprecated"), []byte(fmt.Sprintf("Deprecated: %s", sch.Deprecated)), 1)
87+
})
88+
}

0 commit comments

Comments
 (0)