Skip to content

Commit

Permalink
feat/doc generation (#193)
Browse files Browse the repository at this point in the history
* chore: add tfplugindocs tool

* feat: add tfplugin doc dependency and make target

* chore: apply documentation generation

* docs(contributing): update for documentation generation

* fix: adapt website-lint target to new do folder

* docs(network): update ds descriptions

* docs: add template for index.md

* docs: add network resource generation

* chore(ci): updates paths for website checks

* docs: add plugin data source generation

* docs: add import cmd for network resource

* docs: add plugin resource generation

* feat: outlines remaining resources with example and import cmd

* feat: add descriptions to docs

* chore: add DevSkim ignores and fix capitalized errors

* docs: complete ds registry image

* docs: add container resource generation

* docs: add lables description to missing resources

* docs: remove computed:true from network data

so the list is rendered in the description

* Revert "docs: remove computed:true from network data"

This reverts commit dce9b7a.

* docs: add docker image descriptions to generate the docs

* docs: add docker registry image descriptions to generate the docs

* docs: add docker service descriptions to generate the docs

* docs: add docker volume descriptions to generate the docs

* docs(index): clarifies description

so more docker resources are mentioned

* docs(network): fixes required and read-only attributes

so the ds can only be read by-name

* docs(plugin): clarifies the ds docs attributes

* docs: fix typo registry image ds

* docs(config): clarifies attributes and enhances examples

Provide a long example and import command

* fix(config): make data non-sensitive

Because only secrets data is

* docs(containter): clarifies attributes

and enhances examples with import

* docs(config): fix typo

* docs(image): clarifies attributes and remove import

* docs(network): clarifies attributes and adapts import

* docs(plugin): clarifies attributes and import

* docs(registry_image): clarifies attributes and removes import

* chore(secret): remove typo

* docs(service): clarifies attributes and import

* docs(volume): clarifies attributes and import

* fix: correct md linter rules after doc gen

* docs(volume): regenerated

* docs: add config custom template

* docs: add templates for all resources

* docs(config): templates all sections and examples

for better redability and structure

* docs(config): fix md linter

* docs(container): templates all sections and examples

* docs(image): templates all sections and examples

* docs(image): fix import resource by renaming

* docs(network): templates all sections and examples

* docs(service): templates all sections and examples

* docs(volume): templates all sections and examples

* fix(lint): replace website with doc directory

* fix(ci): link check file extension check

* fix: markdown links

* chore: remove old website folder

* chore: fix website-lint terrafmr dir and pattern

* fix: lint fix target website folder

* fix: website links

* docs(provider): update examples

with templates on auth and certs

* docs(provider): add tf-plugin-docs line

* docs(contributing): split doc generation section

* docs: final brush up for readability and structure

* chore(ci): add website-generation job

to see if files changed and it should run locally again

* chore(ci): remove explicit docker setup

from website lint because it's installed by default
  • Loading branch information
mavogel authored May 21, 2021
1 parent 96a6a8d commit 6c796e1
Show file tree
Hide file tree
Showing 122 changed files with 4,639 additions and 2,645 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/website-link.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ on:
pull_request:
paths:
- .github/workflows/website-link.yaml
- website/docs/**
- docs/**
- .markdownlint.yml

jobs:
Expand All @@ -19,10 +19,10 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: gaurav-nelson/github-action-markdown-link-check@v1
name: markdown-link-check website/docs/**/*.markdown
name: markdown-link-check docs/**/*.md
with:
use-quiet-mode: 'yes'
use-verbose-mode: 'yes'
config-file: '.markdownlinkcheck.json'
folder-path: 'website/docs'
file-extension: '.markdown'
folder-path: 'docs'
file-extension: '.md'
46 changes: 32 additions & 14 deletions .github/workflows/website-lint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,58 @@ on:
types: ['opened', 'synchronize']
paths:
- .github/workflows/website-lint.yaml
- website/docs/**
- docs/**

env:
GO_VERSION: "1.16"
GOPROXY: https://proxy.golang.org,https://gocenter.io,direct
DOCKER_CE_VERSION: "5:20.10.5~3-0~ubuntu-focal"

jobs:
website-generation:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.16'
- name: Setup tools
run: make setup
- name: Generate the website
run: make website-generation
- name: Verify Changed files
uses: tj-actions/verify-changed-files@v6.1
id: verify-changed-files
with:
files: |
docs/**/*.md
- name: Display changed files
if: steps.verify-changed-files.outputs.files_changed == 'true'
run: |
echo "Changed files: ${{ steps.verify_changed_files.outputs.changed_files }}"
- name: Fail if files have changed
if: steps.verify-changed-files.outputs.files_changed == 'true'
run: |
echo "Generated website was not up-to-date. Please run 'make website-generation' locally, commit, and push again";
exit 1;
website-lint-spellcheck-tffmt:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.16'
- run: cat /etc/issue
- run: bash scripts/gogetcookie.sh
# locally: docker run -it ubuntu-20.04 bash (https://ubuntu.pkgs.org/20.04/docker-ce-stable-amd64/)
- run: sudo apt-get update
- run: sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
- run: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- run: sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- run: sudo apt-get update
# list available docker versions: apt-cache policy docker-ce
- run: sudo apt-get -y install docker-ce=${DOCKER_CE_VERSION}
- run: docker version
- run: make setup
- run: make website-lint
- name: Setup tools
run: make setup
- name: Lint website
run: make website-lint
markdown-lint:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: avto-dev/markdown-lint@v1
with:
args: 'website/docs'
args: 'docs'
config: '.markdownlint.yml'

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,6 @@ dist
# testing
testing
testing-mirror/registry.terraform.io/kreuzwerker/docker

# lint error outputs
markdown-link-check-*.txt
8 changes: 0 additions & 8 deletions .markdownlinkcheck.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,5 @@
"ignorePatterns": [
],
"replacementPatterns": [
{
"pattern": "^/docs/providers/docker/r/(.*).html",
"replacement": "/github/workspace/website/docs/r/$1.html.markdown"
},
{
"pattern": "^/docs/providers/docker/d/(.*).html",
"replacement": "/github/workspace/website/docs/d/$1.html.markdown"
}
]
}
10 changes: 2 additions & 8 deletions .markdownlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,11 @@ default: true
# Disabled Rules
# https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md

MD001: false
MD004: false
MD007: false
MD009: false
MD010: false
MD012: false
MD013: false
MD014: false
MD022: false
MD031: false
MD032: false
MD023: false
MD024: false
MD033: false
MD034: false
MD047: false
28 changes: 23 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,16 +68,13 @@ TF_LOG=INFO TF_ACC=1 go test -v ./internal/provider -run ^TestAccDockerImage_dat
make testacc_cleanup
```

Furthermore, we recommened running the linters for the code and the documentation:
Furthermore, run the linters for the code:

```sh
# install all the dependencies
make setup
# lint the go code
make golangci-lint
make website-link-check
make website-lint
# you can also use this command to fix most errors automatically
make website-lint-fix
```

In case you need to run the GitHub actions setup locally in a docker container and run the tests there,
Expand All @@ -89,6 +86,27 @@ make testacc_setup
TF_LOG=DEBUG TF_ACC=1 go test -v ./internal/provider -run ^TestAccDockerContainer_nostart$
```

### Update the documentation

Furthermore, run the generation and linters for the documentation:

```sh
# install all the dependencies
make setup
# generate or update the documentation
make website-generation
# lint the documentation
make website-link-check
make website-lint
# you can also use this command to fix most errors automatically
make website-lint-fix
```

The documentation is generated based on the tool [terraform-plugin-docs](https://github.com/hashicorp/terraform-plugin-docs):

- The content of the `Description` attribute is parsed of each resource
- All the templates for the resources are located in `templates`.

### Test against current terraform IaC descriptions
In order to extend the provider and test it with `terraform`, build the provider as mentioned above with:

Expand Down
18 changes: 11 additions & 7 deletions GNUmakefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ setup:
cd tools && GO111MODULE=on go install github.com/client9/misspell/cmd/misspell
cd tools && GO111MODULE=on go install github.com/katbyte/terrafmt
cd tools && GO111MODULE=on go install github.com/golangci/golangci-lint/cmd/golangci-lint
cd tools && GO111MODULE=on go install github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs
rm -f .git/hooks/commit-msg \
&& curl --fail -o .git/hooks/commit-msg https://raw.githubusercontent.com/hazcod/semantic-commit-hook/master/commit-msg \
&& chmod 500 .git/hooks/commit-msg
Expand Down Expand Up @@ -63,30 +64,33 @@ test-compile:
fi
go test -c $(TEST) $(TESTARGS)

website-generation:
go generate

website-link-check:
@scripts/markdown-link-check.sh

website-lint:
@echo "==> Checking website against linters..."
@misspell -error -source=text website/ || (echo; \
@misspell -error -source=text docs/ || (echo; \
echo "Unexpected mispelling found in website files."; \
echo "To automatically fix the misspelling, run 'make website-lint-fix' and commit the changes."; \
exit 1)
@docker run -v $(PWD):/markdown 06kellyjac/markdownlint-cli website/docs/ || (echo; \
@docker run -v $(PWD):/markdown 06kellyjac/markdownlint-cli docs/ || (echo; \
echo "Unexpected issues found in website Markdown files."; \
echo "To apply any automatic fixes, run 'make website-lint-fix' and commit the changes."; \
exit 1)
@terrafmt diff ./website --check --pattern '*.markdown' --quiet || (echo; \
@terrafmt diff ./docs --check --pattern '*.md' --quiet || (echo; \
echo "Unexpected differences in website HCL formatting."; \
echo "To see the full differences, run: terrafmt diff ./website --pattern '*.markdown'"; \
echo "To see the full differences, run: terrafmt diff ./docs --pattern '*.md'"; \
echo "To automatically fix the formatting, run 'make website-lint-fix' and commit the changes."; \
exit 1)

website-lint-fix:
@echo "==> Applying automatic website linter fixes..."
@misspell -w -source=text website/
@docker run -v $(PWD):/markdown 06kellyjac/markdownlint-cli --fix website/docs/
@terrafmt fmt ./website --pattern '*.markdown'
@misspell -w -source=text docs/
@docker run -v $(PWD):/markdown 06kellyjac/markdownlint-cli --fix docs/
@terrafmt fmt ./docs --pattern '*.md'

.PHONY: build test testacc vet fmt fmtcheck errcheck test-compile website-link-check website-lint website-lint-fix

47 changes: 47 additions & 0 deletions docs/data-sources/network.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "docker_network Data Source - terraform-provider-docker"
subcategory: ""
description: |-
docker_network provides details about a specific Docker Network.
---

# docker_network (Data Source)

`docker_network` provides details about a specific Docker Network.

## Example Usage

```terraform
data "docker_network" "main" {
name = "main"
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- **name** (String) The name of the Docker network.

### Read-Only

- **driver** (String) The driver of the Docker network. Possible values are `bridge`, `host`, `overlay`, `macvlan`. See [network docs](https://docs.docker.com/network/#network-drivers) for more details.
- **id** (String) The ID of this resource.
- **internal** (Boolean) If `true`, the network is internal.
- **ipam_config** (Set of Object) The IPAM configuration options (see [below for nested schema](#nestedatt--ipam_config))
- **options** (Map of String) Only available with bridge networks. See [bridge options docs](https://docs.docker.com/engine/reference/commandline/network_create/#bridge-driver-options) for more details.
- **scope** (String) Scope of the network. One of `swarm`, `global`, or `local`.

<a id="nestedatt--ipam_config"></a>
### Nested Schema for `ipam_config`

Read-Only:

- **aux_address** (Map of String)
- **gateway** (String)
- **ip_range** (String)
- **subnet** (String)


43 changes: 43 additions & 0 deletions docs/data-sources/plugin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "docker_plugin Data Source - terraform-provider-docker"
subcategory: ""
description: |-
Reads the local Docker plugin. The plugin must be installed locally.
---

# docker_plugin (Data Source)

Reads the local Docker plugin. The plugin must be installed locally.

## Example Usage

```terraform
### With alias
data "docker_plugin" "by_alias" {
alias = "sample-volume-plugin:latest"
}
### With ID
data "docker_plugin" "by_id" {
id = "e9a9db917b3bfd6706b5d3a66d4bceb9f"
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Optional

- **alias** (String) The alias of the Docker plugin. If the tag is omitted, `:latest` is complemented to the attribute value.
- **id** (String) The ID of the plugin, which has precedence over the `alias` of both are given

### Read-Only

- **enabled** (Boolean) If `true` the plugin is enabled
- **env** (Set of String) The environment variables in the form of `KEY=VALUE`, e.g. `DEBUG=0`
- **grant_all_permissions** (Boolean) If true, grant all permissions necessary to run the plugin
- **name** (String) The plugin name. If the tag is omitted, `:latest` is complemented to the attribute value.
- **plugin_reference** (String) The Docker Plugin Reference


41 changes: 41 additions & 0 deletions docs/data-sources/registry_image.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "docker_registry_image Data Source - terraform-provider-docker"
subcategory: ""
description: |-
Reads the image metadata from a Docker Registry. Used in conjunction with the docker_image ../resources/image.md resource to keep an image up to date on the latest available version of the tag.
---

# docker_registry_image (Data Source)

Reads the image metadata from a Docker Registry. Used in conjunction with the [docker_image](../resources/image.md) resource to keep an image up to date on the latest available version of the tag.

## Example Usage

```terraform
data "docker_registry_image" "ubuntu" {
name = "ubuntu:precise"
}
resource "docker_image" "ubuntu" {
name = data.docker_registry_image.ubuntu.name
pull_triggers = [data.docker_registry_image.ubuntu.sha256_digest]
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- **name** (String) The name of the Docker image, including any tags. e.g. `alpine:latest`

### Optional

- **id** (String) The ID of this resource.

### Read-Only

- **sha256_digest** (String) The content digest of the image, as stored in the registry.


Loading

0 comments on commit 6c796e1

Please sign in to comment.