Skip to content

Commit fe6bf46

Browse files
authored
generate: Introduce provider-dir flag (#259)
Reference: #13 By default, the generator expects to be running in the root provider directory. The new `provider-dir` flag enables developers to run the command in any directory where the relative or absolute path is passed in as the base directory for all file operations for a provider codebase. All prior behaviors should be preserved, such as customizing via other flags like `examples-dir`. Due to lack of existing end-to-end testing (known technical debt), verified by locally compiling and running against existing HashiCorp-owned provider implementations which use `tfplugindocs` and by running the command in a subdirectory of hashicorp/terraform-provider-tls which has a mixture of custom and default templates and observed no changes or errors: ```console $ tfplugindocs generate -provider-dir=.. rendering website for provider "terraform-provider-tls" (as "terraform-provider-tls") copying any existing content to tmp dir exporting schema from Terraform compiling provider "tls" using Terraform CLI binary from PATH if available, otherwise downloading latest Terraform CLI binary running terraform init getting provider schema rendering missing docs generating missing resource content resource "tls_locally_signed_cert" template exists, skipping resource "tls_private_key" template exists, skipping resource "tls_self_signed_cert" template exists, skipping resource "tls_cert_request" template exists, skipping generating missing data source content resource "tls_certificate" template exists, skipping generating template for "tls_public_key" generating missing provider content provider "terraform-provider-tls" template exists, skipping rendering static website cleaning rendered website dir rendering templated website to static markdown rendering "data-sources/certificate.md.tmpl" rendering "data-sources/public_key.md.tmpl" rendering "index.md.tmpl" rendering "resources/cert_request.md.tmpl" rendering "resources/locally_signed_cert.md.tmpl" rendering "resources/private_key.md.tmpl" rendering "resources/self_signed_cert.md.tmpl" ```
1 parent 0c4cb08 commit fe6bf46

File tree

7 files changed

+161
-86
lines changed

7 files changed

+161
-86
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
kind: ENHANCEMENTS
2+
body: 'generate: Added `provider-dir` flag, which enables the command to be run from
3+
any directory'
4+
time: 2023-06-06T14:13:57.482032-04:00
5+
custom:
6+
Issue: "259"

README.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Usage: tfplugindocs [--version] [--help] <command> [<args>]
2727

2828
Available commands are:
2929
the generate command is run by default
30-
generate generates a plugin website from code, templates, and examples for the current directory
30+
generate generates a plugin website from code, templates, and examples
3131
validate validates a plugin website for the current directory
3232

3333
```
@@ -39,14 +39,15 @@ $ tfplugindocs generate --help
3939

4040
Usage: tfplugindocs generate [<args>]
4141

42-
--examples-dir <ARG> examples directory (default: "examples")
43-
--ignore-deprecated <ARG> don't generate documentation for deprecated resources and data-sources (default: "false")
44-
--provider-name <ARG> provider name, as used in Terraform configurations
45-
--rendered-provider-name <ARG> provider name, as generated in documentation (ex. page titles, ...)
46-
--rendered-website-dir <ARG> output directory (default: "docs")
47-
--tf-version <ARG> terraform binary version to download
48-
--website-source-dir <ARG> templates directory (default: "templates")
49-
--website-temp-dir <ARG> temporary directory (used during generation)
42+
--examples-dir <ARG> examples directory based on provider-dir (default: "examples")
43+
--ignore-deprecated <ARG> don't generate documentation for deprecated resources and data-sources (default: "false")
44+
--provider-dir <ARG> relative or absolute path to the root provider code directory when running the command outside the root provider code directory
45+
--provider-name <ARG> provider name, as used in Terraform configurations
46+
--rendered-provider-name <ARG> provider name, as generated in documentation (ex. page titles, ...)
47+
--rendered-website-dir <ARG> output directory based on provider-dir (default: "docs")
48+
--tf-version <ARG> terraform binary version to download
49+
--website-source-dir <ARG> templates directory based on provider-dir (default: "templates")
50+
--website-temp-dir <ARG> temporary directory (used during generation)
5051
```
5152
5253
`validate` command:
@@ -59,7 +60,7 @@ Usage: tfplugindocs validate [<args>]
5960
6061
### How it Works
6162
62-
When you run `tfplugindocs` from root directory of the provider the tool takes the following actions:
63+
When you run `tfplugindocs`, by default from the root directory of a provider codebase, the tool takes the following actions:
6364
6465
* Copy all the templates and static files to a temporary directory
6566
* Build (`go build`) a temporary binary of the provider source code

internal/cmd/generate.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type generateCmd struct {
1919
flagProviderName string
2020
flagRenderedProviderName string
2121

22+
flagProviderDir string
2223
flagRenderedWebsiteDir string
2324
flagExamplesDir string
2425
flagWebsiteTmpDir string
@@ -27,7 +28,7 @@ type generateCmd struct {
2728
}
2829

2930
func (cmd *generateCmd) Synopsis() string {
30-
return "generates a plugin website from code, templates, and examples for the current directory"
31+
return "generates a plugin website from code, templates, and examples"
3132
}
3233

3334
func (cmd *generateCmd) Help() string {
@@ -71,11 +72,12 @@ func (cmd *generateCmd) Help() string {
7172
func (cmd *generateCmd) Flags() *flag.FlagSet {
7273
fs := flag.NewFlagSet("generate", flag.ExitOnError)
7374
fs.StringVar(&cmd.flagProviderName, "provider-name", "", "provider name, as used in Terraform configurations")
75+
fs.StringVar(&cmd.flagProviderDir, "provider-dir", "", "relative or absolute path to the root provider code directory when running the command outside the root provider code directory")
7476
fs.StringVar(&cmd.flagRenderedProviderName, "rendered-provider-name", "", "provider name, as generated in documentation (ex. page titles, ...)")
75-
fs.StringVar(&cmd.flagRenderedWebsiteDir, "rendered-website-dir", "docs", "output directory")
76-
fs.StringVar(&cmd.flagExamplesDir, "examples-dir", "examples", "examples directory")
77+
fs.StringVar(&cmd.flagRenderedWebsiteDir, "rendered-website-dir", "docs", "output directory based on provider-dir")
78+
fs.StringVar(&cmd.flagExamplesDir, "examples-dir", "examples", "examples directory based on provider-dir")
7779
fs.StringVar(&cmd.flagWebsiteTmpDir, "website-temp-dir", "", "temporary directory (used during generation)")
78-
fs.StringVar(&cmd.flagWebsiteSourceDir, "website-source-dir", "templates", "templates directory")
80+
fs.StringVar(&cmd.flagWebsiteSourceDir, "website-source-dir", "templates", "templates directory based on provider-dir")
7981
fs.StringVar(&cmd.tfVersion, "tf-version", "", "terraform binary version to download")
8082
fs.BoolVar(&cmd.flagIgnoreDeprecated, "ignore-deprecated", false, "don't generate documentation for deprecated resources and data-sources")
8183
return fs
@@ -95,6 +97,7 @@ func (cmd *generateCmd) Run(args []string) int {
9597
func (cmd *generateCmd) runInternal() error {
9698
err := provider.Generate(
9799
cmd.ui,
100+
cmd.flagProviderDir,
98101
cmd.flagProviderName,
99102
cmd.flagRenderedProviderName,
100103
cmd.flagRenderedWebsiteDir,

0 commit comments

Comments
 (0)