- Terraform (Core) - version 1.x or above
- Go version 1.20.x (to run the tests)
If you're on Windows you'll also need:
For GNU32 Make, make sure its bin path is added to PATH environment variable.
For Git Bash for Windows, at the step of "Adjusting your PATH environment", please choose "Use Git and optional Unix tools from Windows Command Prompt".
Or, use Windows Subsystem for Linux
- Run
curl -L https://go.dev/dl/go1.21.0.linux-amd64.tar.gz -o go1.21.0.linux-amd64.tar.gz
(replace with a different version of go if desired) - Run
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
- Run
sudo nano ~/.profile
- Add the following lines at the end of the file:
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go/bin
export PATH=$PATH:$GOPATH/bin
- Type Ctrl + x to save, then enter y and hit enter
- Run
source ~/.profile
- Run
sudo apt-get update && apt-get install make
- Follow these instructions
https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli
.
- Clone the repository
- Navigate to the root of the repository
- Run
make tools
We use Terratest to run the unit and deployment testing for the module. Therefore, if you wish to work on the module, you'll first need Go installed on your machine.
You'll also need to correctly setup a GOPATH, as well as adding $GOPATH/bin
to your $PATH
.
These tests do not deploy resources to an Azure environment, but may require access in order to run terraform plan
.
Use cases for unit testing:
- Validating variable inputs, e.g. validation rules are correct.
- Ensuring plan is generated successfully.
- Ensuring plan contents are correct.
To run the unit tests, run the following command:
make test
To run only a partial set of tests, add the TESTFILTER variable:
The TESTFILTER is appended to the
-run ^Test
flag ofgo test
. This will run the tests that match that regex.
make test TESTFILTER=Subscription
These tests wil resources to an Azure environment, so ensure you are prepared to incur any costs.
Use cases for deployment testing:
- Validating the deployment is successful.
- Validating the deployment is idempotent.
- Destroying the deployment.
To run the unit tests, run the following command:
make testdeploy
To run only a partial set of tests, add the TESTFILTER variable:
The TESTFILTER is appended to the
-run ^TestDeploy
flag ofgo test
. This will run the tests that match that regex.
make testdeploy TESTFILTER=Subscription
The following environment variables are required for deployment testing:
AZURE_BILLING_SCOPE
- set to the resource id of the billing scope to use for the deployment.AZURE_SUBSCRIPTION_ID
- set to the subscription id to use for deployment testing.AZURE_TENANT_ID
- set to the tenant id of the Azure account.TERRATEST_DEPLOY
- set to a non-empty value to run the deployemnt tests.make testdeploy
will do this for you.
We have adopted conventional commit naming standards for PRs.
E.g.:
feat(roleassignment)!: add `relative_scope` value.
^ ^ ^ ^
| | | |__ Subject
| |_____ Scope |____ Breaking change flag
|__________ Type
The following types are permitted:
chore
- Other changes that do not modify src or test filesci
- changes to the CI systemdocs
- documentation only changesfeat
- a new feature (this correlates withMINOR
in Semantic Versioning)fix
- a bug fix (this correlates withPATCH
in Semantic Versioning)refactor
- a code change that neither fixes a bug or adds a featurerevert
- revert to a previous commitstyle
- changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)test
- adding or correcting tests
The following scopes are permitted:
- resourcegroup - pertaining to the resourcegroup sub-module
- roleassignment - pertaining to the roleassignment sub-module
- root - pertaining to the root module
- subscription - pertaining to the subscription sub-module
- usermanagedidentity - pertaining to the user-assigned managed identity sub-module
- virtualnetwork - pertaining to the virtual network sub-module
An exclamation mark !
is appended to the type/scope of a breaking change PR (this correlates with MAJOR
in Semantic Versioning).