From 049e11b139bf6320cb968eb75747dbb3398b015d Mon Sep 17 00:00:00 2001 From: Ilya Kuznetsov Date: Fri, 6 Dec 2024 16:13:55 +0100 Subject: [PATCH] test: Checks missing descriptions in annotation files --- .codegen.json | 2 +- Makefile | 3 ++ bundle/internal/schema/main.go | 4 ++ bundle/internal/schema/main_test.go | 59 +++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 bundle/internal/schema/main_test.go diff --git a/.codegen.json b/.codegen.json index 8acf43942..735e1ee31 100644 --- a/.codegen.json +++ b/.codegen.json @@ -11,7 +11,7 @@ "required": ["go"], "post_generate": [ "go test -timeout 240s -run TestConsistentDatabricksSdkVersion github.com/databricks/cli/internal/build", - "go run ./bundle/internal/schema/*.go ./bundle/internal/schema ./bundle/schema/jsonschema.json", + "make schema", "echo 'bundle/internal/tf/schema/\\*.go linguist-generated=true' >> ./.gitattributes", "echo 'go.sum linguist-generated=true' >> ./.gitattributes", "echo 'bundle/schema/jsonschema.json linguist-generated=true' >> ./.gitattributes" diff --git a/Makefile b/Makefile index 13787fdda..b4c9f14ca 100644 --- a/Makefile +++ b/Makefile @@ -38,3 +38,6 @@ vendor: .PHONY: build vendor coverage test lint fmt +schema: + @echo "✓ Generating json-schema ..." + @go run $(shell find ./bundle/internal/schema -name "*.go" ! -name "*_test.go") ./bundle/internal/schema ./bundle/schema/jsonschema.json diff --git a/bundle/internal/schema/main.go b/bundle/internal/schema/main.go index e63e5da7e..1840fc351 100644 --- a/bundle/internal/schema/main.go +++ b/bundle/internal/schema/main.go @@ -123,6 +123,10 @@ func main() { // Output file, where the generated JSON schema will be written to. outputFile := os.Args[2] + generateSchema(workdir, outputFile) +} + +func generateSchema(workdir, outputFile string) { annotationsPath := path.Join(workdir, "annotations.yml") annotationsOpenApiPath := path.Join(workdir, "annotations_openapi.yml") annotationsOpenApiOverridesPath := path.Join(workdir, "annotations_openapi_overrides.yml") diff --git a/bundle/internal/schema/main_test.go b/bundle/internal/schema/main_test.go new file mode 100644 index 000000000..c26d5aafd --- /dev/null +++ b/bundle/internal/schema/main_test.go @@ -0,0 +1,59 @@ +package main + +import ( + "io" + "os" + "path" + "testing" + + "github.com/stretchr/testify/assert" +) + +func copyFile(src, dst string) error { + in, err := os.Open(src) + if err != nil { + return err + } + defer in.Close() + + out, err := os.Create(dst) + if err != nil { + return err + } + defer out.Close() + + _, err = io.Copy(out, in) + if err != nil { + return err + } + + return out.Close() +} + +// Checks whether descriptions are added for new config fields in the annotations.yml file +// If this test fails either manually add descriptions to the `annotations.yml` or do the following: +// 1. run `make schema` from the repository root to add placeholder descriptions +// 2. replace all "PLACEHOLDER" values with the actual descriptions if possible +// 3. run `make schema` again to regenerate the schema with acutal descriptions +func TestRequiredAnnotationsForNewFields(t *testing.T) { + workdir := t.TempDir() + annotationsPath := path.Join(workdir, "annotations.yml") + annotationsOpenApiPath := path.Join(workdir, "annotations_openapi.yml") + annotationsOpenApiOverridesPath := path.Join(workdir, "annotations_openapi_overrides.yml") + + // Copy existing annotation files from the same folder as this test + err := copyFile("annotations.yml", annotationsPath) + assert.NoError(t, err) + err = copyFile("annotations_openapi.yml", annotationsOpenApiPath) + assert.NoError(t, err) + err = copyFile("annotations_openapi_overrides.yml", annotationsOpenApiOverridesPath) + assert.NoError(t, err) + + generateSchema(workdir, path.Join(t.TempDir(), "schema.json")) + + original, err := os.ReadFile("annotations.yml") + assert.NoError(t, err) + copied, err := os.ReadFile(annotationsPath) + assert.NoError(t, err) + assert.Equal(t, string(original), string(copied), "Missing JSON-schema descriptions for new config fields in bundle/internal/schema/annotations.yml") +}