hunk.code_window:       update_permissions:
         - comment: null
           permission:
             columns:
             - completed
  
hunk.labels: keep replace keep keep keep
hunk.after_edit:       - role: user
           comment: 
  
hunk.file_path: community/sample-apps/todo-auth0-jwt/hasura/migrations/1536761653464_init.up.yaml
hunk.type: replace
file: package commands
  
  import (
  	"github.com/hasura/graphql-engine/cli"
  	"github.com/pkg/errors"
  	"github.com/spf13/cobra"
  	"github.com/spf13/viper"
  )
  
  func newMetadataApplyCmd(ec *cli.ExecutionContext) *cobra.Command {
  	v := viper.New()
  	opts := &metadataApplyOptions{
  		EC:         ec,
  		actionType: "apply",
  	}
  
  	metadataApplyCmd := &cobra.Command{
  		Use:   "apply",
  		Short: "Apply Hasura metadata on a database",
  		Example: `  # Apply Hasura GraphQL Engine metadata present in metadata.[yaml|json] file:
    hasura metadata apply`,
  		SilenceUsage: true,
  		PreRunE: func(cmd *cobra.Command, args []string) error {
  			ec.Viper = v
  			return ec.Validate()
  		},
  		RunE: func(cmd *cobra.Command, args []string) error {
  			opts.EC.Spin("Applying metadata...")
  			err := opts.run()
  			opts.EC.Spinner.Stop()
  			if err != nil {
  				return errors.Wrap(err, "failed to apply metadata")
  			}
  			opts.EC.Logger.Info("Metadata applied")
  			return nil
  		},
  	}
  
  	f := metadataApplyCmd.Flags()
  	f.String("endpoint", "", "http(s) endpoint for Hasura GraphQL Engine")
  	f.String("admin-secret", "", "admin secret for Hasura GraphQL Engine")
  	f.String("access-key", "", "access key for Hasura GraphQL Engine")
  	f.MarkDeprecated("access-key", "use --admin-secret instead")
  
  	// need to create a new viper because https://github.com/spf13/viper/issues/233
  	v.BindPFlag("endpoint", f.Lookup("endpoint"))
  	v.BindPFlag("admin_secret", f.Lookup("admin-secret"))
  	v.BindPFlag("access_key", f.Lookup("access-key"))
  
  	return metadataApplyCmd
  }
  
  type metadataApplyOptions struct {
  	EC *cli.ExecutionContext
  
  	actionType string
  }
  
  func (o *metadataApplyOptions) run() error {
  	migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version)
  	if err != nil {
  		return err
  	}
  	return executeMetadata(o.actionType, migrateDrv, o.EC)
  }
  