Repository: chanzuckerberg/fogg
Pull request #394 (2020-01-16 19:25:02)

[feature] heroku provider
This PR enables using fogg to generate heroku provider configurations.

The configuration is pretty simple, because [the heroku provider](https://www.terraform.io/docs/providers/heroku/) doesn't take many relevant options.

In the process of working on this I discovered that if you use `heroku login` to auth to an sso account, the terraform provider "Just Works".

It currently has a few limitations–

1. It cannot pin versions. I will follow up with a PR to add that soon.
2. Checking auth requires having the heroku cli installed. Because that cli is built on node it is hard for us to automated downloading and installing it, meaning that users will have to do so out-of-band.

### Test Plan
* unit tests
* did some manual tests with one of our internal repos that already uses the heroku provider

### References
* 


codecov[bot]: # [Codecov](https://codecov.io/gh/chanzuckerberg/fogg/pull/394?src=pr&el=h1) Report
> Merging [#394](https://codecov.io/gh/chanzuckerberg/fogg/pull/394?src=pr&el=desc) into [master](https://codecov.io/gh/chanzuckerberg/fogg/commit/51ed65d5e81e0344a42be6820b0530f126ce6473?src=pr&el=desc) will **increase** coverage by `0.17%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/chanzuckerberg/fogg/pull/394/graphs/tree.svg?width=650&token=57DhtZ7g2A&height=150&src=pr)](https://codecov.io/gh/chanzuckerberg/fogg/pull/394?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master     #394      +/-   ##
==========================================
+ Coverage   79.04%   79.22%   +0.17%     
==========================================
  Files          25       25              
  Lines        2009     2026      +17     
==========================================
+ Hits         1588     1605      +17     
  Misses        278      278              
  Partials      143      143
```


| [Impacted Files](https://codecov.io/gh/chanzuckerberg/fogg/pull/394?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [plan/plan.go](https://codecov.io/gh/chanzuckerberg/fogg/pull/394/diff?src=pr&el=tree#diff-cGxhbi9wbGFuLmdv) | `93.04% <100%> (+0.15%)` | :arrow_up: |
| [config/v2/config.go](https://codecov.io/gh/chanzuckerberg/fogg/pull/394/diff?src=pr&el=tree#diff-Y29uZmlnL3YyL2NvbmZpZy5nbw==) | `97.01% <100%> (+0.11%)` | :arrow_up: |
| [config/v2/resolvers.go](https://codecov.io/gh/chanzuckerberg/fogg/pull/394/diff?src=pr&el=tree#diff-Y29uZmlnL3YyL3Jlc29sdmVycy5nbw==) | `95.47% <100%> (+0.11%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/chanzuckerberg/fogg/pull/394?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/chanzuckerberg/fogg/pull/394?src=pr&el=footer). Last update [51ed65d...28b954a](https://codecov.io/gh/chanzuckerberg/fogg/pull/394?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


Patch:
diff --git a/config/v2/config.go b/config/v2/config.go
index 70c63a01..c9124567 100644
--- a/config/v2/config.go
+++ b/config/v2/config.go
@@ -104,6 +104,7 @@ type Providers struct {
 	AWS       *AWSProvider       `json:"aws,omitempty" yaml:"aws,omitempty"`
 	Bless     *BlessProvider     `json:"bless,omitempty" yaml:"bless,omitempty"`
 	Github    *GithubProvider    `json:"github,omitempty" yaml:"github,omitempty"`
+	Heroku    *HerokuProvider    `json:"heroku,omitempty" yaml:"heroku,omitempty"`
 	Okta      *OktaProvider      `json:"okta,omitempty" yaml:"okta,omitempty"`
 	Snowflake *SnowflakeProvider `json:"snowflake,omitempty" yaml:"snowflake,omitempty"`
 }
@@ -146,6 +147,8 @@ type SnowflakeProvider struct {
 	Version *string `json:"version,omitempty" yaml:"version,omitempty"`
 }
 
+type HerokuProvider struct{}
+
 type Backend struct {
 	AccountID   *string `json:"account_id,omitempty" yaml:"account_id,omitempty"`
 	Bucket      *string `json:"bucket,omitempty" yaml:"bucket,omitempty"`
@@ -246,6 +249,13 @@ func (c *Config) Generate(r *rand.Rand, size int) reflect.Value {
 		return nil
 	}
 
+	randHerokuProvider := func(r *rand.Rand, s int) *HerokuProvider {
+		if r.Float32() < 0.5 {
+			return &HerokuProvider{}
+		}
+		return nil
+	}
+
 	randCommon := func(r *rand.Rand, s int) Common {
 		c := Common{
 			Backend: &Backend{
@@ -260,6 +270,7 @@ func (c *Config) Generate(r *rand.Rand, size int) reflect.Value {
 				Snowflake: randSnowflakeProvider(r, s),
 				Okta:      randOktaProvider(r, s),
 				Bless:     randBlessProvider(r, s),
+				Heroku:    randHerokuProvider(r, s),
 			},
 			TerraformVersion: randStringPtr(r, s),
 		}
diff --git a/config/v2/resolvers.go b/config/v2/resolvers.go
index 4d0d3bf8..c0785491 100644
--- a/config/v2/resolvers.go
+++ b/config/v2/resolvers.go
@@ -181,6 +181,18 @@ func ResolveBlessProvider(commons ...Common) *BlessProvider {
 	}
 }
 
+func ResolveHerokuProvider(commons ...Common) *HerokuProvider {
+	var p *HerokuProvider
+	for _, c := range commons {
+		if c.Providers == nil || c.Providers.Heroku == nil {
+			continue
+		}
+		p = c.Providers.Heroku
+	}
+
+	return p
+}
+
 func ResolveTfLint(commons ...Common) v1.TfLint {
 	enabled := false
 	for _, c := range commons {
diff --git a/plan/plan.go b/plan/plan.go
index ebfb7e3a..3f57d228 100644
--- a/plan/plan.go
+++ b/plan/plan.go
@@ -115,6 +115,7 @@ func (c CIComponent) generateCIConfig(
 type Providers struct {
 	AWS       *AWSProvider       `yaml:"aws"`
 	Github    *GithubProvider    `yaml:"github"`
+	Heroku    *HerokuProvider    `yaml:"heroku"`
 	Snowflake *SnowflakeProvider `yaml:"snowflake"`
 	Bless     *BlessProvider     `yaml:"bless"`
 	Okta      *OktaProvider      `yaml:"okta"`
@@ -158,6 +159,8 @@ type BlessProvider struct {
 	Version           *string  `json:"version,omitempty" yaml:"version,omitempty"`
 }
 
+type HerokuProvider struct{}
+
 // AWSBackend represents aws backend configuration
 type AWSBackend struct {
 	AccountID   *string `yaml:"account_id,omitempty"`
@@ -397,6 +400,12 @@ func resolveComponentCommon(commons ...v2.Common) ComponentCommon {
 		}
 	}
 
+	var herokuPlan *HerokuProvider
+	herokuConfig := v2.ResolveHerokuProvider(commons...)
+	if herokuConfig != nil {
+		herokuPlan = &HerokuProvider{}
+	}
+
 	tflintConfig := v2.ResolveTfLint(commons...)
 
 	tfLintPlan := TfLint{
@@ -453,6 +462,7 @@ func resolveComponentCommon(commons ...v2.Common) ComponentCommon {
 		Providers: Providers{
 			AWS:       awsPlan,
 			Github:    githubPlan,
+			Heroku:    herokuPlan,
 			Snowflake: snowflakePlan,
 			Bless:     blessPlan,
 			Okta:      oktaPlan,
diff --git a/templates/account/fogg.tf.tmpl b/templates/account/fogg.tf.tmpl
index 9eff3309..48f6b652 100644
--- a/templates/account/fogg.tf.tmpl
+++ b/templates/account/fogg.tf.tmpl
@@ -39,6 +39,10 @@
   {{ template "github_provider" .Providers.Github}}
 {{ end }}
 
+{{ if .Providers.Heroku }}
+  {{ template "heroku_provider" .Providers.Heroku }}
+{{ end }}
+
 terraform {
   required_version = "={{ .TerraformVersion }}"
 
diff --git a/templates/common/heroku_provider.tmpl b/templates/common/heroku_provider.tmpl
new file mode 100644
index 00000000..2f417f87
--- /dev/null
+++ b/templates/common/heroku_provider.tmpl
@@ -0,0 +1,4 @@
+{{define "heroku_provider"}}
+provider "heroku" {
+}
+{{ end }}
diff --git a/templates/component/terraform/Makefile.tmpl b/templates/component/terraform/Makefile.tmpl
index 9774cac5..69acb9ac 100644
--- a/templates/component/terraform/Makefile.tmpl
+++ b/templates/component/terraform/Makefile.tmpl
@@ -8,7 +8,10 @@ export AWS_BACKEND_PROFILE := {{ .Backend.Profile }}
 {{if .Providers.AWS}}
 export AWS_PROVIDER_PROFILE := {{ .Providers.AWS.Profile }}
 {{ end }}
+{{if .Providers.Heroku}}
+export HEROKU_PROVIDER := 1
+{{end}}
 
 include {{ .PathToRepoRoot }}/scripts/component.mk
 
-{{ template "make_help"  }}
\ No newline at end of file
+{{ template "make_help"  }}
diff --git a/templates/component/terraform/fogg.tf.tmpl b/templates/component/terraform/fogg.tf.tmpl
index 71f909aa..43e08969 100644
--- a/templates/component/terraform/fogg.tf.tmpl
+++ b/templates/component/terraform/fogg.tf.tmpl
@@ -39,6 +39,10 @@
   {{ template "github_provider" .Providers.Github}}
 {{ end }}
 
+{{ if .Providers.Heroku }}
+  {{ template "heroku_provider" .Providers.Heroku }}
+{{ end }}
+
 terraform {
   required_version = "~>{{ .TerraformVersion }}"
 
diff --git a/templates/global/fogg.tf.tmpl b/templates/global/fogg.tf.tmpl
index 3c616026..8aaf0088 100644
--- a/templates/global/fogg.tf.tmpl
+++ b/templates/global/fogg.tf.tmpl
@@ -38,6 +38,11 @@
   {{ template "github_provider" .Providers.Github}}
 {{ end }}
 
+{{ if .Providers.Heroku }}
+  {{ template "heroku_provider" .Providers.Heroku }}
+{{ end }}
+
+
 terraform {
   required_version = "~>{{ .TerraformVersion }}"
 
diff --git a/templates/repo/scripts/component.mk b/templates/repo/scripts/component.mk
index 22ba1b1b..6ca44d12 100644
--- a/templates/repo/scripts/component.mk
+++ b/templates/repo/scripts/component.mk
@@ -41,11 +41,25 @@ lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
 	@echo
 .PHONY: lint-terraform-fmt
 
-check-auth: ## check that authentication is properly set up for this component
+check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
+.PHONY: check-auth
+
+check-auth-aws:
 	@for p in $(AWS_BACKEND_PROFILE) $(AWS_PROVIDER_PROFILE); do \
-		aws --profile $$p sts get-caller-identity > /dev/null || echo "AWS AUTH error. This component is configured to use a profile name $$p. Please add one to your ~/.aws/config"; \
+		aws --profile $$p sts get-caller-identity > /dev/null || (echo "AWS AUTH error. This component is configured to use a profile named '$$p'. Please add one to your ~/.aws/config" && exit -1); \
 	done
-.PHONY: check-auth
+.PHONY: check-auth-aws
+
+check-auth-heroku:
+ifeq ($(HEROKU_PROVIDER),1)
+	@echo "Checking heroku auth..."
+	@if command heroku >/dev/null; then \
+		heroku auth:whoami || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
+	else \
+		echo "Heroku CLI not installed, can't check auth."; \
+	fi
+endif
+.PHONY: check-auth-heroku
 
 ifeq ($(MODE),local)
 plan: check-auth init fmt ## run a terraform plan


Test patch:
diff --git a/plan/plan_test.go b/plan/plan_test.go
index 76d7a2d0..5f3b95ff 100644
--- a/plan/plan_test.go
+++ b/plan/plan_test.go
@@ -196,6 +196,11 @@ func TestPlanBasicV2Yaml(t *testing.T) {
 
 	assert.NotNil(t, plan.Envs["staging"].Components["comp_helm_template"])
 	assert.Equal(t, "k8s", plan.Envs["staging"].Components["comp_helm_template"].EKS.ClusterName)
+
+	assert.NotNil(t, plan.Envs["prod"])
+	assert.NotNil(t, plan.Envs["prod"].Components["hero"])
+	assert.NotNil(t, plan.Envs["prod"].Components["hero"].Providers)
+	assert.NotNil(t, plan.Envs["prod"].Components["hero"].Providers.Heroku)
 }
 
 func TestExtraVarsCompositionV2(t *testing.T) {
diff --git a/templates/templates_test.go b/templates/templates_test.go
index d3278852..b020bd8f 100644
--- a/templates/templates_test.go
+++ b/templates/templates_test.go
@@ -21,7 +21,7 @@ func TestOpenTemplate(t *testing.T) {
 		tLen    int
 		wantErr bool
 	}{
-		{"foo", args{temps.Account, "Makefile.tmpl"}, 7, false},
+		{"foo", args{temps.Account, "Makefile.tmpl"}, 8, false},
 	}
 
 	for _, tt := range tests {
diff --git a/testdata/bless_provider/scripts/component.mk b/testdata/bless_provider/scripts/component.mk
index 22ba1b1b..6ca44d12 100644
--- a/testdata/bless_provider/scripts/component.mk
+++ b/testdata/bless_provider/scripts/component.mk
@@ -41,11 +41,25 @@ lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
 	@echo
 .PHONY: lint-terraform-fmt
 
-check-auth: ## check that authentication is properly set up for this component
+check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
+.PHONY: check-auth
+
+check-auth-aws:
 	@for p in $(AWS_BACKEND_PROFILE) $(AWS_PROVIDER_PROFILE); do \
-		aws --profile $$p sts get-caller-identity > /dev/null || echo "AWS AUTH error. This component is configured to use a profile name $$p. Please add one to your ~/.aws/config"; \
+		aws --profile $$p sts get-caller-identity > /dev/null || (echo "AWS AUTH error. This component is configured to use a profile named '$$p'. Please add one to your ~/.aws/config" && exit -1); \
 	done
-.PHONY: check-auth
+.PHONY: check-auth-aws
+
+check-auth-heroku:
+ifeq ($(HEROKU_PROVIDER),1)
+	@echo "Checking heroku auth..."
+	@if command heroku >/dev/null; then \
+		heroku auth:whoami || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
+	else \
+		echo "Heroku CLI not installed, can't check auth."; \
+	fi
+endif
+.PHONY: check-auth-heroku
 
 ifeq ($(MODE),local)
 plan: check-auth init fmt ## run a terraform plan
diff --git a/testdata/bless_provider/terraform/accounts/foo/fogg.tf b/testdata/bless_provider/terraform/accounts/foo/fogg.tf
index 587e1a22..e60ce1cc 100644
--- a/testdata/bless_provider/terraform/accounts/foo/fogg.tf
+++ b/testdata/bless_provider/terraform/accounts/foo/fogg.tf
@@ -36,6 +36,8 @@ provider "bless" {
 
 
 
+
+
 terraform {
   required_version = "=1.1.1"
 
diff --git a/testdata/bless_provider/terraform/envs/bar/bam/Makefile b/testdata/bless_provider/terraform/envs/bar/bam/Makefile
index 6cb2c192..78ef2324 100644
--- a/testdata/bless_provider/terraform/envs/bar/bam/Makefile
+++ b/testdata/bless_provider/terraform/envs/bar/bam/Makefile
@@ -7,9 +7,11 @@ export TF_PLUGIN_CACHE_DIR := ../../../..//.terraform.d/plugin-cache
 export AWS_BACKEND_PROFILE := foofoo
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/bless_provider/terraform/envs/bar/bam/fogg.tf b/testdata/bless_provider/terraform/envs/bar/bam/fogg.tf
index e9b5e5d5..bda65908 100644
--- a/testdata/bless_provider/terraform/envs/bar/bam/fogg.tf
+++ b/testdata/bless_provider/terraform/envs/bar/bam/fogg.tf
@@ -36,6 +36,8 @@ provider "bless" {
 
 
 
+
+
 terraform {
   required_version = "~>1.1.1"
 
diff --git a/testdata/bless_provider/terraform/global/fogg.tf b/testdata/bless_provider/terraform/global/fogg.tf
index 1d8e76e2..0e43c560 100644
--- a/testdata/bless_provider/terraform/global/fogg.tf
+++ b/testdata/bless_provider/terraform/global/fogg.tf
@@ -36,6 +36,9 @@ provider "bless" {
 
 
 
+
+
+
 terraform {
   required_version = "~>1.1.1"
 
diff --git a/testdata/github_provider/scripts/component.mk b/testdata/github_provider/scripts/component.mk
index 22ba1b1b..6ca44d12 100644
--- a/testdata/github_provider/scripts/component.mk
+++ b/testdata/github_provider/scripts/component.mk
@@ -41,11 +41,25 @@ lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
 	@echo
 .PHONY: lint-terraform-fmt
 
-check-auth: ## check that authentication is properly set up for this component
+check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
+.PHONY: check-auth
+
+check-auth-aws:
 	@for p in $(AWS_BACKEND_PROFILE) $(AWS_PROVIDER_PROFILE); do \
-		aws --profile $$p sts get-caller-identity > /dev/null || echo "AWS AUTH error. This component is configured to use a profile name $$p. Please add one to your ~/.aws/config"; \
+		aws --profile $$p sts get-caller-identity > /dev/null || (echo "AWS AUTH error. This component is configured to use a profile named '$$p'. Please add one to your ~/.aws/config" && exit -1); \
 	done
-.PHONY: check-auth
+.PHONY: check-auth-aws
+
+check-auth-heroku:
+ifeq ($(HEROKU_PROVIDER),1)
+	@echo "Checking heroku auth..."
+	@if command heroku >/dev/null; then \
+		heroku auth:whoami || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
+	else \
+		echo "Heroku CLI not installed, can't check auth."; \
+	fi
+endif
+.PHONY: check-auth-heroku
 
 ifeq ($(MODE),local)
 plan: check-auth init fmt ## run a terraform plan
diff --git a/testdata/github_provider/terraform/accounts/foo/fogg.tf b/testdata/github_provider/terraform/accounts/foo/fogg.tf
index 7610f110..283fa569 100644
--- a/testdata/github_provider/terraform/accounts/foo/fogg.tf
+++ b/testdata/github_provider/terraform/accounts/foo/fogg.tf
@@ -20,6 +20,8 @@ provider "github" {
 
 
 
+
+
 terraform {
   required_version = "=1.1.1"
 
diff --git a/testdata/github_provider/terraform/envs/bar/bam/Makefile b/testdata/github_provider/terraform/envs/bar/bam/Makefile
index 8b4a7d8a..96821f89 100644
--- a/testdata/github_provider/terraform/envs/bar/bam/Makefile
+++ b/testdata/github_provider/terraform/envs/bar/bam/Makefile
@@ -7,9 +7,11 @@ export TF_PLUGIN_CACHE_DIR := ../../../..//.terraform.d/plugin-cache
 export AWS_BACKEND_PROFILE := foo
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/github_provider/terraform/envs/bar/bam/fogg.tf b/testdata/github_provider/terraform/envs/bar/bam/fogg.tf
index 79dfad77..f16c2639 100644
--- a/testdata/github_provider/terraform/envs/bar/bam/fogg.tf
+++ b/testdata/github_provider/terraform/envs/bar/bam/fogg.tf
@@ -20,6 +20,8 @@ provider "github" {
 
 
 
+
+
 terraform {
   required_version = "~>1.1.1"
 
diff --git a/testdata/github_provider/terraform/global/fogg.tf b/testdata/github_provider/terraform/global/fogg.tf
index 8f2eeadd..76765df2 100644
--- a/testdata/github_provider/terraform/global/fogg.tf
+++ b/testdata/github_provider/terraform/global/fogg.tf
@@ -20,6 +20,9 @@ provider "github" {
 
 
 
+
+
+
 terraform {
   required_version = "~>1.1.1"
 
diff --git a/testdata/okta_provider/scripts/component.mk b/testdata/okta_provider/scripts/component.mk
index 22ba1b1b..6ca44d12 100644
--- a/testdata/okta_provider/scripts/component.mk
+++ b/testdata/okta_provider/scripts/component.mk
@@ -41,11 +41,25 @@ lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
 	@echo
 .PHONY: lint-terraform-fmt
 
-check-auth: ## check that authentication is properly set up for this component
+check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
+.PHONY: check-auth
+
+check-auth-aws:
 	@for p in $(AWS_BACKEND_PROFILE) $(AWS_PROVIDER_PROFILE); do \
-		aws --profile $$p sts get-caller-identity > /dev/null || echo "AWS AUTH error. This component is configured to use a profile name $$p. Please add one to your ~/.aws/config"; \
+		aws --profile $$p sts get-caller-identity > /dev/null || (echo "AWS AUTH error. This component is configured to use a profile named '$$p'. Please add one to your ~/.aws/config" && exit -1); \
 	done
-.PHONY: check-auth
+.PHONY: check-auth-aws
+
+check-auth-heroku:
+ifeq ($(HEROKU_PROVIDER),1)
+	@echo "Checking heroku auth..."
+	@if command heroku >/dev/null; then \
+		heroku auth:whoami || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
+	else \
+		echo "Heroku CLI not installed, can't check auth."; \
+	fi
+endif
+.PHONY: check-auth-heroku
 
 ifeq ($(MODE),local)
 plan: check-auth init fmt ## run a terraform plan
diff --git a/testdata/okta_provider/terraform/accounts/foo/fogg.tf b/testdata/okta_provider/terraform/accounts/foo/fogg.tf
index 161e60ef..792f9366 100644
--- a/testdata/okta_provider/terraform/accounts/foo/fogg.tf
+++ b/testdata/okta_provider/terraform/accounts/foo/fogg.tf
@@ -20,6 +20,8 @@ provider "okta" {
 
 
 
+
+
 terraform {
   required_version = "=1.1.1"
 
diff --git a/testdata/okta_provider/terraform/envs/bar/bam/Makefile b/testdata/okta_provider/terraform/envs/bar/bam/Makefile
index 6cb2c192..78ef2324 100644
--- a/testdata/okta_provider/terraform/envs/bar/bam/Makefile
+++ b/testdata/okta_provider/terraform/envs/bar/bam/Makefile
@@ -7,9 +7,11 @@ export TF_PLUGIN_CACHE_DIR := ../../../..//.terraform.d/plugin-cache
 export AWS_BACKEND_PROFILE := foofoo
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/okta_provider/terraform/envs/bar/bam/fogg.tf b/testdata/okta_provider/terraform/envs/bar/bam/fogg.tf
index 0d8a9e50..680fc50a 100644
--- a/testdata/okta_provider/terraform/envs/bar/bam/fogg.tf
+++ b/testdata/okta_provider/terraform/envs/bar/bam/fogg.tf
@@ -20,6 +20,8 @@ provider "okta" {
 
 
 
+
+
 terraform {
   required_version = "~>1.1.1"
 
diff --git a/testdata/okta_provider/terraform/global/fogg.tf b/testdata/okta_provider/terraform/global/fogg.tf
index 65ce24b7..c907b469 100644
--- a/testdata/okta_provider/terraform/global/fogg.tf
+++ b/testdata/okta_provider/terraform/global/fogg.tf
@@ -20,6 +20,9 @@ provider "okta" {
 
 
 
+
+
+
 terraform {
   required_version = "~>1.1.1"
 
diff --git a/testdata/snowflake_provider/scripts/component.mk b/testdata/snowflake_provider/scripts/component.mk
index 22ba1b1b..6ca44d12 100644
--- a/testdata/snowflake_provider/scripts/component.mk
+++ b/testdata/snowflake_provider/scripts/component.mk
@@ -41,11 +41,25 @@ lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
 	@echo
 .PHONY: lint-terraform-fmt
 
-check-auth: ## check that authentication is properly set up for this component
+check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
+.PHONY: check-auth
+
+check-auth-aws:
 	@for p in $(AWS_BACKEND_PROFILE) $(AWS_PROVIDER_PROFILE); do \
-		aws --profile $$p sts get-caller-identity > /dev/null || echo "AWS AUTH error. This component is configured to use a profile name $$p. Please add one to your ~/.aws/config"; \
+		aws --profile $$p sts get-caller-identity > /dev/null || (echo "AWS AUTH error. This component is configured to use a profile named '$$p'. Please add one to your ~/.aws/config" && exit -1); \
 	done
-.PHONY: check-auth
+.PHONY: check-auth-aws
+
+check-auth-heroku:
+ifeq ($(HEROKU_PROVIDER),1)
+	@echo "Checking heroku auth..."
+	@if command heroku >/dev/null; then \
+		heroku auth:whoami || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
+	else \
+		echo "Heroku CLI not installed, can't check auth."; \
+	fi
+endif
+.PHONY: check-auth-heroku
 
 ifeq ($(MODE),local)
 plan: check-auth init fmt ## run a terraform plan
diff --git a/testdata/snowflake_provider/terraform/accounts/foo/fogg.tf b/testdata/snowflake_provider/terraform/accounts/foo/fogg.tf
index 52373ba5..c15cabf3 100644
--- a/testdata/snowflake_provider/terraform/accounts/foo/fogg.tf
+++ b/testdata/snowflake_provider/terraform/accounts/foo/fogg.tf
@@ -21,6 +21,8 @@ provider "snowflake" {
 
 
 
+
+
 terraform {
   required_version = "=1.1.1"
 
diff --git a/testdata/snowflake_provider/terraform/envs/bar/bam/Makefile b/testdata/snowflake_provider/terraform/envs/bar/bam/Makefile
index 8b4a7d8a..96821f89 100644
--- a/testdata/snowflake_provider/terraform/envs/bar/bam/Makefile
+++ b/testdata/snowflake_provider/terraform/envs/bar/bam/Makefile
@@ -7,9 +7,11 @@ export TF_PLUGIN_CACHE_DIR := ../../../..//.terraform.d/plugin-cache
 export AWS_BACKEND_PROFILE := foo
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/snowflake_provider/terraform/envs/bar/bam/fogg.tf b/testdata/snowflake_provider/terraform/envs/bar/bam/fogg.tf
index 4f5496d5..bec6eeb5 100644
--- a/testdata/snowflake_provider/terraform/envs/bar/bam/fogg.tf
+++ b/testdata/snowflake_provider/terraform/envs/bar/bam/fogg.tf
@@ -21,6 +21,8 @@ provider "snowflake" {
 
 
 
+
+
 terraform {
   required_version = "~>1.1.1"
 
diff --git a/testdata/snowflake_provider/terraform/global/fogg.tf b/testdata/snowflake_provider/terraform/global/fogg.tf
index af08a35f..a73a8d92 100644
--- a/testdata/snowflake_provider/terraform/global/fogg.tf
+++ b/testdata/snowflake_provider/terraform/global/fogg.tf
@@ -21,6 +21,9 @@ provider "snowflake" {
 
 
 
+
+
+
 terraform {
   required_version = "~>1.1.1"
 
diff --git a/testdata/v1_full/scripts/component.mk b/testdata/v1_full/scripts/component.mk
index 22ba1b1b..6ca44d12 100644
--- a/testdata/v1_full/scripts/component.mk
+++ b/testdata/v1_full/scripts/component.mk
@@ -41,11 +41,25 @@ lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
 	@echo
 .PHONY: lint-terraform-fmt
 
-check-auth: ## check that authentication is properly set up for this component
+check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
+.PHONY: check-auth
+
+check-auth-aws:
 	@for p in $(AWS_BACKEND_PROFILE) $(AWS_PROVIDER_PROFILE); do \
-		aws --profile $$p sts get-caller-identity > /dev/null || echo "AWS AUTH error. This component is configured to use a profile name $$p. Please add one to your ~/.aws/config"; \
+		aws --profile $$p sts get-caller-identity > /dev/null || (echo "AWS AUTH error. This component is configured to use a profile named '$$p'. Please add one to your ~/.aws/config" && exit -1); \
 	done
-.PHONY: check-auth
+.PHONY: check-auth-aws
+
+check-auth-heroku:
+ifeq ($(HEROKU_PROVIDER),1)
+	@echo "Checking heroku auth..."
+	@if command heroku >/dev/null; then \
+		heroku auth:whoami || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
+	else \
+		echo "Heroku CLI not installed, can't check auth."; \
+	fi
+endif
+.PHONY: check-auth-heroku
 
 ifeq ($(MODE),local)
 plan: check-auth init fmt ## run a terraform plan
diff --git a/testdata/v1_full/terraform/accounts/bar/fogg.tf b/testdata/v1_full/terraform/accounts/bar/fogg.tf
index c749006c..61d4e773 100644
--- a/testdata/v1_full/terraform/accounts/bar/fogg.tf
+++ b/testdata/v1_full/terraform/accounts/bar/fogg.tf
@@ -30,6 +30,8 @@ provider "aws" {
 
 
 
+
+
 terraform {
   required_version = "=0.13.0"
 
diff --git a/testdata/v1_full/terraform/accounts/foo/fogg.tf b/testdata/v1_full/terraform/accounts/foo/fogg.tf
index 694206b0..7cc30ebd 100644
--- a/testdata/v1_full/terraform/accounts/foo/fogg.tf
+++ b/testdata/v1_full/terraform/accounts/foo/fogg.tf
@@ -30,6 +30,8 @@ provider "aws" {
 
 
 
+
+
 terraform {
   required_version = "=0.12.0"
 
diff --git a/testdata/v1_full/terraform/envs/stage/cloud-env/Makefile b/testdata/v1_full/terraform/envs/stage/cloud-env/Makefile
index e977268c..9fc0693f 100644
--- a/testdata/v1_full/terraform/envs/stage/cloud-env/Makefile
+++ b/testdata/v1_full/terraform/envs/stage/cloud-env/Makefile
@@ -9,9 +9,11 @@ export AWS_BACKEND_PROFILE := czi-env
 export AWS_PROVIDER_PROFILE := czi-env
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/v1_full/terraform/envs/stage/cloud-env/fogg.tf b/testdata/v1_full/terraform/envs/stage/cloud-env/fogg.tf
index 114b44e7..0f4961f7 100644
--- a/testdata/v1_full/terraform/envs/stage/cloud-env/fogg.tf
+++ b/testdata/v1_full/terraform/envs/stage/cloud-env/fogg.tf
@@ -31,6 +31,8 @@ provider "aws" {
 
 
 
+
+
 terraform {
   required_version = "~>0.15.0"
 
diff --git a/testdata/v1_full/terraform/envs/stage/helm/Makefile b/testdata/v1_full/terraform/envs/stage/helm/Makefile
index 80fc21e4..0b471c92 100644
--- a/testdata/v1_full/terraform/envs/stage/helm/Makefile
+++ b/testdata/v1_full/terraform/envs/stage/helm/Makefile
@@ -9,9 +9,11 @@ export AWS_BACKEND_PROFILE := czi-stage
 export AWS_PROVIDER_PROFILE := czi-stage
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/v1_full/terraform/envs/stage/helm/fogg.tf b/testdata/v1_full/terraform/envs/stage/helm/fogg.tf
index 8c0dade9..b9ebaa62 100644
--- a/testdata/v1_full/terraform/envs/stage/helm/fogg.tf
+++ b/testdata/v1_full/terraform/envs/stage/helm/fogg.tf
@@ -31,6 +31,8 @@ provider "aws" {
 
 
 
+
+
 terraform {
   required_version = "~>0.14.0"
 
diff --git a/testdata/v1_full/terraform/global/fogg.tf b/testdata/v1_full/terraform/global/fogg.tf
index e6c21d61..21ef8f26 100644
--- a/testdata/v1_full/terraform/global/fogg.tf
+++ b/testdata/v1_full/terraform/global/fogg.tf
@@ -30,6 +30,9 @@ provider "aws" {
 
 
 
+
+
+
 terraform {
   required_version = "~>0.11.0"
 
diff --git a/testdata/v2_full/scripts/component.mk b/testdata/v2_full/scripts/component.mk
index 22ba1b1b..6ca44d12 100644
--- a/testdata/v2_full/scripts/component.mk
+++ b/testdata/v2_full/scripts/component.mk
@@ -41,11 +41,25 @@ lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
 	@echo
 .PHONY: lint-terraform-fmt
 
-check-auth: ## check that authentication is properly set up for this component
+check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
+.PHONY: check-auth
+
+check-auth-aws:
 	@for p in $(AWS_BACKEND_PROFILE) $(AWS_PROVIDER_PROFILE); do \
-		aws --profile $$p sts get-caller-identity > /dev/null || echo "AWS AUTH error. This component is configured to use a profile name $$p. Please add one to your ~/.aws/config"; \
+		aws --profile $$p sts get-caller-identity > /dev/null || (echo "AWS AUTH error. This component is configured to use a profile named '$$p'. Please add one to your ~/.aws/config" && exit -1); \
 	done
-.PHONY: check-auth
+.PHONY: check-auth-aws
+
+check-auth-heroku:
+ifeq ($(HEROKU_PROVIDER),1)
+	@echo "Checking heroku auth..."
+	@if command heroku >/dev/null; then \
+		heroku auth:whoami || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
+	else \
+		echo "Heroku CLI not installed, can't check auth."; \
+	fi
+endif
+.PHONY: check-auth-heroku
 
 ifeq ($(MODE),local)
 plan: check-auth init fmt ## run a terraform plan
diff --git a/testdata/v2_full/terraform/accounts/bar/fogg.tf b/testdata/v2_full/terraform/accounts/bar/fogg.tf
index d2a4f2f1..3f2dca6f 100644
--- a/testdata/v2_full/terraform/accounts/bar/fogg.tf
+++ b/testdata/v2_full/terraform/accounts/bar/fogg.tf
@@ -22,6 +22,8 @@ provider "aws" {
 
 
 
+
+
 terraform {
   required_version = "=0.100.0"
 
diff --git a/testdata/v2_full/terraform/accounts/foo/fogg.tf b/testdata/v2_full/terraform/accounts/foo/fogg.tf
index 60d7e230..1b4963e2 100644
--- a/testdata/v2_full/terraform/accounts/foo/fogg.tf
+++ b/testdata/v2_full/terraform/accounts/foo/fogg.tf
@@ -22,6 +22,8 @@ provider "aws" {
 
 
 
+
+
 terraform {
   required_version = "=0.100.0"
 
diff --git a/testdata/v2_full/terraform/envs/staging/comp1/Makefile b/testdata/v2_full/terraform/envs/staging/comp1/Makefile
index b042cabb..e27c3730 100644
--- a/testdata/v2_full/terraform/envs/staging/comp1/Makefile
+++ b/testdata/v2_full/terraform/envs/staging/comp1/Makefile
@@ -9,9 +9,11 @@ export AWS_BACKEND_PROFILE := comp1
 export AWS_PROVIDER_PROFILE := profile
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/v2_full/terraform/envs/staging/comp1/fogg.tf b/testdata/v2_full/terraform/envs/staging/comp1/fogg.tf
index d9548688..0f7be97b 100644
--- a/testdata/v2_full/terraform/envs/staging/comp1/fogg.tf
+++ b/testdata/v2_full/terraform/envs/staging/comp1/fogg.tf
@@ -23,6 +23,8 @@ provider "aws" {
 
 
 
+
+
 terraform {
   required_version = "~>0.100.0"
 
diff --git a/testdata/v2_full/terraform/envs/staging/comp2/Makefile b/testdata/v2_full/terraform/envs/staging/comp2/Makefile
index f41c88e3..2b3d78bb 100644
--- a/testdata/v2_full/terraform/envs/staging/comp2/Makefile
+++ b/testdata/v2_full/terraform/envs/staging/comp2/Makefile
@@ -9,9 +9,11 @@ export AWS_BACKEND_PROFILE := profile
 export AWS_PROVIDER_PROFILE := profile
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/v2_full/terraform/envs/staging/comp2/fogg.tf b/testdata/v2_full/terraform/envs/staging/comp2/fogg.tf
index bf58e63f..b4359678 100644
--- a/testdata/v2_full/terraform/envs/staging/comp2/fogg.tf
+++ b/testdata/v2_full/terraform/envs/staging/comp2/fogg.tf
@@ -23,6 +23,8 @@ provider "aws" {
 
 
 
+
+
 terraform {
   required_version = "~>0.100.0"
 
diff --git a/testdata/v2_full/terraform/envs/staging/vpc/Makefile b/testdata/v2_full/terraform/envs/staging/vpc/Makefile
index f41c88e3..2b3d78bb 100644
--- a/testdata/v2_full/terraform/envs/staging/vpc/Makefile
+++ b/testdata/v2_full/terraform/envs/staging/vpc/Makefile
@@ -9,9 +9,11 @@ export AWS_BACKEND_PROFILE := profile
 export AWS_PROVIDER_PROFILE := profile
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/v2_full/terraform/envs/staging/vpc/fogg.tf b/testdata/v2_full/terraform/envs/staging/vpc/fogg.tf
index d7c6dcaa..7fe4997e 100644
--- a/testdata/v2_full/terraform/envs/staging/vpc/fogg.tf
+++ b/testdata/v2_full/terraform/envs/staging/vpc/fogg.tf
@@ -23,6 +23,8 @@ provider "aws" {
 
 
 
+
+
 terraform {
   required_version = "~>0.100.0"
 
diff --git a/testdata/v2_full/terraform/global/fogg.tf b/testdata/v2_full/terraform/global/fogg.tf
index bcd74860..b5b4a203 100644
--- a/testdata/v2_full/terraform/global/fogg.tf
+++ b/testdata/v2_full/terraform/global/fogg.tf
@@ -22,6 +22,9 @@ provider "aws" {
 
 
 
+
+
+
 terraform {
   required_version = "~>0.100.0"
 
diff --git a/testdata/v2_full_yaml/fogg.yml b/testdata/v2_full_yaml/fogg.yml
index 0ad081b8..e1fc9821 100644
--- a/testdata/v2_full_yaml/fogg.yml
+++ b/testdata/v2_full_yaml/fogg.yml
@@ -24,7 +24,11 @@ defaults:
       version: 0.12.0
   terraform_version: 0.100.0
 envs:
-  prod: {}
+  prod:
+    components:
+      hero:
+        providers:
+          heroku: {}
   staging:
     components:
       comp_helm_template:
diff --git a/testdata/v2_minimal_valid/scripts/component.mk b/testdata/v2_minimal_valid/scripts/component.mk
index 22ba1b1b..6ca44d12 100644
--- a/testdata/v2_minimal_valid/scripts/component.mk
+++ b/testdata/v2_minimal_valid/scripts/component.mk
@@ -41,11 +41,25 @@ lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
 	@echo
 .PHONY: lint-terraform-fmt
 
-check-auth: ## check that authentication is properly set up for this component
+check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
+.PHONY: check-auth
+
+check-auth-aws:
 	@for p in $(AWS_BACKEND_PROFILE) $(AWS_PROVIDER_PROFILE); do \
-		aws --profile $$p sts get-caller-identity > /dev/null || echo "AWS AUTH error. This component is configured to use a profile name $$p. Please add one to your ~/.aws/config"; \
+		aws --profile $$p sts get-caller-identity > /dev/null || (echo "AWS AUTH error. This component is configured to use a profile named '$$p'. Please add one to your ~/.aws/config" && exit -1); \
 	done
-.PHONY: check-auth
+.PHONY: check-auth-aws
+
+check-auth-heroku:
+ifeq ($(HEROKU_PROVIDER),1)
+	@echo "Checking heroku auth..."
+	@if command heroku >/dev/null; then \
+		heroku auth:whoami || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
+	else \
+		echo "Heroku CLI not installed, can't check auth."; \
+	fi
+endif
+.PHONY: check-auth-heroku
 
 ifeq ($(MODE),local)
 plan: check-auth init fmt ## run a terraform plan
diff --git a/testdata/v2_minimal_valid/terraform/global/fogg.tf b/testdata/v2_minimal_valid/terraform/global/fogg.tf
index 4af9fcf9..00f631e7 100644
--- a/testdata/v2_minimal_valid/terraform/global/fogg.tf
+++ b/testdata/v2_minimal_valid/terraform/global/fogg.tf
@@ -11,6 +11,9 @@
 
 
 
+
+
+
 terraform {
   required_version = "~>1.1.1"
 
diff --git a/testdata/v2_no_aws_provider/scripts/component.mk b/testdata/v2_no_aws_provider/scripts/component.mk
index 22ba1b1b..6ca44d12 100644
--- a/testdata/v2_no_aws_provider/scripts/component.mk
+++ b/testdata/v2_no_aws_provider/scripts/component.mk
@@ -41,11 +41,25 @@ lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
 	@echo
 .PHONY: lint-terraform-fmt
 
-check-auth: ## check that authentication is properly set up for this component
+check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
+.PHONY: check-auth
+
+check-auth-aws:
 	@for p in $(AWS_BACKEND_PROFILE) $(AWS_PROVIDER_PROFILE); do \
-		aws --profile $$p sts get-caller-identity > /dev/null || echo "AWS AUTH error. This component is configured to use a profile name $$p. Please add one to your ~/.aws/config"; \
+		aws --profile $$p sts get-caller-identity > /dev/null || (echo "AWS AUTH error. This component is configured to use a profile named '$$p'. Please add one to your ~/.aws/config" && exit -1); \
 	done
-.PHONY: check-auth
+.PHONY: check-auth-aws
+
+check-auth-heroku:
+ifeq ($(HEROKU_PROVIDER),1)
+	@echo "Checking heroku auth..."
+	@if command heroku >/dev/null; then \
+		heroku auth:whoami || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
+	else \
+		echo "Heroku CLI not installed, can't check auth."; \
+	fi
+endif
+.PHONY: check-auth-heroku
 
 ifeq ($(MODE),local)
 plan: check-auth init fmt ## run a terraform plan
diff --git a/testdata/v2_no_aws_provider/terraform/accounts/bar/fogg.tf b/testdata/v2_no_aws_provider/terraform/accounts/bar/fogg.tf
index a4ef6533..12dae157 100644
--- a/testdata/v2_no_aws_provider/terraform/accounts/bar/fogg.tf
+++ b/testdata/v2_no_aws_provider/terraform/accounts/bar/fogg.tf
@@ -11,6 +11,8 @@
 
 
 
+
+
 terraform {
   required_version = "=0.100.0"
 
diff --git a/testdata/v2_no_aws_provider/terraform/accounts/foo/fogg.tf b/testdata/v2_no_aws_provider/terraform/accounts/foo/fogg.tf
index c59d5e1c..9aeb3d99 100644
--- a/testdata/v2_no_aws_provider/terraform/accounts/foo/fogg.tf
+++ b/testdata/v2_no_aws_provider/terraform/accounts/foo/fogg.tf
@@ -11,6 +11,8 @@
 
 
 
+
+
 terraform {
   required_version = "=0.100.0"
 
diff --git a/testdata/v2_no_aws_provider/terraform/envs/staging/comp1/Makefile b/testdata/v2_no_aws_provider/terraform/envs/staging/comp1/Makefile
index bdc5b89d..9f54891d 100644
--- a/testdata/v2_no_aws_provider/terraform/envs/staging/comp1/Makefile
+++ b/testdata/v2_no_aws_provider/terraform/envs/staging/comp1/Makefile
@@ -7,9 +7,11 @@ export TF_PLUGIN_CACHE_DIR := ../../../..//.terraform.d/plugin-cache
 export AWS_BACKEND_PROFILE := profile
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/v2_no_aws_provider/terraform/envs/staging/comp1/fogg.tf b/testdata/v2_no_aws_provider/terraform/envs/staging/comp1/fogg.tf
index 76816313..b2329971 100644
--- a/testdata/v2_no_aws_provider/terraform/envs/staging/comp1/fogg.tf
+++ b/testdata/v2_no_aws_provider/terraform/envs/staging/comp1/fogg.tf
@@ -11,6 +11,8 @@
 
 
 
+
+
 terraform {
   required_version = "~>0.100.0"
 
diff --git a/testdata/v2_no_aws_provider/terraform/envs/staging/comp2/Makefile b/testdata/v2_no_aws_provider/terraform/envs/staging/comp2/Makefile
index bdc5b89d..9f54891d 100644
--- a/testdata/v2_no_aws_provider/terraform/envs/staging/comp2/Makefile
+++ b/testdata/v2_no_aws_provider/terraform/envs/staging/comp2/Makefile
@@ -7,9 +7,11 @@ export TF_PLUGIN_CACHE_DIR := ../../../..//.terraform.d/plugin-cache
 export AWS_BACKEND_PROFILE := profile
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/v2_no_aws_provider/terraform/envs/staging/comp2/fogg.tf b/testdata/v2_no_aws_provider/terraform/envs/staging/comp2/fogg.tf
index 07ccbf7b..97eba670 100644
--- a/testdata/v2_no_aws_provider/terraform/envs/staging/comp2/fogg.tf
+++ b/testdata/v2_no_aws_provider/terraform/envs/staging/comp2/fogg.tf
@@ -11,6 +11,8 @@
 
 
 
+
+
 terraform {
   required_version = "~>0.100.0"
 
diff --git a/testdata/v2_no_aws_provider/terraform/envs/staging/vpc/Makefile b/testdata/v2_no_aws_provider/terraform/envs/staging/vpc/Makefile
index bdc5b89d..9f54891d 100644
--- a/testdata/v2_no_aws_provider/terraform/envs/staging/vpc/Makefile
+++ b/testdata/v2_no_aws_provider/terraform/envs/staging/vpc/Makefile
@@ -7,9 +7,11 @@ export TF_PLUGIN_CACHE_DIR := ../../../..//.terraform.d/plugin-cache
 export AWS_BACKEND_PROFILE := profile
 
 
+
 include ../../../..//scripts/component.mk
 
 
 help: ## display help for this makefile
 	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 .PHONY: help
+
diff --git a/testdata/v2_no_aws_provider/terraform/envs/staging/vpc/fogg.tf b/testdata/v2_no_aws_provider/terraform/envs/staging/vpc/fogg.tf
index 1fdfcc31..00dacf65 100644
--- a/testdata/v2_no_aws_provider/terraform/envs/staging/vpc/fogg.tf
+++ b/testdata/v2_no_aws_provider/terraform/envs/staging/vpc/fogg.tf
@@ -11,6 +11,8 @@
 
 
 
+
+
 terraform {
   required_version = "~>0.100.0"
 
diff --git a/testdata/v2_no_aws_provider/terraform/global/fogg.tf b/testdata/v2_no_aws_provider/terraform/global/fogg.tf
index 84022138..4f04bdb7 100644
--- a/testdata/v2_no_aws_provider/terraform/global/fogg.tf
+++ b/testdata/v2_no_aws_provider/terraform/global/fogg.tf
@@ -11,6 +11,9 @@
 
 
 
+
+
+
 terraform {
   required_version = "~>0.100.0"