{"id":19129503,"url":"https://github.com/launchbynttdata/lcaf-component-terratest","last_synced_at":"2026-06-18T03:31:43.383Z","repository":{"id":228506262,"uuid":"773940367","full_name":"launchbynttdata/lcaf-component-terratest","owner":"launchbynttdata","description":"Terratest component for the Launch Common Automation Framework","archived":false,"fork":false,"pushed_at":"2024-12-11T23:53:34.000Z","size":307,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-13T03:02:58.386Z","etag":null,"topics":["component","launch-common-automation-framework","lcaf","platform-automation"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/launchbynttdata.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-18T17:01:16.000Z","updated_at":"2025-01-14T19:14:45.000Z","dependencies_parsed_at":"2025-11-13T03:02:12.926Z","dependency_job_id":null,"html_url":"https://github.com/launchbynttdata/lcaf-component-terratest","commit_stats":null,"previous_names":["launchbynttdata/lcaf-component-terratest"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/launchbynttdata/lcaf-component-terratest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Flcaf-component-terratest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Flcaf-component-terratest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Flcaf-component-terratest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Flcaf-component-terratest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/launchbynttdata","download_url":"https://codeload.github.com/launchbynttdata/lcaf-component-terratest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Flcaf-component-terratest/sbom","scorecard":{"id":579896,"data":{"date":"2025-08-11","repo":{"name":"github.com/launchbynttdata/lcaf-component-terratest","commit":"3268e2ea0e260564eaaabaccad2e22c3c5587bac"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 1/27 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":6,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Info: 'stale review dismissal' is required to merge on branch 'main'","Info: required approving review count is 2 on branch 'main'","Info: codeowner review is required on branch 'main'","Info: 'last push approval' is required to merge on branch 'main'","Warn: no status checks found to merge onto branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":2,"reason":"8 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0635","Warn: Project is vulnerable to: GO-2022-0646","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2025-3488 / GHSA-6v2p-p543-phr9"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T18:55:43.805Z","repository_id":228506262,"created_at":"2025-08-20T18:55:43.806Z","updated_at":"2025-08-20T18:55:43.806Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34475375,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["component","launch-common-automation-framework","lcaf","platform-automation"],"created_at":"2024-11-09T06:07:39.870Z","updated_at":"2026-06-18T03:31:43.366Z","avatar_url":"https://github.com/launchbynttdata.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lcaf-component-terratest\n\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![License: CC BY-NC-ND 4.0](https://img.shields.io/badge/License-CC_BY--NC--ND_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by-nc-nd/4.0/)\n\n## Overview\n\nTerratest support utitities and test runners supporting Launch Common Automation Framework (LCAF) Terraform modules running automated tests in pipelines.\n\nGoals:\n1. To keep infra test code DRY and composable, reusable functions have been extracted into this dedicated repo which can be included by TF module tests\n2. Tests are configuration driven, to be reusable and aggregatable for higher level customer project specific integration testing\n3. Configuration is shared across infra deployment (terraform) and infra test (terratest) automation\n3. Automated pipeline friendly. Configuration switches are driven by OS env vars\n\n## Usage\n\nBy default test suites are pointed to `\u003cModule Repo\u003e/examples` and expect configuration variables in test.tfvars\n\n```\nmake check\n```\n\nTo point to customer project specific terraform code:\n\n```\nDSO_INFRA_TEST_CONFIG_FOLDER=/projects/abc/ make check\n```\n\nTo override default test.tfvars\n\n```\nDSO_INFRA_TEST_CONFIG_FOLDER=/projects/abc/ DSO_INFRA_TEST_CONFIG_TFVAR_FILENAME=project.tfvars make check\n```\n\n### Stages\n\nTests and individual test stages can be skipped. Example:\n\n```\n\u003ctf module repo\u003e/\n\texamples/\n\t\tecs_example/\n\t\t\tmain.tf\n\t\t\ttest.tfvars\n\t\teks_example/\n\t\t\tmain.tf\n\t\t\ttest.tfvars\n```\n\nTo skip a test:\n\n```\nDSO_INFRA_TEST_SKIP_TEST_\u003cname of test TF folder\u003e make check\n# from layout above:\nDSO_INFRA_TEST_SKIP_TEST_ecs_example make check\n```\n\nTo disable selected stage(s) of the test:\n\n```\nSKIP_teardown_test_eks_example=y make check\n```\n\nTODO - to pickup from multi tfvars to align to any project file naming convention\n\n## Reuse\n\nWe want reuse the same test implementation for a TF module development and for regression testing of a project that includes that module, probably among multi other ones.\n\nNot every test can be reused. A low-level primitive TF module, like \"DNS record\", has to have an extensive test fixture.\nWe solve it by introducing a naming convention for GoLang tests. Those safe to be composed/reused from higher level pipelines have a `TestComposable` prefix in their GoLang test name.\n\nExample:\n\n```\n=== ECS-Application-module/tests/testimpl.go ===\nfunc TestComposableComplete(t *testing.T, ctx types.TestContext) {\n\t...\n\tassert.Equal(t, ctx.TestConfig.(*ThisTFModuleConfig).dockerImage, getAWSEcsAPI().FargateApp(appArn).Container().ImageName)\n\n}\n====\n```\n\n## Examples\n\n### Launch test suite in ReadOnly mode - part of after deployment regression test\nNo cloud resources will be created nor teared down\n```\ntf-module-skeleton $ make go/readonly_test\n```\n\n### Launch test suite in Regular mode\n```\ntf-module-skeleton $ make go/test\n```\n\n### Many to many relation between tests and IaC being tested\n\n```\n\u003crepo\u003e/\n\txyz_project_test/\n\t\tprivate_network/\n\t\t\tmain.tf\n\t\t\ttest.tfvars\n\t\tprivate_network_and_no_egress/\n\t\t\tmain.tf\n\t\t\ttest.tfvars\n\t\tprivate_network_and_abc/\n\t\t\tmain.tf\n\t\t\ttest.tfvars\n\t\tpublic_network/\n\t\t\tmain.tf\n\t\t\ttest.tfvars\n```\n\n```\n\nfunc TestFeatureABC_1(t *testing.T, ctx types.TestContext) {\n\tt.Run(\"OnlyPrivateNetworks/TestIfAPPisUP\", func(t *testing.T) {\n\t\tctx.EnabledOnlyForTests(t, \"private_network_and_no_egress\",\"private_network_and_abc\")\n\t\t//^ this test will be run only for terraform code in folders \"private_network_and_no_egress\" or  \"private_network_and_abc\"\n\t\tremoteAgent := launchAgentInsidePrivateNetwork( ctx.TestConfig.(*ThisTFModuleConfig).network)\n\t\tassertHTTP_200_OK(remoteAgent.sendHTTPRequest2Target( ctx.TestConfig.(*ThisTFModuleConfig).InternalURL).getStatusCode)\n\n\t})\n}\nfunc TestFeatureABC_2(t *testing.T, ctx types.TestContext) {\n\tt.Run(\"Basic/TestIfAPPisUP\", func(t *testing.T) {\n\t\tctx.EnabledOnlyForTests(t, \"public_network\")\n\t\t// This test code requires infra be in public network\n\t\tassertHTTP_200_OK(sendHTTPRequest2Target( ctx.TestConfig.(*ThisTFModuleConfig).PublicURL).getStatusCode)\n\t})\n}\n```\n\n### Enable/disable subset of tests\n\nLeveraging GoLang test utilities inherited by this \"framework\"\nhttps://pkg.go.dev/testing#hdr-Subtests_and_Sub_benchmarks\n```\ngo test -run ''        # Run all tests.\ngo test -run Foo       # Run top-level tests matching \"Foo\", such as \"TestFooBar\".\ngo test -run Foo/A=    # For top-level tests matching \"Foo\", run subtests matching \"A=\".\ngo test -run /A=1      # For all top-level tests, run subtests matching \"A=1\".\ngo test -fuzz FuzzFoo  # Fuzz the target matching \"FuzzFoo\"\n```\n```\n// tests/post_deploy_functional/main_tests.go\nfunc TestCommon(t *testing.T) {\n\n\tctx := types.TestContext{\n\t\tTestConfig: \u0026testimpl.ThisTFModuleConfig{},\n\t}\n\tlib.RunSetupTestTeardown(t, testConfigsFolder, infraTFVarFileNameDefault, ctx,\n\t\ttestimpl.TestXYZ)\n}\n...\n// tests/testimpl/test_impl.go\nfunc TestXYZ(t *testing.T, ctx types.TestContext) {\n\tt.Run(\"Basic/AzureManagedIdentityON/abc\", func(t *testing.T) {\n\t\t...\n\t})\n\tt.Run(\"Basic/AzureManagedIdentityOFF/abc\", func(t *testing.T) {\n\t\t...\n\t})\n\n```\n\n```\n$ cd tests/post_deploy_functional\ngo test -run Common # runs all tests from \"Common\"\ngo test -run /Basic/AzureManagedIdentityON # runs all subtests from Basic category that requires Azure Managed Identity be enabled\ngo test -run /AzureManagedIdentityON # runs all subtests any category that requires Azure Managed Identity be enabled\n\n```\n\n### TestContext Builder\n\nThe `TestContext` is a struct which holds the configuration for the test suite. The `TestContext` is passed to the test functions which use the configuration to run the tests.\n\nA context builder is implemented which makes it easier for the consumers to construct the `TestContext` in their `go` tests.\nThe `TestContext` builder is implemented as a `struct` with a `Build` function which returns a pointer to the `TestContext` struct.\nThere are several `Set` methods that are useful to construct the `TestContext`. Below is an example of how to use the `TestContext` builder.\n\n```go\n    ctx := types.CreateTestContextBuilder().\n\t\tSetTestConfig(\u0026testimpl.ThisTFModuleConfig{}).\n\t\tSetTestConfigFileName(infraTFVarFileNameDefault).\n\t\tSetTestConfigFolderName(testConfigsExamplesFolderDefault).\n\t\tSetTestSpecificFlags(map[string]types.TestFlags{\n\t\t\t\"complete\": {\n\t\t\t\t\"IS_TERRAFORM_IDEMPOTENT_APPLY\": false,\n\t\t\t\t\"SKIP_TEST\":                      true,\n\t\t\t},\n\t\t}).\n\t\tBuild()\n```\nThe `Build()` method also performs certain validations to ensure that the `TestContext` is constructed correctly.\n\nThe optional field `TestSpecificFlags` is used to set specific flags for individual tests.\nThe flags are used to control the behavior of the tests (examples).\nThe flags are set as a map of string to `TestFlags` where `TestFlags` is a map strings.\nCurrently, the `TestFlags` supports two flags\n- `IS_TERRAFORM_IDEMPOTENT_APPLY`: This flag is used to control whether the terraform apply is idempotent or not. In few scenarios, the `terraform apply` is not `idempotent` (mostly because of bugs in providers) and the flag can be used to control the behavior of the test.\n- `SKIP_TEST`: This flag is used to skip the test (example). This is helpful in scenarios where the example is complete but the developer doesn't have the right means to test it. In that case, we could still have the example in the `/examples` folder but instruct our test framework to skip it\n\nFor sake of flexibility, setters and getters are also provided on the `TestContext` to use then when needed.\n\n### Set timeout for go test\nThe default timeout of go test is `20 mins` which may not be enough for running some heavy tests. If timeout is reached, it may leave resources provisioned in the cloud and cost us money. Simple way is to increase the timeout during running go tests\n```go\ngo test main_test.go -timeout 1h\n```\n## References\n[Terratest best practices](https://terratest.gruntwork.io/docs/#testing-best-practices)\n\n[GoLang test framework ](https://pkg.go.dev/testing)\n\n## Diagrams\n\n[Overview](doc/Overview.svg)\n\n\n### local development\n\nTo test amendments to the terratest helper before those committed to github, use GoLang \"replace\". Example\n```\nmodule github.com/launchbynttdata/tf-aws-module-private_dns_namespace\n\ngo 1.20\n\nreplace github.com/launchbynttdata/lcaf-component-terratest =\u003e /Home/user/CAF/NOT_CHECKED_IN_YET/lcaf-component-terratest\n\nrequire (\n\tgithub.com/launchbynttdata/lcaf-component-terratest v0.0.0-00010101000000-000000000000\n)\n```\n\n### GoLang\n\nTo use \"github.com/launchbynttdata\" private repository when developing or running GoLang code:\n\n```\ngo env -w GOPRIVATE='github.com/launchbynttdata/'\n```\n\n### Pipeline integration\n\nFor unattended CI//CD pipelines, you must pre-authenticate to Github.\n\n#### HTTPS authentication\n\n```\ngit config --add --global url.\"https://oauth2:$GITHUB_PTA_TOKEN@github.com/\".insteadOf \"https://github.com/\"\n```\n\n#### SSH authentication\n\n```\ngit config --add --global url.\"ssh://git@github.com/\".insteadOf \"https://github.com/\"\n```\n\n## Prerequisites\n\n- [asdf](https://github.com/asdf-vm/asdf) used for tool version management\n- [make](https://www.gnu.org/software/make/) used for automating various functions of the repo\n- [repo](https://android.googlesource.com/tools/repo) used to pull in all components to create the full repo template\n\n### Repo Init\n\nRun the following commands to prep repo and enable all `Makefile` commands to run\n\n```shell\nasdf plugin add conftest\nasdf plugin add golang\nasdf plugin add golangci-lint\nasdf plugin add pre-commit\nasdf plugin add terraform\nasdf plugin add terraform-docs\nasdf plugin add tflint\n\nasdf install\n```\n\n## Pre-Commit hooks\n\nA [.pre-commit-config.yaml](.pre-commit-config.yaml) file defines certain `pre-commit` hooks that are relevant to terraform, golang and common linting tasks. There are no custom hooks added.\n\n`commitlint` hook enforces that commit messages in a certain format (see [Conventional Commits](https://www.conventionalcommits.org/)). The commit message must contain the following structural elements, to communicate intent to the consumers of your commits:\n\n- **fix**: a commit of the type `fix` patches a bug in your codebase (this correlates with PATCH in Semantic Versioning).\n- **feat**: a commit of the type `feat` introduces a new feature to the codebase (this correlates with MINOR in Semantic Versioning).\n- **BREAKING CHANGE**: a commit that has a footer `BREAKING CHANGE:`, or appends a `!` after the type/scope, introduces a breaking API change (correlating with MAJOR in Semantic Versioning). A BREAKING CHANGE can be part of commits of any type.\nfooters other than BREAKING CHANGE: \u003cdescription\u003e may be provided and follow a convention similar to git trailer format.\n- **build**: a commit of the type `build` adds changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)\n- **chore**: a commit of the type `chore` adds changes that don't modify src or test files\n- **ci**: a commit of the type `ci` adds changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)\n- **docs**: a commit of the type `docs` adds documentation only changes\n- **perf**: a commit of the type `perf` adds code change that improves performance\n- **refactor**: a commit of the type `refactor` adds code change that neither fixes a bug nor adds a feature\n- **revert**: a commit of the type `revert` reverts a previous commit\n- **style**: a commit of the type `style` adds code changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)\n- **test**: a commit of the type `test` adds missing tests or correcting existing tests\n\nBase configuration used for this project is [commitlint-config-conventional (based on the Angular convention)](https://github.com/conventional-changelog/commitlint/tree/master/@commitlint/config-conventional#type-enum)\n\nIf you are a developer using vscode, the [commitlint](https://marketplace.visualstudio.com/items?itemName=joshbolduc.commitlint) plugin may be helpful.\n\n`detect-secrets-hook` prevents new secrets from being introduced into the baseline. [TODO: INSERT DOC LINK ABOUT HOOKS]\n\nIn order for `pre-commit` hooks to work properly:\n\n- You need to have the pre-commit package manager installed. [Here](https://pre-commit.com/#install) are the installation instructions.\n- `pre-commit` would install all the hooks when commit message is added by default except for `commitlint` hook. `commitlint` hook would need to be installed manually using the command below\n\n```\npre-commit install --hook-type commit-msg\n```\n\n## To run a local quality check\n\n1. For development/enhancements to this module locally, you'll need to install all of its components. This is controlled by the `configure` target in the project's [`Makefile`](./Makefile). Before you can run `configure`, familiarize yourself with the variables in the `Makefile` and ensure they're pointing to the right places.\n\n```\nmake configure\n```\n\nThis adds in several files and directories that are ignored by `git`. They expose many new Make targets.\n\n2. The first target you care about is `check`.\nIf the `make check` target is successful, the developer can commit the code to git.\n\n`make check` target\n\n- runs `terraform commands` to `lint`, `validate` and `plan` terraform code.\n- runs `conftests`. `conftests` make sure `policy` checks are successful.\n- runs `terratest`. This is integration test suite.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaunchbynttdata%2Flcaf-component-terratest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flaunchbynttdata%2Flcaf-component-terratest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaunchbynttdata%2Flcaf-component-terratest/lists"}