这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

### Other changes

- cli: fix init command to generate correct config.yaml (close #4036)
- cli: fix command path not being set in telemetry data (close #4127)
- fix deploy script to upload github release assets
- cli: fix parse error returned on console api (close #4126)
Expand Down
49 changes: 45 additions & 4 deletions cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@
package cli

import (
"fmt"
"io/ioutil"
"net/url"
"os"
"path/filepath"
"strconv"
"strings"
"time"

Expand Down Expand Up @@ -59,6 +61,42 @@ const (
V2
)

// ErrInvalidConfigVersion - if the config version is not valid
var ErrInvalidConfigVersion error = fmt.Errorf("invalid config version")

// NewConfigVersionValue returns ConfigVersion set with default value
func NewConfigVersionValue(val ConfigVersion, p *ConfigVersion) *ConfigVersion {
*p = val
return p
}

// Set sets the value of the named command-line flag.
func (c *ConfigVersion) Set(s string) error {
v, err := strconv.ParseInt(s, 0, 64)
*c = ConfigVersion(v)
if err != nil {
return err
}
if !c.IsValid() {
return ErrInvalidConfigVersion
}
return nil
}

// Type returns a string that uniquely represents this flag's type.
func (c *ConfigVersion) Type() string {
return "int"
}

func (c *ConfigVersion) String() string {
return strconv.Itoa(int(*c))
}

// IsValid returns if its a valid config version
func (c ConfigVersion) IsValid() bool {
return c != 0 && c <= V2
}

// ServerConfig has the config values required to contact the server
type ServerConfig struct {
// Endpoint for the GraphQL Engine
Expand All @@ -84,17 +122,17 @@ func (s *ServerConfig) ParseEndpoint() error {
// Config represents configuration required for the CLI to function
type Config struct {
// Version of the config.
Version ConfigVersion `yaml:"version"`
Version ConfigVersion `yaml:"version,omitempty"`

// ServerConfig to be used by CLI to contact server.
ServerConfig `yaml:",inline"`

// MetadataDirectory defines the directory where the metadata files were stored.
MetadataDirectory string `yaml:"metadata_directory"`
MetadataDirectory string `yaml:"metadata_directory,omitempty"`
// MigrationsDirectory defines the directory where the migration files were stored.
MigrationsDirectory string `yaml:"migrations_directory,omitempty"`
// ActionConfig defines the config required to create or generate codegen for an action.
ActionConfig types.ActionExecutionConfig `yaml:"actions"`
ActionConfig *types.ActionExecutionConfig `yaml:"actions,omitempty"`
}

// ExecutionContext contains various contextual information required by the cli
Expand Down Expand Up @@ -427,7 +465,7 @@ func (ec *ExecutionContext) readConfig() error {
},
MetadataDirectory: v.GetString("metadata_directory"),
MigrationsDirectory: v.GetString("migrations_directory"),
ActionConfig: types.ActionExecutionConfig{
ActionConfig: &types.ActionExecutionConfig{
Kind: v.GetString("actions.kind"),
HandlerWebhookBaseURL: v.GetString("actions.handler_webhook_baseurl"),
Codegen: &types.CodegenExecutionConfig{
Expand All @@ -437,6 +475,9 @@ func (ec *ExecutionContext) readConfig() error {
},
},
}
if !ec.Config.Version.IsValid() {
return ErrInvalidConfigVersion
}
return ec.Config.ServerConfig.ParseEndpoint()
}

Expand Down
10 changes: 5 additions & 5 deletions cli/commands/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ func NewInitCmd(ec *cli.ExecutionContext) *cobra.Command {
}

f := initCmd.Flags()
f.StringVar(&opts.Version, "version", "2", "config version to be used")
f.Var(cli.NewConfigVersionValue(cli.V2, &opts.Version), "version", "config version to be used")
f.StringVar(&opts.InitDir, "directory", "", "name of directory where files will be created")
f.StringVar(&opts.MetadataDir, "metadata-directory", "metadata", "name of directory where metadata files will be created")
f.StringVar(&opts.Endpoint, "endpoint", "", "http(s) endpoint for Hasura GraphQL Engine")
Expand All @@ -83,7 +83,7 @@ func NewInitCmd(ec *cli.ExecutionContext) *cobra.Command {
type InitOptions struct {
EC *cli.ExecutionContext

Version string
Version cli.ConfigVersion
Endpoint string
AdminSecret string
InitDir string
Expand Down Expand Up @@ -163,20 +163,20 @@ func (o *InitOptions) createFiles() error {
}
// set config object
var config *cli.Config
if o.Version == "1" {
if o.Version == cli.V1 {
config = &cli.Config{
ServerConfig: cli.ServerConfig{
Endpoint: "http://localhost:8080",
},
}
} else {
config = &cli.Config{
Version: cli.V2,
Version: o.Version,
ServerConfig: cli.ServerConfig{
Endpoint: "http://localhost:8080",
},
MetadataDirectory: o.MetadataDir,
ActionConfig: types.ActionExecutionConfig{
ActionConfig: &types.ActionExecutionConfig{
Kind: o.ActionKind,
HandlerWebhookBaseURL: o.ActionHandler,
},
Expand Down
2 changes: 1 addition & 1 deletion cli/integration_test/v1/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func TestInitCmd(t *testing.T, ec *cli.ExecutionContext, initDir string) {
}{
{"only-init-dir", &commands.InitOptions{
EC: ec,
Version: "1",
Version: cli.V1,
Endpoint: os.Getenv("HASURA_GRAPHQL_TEST_ENDPOINT"),
AdminSecret: os.Getenv("HASURA_GRAPHQL_TEST_ADMIN_SECRET"),
InitDir: filepath.Join(os.TempDir(), "hasura-cli-test-"+strconv.Itoa(rand.Intn(1000))),
Expand Down
2 changes: 1 addition & 1 deletion cli/integration_test/v2/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func TestInitCmd(t *testing.T, ec *cli.ExecutionContext, initDir string) {
}{
{"only-init-dir", &commands.InitOptions{
EC: ec,
Version: "2",
Version: cli.V2,
Endpoint: os.Getenv("HASURA_GRAPHQL_TEST_ENDPOINT"),
AdminSecret: os.Getenv("HASURA_GRAPHQL_TEST_ADMIN_SECRET"),
InitDir: filepath.Join(os.TempDir(), "hasura-cli-test-"+strconv.Itoa(rand.Intn(1000))),
Expand Down
2 changes: 1 addition & 1 deletion cli/metadata/actions/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const (

type ActionConfig struct {
MetadataDir string
ActionConfig types.ActionExecutionConfig
ActionConfig *types.ActionExecutionConfig
serverFeatureFlags *version.ServerFeatureFlags
pluginsCfg *plugins.Config
cliExtensionConfig *cliextension.Config
Expand Down