Skip to content

Commit

Permalink
partial evaluation (#244)
Browse files Browse the repository at this point in the history
  • Loading branch information
i4ki authored Mar 25, 2022
1 parent d77ac1a commit 73a1d75
Show file tree
Hide file tree
Showing 59 changed files with 2,981 additions and 112 deletions.
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@ test:
test/ci: build
./bin/terramate list --changed

## start fuzzying to generate some new corpus/find errors
.PHONY: test/fuzz
test/fuzz:
go test ./hcl/eval -fuzz=FuzzPartialEval

## Build terramate into bin directory
.PHONY: build
build:
Expand Down
2 changes: 1 addition & 1 deletion generate/generate_hcl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ func TestHCLGeneration(t *testing.T) {
expr("local_a", "global.local_a"),
expr("local_b", "global.local_b"),
expr("local_c", "global.local_c"),
expr("local_d", "try(global.local_d.field, null)"),
expr("local_d", "tm_try(global.local_d.field, null)"),
),
),
),
Expand Down
2 changes: 2 additions & 0 deletions generate/generate_report_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,8 @@ func assertReportHasError(t *testing.T, report generate.Report, err error) {
func assertEqualReports(t *testing.T, got, want generate.Report) {
t.Helper()
if diff := cmp.Diff(got, want); diff != "" {
t.Errorf("got %s", got)
t.Errorf("want %s", want)
t.Errorf("got(-) want(+)")
t.Fatal(diff)
}
Expand Down
8 changes: 4 additions & 4 deletions generate/genhcl/genhcl.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,17 +119,17 @@ func Load(rootdir string, sm stack.Metadata, globals terramate.Globals) (StackHC

gen := hclwrite.NewEmptyFile()
if err := hcl.CopyBody(gen.Body(), loadedHCL.block.Body, evalctx); err != nil {
return StackHCLs{}, fmt.Errorf(
"%w: stack %q block %q: %v",
evalErr := fmt.Errorf(
"%w: stack %q block %q",
ErrEval,
stackpath,
name,
err,
)
return StackHCLs{}, errutil.Chain(evalErr, err)
}
res.hcls[name] = HCL{
origin: loadedHCL.origin,
body: gen.Bytes(),
body: hclwrite.Format(gen.Bytes()),
}
}

Expand Down
63 changes: 63 additions & 0 deletions generate/genhcl/genhcl_hclwrite_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Copyright 2022 Mineiros GmbH
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package genhcl_test

import "github.com/mineiros-io/terramate/test/hclwrite"

// useful function aliases to build HCL documents

func hcldoc(builders ...hclwrite.BlockBuilder) *hclwrite.Block {
return hclwrite.BuildHCL(builders...)
}

func generateHCL(builders ...hclwrite.BlockBuilder) *hclwrite.Block {
return hclwrite.BuildBlock("generate_hcl", builders...)
}

func block(name string, builders ...hclwrite.BlockBuilder) *hclwrite.Block {
return hclwrite.BuildBlock(name, builders...)
}

func terraform(builders ...hclwrite.BlockBuilder) *hclwrite.Block {
return hclwrite.BuildBlock("terraform", builders...)
}

func globals(builders ...hclwrite.BlockBuilder) *hclwrite.Block {
return hclwrite.BuildBlock("globals", builders...)
}

func content(builders ...hclwrite.BlockBuilder) *hclwrite.Block {
return hclwrite.BuildBlock("content", builders...)
}

func labels(labels ...string) hclwrite.BlockBuilder {
return hclwrite.Labels(labels...)
}

func expr(name string, expr string) hclwrite.BlockBuilder {
return hclwrite.Expression(name, expr)
}

func str(name string, val string) hclwrite.BlockBuilder {
return hclwrite.String(name, val)
}

func number(name string, val int64) hclwrite.BlockBuilder {
return hclwrite.NumberInt(name, val)
}

func boolean(name string, val bool) hclwrite.BlockBuilder {
return hclwrite.Boolean(name, val)
}
Loading

0 comments on commit 73a1d75

Please sign in to comment.