From 7ba64ea6de781ddc5996761325730b9f42892272 Mon Sep 17 00:00:00 2001 From: Toan Nguyen Date: Sun, 15 Sep 2024 11:27:47 +0700 Subject: [PATCH 1/3] restructure the cli codebase --- Makefile | 4 +- .../{ => command/internal}/connector.go | 22 +- .../{ => command/internal}/connector_test.go | 25 ++- .../command/internal/constant.go | 192 ++++++++++++++++++ .../{ => command/internal}/schema.go | 139 +------------ .../internal/stringer.go} | 11 +- .../templates/connector/connector.go.tmpl | 0 .../internal}/templates/new/.gitignore.tmpl | 0 .../new/.hasura-connector/.dockerignore.tmpl | 0 .../new/.hasura-connector/Dockerfile.tmpl | 0 .../connector-metadata.yaml.tmpl | 0 .../internal}/templates/new/Makefile.tmpl | 0 .../internal}/templates/new/README.md.tmpl | 0 .../internal}/templates/new/connector.go.tmpl | 0 .../templates/new/functions/hello.go.tmpl | 0 .../internal}/templates/new/go.mod.tmpl | 0 .../internal}/templates/new/main.go.tmpl | 0 .../templates/new/types/connector.go.tmpl | 0 .../{template.go => command/new.go} | 28 ++- .../{template_test.go => command/new_test.go} | 4 +- .../{test_snapshots.go => snapshots_gen.go} | 0 ...napshots_test.go => snapshots_gen_test.go} | 0 .../{ => command}/testdata/.gitignore | 0 .../testdata/basic/expected/connector.go.tmpl | 0 .../testdata/basic/expected/functions.go.tmpl | 0 .../testdata/basic/expected/schema.json | 0 .../testdata/basic/source/connector.go | 0 .../basic/source/functions/comment.go | 0 .../testdata/basic/source/functions/prefix.go | 0 .../testdata/basic/source/go.mod | 0 .../testdata/basic/source/go.sum | 0 .../testdata/basic/source/types/connector.go | 0 .../testdata/empty/expected/connector.go.tmpl | 0 .../testdata/empty/expected/schema.json | 0 .../testdata/empty/source/connector.go | 0 .../testdata/empty/source/functions/.gitkeep | 0 .../testdata/empty/source/go.mod | 0 .../testdata/empty/source/go.sum | 0 .../testdata/empty/source/types/connector.go | 0 .../subdir/expected/connector.go.tmpl | 0 .../subdir/expected/functions.go.tmpl | 0 .../testdata/subdir/expected/schema.json | 0 .../subdir/source/connector/connector.go | 0 .../source/connector/functions/comment.go | 0 .../source/connector/types/connector.go | 0 .../testdata/subdir/source/go.mod | 0 .../testdata/subdir/source/go.sum | 0 cmd/hasura-ndc-go/command/update.go | 39 ++++ cmd/hasura-ndc-go/constant.go | 47 ----- cmd/hasura-ndc-go/main.go | 69 ++----- 50 files changed, 300 insertions(+), 280 deletions(-) rename cmd/hasura-ndc-go/{ => command/internal}/connector.go (96%) rename cmd/hasura-ndc-go/{ => command/internal}/connector_test.go (88%) create mode 100644 cmd/hasura-ndc-go/command/internal/constant.go rename cmd/hasura-ndc-go/{ => command/internal}/schema.go (83%) rename cmd/hasura-ndc-go/{utils.go => command/internal/stringer.go} (70%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/connector/connector.go.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/.gitignore.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/.hasura-connector/.dockerignore.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/.hasura-connector/Dockerfile.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/.hasura-connector/connector-metadata.yaml.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/Makefile.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/README.md.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/connector.go.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/functions/hello.go.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/go.mod.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/main.go.tmpl (100%) rename cmd/hasura-ndc-go/{ => command/internal}/templates/new/types/connector.go.tmpl (100%) rename cmd/hasura-ndc-go/{template.go => command/new.go} (78%) rename cmd/hasura-ndc-go/{template_test.go => command/new_test.go} (77%) rename cmd/hasura-ndc-go/command/{test_snapshots.go => snapshots_gen.go} (100%) rename cmd/hasura-ndc-go/command/{test_snapshots_test.go => snapshots_gen_test.go} (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/.gitignore (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/basic/expected/connector.go.tmpl (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/basic/expected/functions.go.tmpl (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/basic/expected/schema.json (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/basic/source/connector.go (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/basic/source/functions/comment.go (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/basic/source/functions/prefix.go (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/basic/source/go.mod (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/basic/source/go.sum (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/basic/source/types/connector.go (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/empty/expected/connector.go.tmpl (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/empty/expected/schema.json (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/empty/source/connector.go (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/empty/source/functions/.gitkeep (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/empty/source/go.mod (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/empty/source/go.sum (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/empty/source/types/connector.go (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/subdir/expected/connector.go.tmpl (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/subdir/expected/functions.go.tmpl (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/subdir/expected/schema.json (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/subdir/source/connector/connector.go (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/subdir/source/connector/functions/comment.go (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/subdir/source/connector/types/connector.go (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/subdir/source/go.mod (100%) rename cmd/hasura-ndc-go/{ => command}/testdata/subdir/source/go.sum (100%) create mode 100644 cmd/hasura-ndc-go/command/update.go delete mode 100644 cmd/hasura-ndc-go/constant.go diff --git a/Makefile b/Makefile index ce1decc..b54fc23 100644 --- a/Makefile +++ b/Makefile @@ -32,8 +32,8 @@ test: test-sdk test-hasura-ndc-go test-example-codegen go-tidy: go mod tidy cd $(ROOT_DIR)/cmd/hasura-ndc-go && go mod tidy - cd $(ROOT_DIR)/cmd/hasura-ndc-go/testdata/basic/source && go mod tidy - cd $(ROOT_DIR)/cmd/hasura-ndc-go/testdata/empty/source && go mod tidy + cd $(ROOT_DIR)/cmd/hasura-ndc-go/command/testdata/basic/source && go mod tidy + cd $(ROOT_DIR)/cmd/hasura-ndc-go/command/testdata/empty/source && go mod tidy cd $(ROOT_DIR)/example/codegen && go mod tidy # Install golangci-lint tool to run lint locally diff --git a/cmd/hasura-ndc-go/connector.go b/cmd/hasura-ndc-go/command/internal/connector.go similarity index 96% rename from cmd/hasura-ndc-go/connector.go rename to cmd/hasura-ndc-go/command/internal/connector.go index 734930e..6f9da65 100644 --- a/cmd/hasura-ndc-go/connector.go +++ b/cmd/hasura-ndc-go/command/internal/connector.go @@ -1,4 +1,4 @@ -package main +package internal import ( "bufio" @@ -18,6 +18,15 @@ import ( "github.com/rs/zerolog/log" ) +// ConnectorGenerationArguments represent input arguments of the ConnectorGenerator +type ConnectorGenerationArguments struct { + Path string `help:"The path of the root directory where the go.mod file is present" short:"p" env:"HASURA_PLUGIN_CONNECTOR_CONTEXT_PATH" default:"."` + ConnectorDir string `help:"The directory where the connector.go file is placed" default:"."` + PackageTypes string `help:"The name of types package where the State struct is in"` + Directories []string `help:"Folders contain NDC operation functions" short:"d"` + Trace string `help:"Enable tracing and write to target file path."` +} + type connectorTypeBuilder struct { packageName string packagePath string @@ -76,11 +85,12 @@ func NewConnectorGenerator(basePath string, connectorDir string, moduleName stri } } -func parseAndGenerateConnector(args *UpdateArguments, moduleName string) error { - if cli.Generate.Trace != "" { - w, err := os.Create(cli.Generate.Trace) +// ParseAndGenerateConnector parses and generate connector codes +func ParseAndGenerateConnector(args ConnectorGenerationArguments, moduleName string) error { + if args.Trace != "" { + w, err := os.Create(args.Trace) if err != nil { - return fmt.Errorf("failed to create trace file at %s", cli.Generate.Trace) + return fmt.Errorf("failed to create trace file at %s", args.Trace) } defer func() { _ = w.Close() @@ -92,7 +102,7 @@ func parseAndGenerateConnector(args *UpdateArguments, moduleName string) error { } parseCtx, parseTask := trace.NewTask(context.TODO(), "parse") - sm, err := parseRawConnectorSchemaFromGoCode(parseCtx, moduleName, ".", args) + sm, err := parseRawConnectorSchemaFromGoCode(parseCtx, moduleName, ".", &args) if err != nil { parseTask.End() return err diff --git a/cmd/hasura-ndc-go/connector_test.go b/cmd/hasura-ndc-go/command/internal/connector_test.go similarity index 88% rename from cmd/hasura-ndc-go/connector_test.go rename to cmd/hasura-ndc-go/command/internal/connector_test.go index 40cb656..af8e0d6 100644 --- a/cmd/hasura-ndc-go/connector_test.go +++ b/cmd/hasura-ndc-go/command/internal/connector_test.go @@ -1,4 +1,4 @@ -package main +package internal import ( "encoding/json" @@ -8,7 +8,6 @@ import ( "strings" "testing" - "github.com/hasura/ndc-sdk-go/cmd/hasura-ndc-go/command" "github.com/hasura/ndc-sdk-go/schema" "github.com/stretchr/testify/assert" ) @@ -36,26 +35,26 @@ func TestConnectorGeneration(t *testing.T) { }{ { Name: "basic", - BasePath: "./testdata/basic", + BasePath: "../testdata/basic", ModuleName: "github.com/hasura/ndc-codegen-test", Directories: []string{"functions"}, }, { Name: "empty", - BasePath: "./testdata/empty", + BasePath: "../testdata/empty", ModuleName: "github.com/hasura/ndc-codegen-empty-test", Directories: []string{"functions"}, }, { Name: "subdir", - BasePath: "./testdata/subdir", + BasePath: "../testdata/subdir", ConnectorDir: "connector", ModuleName: "github.com/hasura/ndc-codegen-subdir-test", Directories: []string{"connector/functions"}, }, { Name: "subdir_package_types", - BasePath: "./testdata/subdir", + BasePath: "../testdata/subdir", ConnectorDir: "connector", ModuleName: "github.com/hasura/ndc-codegen-subdir-test", PackageTypes: "connector/types", @@ -63,7 +62,7 @@ func TestConnectorGeneration(t *testing.T) { }, { Name: "subdir_package_types_absolute", - BasePath: "./testdata/subdir", + BasePath: "../testdata/subdir", ConnectorDir: "connector", ModuleName: "github.com/hasura/ndc-codegen-subdir-test", PackageTypes: "github.com/hasura/ndc-codegen-subdir-test/connector/types", @@ -71,7 +70,7 @@ func TestConnectorGeneration(t *testing.T) { }, { Name: "invalid_types_package", - BasePath: "./testdata/subdir", + BasePath: "../testdata/subdir", ModuleName: "github.com/hasura/ndc-codegen-subdir-test", Directories: []string{"connector/functions"}, errorMsg: "the `types` package where the State struct is in must be placed in root or connector directory", @@ -92,7 +91,7 @@ func TestConnectorGeneration(t *testing.T) { srcDir := path.Join(tc.BasePath, "source") assert.NoError(t, os.Chdir(srcDir)) - err = parseAndGenerateConnector(&UpdateArguments{ + err = ParseAndGenerateConnector(ConnectorGenerationArguments{ ConnectorDir: tc.ConnectorDir, PackageTypes: tc.PackageTypes, Directories: tc.Directories, @@ -136,10 +135,10 @@ func TestConnectorGeneration(t *testing.T) { } // generate test cases - assert.NoError(t, command.GenTestSnapshots(&command.GenTestSnapshotArguments{ - Dir: "testdata", - Schema: path.Join("source", tc.ConnectorDir, "schema.generated.json"), - })) + // assert.NoError(t, command.GenTestSnapshots(&command.GenTestSnapshotArguments{ + // Dir: "testdata", + // Schema: path.Join("source", tc.ConnectorDir, "schema.generated.json"), + // })) }) } } diff --git a/cmd/hasura-ndc-go/command/internal/constant.go b/cmd/hasura-ndc-go/command/internal/constant.go new file mode 100644 index 0000000..cbf51bf --- /dev/null +++ b/cmd/hasura-ndc-go/command/internal/constant.go @@ -0,0 +1,192 @@ +package internal + +import ( + _ "embed" + "fmt" + "regexp" + "text/template" + + "github.com/hasura/ndc-sdk-go/schema" +) + +const ( + connectorOutputFile = "connector.generated.go" + schemaOutputFile = "schema.generated.json" + typeMethodsOutputFile = "types.generated.go" +) + +//go:embed templates/connector/connector.go.tmpl +var connectorTemplateStr string +var connectorTemplate *template.Template + +func init() { + var err error + connectorTemplate, err = template.New(connectorOutputFile).Parse(connectorTemplateStr) + if err != nil { + panic(fmt.Errorf("failed to parse connector template: %s", err)) + } +} + +type ScalarName string + +const ( + ScalarBoolean ScalarName = "Boolean" + ScalarString ScalarName = "String" + ScalarInt8 ScalarName = "Int8" + ScalarInt16 ScalarName = "Int16" + ScalarInt32 ScalarName = "Int32" + ScalarInt64 ScalarName = "Int64" + ScalarFloat32 ScalarName = "Float32" + ScalarFloat64 ScalarName = "Float64" + ScalarBigInt ScalarName = "BigInt" + ScalarBigDecimal ScalarName = "BigDecimal" + ScalarUUID ScalarName = "UUID" + ScalarDate ScalarName = "Date" + ScalarTimestamp ScalarName = "Timestamp" + ScalarTimestampTZ ScalarName = "TimestampTZ" + ScalarGeography ScalarName = "Geography" + ScalarBytes ScalarName = "Bytes" + ScalarJSON ScalarName = "JSON" + // ScalarRawJSON is a special scalar for raw json data serialization. + // The underlying Go type for this scalar is json.RawMessage. + // Note: we don't recommend to use this scalar for function arguments + // because the decoder will re-encode the value to []byte that isn't performance-wise. + ScalarRawJSON ScalarName = "RawJSON" +) + +var defaultScalarTypes = map[ScalarName]schema.ScalarType{ + ScalarBoolean: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationBoolean().Encode(), + }, + ScalarString: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationString().Encode(), + }, + ScalarInt8: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationInt8().Encode(), + }, + ScalarInt16: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationInt16().Encode(), + }, + ScalarInt32: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationInt32().Encode(), + }, + ScalarInt64: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationInt64().Encode(), + }, + ScalarFloat32: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationFloat32().Encode(), + }, + ScalarFloat64: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationFloat64().Encode(), + }, + ScalarBigInt: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationBigInteger().Encode(), + }, + ScalarBigDecimal: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationBigDecimal().Encode(), + }, + ScalarUUID: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationUUID().Encode(), + }, + ScalarDate: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationDate().Encode(), + }, + ScalarTimestamp: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationTimestamp().Encode(), + }, + ScalarTimestampTZ: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationTimestampTZ().Encode(), + }, + ScalarGeography: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationGeography().Encode(), + }, + ScalarBytes: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationBytes().Encode(), + }, + ScalarJSON: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationJSON().Encode(), + }, + ScalarRawJSON: { + AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, + ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, + Representation: schema.NewTypeRepresentationJSON().Encode(), + }, +} + +var ndcOperationNameRegex = regexp.MustCompile(`^(Function|Procedure)([A-Z][A-Za-z0-9]*)$`) +var ndcOperationCommentRegex = regexp.MustCompile(`^@(function|procedure)(\s+([A-Za-z]\w*))?`) +var ndcScalarNameRegex = regexp.MustCompile(`^Scalar([A-Z]\w*)$`) +var ndcScalarCommentRegex = regexp.MustCompile(`^@scalar(\s+(\w+))?(\s+([a-z]+))?$`) +var ndcEnumCommentRegex = regexp.MustCompile(`^@enum\s+([\w-.,!@#$%^&*()+=~\s\t]+)$`) + +type nativeScalarPackageConfig struct { + PackageName string + Pattern *regexp.Regexp +} + +var fieldNameRegex = regexp.MustCompile(`[^\w]`) + +var nativeScalarPackages map[string]nativeScalarPackageConfig = map[string]nativeScalarPackageConfig{ + "scalar": { + PackageName: "github.com/hasura/ndc-sdk-go/scalar", + Pattern: regexp.MustCompile(`^(\[\]|\*)*github\.com\/hasura\/ndc-sdk-go\/scalar\.`), + }, + "json": { + PackageName: "encoding/json", + Pattern: regexp.MustCompile(`^(\[\]|\*)*encoding\/json\.`), + }, + "uuid": { + PackageName: "github.com/google/uuid", + Pattern: regexp.MustCompile(`^(\[\]|\*)*github\.com\/google\/uuid\.`), + }, + "time": { + PackageName: "time", + Pattern: regexp.MustCompile(`^(\[\]|\*)*time\.`), + }, +} + +const textBlockErrorCheck = ` + if err != nil { + return err + } +` + +const textBlockErrorCheck2 = ` + if err != nil { + return nil, err + } +` diff --git a/cmd/hasura-ndc-go/schema.go b/cmd/hasura-ndc-go/command/internal/schema.go similarity index 83% rename from cmd/hasura-ndc-go/schema.go rename to cmd/hasura-ndc-go/command/internal/schema.go index b2861d1..1280a40 100644 --- a/cmd/hasura-ndc-go/schema.go +++ b/cmd/hasura-ndc-go/command/internal/schema.go @@ -1,4 +1,4 @@ -package main +package internal import ( "context" @@ -21,132 +21,6 @@ import ( "golang.org/x/tools/go/packages" ) -type ScalarName string - -const ( - ScalarBoolean ScalarName = "Boolean" - ScalarString ScalarName = "String" - ScalarInt8 ScalarName = "Int8" - ScalarInt16 ScalarName = "Int16" - ScalarInt32 ScalarName = "Int32" - ScalarInt64 ScalarName = "Int64" - ScalarFloat32 ScalarName = "Float32" - ScalarFloat64 ScalarName = "Float64" - ScalarBigInt ScalarName = "BigInt" - ScalarBigDecimal ScalarName = "BigDecimal" - ScalarUUID ScalarName = "UUID" - ScalarDate ScalarName = "Date" - ScalarTimestamp ScalarName = "Timestamp" - ScalarTimestampTZ ScalarName = "TimestampTZ" - ScalarGeography ScalarName = "Geography" - ScalarBytes ScalarName = "Bytes" - ScalarJSON ScalarName = "JSON" - // ScalarRawJSON is a special scalar for raw json data serialization. - // The underlying Go type for this scalar is json.RawMessage. - // Note: we don't recommend to use this scalar for function arguments - // because the decoder will re-encode the value to []byte that isn't performance-wise. - ScalarRawJSON ScalarName = "RawJSON" -) - -var defaultScalarTypes = map[ScalarName]schema.ScalarType{ - ScalarBoolean: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationBoolean().Encode(), - }, - ScalarString: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationString().Encode(), - }, - ScalarInt8: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationInt8().Encode(), - }, - ScalarInt16: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationInt16().Encode(), - }, - ScalarInt32: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationInt32().Encode(), - }, - ScalarInt64: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationInt64().Encode(), - }, - ScalarFloat32: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationFloat32().Encode(), - }, - ScalarFloat64: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationFloat64().Encode(), - }, - ScalarBigInt: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationBigInteger().Encode(), - }, - ScalarBigDecimal: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationBigDecimal().Encode(), - }, - ScalarUUID: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationUUID().Encode(), - }, - ScalarDate: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationDate().Encode(), - }, - ScalarTimestamp: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationTimestamp().Encode(), - }, - ScalarTimestampTZ: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationTimestampTZ().Encode(), - }, - ScalarGeography: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationGeography().Encode(), - }, - ScalarBytes: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationBytes().Encode(), - }, - ScalarJSON: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationJSON().Encode(), - }, - ScalarRawJSON: { - AggregateFunctions: schema.ScalarTypeAggregateFunctions{}, - ComparisonOperators: map[string]schema.ComparisonOperatorDefinition{}, - Representation: schema.NewTypeRepresentationJSON().Encode(), - }, -} - -var ndcOperationNameRegex = regexp.MustCompile(`^(Function|Procedure)([A-Z][A-Za-z0-9]*)$`) -var ndcOperationCommentRegex = regexp.MustCompile(`^@(function|procedure)(\s+([A-Za-z]\w*))?`) -var ndcScalarNameRegex = regexp.MustCompile(`^Scalar([A-Z]\w*)$`) -var ndcScalarCommentRegex = regexp.MustCompile(`^@scalar(\s+(\w+))?(\s+([a-z]+))?$`) -var ndcEnumCommentRegex = regexp.MustCompile(`^@enum\s+([\w-.,!@#$%^&*()+=~\s\t]+)$`) - type OperationKind string const ( @@ -356,7 +230,7 @@ func (sp SchemaParser) FindPackageByPath(input string) *packages.Package { return nil } -func parseRawConnectorSchemaFromGoCode(ctx context.Context, moduleName string, filePath string, args *UpdateArguments) (*RawConnectorSchema, error) { +func parseRawConnectorSchemaFromGoCode(ctx context.Context, moduleName string, filePath string, args *ConnectorGenerationArguments) (*RawConnectorSchema, error) { rawSchema := NewRawConnectorSchema() pkgTypes, err := evalPackageTypesLocation(args.PackageTypes, moduleName, filePath, args.ConnectorDir) @@ -1074,3 +948,12 @@ func getFieldNameOrTag(name string, tag string) string { return jsonTag.Name } + +func findAndReplaceNativeScalarPackage(input string) (string, string, bool) { + for alias, pkg := range nativeScalarPackages { + if pkg.Pattern.MatchString(input) { + return pkg.PackageName, strings.ReplaceAll(input, pkg.PackageName, alias), true + } + } + return "", "", false +} diff --git a/cmd/hasura-ndc-go/utils.go b/cmd/hasura-ndc-go/command/internal/stringer.go similarity index 70% rename from cmd/hasura-ndc-go/utils.go rename to cmd/hasura-ndc-go/command/internal/stringer.go index 3975d3f..3a44364 100644 --- a/cmd/hasura-ndc-go/utils.go +++ b/cmd/hasura-ndc-go/command/internal/stringer.go @@ -1,4 +1,4 @@ -package main +package internal import ( "regexp" @@ -31,12 +31,3 @@ func ToPascalCase(input string) string { } return strings.Join(parts, "") } - -func findAndReplaceNativeScalarPackage(input string) (string, string, bool) { - for alias, pkg := range nativeScalarPackages { - if pkg.Pattern.MatchString(input) { - return pkg.PackageName, strings.ReplaceAll(input, pkg.PackageName, alias), true - } - } - return "", "", false -} diff --git a/cmd/hasura-ndc-go/templates/connector/connector.go.tmpl b/cmd/hasura-ndc-go/command/internal/templates/connector/connector.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/connector/connector.go.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/connector/connector.go.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/.gitignore.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/.gitignore.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/.gitignore.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/.gitignore.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/.hasura-connector/.dockerignore.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/.hasura-connector/.dockerignore.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/.hasura-connector/.dockerignore.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/.hasura-connector/.dockerignore.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/.hasura-connector/Dockerfile.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/.hasura-connector/Dockerfile.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/.hasura-connector/Dockerfile.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/.hasura-connector/Dockerfile.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/.hasura-connector/connector-metadata.yaml.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/.hasura-connector/connector-metadata.yaml.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/.hasura-connector/connector-metadata.yaml.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/.hasura-connector/connector-metadata.yaml.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/Makefile.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/Makefile.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/Makefile.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/Makefile.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/README.md.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/README.md.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/README.md.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/README.md.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/connector.go.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/connector.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/connector.go.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/connector.go.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/functions/hello.go.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/functions/hello.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/functions/hello.go.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/functions/hello.go.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/go.mod.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/go.mod.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/go.mod.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/go.mod.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/main.go.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/main.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/main.go.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/main.go.tmpl diff --git a/cmd/hasura-ndc-go/templates/new/types/connector.go.tmpl b/cmd/hasura-ndc-go/command/internal/templates/new/types/connector.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/templates/new/types/connector.go.tmpl rename to cmd/hasura-ndc-go/command/internal/templates/new/types/connector.go.tmpl diff --git a/cmd/hasura-ndc-go/template.go b/cmd/hasura-ndc-go/command/new.go similarity index 78% rename from cmd/hasura-ndc-go/template.go rename to cmd/hasura-ndc-go/command/new.go index e57ec4f..1aea9d8 100644 --- a/cmd/hasura-ndc-go/template.go +++ b/cmd/hasura-ndc-go/command/new.go @@ -1,4 +1,4 @@ -package main +package command import ( "bufio" @@ -11,30 +11,28 @@ import ( "strings" "text/template" + "github.com/hasura/ndc-sdk-go/cmd/hasura-ndc-go/command/internal" "github.com/rs/zerolog/log" "golang.org/x/mod/modfile" ) -//go:embed all:* templates/new +//go:embed all:* internal/templates/new var initTemplateFS embed.FS -//go:embed templates/connector/connector.go.tmpl -var connectorTemplateStr string -var connectorTemplate *template.Template - const ( - templateNewPath = "templates/new" + templateNewPath = "internal/templates/new" ) -func init() { - var err error - connectorTemplate, err = template.New(connectorOutputFile).Parse(connectorTemplateStr) - if err != nil { - panic(fmt.Errorf("failed to parse connector template: %s", err)) - } +// NewArguments input arguments for the new command +type NewArguments struct { + Name string `help:"Name of the connector." short:"n" required:""` + Module string `help:"Module name of the connector" short:"m" required:""` + Version string `help:"The version of ndc-sdk-go."` + Output string `help:"The location where source codes will be generated" short:"o" default:""` } -func generateNewProject(args *NewArguments, silent bool) error { +// GenerateNewProject generates a new project boilerplate +func GenerateNewProject(args *NewArguments, silent bool) error { srcPath := args.Output if srcPath == "" { p, err := os.Getwd() @@ -64,7 +62,7 @@ func generateNewProject(args *NewArguments, silent bool) error { } log.Info().Msg("generating connector functions...") - if err := parseAndGenerateConnector(&UpdateArguments{ + if err := internal.ParseAndGenerateConnector(internal.ConnectorGenerationArguments{ Path: ".", Directories: []string{"functions", "types"}, }, args.Module); err != nil { diff --git a/cmd/hasura-ndc-go/template_test.go b/cmd/hasura-ndc-go/command/new_test.go similarity index 77% rename from cmd/hasura-ndc-go/template_test.go rename to cmd/hasura-ndc-go/command/new_test.go index 03aadbb..dd0d22d 100644 --- a/cmd/hasura-ndc-go/template_test.go +++ b/cmd/hasura-ndc-go/command/new_test.go @@ -1,4 +1,4 @@ -package main +package command import ( "testing" @@ -8,7 +8,7 @@ import ( func TestGenerateNewProject(t *testing.T) { tempDir := t.TempDir() - assert.NoError(t, generateNewProject(&NewArguments{ + assert.NoError(t, GenerateNewProject(&NewArguments{ Name: "test", Module: "hasura.dev/connector", Output: tempDir, diff --git a/cmd/hasura-ndc-go/command/test_snapshots.go b/cmd/hasura-ndc-go/command/snapshots_gen.go similarity index 100% rename from cmd/hasura-ndc-go/command/test_snapshots.go rename to cmd/hasura-ndc-go/command/snapshots_gen.go diff --git a/cmd/hasura-ndc-go/command/test_snapshots_test.go b/cmd/hasura-ndc-go/command/snapshots_gen_test.go similarity index 100% rename from cmd/hasura-ndc-go/command/test_snapshots_test.go rename to cmd/hasura-ndc-go/command/snapshots_gen_test.go diff --git a/cmd/hasura-ndc-go/testdata/.gitignore b/cmd/hasura-ndc-go/command/testdata/.gitignore similarity index 100% rename from cmd/hasura-ndc-go/testdata/.gitignore rename to cmd/hasura-ndc-go/command/testdata/.gitignore diff --git a/cmd/hasura-ndc-go/testdata/basic/expected/connector.go.tmpl b/cmd/hasura-ndc-go/command/testdata/basic/expected/connector.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/testdata/basic/expected/connector.go.tmpl rename to cmd/hasura-ndc-go/command/testdata/basic/expected/connector.go.tmpl diff --git a/cmd/hasura-ndc-go/testdata/basic/expected/functions.go.tmpl b/cmd/hasura-ndc-go/command/testdata/basic/expected/functions.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/testdata/basic/expected/functions.go.tmpl rename to cmd/hasura-ndc-go/command/testdata/basic/expected/functions.go.tmpl diff --git a/cmd/hasura-ndc-go/testdata/basic/expected/schema.json b/cmd/hasura-ndc-go/command/testdata/basic/expected/schema.json similarity index 100% rename from cmd/hasura-ndc-go/testdata/basic/expected/schema.json rename to cmd/hasura-ndc-go/command/testdata/basic/expected/schema.json diff --git a/cmd/hasura-ndc-go/testdata/basic/source/connector.go b/cmd/hasura-ndc-go/command/testdata/basic/source/connector.go similarity index 100% rename from cmd/hasura-ndc-go/testdata/basic/source/connector.go rename to cmd/hasura-ndc-go/command/testdata/basic/source/connector.go diff --git a/cmd/hasura-ndc-go/testdata/basic/source/functions/comment.go b/cmd/hasura-ndc-go/command/testdata/basic/source/functions/comment.go similarity index 100% rename from cmd/hasura-ndc-go/testdata/basic/source/functions/comment.go rename to cmd/hasura-ndc-go/command/testdata/basic/source/functions/comment.go diff --git a/cmd/hasura-ndc-go/testdata/basic/source/functions/prefix.go b/cmd/hasura-ndc-go/command/testdata/basic/source/functions/prefix.go similarity index 100% rename from cmd/hasura-ndc-go/testdata/basic/source/functions/prefix.go rename to cmd/hasura-ndc-go/command/testdata/basic/source/functions/prefix.go diff --git a/cmd/hasura-ndc-go/testdata/basic/source/go.mod b/cmd/hasura-ndc-go/command/testdata/basic/source/go.mod similarity index 100% rename from cmd/hasura-ndc-go/testdata/basic/source/go.mod rename to cmd/hasura-ndc-go/command/testdata/basic/source/go.mod diff --git a/cmd/hasura-ndc-go/testdata/basic/source/go.sum b/cmd/hasura-ndc-go/command/testdata/basic/source/go.sum similarity index 100% rename from cmd/hasura-ndc-go/testdata/basic/source/go.sum rename to cmd/hasura-ndc-go/command/testdata/basic/source/go.sum diff --git a/cmd/hasura-ndc-go/testdata/basic/source/types/connector.go b/cmd/hasura-ndc-go/command/testdata/basic/source/types/connector.go similarity index 100% rename from cmd/hasura-ndc-go/testdata/basic/source/types/connector.go rename to cmd/hasura-ndc-go/command/testdata/basic/source/types/connector.go diff --git a/cmd/hasura-ndc-go/testdata/empty/expected/connector.go.tmpl b/cmd/hasura-ndc-go/command/testdata/empty/expected/connector.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/testdata/empty/expected/connector.go.tmpl rename to cmd/hasura-ndc-go/command/testdata/empty/expected/connector.go.tmpl diff --git a/cmd/hasura-ndc-go/testdata/empty/expected/schema.json b/cmd/hasura-ndc-go/command/testdata/empty/expected/schema.json similarity index 100% rename from cmd/hasura-ndc-go/testdata/empty/expected/schema.json rename to cmd/hasura-ndc-go/command/testdata/empty/expected/schema.json diff --git a/cmd/hasura-ndc-go/testdata/empty/source/connector.go b/cmd/hasura-ndc-go/command/testdata/empty/source/connector.go similarity index 100% rename from cmd/hasura-ndc-go/testdata/empty/source/connector.go rename to cmd/hasura-ndc-go/command/testdata/empty/source/connector.go diff --git a/cmd/hasura-ndc-go/testdata/empty/source/functions/.gitkeep b/cmd/hasura-ndc-go/command/testdata/empty/source/functions/.gitkeep similarity index 100% rename from cmd/hasura-ndc-go/testdata/empty/source/functions/.gitkeep rename to cmd/hasura-ndc-go/command/testdata/empty/source/functions/.gitkeep diff --git a/cmd/hasura-ndc-go/testdata/empty/source/go.mod b/cmd/hasura-ndc-go/command/testdata/empty/source/go.mod similarity index 100% rename from cmd/hasura-ndc-go/testdata/empty/source/go.mod rename to cmd/hasura-ndc-go/command/testdata/empty/source/go.mod diff --git a/cmd/hasura-ndc-go/testdata/empty/source/go.sum b/cmd/hasura-ndc-go/command/testdata/empty/source/go.sum similarity index 100% rename from cmd/hasura-ndc-go/testdata/empty/source/go.sum rename to cmd/hasura-ndc-go/command/testdata/empty/source/go.sum diff --git a/cmd/hasura-ndc-go/testdata/empty/source/types/connector.go b/cmd/hasura-ndc-go/command/testdata/empty/source/types/connector.go similarity index 100% rename from cmd/hasura-ndc-go/testdata/empty/source/types/connector.go rename to cmd/hasura-ndc-go/command/testdata/empty/source/types/connector.go diff --git a/cmd/hasura-ndc-go/testdata/subdir/expected/connector.go.tmpl b/cmd/hasura-ndc-go/command/testdata/subdir/expected/connector.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/testdata/subdir/expected/connector.go.tmpl rename to cmd/hasura-ndc-go/command/testdata/subdir/expected/connector.go.tmpl diff --git a/cmd/hasura-ndc-go/testdata/subdir/expected/functions.go.tmpl b/cmd/hasura-ndc-go/command/testdata/subdir/expected/functions.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/testdata/subdir/expected/functions.go.tmpl rename to cmd/hasura-ndc-go/command/testdata/subdir/expected/functions.go.tmpl diff --git a/cmd/hasura-ndc-go/testdata/subdir/expected/schema.json b/cmd/hasura-ndc-go/command/testdata/subdir/expected/schema.json similarity index 100% rename from cmd/hasura-ndc-go/testdata/subdir/expected/schema.json rename to cmd/hasura-ndc-go/command/testdata/subdir/expected/schema.json diff --git a/cmd/hasura-ndc-go/testdata/subdir/source/connector/connector.go b/cmd/hasura-ndc-go/command/testdata/subdir/source/connector/connector.go similarity index 100% rename from cmd/hasura-ndc-go/testdata/subdir/source/connector/connector.go rename to cmd/hasura-ndc-go/command/testdata/subdir/source/connector/connector.go diff --git a/cmd/hasura-ndc-go/testdata/subdir/source/connector/functions/comment.go b/cmd/hasura-ndc-go/command/testdata/subdir/source/connector/functions/comment.go similarity index 100% rename from cmd/hasura-ndc-go/testdata/subdir/source/connector/functions/comment.go rename to cmd/hasura-ndc-go/command/testdata/subdir/source/connector/functions/comment.go diff --git a/cmd/hasura-ndc-go/testdata/subdir/source/connector/types/connector.go b/cmd/hasura-ndc-go/command/testdata/subdir/source/connector/types/connector.go similarity index 100% rename from cmd/hasura-ndc-go/testdata/subdir/source/connector/types/connector.go rename to cmd/hasura-ndc-go/command/testdata/subdir/source/connector/types/connector.go diff --git a/cmd/hasura-ndc-go/testdata/subdir/source/go.mod b/cmd/hasura-ndc-go/command/testdata/subdir/source/go.mod similarity index 100% rename from cmd/hasura-ndc-go/testdata/subdir/source/go.mod rename to cmd/hasura-ndc-go/command/testdata/subdir/source/go.mod diff --git a/cmd/hasura-ndc-go/testdata/subdir/source/go.sum b/cmd/hasura-ndc-go/command/testdata/subdir/source/go.sum similarity index 100% rename from cmd/hasura-ndc-go/testdata/subdir/source/go.sum rename to cmd/hasura-ndc-go/command/testdata/subdir/source/go.sum diff --git a/cmd/hasura-ndc-go/command/update.go b/cmd/hasura-ndc-go/command/update.go new file mode 100644 index 0000000..30aa971 --- /dev/null +++ b/cmd/hasura-ndc-go/command/update.go @@ -0,0 +1,39 @@ +package command + +import ( + "os" + "time" + + "github.com/hasura/ndc-sdk-go/cmd/hasura-ndc-go/command/internal" + "github.com/rs/zerolog/log" +) + +// UpdateArguments represent input arguments of the `update` command +type UpdateArguments internal.ConnectorGenerationArguments + +// UpdateConnectorSchema updates connector schema +func UpdateConnectorSchema(args UpdateArguments, start time.Time) { + log.Info(). + Str("path", args.Path). + Str("connector_dir", args.ConnectorDir). + Str("package_types", args.PackageTypes). + Msg("generating connector schema...") + + moduleName, err := getModuleName(args.Path) + if err != nil { + log.Fatal().Err(err).Msg("failed to get module name. The base path must contain a go.mod file") + } + + if err := os.Chdir(args.Path); err != nil { + log.Fatal().Err(err).Msg("") + } + + if err = internal.ParseAndGenerateConnector(internal.ConnectorGenerationArguments(args), moduleName); err != nil { + log.Fatal().Err(err).Msg("failed to generate connector schema") + } + if err := execGoFormat("."); err != nil { + log.Fatal().Err(err).Msg("failed to format code") + } + log.Info().Str("exec_time", time.Since(start).Round(time.Millisecond).String()). + Msg("generated successfully") +} diff --git a/cmd/hasura-ndc-go/constant.go b/cmd/hasura-ndc-go/constant.go deleted file mode 100644 index cb12ad0..0000000 --- a/cmd/hasura-ndc-go/constant.go +++ /dev/null @@ -1,47 +0,0 @@ -package main - -import "regexp" - -const ( - connectorOutputFile = "connector.generated.go" - schemaOutputFile = "schema.generated.json" - typeMethodsOutputFile = "types.generated.go" -) - -type nativeScalarPackageConfig struct { - PackageName string - Pattern *regexp.Regexp -} - -var fieldNameRegex = regexp.MustCompile(`[^\w]`) - -var nativeScalarPackages map[string]nativeScalarPackageConfig = map[string]nativeScalarPackageConfig{ - "scalar": { - PackageName: "github.com/hasura/ndc-sdk-go/scalar", - Pattern: regexp.MustCompile(`^(\[\]|\*)*github\.com\/hasura\/ndc-sdk-go\/scalar\.`), - }, - "json": { - PackageName: "encoding/json", - Pattern: regexp.MustCompile(`^(\[\]|\*)*encoding\/json\.`), - }, - "uuid": { - PackageName: "github.com/google/uuid", - Pattern: regexp.MustCompile(`^(\[\]|\*)*github\.com\/google\/uuid\.`), - }, - "time": { - PackageName: "time", - Pattern: regexp.MustCompile(`^(\[\]|\*)*time\.`), - }, -} - -const textBlockErrorCheck = ` - if err != nil { - return err - } -` - -const textBlockErrorCheck2 = ` - if err != nil { - return nil, err - } -` diff --git a/cmd/hasura-ndc-go/main.go b/cmd/hasura-ndc-go/main.go index 8d435ed..38db020 100644 --- a/cmd/hasura-ndc-go/main.go +++ b/cmd/hasura-ndc-go/main.go @@ -13,30 +13,13 @@ import ( "github.com/rs/zerolog/log" ) -// UpdateArguments represent input arguments of the `update` command -type UpdateArguments struct { - Path string `help:"The path of the root directory where the go.mod file is present" short:"p" env:"HASURA_PLUGIN_CONNECTOR_CONTEXT_PATH" default:"."` - ConnectorDir string `help:"The directory where the connector.go file is placed" default:"."` - PackageTypes string `help:"The name of types package where the State struct is in"` - Directories []string `help:"Folders contain NDC operation functions" short:"d"` - Trace string `help:"Enable tracing and write to target file path."` -} - -type NewArguments struct { - Name string `help:"Name of the connector." short:"n" required:""` - Module string `help:"Module name of the connector" short:"m" required:""` - Version string `help:"The version of ndc-sdk-go."` - Output string `help:"The location where source codes will be generated" short:"o" default:""` -} - var cli struct { - LogLevel string `help:"Log level." enum:"debug,info,warn,error,DEBUG,INFO,WARN,ERROR" env:"HASURA_PLUGIN_LOG_LEVEL" default:"info"` - New NewArguments `cmd:"" help:"Initialize an NDC connector boilerplate. For example:\n hasura-ndc-go new -n example -m github.com/foo/example"` - Update UpdateArguments `cmd:"" help:"Generate schema and implementation for the connector from functions."` - Generate UpdateArguments `cmd:"" help:"(deprecated) The alias of the 'update' command."` - Test struct { + LogLevel string `help:"Log level." enum:"debug,info,warn,error,DEBUG,INFO,WARN,ERROR" env:"HASURA_PLUGIN_LOG_LEVEL" default:"info"` + New command.NewArguments `cmd:"" help:"Initialize an NDC connector boilerplate. For example:\n hasura-ndc-go new -n example -m github.com/foo/example"` + Update command.UpdateArguments `cmd:"" help:"Generate schema and implementation for the connector from functions."` + Generate struct { Snapshots command.GenTestSnapshotArguments `cmd:"" help:"Generate test snapshots."` - } `cmd:"" help:"Test helpers."` + } `cmd:"" help:"Generator helpers."` Version struct{} `cmd:"" help:"Print the CLI version."` } @@ -59,23 +42,21 @@ func main() { Str("version", cli.New.Version). Msg("generating the NDC boilerplate...") - if err := generateNewProject(&cli.New, false); err != nil { + if err := command.GenerateNewProject(&cli.New, false); err != nil { log.Fatal().Err(err).Msg("failed to generate new project") } log.Info().Str("exec_time", time.Since(start).Round(time.Second).String()). Msg("generated successfully") case "update": - execUpdate(&cli.Update, start) - case "generate": - execUpdate(&cli.Generate, start) - case "test snapshots": + command.UpdateConnectorSchema(cli.Update, start) + case "generate snapshots": log.Info(). - Str("endpoint", cli.Test.Snapshots.Endpoint). - Str("path", cli.Test.Snapshots.Schema). - Interface("dir", cli.Test.Snapshots.Dir). + Str("endpoint", cli.Generate.Snapshots.Endpoint). + Str("path", cli.Generate.Snapshots.Schema). + Interface("dir", cli.Generate.Snapshots.Dir). Msg("generating test snapshots...") - if err := command.GenTestSnapshots(&cli.Test.Snapshots); err != nil { + if err := command.GenTestSnapshots(&cli.Generate.Snapshots); err != nil { log.Fatal().Err(err).Msg("failed to generate test snapshots") } case "version": @@ -85,32 +66,6 @@ func main() { } } -func execUpdate(args *UpdateArguments, start time.Time) { - log.Info(). - Str("path", args.Path). - Str("connector_dir", args.ConnectorDir). - Str("package_types", args.PackageTypes). - Msg("generating connector schema...") - - moduleName, err := getModuleName(args.Path) - if err != nil { - log.Fatal().Err(err).Msg("failed to get module name. The base path must contain a go.mod file") - } - - if err := os.Chdir(args.Path); err != nil { - log.Fatal().Err(err).Msg("") - } - - if err = parseAndGenerateConnector(args, moduleName); err != nil { - log.Fatal().Err(err).Msg("failed to generate connector schema") - } - if err := execGoFormat("."); err != nil { - log.Fatal().Err(err).Msg("failed to format code") - } - log.Info().Str("exec_time", time.Since(start).Round(time.Millisecond).String()). - Msg("generated successfully") -} - func setupGlobalLogger(level string) { logLevel, err := zerolog.ParseLevel(strings.ToLower(level)) if err != nil { From 2123ee0111e02bc22d2df71492cc267d3187fe30 Mon Sep 17 00:00:00 2001 From: Toan Nguyen Date: Sun, 15 Sep 2024 12:29:41 +0700 Subject: [PATCH 2/3] remove unused codes --- cmd/hasura-ndc-go/command/internal/connector_test.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cmd/hasura-ndc-go/command/internal/connector_test.go b/cmd/hasura-ndc-go/command/internal/connector_test.go index af8e0d6..eb05016 100644 --- a/cmd/hasura-ndc-go/command/internal/connector_test.go +++ b/cmd/hasura-ndc-go/command/internal/connector_test.go @@ -133,12 +133,6 @@ func TestConnectorGeneration(t *testing.T) { assert.NoError(t, err) } } - - // generate test cases - // assert.NoError(t, command.GenTestSnapshots(&command.GenTestSnapshotArguments{ - // Dir: "testdata", - // Schema: path.Join("source", tc.ConnectorDir, "schema.generated.json"), - // })) }) } } From 3fb62de9863e415cb800431ba9a0d322e13c42a0 Mon Sep 17 00:00:00 2001 From: Toan Nguyen Date: Sun, 15 Sep 2024 15:15:05 +0700 Subject: [PATCH 3/3] fix unit tests --- .github/workflows/test.yaml | 1 + Makefile | 14 +++++------ .../command/internal/connector.go | 1 - .../command/internal/connector_test.go | 13 +++++------ .../{ => internal}/testdata/.gitignore | 0 .../testdata/basic/expected/connector.go.tmpl | 0 .../testdata/basic/expected/functions.go.tmpl | 0 .../testdata/basic/expected/schema.json | 0 .../testdata/basic/source/connector.go | 0 .../basic/source/functions/comment.go | 0 .../testdata/basic/source/functions/prefix.go | 0 .../testdata/basic/source/go.mod | 6 ++--- .../testdata/basic/source/go.sum | 0 .../testdata/basic/source/types/connector.go | 0 .../testdata/empty/expected/connector.go.tmpl | 0 .../testdata/empty/expected/schema.json | 0 .../testdata/empty/source/connector.go | 0 .../testdata/empty/source/functions/.gitkeep | 0 .../testdata/empty/source/go.mod | 10 ++++---- .../testdata/empty/source/go.sum | 0 .../testdata/empty/source/types/connector.go | 0 .../subdir/expected/connector.go.tmpl | 0 .../subdir/expected/functions.go.tmpl | 0 .../testdata/subdir/expected/schema.json | 0 .../subdir/source/connector/connector.go | 0 .../source/connector/functions/comment.go | 0 .../source/connector/types/connector.go | 0 .../testdata/subdir/source/go.mod | 6 ++--- .../testdata/subdir/source/go.sum | 0 .../command/snapshots_gen_test.go | 23 +++++++++++++++---- go.work.testing | 9 ++++++++ 31 files changed, 54 insertions(+), 29 deletions(-) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/.gitignore (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/basic/expected/connector.go.tmpl (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/basic/expected/functions.go.tmpl (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/basic/expected/schema.json (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/basic/source/connector.go (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/basic/source/functions/comment.go (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/basic/source/functions/prefix.go (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/basic/source/go.mod (92%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/basic/source/go.sum (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/basic/source/types/connector.go (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/empty/expected/connector.go.tmpl (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/empty/expected/schema.json (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/empty/source/connector.go (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/empty/source/functions/.gitkeep (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/empty/source/go.mod (90%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/empty/source/go.sum (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/empty/source/types/connector.go (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/subdir/expected/connector.go.tmpl (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/subdir/expected/functions.go.tmpl (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/subdir/expected/schema.json (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/subdir/source/connector/connector.go (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/subdir/source/connector/functions/comment.go (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/subdir/source/connector/types/connector.go (100%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/subdir/source/go.mod (67%) rename cmd/hasura-ndc-go/command/{ => internal}/testdata/subdir/source/go.sum (100%) create mode 100644 go.work.testing diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 98e8d85..a5a33f8 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -41,6 +41,7 @@ jobs: skip-cache: true - name: Run Go unit tests for the SDK run: | + cp go.work.testing go.work rm cmd/hasura-ndc-go/go.mod rm cmd/hasura-ndc-go/go.sum go mod tidy diff --git a/Makefile b/Makefile index b54fc23..1c1bb3c 100644 --- a/Makefile +++ b/Makefile @@ -32,8 +32,8 @@ test: test-sdk test-hasura-ndc-go test-example-codegen go-tidy: go mod tidy cd $(ROOT_DIR)/cmd/hasura-ndc-go && go mod tidy - cd $(ROOT_DIR)/cmd/hasura-ndc-go/command/testdata/basic/source && go mod tidy - cd $(ROOT_DIR)/cmd/hasura-ndc-go/command/testdata/empty/source && go mod tidy + cd $(ROOT_DIR)/cmd/hasura-ndc-go/command/internal/testdata/basic/source && go mod tidy + cd $(ROOT_DIR)/cmd/hasura-ndc-go/command/internal/testdata/empty/source && go mod tidy cd $(ROOT_DIR)/example/codegen && go mod tidy # Install golangci-lint tool to run lint locally @@ -46,11 +46,11 @@ lint: .PHONY: clean clean: rm -rf "$(OUTPUT_DIR)" - rm -f cmd/hasura-ndc-go/testdata/*/source/connector.generated.go - rm -f cmd/hasura-ndc-go/testdata/*/source/**/connector.generated.go - rm -f cmd/hasura-ndc-go/testdata/*/source/schema.generated.json - rm -f cmd/hasura-ndc-go/testdata/*/source/**/schema.generated.json - rm -f cmd/hasura-ndc-go/testdata/*/source/**/types.generated.go + rm -f cmd/hasura-ndc-go/command/internal/testdata/*/source/connector.generated.go + rm -f cmd/hasura-ndc-go/command/internal/testdata/*/source/**/connector.generated.go + rm -f cmd/hasura-ndc-go/command/internal/testdata/*/source/schema.generated.json + rm -f cmd/hasura-ndc-go/command/internal/testdata/*/source/**/schema.generated.json + rm -f cmd/hasura-ndc-go/command/internal/testdata/*/source/**/types.generated.go rm -rf cmd/hasura-ndc-go/testdata/**/testdata .PHONY: build-codegen diff --git a/cmd/hasura-ndc-go/command/internal/connector.go b/cmd/hasura-ndc-go/command/internal/connector.go index 6f9da65..6d85ee9 100644 --- a/cmd/hasura-ndc-go/command/internal/connector.go +++ b/cmd/hasura-ndc-go/command/internal/connector.go @@ -3,7 +3,6 @@ package internal import ( "bufio" "context" - _ "embed" "encoding/json" "fmt" "io" diff --git a/cmd/hasura-ndc-go/command/internal/connector_test.go b/cmd/hasura-ndc-go/command/internal/connector_test.go index eb05016..b0d21be 100644 --- a/cmd/hasura-ndc-go/command/internal/connector_test.go +++ b/cmd/hasura-ndc-go/command/internal/connector_test.go @@ -35,26 +35,26 @@ func TestConnectorGeneration(t *testing.T) { }{ { Name: "basic", - BasePath: "../testdata/basic", + BasePath: "./testdata/basic", ModuleName: "github.com/hasura/ndc-codegen-test", Directories: []string{"functions"}, }, { Name: "empty", - BasePath: "../testdata/empty", + BasePath: "./testdata/empty", ModuleName: "github.com/hasura/ndc-codegen-empty-test", Directories: []string{"functions"}, }, { Name: "subdir", - BasePath: "../testdata/subdir", + BasePath: "./testdata/subdir", ConnectorDir: "connector", ModuleName: "github.com/hasura/ndc-codegen-subdir-test", Directories: []string{"connector/functions"}, }, { Name: "subdir_package_types", - BasePath: "../testdata/subdir", + BasePath: "./testdata/subdir", ConnectorDir: "connector", ModuleName: "github.com/hasura/ndc-codegen-subdir-test", PackageTypes: "connector/types", @@ -62,7 +62,7 @@ func TestConnectorGeneration(t *testing.T) { }, { Name: "subdir_package_types_absolute", - BasePath: "../testdata/subdir", + BasePath: "./testdata/subdir", ConnectorDir: "connector", ModuleName: "github.com/hasura/ndc-codegen-subdir-test", PackageTypes: "github.com/hasura/ndc-codegen-subdir-test/connector/types", @@ -70,7 +70,7 @@ func TestConnectorGeneration(t *testing.T) { }, { Name: "invalid_types_package", - BasePath: "../testdata/subdir", + BasePath: "./testdata/subdir", ModuleName: "github.com/hasura/ndc-codegen-subdir-test", Directories: []string{"connector/functions"}, errorMsg: "the `types` package where the State struct is in must be placed in root or connector directory", @@ -90,7 +90,6 @@ func TestConnectorGeneration(t *testing.T) { srcDir := path.Join(tc.BasePath, "source") assert.NoError(t, os.Chdir(srcDir)) - err = ParseAndGenerateConnector(ConnectorGenerationArguments{ ConnectorDir: tc.ConnectorDir, PackageTypes: tc.PackageTypes, diff --git a/cmd/hasura-ndc-go/command/testdata/.gitignore b/cmd/hasura-ndc-go/command/internal/testdata/.gitignore similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/.gitignore rename to cmd/hasura-ndc-go/command/internal/testdata/.gitignore diff --git a/cmd/hasura-ndc-go/command/testdata/basic/expected/connector.go.tmpl b/cmd/hasura-ndc-go/command/internal/testdata/basic/expected/connector.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/basic/expected/connector.go.tmpl rename to cmd/hasura-ndc-go/command/internal/testdata/basic/expected/connector.go.tmpl diff --git a/cmd/hasura-ndc-go/command/testdata/basic/expected/functions.go.tmpl b/cmd/hasura-ndc-go/command/internal/testdata/basic/expected/functions.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/basic/expected/functions.go.tmpl rename to cmd/hasura-ndc-go/command/internal/testdata/basic/expected/functions.go.tmpl diff --git a/cmd/hasura-ndc-go/command/testdata/basic/expected/schema.json b/cmd/hasura-ndc-go/command/internal/testdata/basic/expected/schema.json similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/basic/expected/schema.json rename to cmd/hasura-ndc-go/command/internal/testdata/basic/expected/schema.json diff --git a/cmd/hasura-ndc-go/command/testdata/basic/source/connector.go b/cmd/hasura-ndc-go/command/internal/testdata/basic/source/connector.go similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/basic/source/connector.go rename to cmd/hasura-ndc-go/command/internal/testdata/basic/source/connector.go diff --git a/cmd/hasura-ndc-go/command/testdata/basic/source/functions/comment.go b/cmd/hasura-ndc-go/command/internal/testdata/basic/source/functions/comment.go similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/basic/source/functions/comment.go rename to cmd/hasura-ndc-go/command/internal/testdata/basic/source/functions/comment.go diff --git a/cmd/hasura-ndc-go/command/testdata/basic/source/functions/prefix.go b/cmd/hasura-ndc-go/command/internal/testdata/basic/source/functions/prefix.go similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/basic/source/functions/prefix.go rename to cmd/hasura-ndc-go/command/internal/testdata/basic/source/functions/prefix.go diff --git a/cmd/hasura-ndc-go/command/testdata/basic/source/go.mod b/cmd/hasura-ndc-go/command/internal/testdata/basic/source/go.mod similarity index 92% rename from cmd/hasura-ndc-go/command/testdata/basic/source/go.mod rename to cmd/hasura-ndc-go/command/internal/testdata/basic/source/go.mod index 2ca66b2..3196cdf 100644 --- a/cmd/hasura-ndc-go/command/testdata/basic/source/go.mod +++ b/cmd/hasura-ndc-go/command/internal/testdata/basic/source/go.mod @@ -5,6 +5,8 @@ go 1.21 require ( github.com/google/uuid v1.6.0 github.com/hasura/ndc-sdk-go v1.2.0 + go.opentelemetry.io/otel v1.28.0 + go.opentelemetry.io/otel/trace v1.28.0 ) require ( @@ -23,7 +25,6 @@ require ( github.com/prometheus/common v0.59.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.28.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect @@ -33,7 +34,6 @@ require ( go.opentelemetry.io/otel/metric v1.28.0 // indirect go.opentelemetry.io/otel/sdk v1.28.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect golang.org/x/net v0.29.0 // indirect golang.org/x/sys v0.25.0 // indirect @@ -44,4 +44,4 @@ require ( google.golang.org/protobuf v1.34.2 // indirect ) -replace github.com/hasura/ndc-sdk-go => ../../../../../ +replace github.com/hasura/ndc-sdk-go => ../../../../../../../ diff --git a/cmd/hasura-ndc-go/command/testdata/basic/source/go.sum b/cmd/hasura-ndc-go/command/internal/testdata/basic/source/go.sum similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/basic/source/go.sum rename to cmd/hasura-ndc-go/command/internal/testdata/basic/source/go.sum diff --git a/cmd/hasura-ndc-go/command/testdata/basic/source/types/connector.go b/cmd/hasura-ndc-go/command/internal/testdata/basic/source/types/connector.go similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/basic/source/types/connector.go rename to cmd/hasura-ndc-go/command/internal/testdata/basic/source/types/connector.go diff --git a/cmd/hasura-ndc-go/command/testdata/empty/expected/connector.go.tmpl b/cmd/hasura-ndc-go/command/internal/testdata/empty/expected/connector.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/empty/expected/connector.go.tmpl rename to cmd/hasura-ndc-go/command/internal/testdata/empty/expected/connector.go.tmpl diff --git a/cmd/hasura-ndc-go/command/testdata/empty/expected/schema.json b/cmd/hasura-ndc-go/command/internal/testdata/empty/expected/schema.json similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/empty/expected/schema.json rename to cmd/hasura-ndc-go/command/internal/testdata/empty/expected/schema.json diff --git a/cmd/hasura-ndc-go/command/testdata/empty/source/connector.go b/cmd/hasura-ndc-go/command/internal/testdata/empty/source/connector.go similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/empty/source/connector.go rename to cmd/hasura-ndc-go/command/internal/testdata/empty/source/connector.go diff --git a/cmd/hasura-ndc-go/command/testdata/empty/source/functions/.gitkeep b/cmd/hasura-ndc-go/command/internal/testdata/empty/source/functions/.gitkeep similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/empty/source/functions/.gitkeep rename to cmd/hasura-ndc-go/command/internal/testdata/empty/source/functions/.gitkeep diff --git a/cmd/hasura-ndc-go/command/testdata/empty/source/go.mod b/cmd/hasura-ndc-go/command/internal/testdata/empty/source/go.mod similarity index 90% rename from cmd/hasura-ndc-go/command/testdata/empty/source/go.mod rename to cmd/hasura-ndc-go/command/internal/testdata/empty/source/go.mod index b1b3438..64f098e 100644 --- a/cmd/hasura-ndc-go/command/testdata/empty/source/go.mod +++ b/cmd/hasura-ndc-go/command/internal/testdata/empty/source/go.mod @@ -2,7 +2,11 @@ module github.com/hasura/ndc-codegen-empty-test go 1.21 -require github.com/hasura/ndc-sdk-go v1.2.0 +require ( + github.com/hasura/ndc-sdk-go v1.3.1 + go.opentelemetry.io/otel v1.28.0 + go.opentelemetry.io/otel/trace v1.28.0 +) require ( github.com/alecthomas/kong v1.2.1 // indirect @@ -21,7 +25,6 @@ require ( github.com/prometheus/common v0.59.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.28.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect @@ -31,7 +34,6 @@ require ( go.opentelemetry.io/otel/metric v1.28.0 // indirect go.opentelemetry.io/otel/sdk v1.28.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect golang.org/x/net v0.29.0 // indirect golang.org/x/sys v0.25.0 // indirect @@ -42,4 +44,4 @@ require ( google.golang.org/protobuf v1.34.2 // indirect ) -replace github.com/hasura/ndc-sdk-go => ../../../../../ +replace github.com/hasura/ndc-sdk-go => ../../../../../../../ diff --git a/cmd/hasura-ndc-go/command/testdata/empty/source/go.sum b/cmd/hasura-ndc-go/command/internal/testdata/empty/source/go.sum similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/empty/source/go.sum rename to cmd/hasura-ndc-go/command/internal/testdata/empty/source/go.sum diff --git a/cmd/hasura-ndc-go/command/testdata/empty/source/types/connector.go b/cmd/hasura-ndc-go/command/internal/testdata/empty/source/types/connector.go similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/empty/source/types/connector.go rename to cmd/hasura-ndc-go/command/internal/testdata/empty/source/types/connector.go diff --git a/cmd/hasura-ndc-go/command/testdata/subdir/expected/connector.go.tmpl b/cmd/hasura-ndc-go/command/internal/testdata/subdir/expected/connector.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/subdir/expected/connector.go.tmpl rename to cmd/hasura-ndc-go/command/internal/testdata/subdir/expected/connector.go.tmpl diff --git a/cmd/hasura-ndc-go/command/testdata/subdir/expected/functions.go.tmpl b/cmd/hasura-ndc-go/command/internal/testdata/subdir/expected/functions.go.tmpl similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/subdir/expected/functions.go.tmpl rename to cmd/hasura-ndc-go/command/internal/testdata/subdir/expected/functions.go.tmpl diff --git a/cmd/hasura-ndc-go/command/testdata/subdir/expected/schema.json b/cmd/hasura-ndc-go/command/internal/testdata/subdir/expected/schema.json similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/subdir/expected/schema.json rename to cmd/hasura-ndc-go/command/internal/testdata/subdir/expected/schema.json diff --git a/cmd/hasura-ndc-go/command/testdata/subdir/source/connector/connector.go b/cmd/hasura-ndc-go/command/internal/testdata/subdir/source/connector/connector.go similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/subdir/source/connector/connector.go rename to cmd/hasura-ndc-go/command/internal/testdata/subdir/source/connector/connector.go diff --git a/cmd/hasura-ndc-go/command/testdata/subdir/source/connector/functions/comment.go b/cmd/hasura-ndc-go/command/internal/testdata/subdir/source/connector/functions/comment.go similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/subdir/source/connector/functions/comment.go rename to cmd/hasura-ndc-go/command/internal/testdata/subdir/source/connector/functions/comment.go diff --git a/cmd/hasura-ndc-go/command/testdata/subdir/source/connector/types/connector.go b/cmd/hasura-ndc-go/command/internal/testdata/subdir/source/connector/types/connector.go similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/subdir/source/connector/types/connector.go rename to cmd/hasura-ndc-go/command/internal/testdata/subdir/source/connector/types/connector.go diff --git a/cmd/hasura-ndc-go/command/testdata/subdir/source/go.mod b/cmd/hasura-ndc-go/command/internal/testdata/subdir/source/go.mod similarity index 67% rename from cmd/hasura-ndc-go/command/testdata/subdir/source/go.mod rename to cmd/hasura-ndc-go/command/internal/testdata/subdir/source/go.mod index 6861fb1..24f77fc 100644 --- a/cmd/hasura-ndc-go/command/testdata/subdir/source/go.mod +++ b/cmd/hasura-ndc-go/command/internal/testdata/subdir/source/go.mod @@ -3,12 +3,12 @@ module github.com/hasura/ndc-codegen-subdir-test go 1.21 require ( - github.com/hasura/ndc-sdk-go v1.2.5 + github.com/hasura/ndc-sdk-go v1.3.1 go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/trace v1.28.0 github.com/hasura/ndc-codegen-example v1.2.5 ) -replace github.com/hasura/ndc-sdk-go => ../../../../../ +replace github.com/hasura/ndc-sdk-go => ../../../../../../../ -replace github.com/hasura/ndc-codegen-example => ../../../../../example/codegen +replace github.com/hasura/ndc-codegen-example => ../../../../../../../example/codegen diff --git a/cmd/hasura-ndc-go/command/testdata/subdir/source/go.sum b/cmd/hasura-ndc-go/command/internal/testdata/subdir/source/go.sum similarity index 100% rename from cmd/hasura-ndc-go/command/testdata/subdir/source/go.sum rename to cmd/hasura-ndc-go/command/internal/testdata/subdir/source/go.sum diff --git a/cmd/hasura-ndc-go/command/snapshots_gen_test.go b/cmd/hasura-ndc-go/command/snapshots_gen_test.go index 5f42ae6..bdbe26e 100644 --- a/cmd/hasura-ndc-go/command/snapshots_gen_test.go +++ b/cmd/hasura-ndc-go/command/snapshots_gen_test.go @@ -1,16 +1,31 @@ -package command +package command_test import ( + _ "embed" + "net/http" + "net/http/httptest" "testing" + "github.com/hasura/ndc-sdk-go/cmd/hasura-ndc-go/command" "github.com/hasura/ndc-sdk-go/cmd/hasura-ndc-go/command/internal" "github.com/stretchr/testify/assert" ) +//go:embed testdata/snapshots/schema.json +var testSchema string + func TestGenTestSnapshots(t *testing.T) { - assert.NoError(t, GenTestSnapshots(&GenTestSnapshotArguments{ - Schema: "testdata/snapshots/schema.json", - Dir: "testdata/snapshots/generated", + tmpDir := t.TempDir() + mux := http.NewServeMux() + mux.HandleFunc("/schema", func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte(testSchema)) + }) + server := httptest.NewServer(mux) + defer server.Close() + + assert.NoError(t, command.GenTestSnapshots(&command.GenTestSnapshotArguments{ + Endpoint: server.URL, + Dir: tmpDir, Depth: 10, Strategy: internal.WriteFileStrategyOverride, })) diff --git a/go.work.testing b/go.work.testing new file mode 100644 index 0000000..862ec71 --- /dev/null +++ b/go.work.testing @@ -0,0 +1,9 @@ +go 1.21 + +use ( + . + example/codegen + cmd/hasura-ndc-go/command/internal/testdata/empty/source + cmd/hasura-ndc-go/command/internal/testdata/basic/source + cmd/hasura-ndc-go/command/internal/testdata/subdir/source +)