version: Allow parsing of a format_version field, added in v1.17 (#208)
diff --git a/version.go b/version.go index 392d082..31de077 100644 --- a/version.go +++ b/version.go
@@ -6,6 +6,8 @@ // VersionOutput represents output from the version -json command // added in v0.13 type VersionOutput struct { + FormatVersion string `json:"format_version"` // Added in v1.17 + Version string `json:"terraform_version"` Revision string `json:"terraform_revision"` Platform string `json:"platform,omitempty"`
diff --git a/version_test.go b/version_test.go index aa9cf02..66fb6fe 100644 --- a/version_test.go +++ b/version_test.go
@@ -67,3 +67,35 @@ t.Fatalf("output mismatch: %s", diff) } } + +// In TF v1.17 we added the format_version field, +// to match how other static JSON outputs are versioned. +func TestVersionOutput_117(t *testing.T) { + output := `{ + "format_version": "1.0", + "terraform_version": "4.5.6-foo", + "platform": "aros_riscv64", + "provider_selections": { + "registry.terraform.io/hashicorp/test1": "7.8.9-beta.2", + "registry.terraform.io/hashicorp/test2": "1.2.3" + }, + "terraform_outdated": false +}` + var parsed VersionOutput + if err := json.Unmarshal([]byte(output), &parsed); err != nil { + t.Fatal(err) + } + + expected := &VersionOutput{ + FormatVersion: "1.0", + Version: "4.5.6-foo", + Platform: "aros_riscv64", + ProviderSelections: map[string]string{ + "registry.terraform.io/hashicorp/test1": "7.8.9-beta.2", + "registry.terraform.io/hashicorp/test2": "1.2.3", + }, + } + if diff := cmp.Diff(expected, &parsed); diff != "" { + t.Fatalf("output mismatch: %s", diff) + } +}