mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-15 17:31:56 +03:00
cli: fix migrate create
command behaviour when no data provided
closes https://github.com/hasura/graphql-engine/issues/7971 PR-URL: https://github.com/hasura/graphql-engine-mono/pull/3292 Co-authored-by: Aravind K P <8335904+scriptonist@users.noreply.github.com> GitOrigin-RevId: 4f7e38d649c1f414132d576d0f288ca8d3cdb53d
This commit is contained in:
parent
695164b176
commit
5723baaab4
@ -11,11 +11,11 @@
|
|||||||
(Add entries below in the order of server, console, cli, docs, others)
|
(Add entries below in the order of server, console, cli, docs, others)
|
||||||
|
|
||||||
- server: extend support for insert mutations to tables without primary key constraint in a MSSQL backend
|
- server: extend support for insert mutations to tables without primary key constraint in a MSSQL backend
|
||||||
- cli: migrate and seed subcommands has an option in prompt to choose and apply operation on all available databases
|
|
||||||
- server: fix parsing FLOAT64s in scientific notation and non-finite ones in BigQuery
|
- server: fix parsing FLOAT64s in scientific notation and non-finite ones in BigQuery
|
||||||
- server: extend support for the `min`/`max` aggregates to all comparable types in BigQuery
|
- server: extend support for the `min`/`max` aggregates to all comparable types in BigQuery
|
||||||
- cli: migrate and seed subcommands has an option in prompt to choose and apply operation on all available databases
|
- cli: migrate and seed subcommands has an option in prompt to choose and apply operation on all available databases
|
||||||
- cli: fix `metadata diff --type json | unified-json` behaving incorrectly and showing diff in YAML format.
|
- cli: fix `metadata diff --type json | unified-json` behaving incorrectly and showing diff in YAML format.
|
||||||
|
- cli: fix regression in `migrate create` command (#7971)
|
||||||
|
|
||||||
## v2.1.1
|
## v2.1.1
|
||||||
|
|
||||||
|
@ -28,9 +28,6 @@ const migrateCreateCmdExamples = ` # Setup migration files for the first time b
|
|||||||
# Take pg_dump of schema and hasura metadata from server while specifying the schemas to include
|
# Take pg_dump of schema and hasura metadata from server while specifying the schemas to include
|
||||||
hasura migrate create init --from-server --schema myschema1,myschema2
|
hasura migrate create init --from-server --schema myschema1,myschema2
|
||||||
|
|
||||||
# Take pg_dump from server and save it as a migration and specify the schemas to include
|
|
||||||
hasura migrate create init --sql-from-server --schema myschema1,myschema2
|
|
||||||
|
|
||||||
# Create up and down SQL migrations, providing contents as flags
|
# Create up and down SQL migrations, providing contents as flags
|
||||||
hasura migrate create migration-name --up-sql "CREATE TABLE article(id serial NOT NULL, title text NOT NULL, content text NOT NULL);" --down-sql "DROP TABLE article;"
|
hasura migrate create migration-name --up-sql "CREATE TABLE article(id serial NOT NULL, title text NOT NULL, content text NOT NULL);" --down-sql "DROP TABLE article;"
|
||||||
`
|
`
|
||||||
@ -43,7 +40,7 @@ func newMigrateCreateCmd(ec *cli.ExecutionContext) *cobra.Command {
|
|||||||
migrateCreateCmd := &cobra.Command{
|
migrateCreateCmd := &cobra.Command{
|
||||||
Use: "create [migration-name]",
|
Use: "create [migration-name]",
|
||||||
Short: "Create files required for a migration",
|
Short: "Create files required for a migration",
|
||||||
Long: "Create ``sql`` and ``yaml`` files required for a migration",
|
Long: "Create ``sql`` files required for a migration",
|
||||||
Example: migrateCreateCmdExamples,
|
Example: migrateCreateCmdExamples,
|
||||||
SilenceUsage: true,
|
SilenceUsage: true,
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
@ -72,19 +69,12 @@ func newMigrateCreateCmd(ec *cli.ExecutionContext) *cobra.Command {
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if cmd.Flags().Changed("metadata-from-file") && ec.Config.Version != cli.V1 {
|
|
||||||
return errors.New("metadata-from-file flag can be set only with config version 1")
|
|
||||||
}
|
|
||||||
|
|
||||||
if cmd.Flags().Changed("metadata-from-server") && ec.Config.Version != cli.V1 {
|
if opts.upSQLChanged && !opts.downSQLChanged {
|
||||||
return errors.New("metadata-from-server flag can be set only with config version 1")
|
|
||||||
}
|
|
||||||
|
|
||||||
if cmd.Flags().Changed("up-sql") && !cmd.Flags().Changed("down-sql") {
|
|
||||||
ec.Logger.Warn("you are creating an up migration without a down migration")
|
ec.Logger.Warn("you are creating an up migration without a down migration")
|
||||||
}
|
}
|
||||||
|
|
||||||
if cmd.Flags().Changed("down-sql") && !cmd.Flags().Changed("up-sql") {
|
if opts.downSQLChanged && !opts.upSQLChanged {
|
||||||
ec.Logger.Warn("you are creating a down migration without an up migration")
|
ec.Logger.Warn("you are creating a down migration without an up migration")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -107,6 +97,8 @@ func newMigrateCreateCmd(ec *cli.ExecutionContext) *cobra.Command {
|
|||||||
}
|
}
|
||||||
f := migrateCreateCmd.Flags()
|
f := migrateCreateCmd.Flags()
|
||||||
opts.flags = f
|
opts.flags = f
|
||||||
|
f.SortFlags = false
|
||||||
|
|
||||||
f.BoolVar(&opts.fromServer, "from-server", false, "take pg_dump of schema (default: public) and Hasura metadata from the server")
|
f.BoolVar(&opts.fromServer, "from-server", false, "take pg_dump of schema (default: public) and Hasura metadata from the server")
|
||||||
f.StringVar(&opts.sqlFile, "sql-from-file", "", "path to an SQL file which contains the SQL statements")
|
f.StringVar(&opts.sqlFile, "sql-from-file", "", "path to an SQL file which contains the SQL statements")
|
||||||
f.BoolVar(&opts.sqlServer, "sql-from-server", false, "take pg_dump from the server (default: public) and save it as a migration")
|
f.BoolVar(&opts.sqlServer, "sql-from-server", false, "take pg_dump from the server (default: public) and save it as a migration")
|
||||||
@ -116,6 +108,9 @@ func newMigrateCreateCmd(ec *cli.ExecutionContext) *cobra.Command {
|
|||||||
f.StringVar(&opts.upSQL, "up-sql", "", "sql string/query that is to be used to create an up migration")
|
f.StringVar(&opts.upSQL, "up-sql", "", "sql string/query that is to be used to create an up migration")
|
||||||
f.StringVar(&opts.downSQL, "down-sql", "", "sql string/query that is to be used to create a down migration")
|
f.StringVar(&opts.downSQL, "down-sql", "", "sql string/query that is to be used to create a down migration")
|
||||||
|
|
||||||
|
if err := f.MarkDeprecated("sql-from-server", "use --from-server instead"); err != nil {
|
||||||
|
ec.Logger.Debugf("marking flag --sql-from-server as depricatef failed: %v", err)
|
||||||
|
}
|
||||||
if err := migrateCreateCmd.MarkFlagFilename("sql-from-file", "sql"); err != nil {
|
if err := migrateCreateCmd.MarkFlagFilename("sql-from-file", "sql"); err != nil {
|
||||||
ec.Logger.WithError(err).Errorf("error while using a dependency library")
|
ec.Logger.WithError(err).Errorf("error while using a dependency library")
|
||||||
}
|
}
|
||||||
@ -197,10 +192,14 @@ func (o *migrateCreateOptions) run() (version int64, err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if o.sqlFile != "" && !o.sqlServer && o.EC.Config.Version != cli.V1 && o.upSQLChanged && o.downSQLChanged {
|
if o.sqlFile == "" && !o.sqlServer && o.EC.Config.Version != cli.V1 {
|
||||||
// Set empty data for [up|down].sql
|
// Set empty data for [up|down].sql
|
||||||
createOptions.SQLUp = []byte(``)
|
if !o.upSQLChanged {
|
||||||
createOptions.SQLDown = []byte(``)
|
createOptions.SQLUp = []byte(``)
|
||||||
|
}
|
||||||
|
if !o.downSQLChanged {
|
||||||
|
createOptions.SQLDown = []byte(``)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -64,6 +64,35 @@ var _ = Describe("hasura migrate create (config v3)", func() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("can create empty migrations when no data is provided", func() {
|
||||||
|
migrationName := "no_data_migration"
|
||||||
|
sourceName := randomdata.SillyName()
|
||||||
|
session := testutil.Hasura(testutil.CmdOpts{
|
||||||
|
Args: []string{
|
||||||
|
"migrate",
|
||||||
|
"create",
|
||||||
|
migrationName,
|
||||||
|
"--database-name", sourceName,
|
||||||
|
},
|
||||||
|
WorkingDirectory: projectDirectory,
|
||||||
|
})
|
||||||
|
wantKeywordList := []string{
|
||||||
|
"Migrations files created",
|
||||||
|
migrationName,
|
||||||
|
"version",
|
||||||
|
}
|
||||||
|
|
||||||
|
Eventually(session, timeout).Should(Exit(0))
|
||||||
|
for _, keyword := range wantKeywordList {
|
||||||
|
Expect(session.Err.Contents()).Should(ContainSubstring(keyword))
|
||||||
|
}
|
||||||
|
dirs, err := os.ReadDir(filepath.Join(projectDirectory, "migrations", sourceName))
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
for _, d := range dirs {
|
||||||
|
Expect(d.Name()).Should(ContainSubstring(migrationName))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
It("can create migrations for database that is not connected to server", func() {
|
It("can create migrations for database that is not connected to server", func() {
|
||||||
migrationName := "create_schema_testing"
|
migrationName := "create_schema_testing"
|
||||||
sourceName := randomdata.SillyName()
|
sourceName := randomdata.SillyName()
|
||||||
|
Loading…
Reference in New Issue
Block a user