|
| 1 | +# Contributing |
| 2 | + |
| 3 | +This document provides guidelines for contributing to the module. |
| 4 | + |
| 5 | +## Dependencies |
| 6 | + |
| 7 | +The following dependencies must be installed on the development system: |
| 8 | + |
| 9 | +- [Docker Engine][docker-engine] |
| 10 | +- [Google Cloud SDK][google-cloud-sdk] |
| 11 | +- [make] |
| 12 | + |
| 13 | +## Generating Documentation for Inputs and Outputs |
| 14 | + |
| 15 | +The Inputs and Outputs tables in the READMEs of the root module, |
| 16 | +submodules, and example modules are automatically generated based on |
| 17 | +the `variables` and `outputs` of the respective modules. These tables |
| 18 | +must be refreshed if the module interfaces are changed. |
| 19 | + |
| 20 | +### Execution |
| 21 | + |
| 22 | +Run `make generate_docs` to generate new Inputs and Outputs tables. |
| 23 | + |
| 24 | +## Integration Testing |
| 25 | + |
| 26 | +Integration tests are used to verify the behaviour of the root module, |
| 27 | +submodules, and example modules. Additions, changes, and fixes should |
| 28 | +be accompanied with tests. |
| 29 | + |
| 30 | +The integration tests are run using [Kitchen][kitchen], |
| 31 | +[Kitchen-Terraform][kitchen-terraform], and [InSpec][inspec]. These |
| 32 | +tools are packaged within a Docker image for convenience. |
| 33 | + |
| 34 | +The general strategy for these tests is to verify the behaviour of the |
| 35 | +[example modules](./examples/), thus ensuring that the root module, |
| 36 | +submodules, and example modules are all functionally correct. |
| 37 | + |
| 38 | +### Test Environment |
| 39 | +The easiest way to test the module is in an isolated test project. The setup for such a project is defined in [test/setup](./test/setup/) directory. |
| 40 | + |
| 41 | +To use this setup, you need a service account with Project Creator access on a folder. Export the Service Account credentials to your environment like so: |
| 42 | + |
| 43 | +``` |
| 44 | +export SERVICE_ACCOUNT_JSON=$(< credentials.json) |
| 45 | +``` |
| 46 | + |
| 47 | +You will also need to set a few environment variables: |
| 48 | +``` |
| 49 | +export TF_VAR_org_id="your_org_id" |
| 50 | +export TF_VAR_folder_id="your_folder_id" |
| 51 | +export TF_VAR_billing_account="your_billing_account_id" |
| 52 | +``` |
| 53 | + |
| 54 | +With these settings in place, you can prepare a test project using Docker: |
| 55 | +``` |
| 56 | +make docker_test_prepare |
| 57 | +``` |
| 58 | + |
| 59 | +### Noninteractive Execution |
| 60 | + |
| 61 | +Run `make docker_test_integration` to test all of the example modules |
| 62 | +noninteractively, using the prepared test project. |
| 63 | + |
| 64 | +### Interactive Execution |
| 65 | + |
| 66 | +1. Run `make docker_run` to start the testing Docker container in |
| 67 | + interactive mode. |
| 68 | + |
| 69 | +1. Run `kitchen_do create <EXAMPLE_NAME>` to initialize the working |
| 70 | + directory for an example module. |
| 71 | + |
| 72 | +1. Run `kitchen_do converge <EXAMPLE_NAME>` to apply the example module. |
| 73 | + |
| 74 | +1. Run `kitchen_do verify <EXAMPLE_NAME>` to test the example module. |
| 75 | + |
| 76 | +1. Run `kitchen_do destroy <EXAMPLE_NAME>` to destroy the example module |
| 77 | + state. |
| 78 | + |
| 79 | +## Linting and Formatting |
| 80 | + |
| 81 | +Many of the files in the repository can be linted or formatted to |
| 82 | +maintain a standard of quality. |
| 83 | + |
| 84 | +### Execution |
| 85 | + |
| 86 | +Run `make docker_test_lint`. |
| 87 | + |
| 88 | +[docker-engine]: https://www.docker.com/products/docker-engine |
| 89 | +[flake8]: http://flake8.pycqa.org/en/latest/ |
| 90 | +[gofmt]: https://golang.org/cmd/gofmt/ |
| 91 | +[google-cloud-sdk]: https://cloud.google.com/sdk/install |
| 92 | +[hadolint]: https://github.com/hadolint/hadolint |
| 93 | +[inspec]: https://inspec.io/ |
| 94 | +[kitchen-terraform]: https://github.com/newcontext-oss/kitchen-terraform |
| 95 | +[kitchen]: https://kitchen.ci/ |
| 96 | +[make]: https://en.wikipedia.org/wiki/Make_(software) |
| 97 | +[shellcheck]: https://www.shellcheck.net/ |
| 98 | +[terraform-docs]: https://github.com/segmentio/terraform-docs |
| 99 | +[terraform]: https://terraform.io/ |
0 commit comments