Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/terraform-docs/gh-actions
A Github action for generating Terraform module documentation using terraform-docs and gomplate
https://github.com/terraform-docs/gh-actions
actions github-actions terraform terraform-docs
Last synced: 1 day ago
JSON representation
A Github action for generating Terraform module documentation using terraform-docs and gomplate
- Host: GitHub
- URL: https://github.com/terraform-docs/gh-actions
- Owner: terraform-docs
- License: apache-2.0
- Created: 2020-05-03T03:58:25.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-09-19T19:43:48.000Z (about 2 months ago)
- Last Synced: 2024-10-24T21:22:36.161Z (20 days ago)
- Topics: actions, github-actions, terraform, terraform-docs
- Language: Shell
- Homepage:
- Size: 332 KB
- Stars: 152
- Watchers: 7
- Forks: 63
- Open Issues: 25
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# terraform-docs GitHub Actions
Generate Terraform module documentation in pull requests.
In addition to statically defined directory modules, this module can search specific
subfolders or parse `atlantis.yaml` for module identification and doc generation. This
action has the ability to auto commit docs to an open PR or after a push to a specific
branch.## Version
`v1.3.0` (uses [terraform-docs] v0.19.0, which is supported and tested on Terraform
version 0.11+ and 0.12+ but may work for others.)### Upgrade v0 to v1
Release v1 contains following breaking changes:
- default value of `output-file` has been changed to `README.md`
- default value of `template` has been changed to```text
{{ .Content }}
```## Usage
To use terraform-docs github action, configure a YAML workflow file, e.g.
`.github/workflows/documentation.yml`, with the following:```yaml
name: Generate terraform docs
on:
- pull_request
jobs:
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}- name: Render terraform docs inside the README.md and push changes back to PR branch
uses: terraform-docs/[email protected]
with:
working-dir: .
output-file: README.md
output-method: inject
git-push: "true"
```| NOTE: If `output-file` (default README.md) already exists it will need to be updated, with the block delimeters `` and ``, where the generated markdown will be injected. Otherwise the generated content will be appended at the end of the file. |
| --- || NOTE: If `output-file` (default README.md) doesn't exist it will created and the content will be saved into it. |
| --- |## Configuration
### Inputs
| Name | Description | Default | Required |
|------|-------------|---------|----------|
| args | Additional arguments to pass to the command (see [full documentation](https://github.com/terraform-docs/terraform-docs/tree/master/docs)) | `""` | false |
| atlantis-file | Name of Atlantis file to extract list of directories by parsing it. To enable, provide the file name (e.g. `atlantis.yaml`) | `disabled` | false |
| config-file | Name of terraform-docs config file. To enable, provide the file name (e.g. `.terraform-docs.yml`) | `disabled` | false |
| fail-on-diff | Fail the job if there is any diff found between the generated output and existing file (ignored if `git-push` is set) | `false` | false |
| find-dir | Name of root directory to extract list of directories by running `find ./find\_dir -name \*.tf` (ignored if `atlantis-file` is set) | `disabled` | false |
| git-commit-message | Commit message | `terraform-docs: automated action` | false |
| git-push | If true it will commit and push the changes | `false` | false |
| git-push-sign-off | If true it will sign-off commit | `false` | false |
| git-push-user-email | If empty the no-reply email of the GitHub Actions bot will be used (i.e. `github-actions[bot]@users.noreply.github.com`) | `""` | false |
| git-push-user-name | If empty the name of the GitHub Actions bot will be used (i.e. `github-actions[bot]`) | `""` | false |
| git-sub-dir | Subdirectory that terraform code is checked out into | `""` | false |
| indention | Indention level of Markdown sections [1, 2, 3, 4, 5] | `2` | false |
| output-file | File in module directory where the docs should be placed | `README.md` | false |
| output-format | terraform-docs format to generate content (see [all formats](https://github.com/terraform-docs/terraform-docs/blob/master/docs/FORMATS\_GUIDE.md)) (ignored if `config-file` is set) | `markdown table` | false |
| output-method | Method should be one of `replace`, `inject`, or `print`. Set as an empty string if `output.mode` and `output.file` are defined in config-file | `inject` | false |
| recursive | If true it will update submodules recursively | `false` | false |
| recursive-path | Submodules path to recursively update | `modules` | false |
| template | When provided will be used as the template if/when the `output-file` does not exist. Set as an empty string if `output.template` is defined in config-file | `\n{{ .Content }}\n` | false |
| working-dir | Comma separated list of directories to generate docs for (ignored if `atlantis-file` or `find-dir` is set) | `.` | false |#### Output Method (output-method)
- `print`
This will just print the generated output
- `replace`
This will create or replace the `output-file` at the determined module path(s)
- `inject`
Instead of replacing the `output-file`, this will inject the generated documentation
into the existing file between the predefined delimeters: ``
and ``. If the file exists but does not contain the delimeters,
the action will append the generated content at the end of `output-file`. If the file
doesn't exist, it will create it using the value template which MUST have the delimeters.#### Auto commit changes
To enable you need to ensure a few things first:
- set `git-push` to `true`
- use `actions/checkout@v3` with the head ref for PRs or branch name for pushes
- PR```yaml
on:
- pull_request
jobs:
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}
```- Push
```yaml
on:
push:
branches:
- master
jobs:
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: master
```### Outputs
| Name | Description |
|------|-------------|
| num\_changed | Number of files changed |## Examples
### Single folder
```yaml
- name: Generate TF Docs
uses: terraform-docs/[email protected]
with:
working-dir: .
```### Multi folder
```yaml
- name: Generate TF Docs
uses: terraform-docs/[email protected]
with:
working-dir: .,example1,example3/modules/test
```### Use `atlantis.yaml` v3 to find all directories
```yaml
- name: Generate TF docs
uses: terraform-docs/[email protected]
with:
atlantis-file: atlantis.yaml
```### Find all `.tf` file under a given directory
```yaml
- name: Generate TF docs
uses: terraform-docs/[email protected]
with:
find-dir: examples/
```### Recursively under a given directory
```yaml
- name: Generate TF docs
uses: terraform-docs/[email protected]
with:
working-dir: examples/
recursive: true
recursive-path: modules
```Complete examples can be found [here](https://github.com/terraform-docs/gh-actions/tree/v1.3.0/examples).
[terraform-docs]: https://github.com/terraform-docs/terraform-docs