Skip to content

Commit

Permalink
cli: fix cron triggers not being exported on a metadata export (close h…
Browse files Browse the repository at this point in the history
  • Loading branch information
scriptonist authored and stevefan1999-personal committed Sep 12, 2020
1 parent 23ff446 commit 31ce55e
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 1 deletion.
3 changes: 3 additions & 0 deletions cli/commands/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import (
"path/filepath"
"strings"

crontriggers "github.com/hasura/graphql-engine/cli/metadata/cron_triggers"

"github.com/hasura/graphql-engine/cli/metadata/actions"
"github.com/hasura/graphql-engine/cli/metadata/actions/types"
"github.com/hasura/graphql-engine/cli/metadata/allowlist"
Expand Down Expand Up @@ -251,6 +253,7 @@ func (o *InitOptions) createFiles() error {
plugins = append(plugins, allowlist.New(o.EC, o.EC.MetadataDir))
plugins = append(plugins, remoteschemas.New(o.EC, o.EC.MetadataDir))
plugins = append(plugins, actions.New(o.EC, o.EC.MetadataDir))
plugins = append(plugins, crontriggers.New(o.EC, o.EC.MetadataDir))
for _, plg := range plugins {
err := plg.CreateFiles()
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
100 changes: 100 additions & 0 deletions cli/metadata/cron_triggers/cron_triggers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package crontriggers

import (
"io/ioutil"
"path/filepath"

"github.com/hasura/graphql-engine/cli/version"

"github.com/hasura/graphql-engine/cli"
"github.com/sirupsen/logrus"
"gopkg.in/yaml.v2"
)

const (
fileName string = "cron_triggers.yaml"
metadataKey = "cron_triggers"
)

type CronTriggers struct {
MetadataDir string

logger *logrus.Logger
serverFeatureFlags *version.ServerFeatureFlags
}

func New(ec *cli.ExecutionContext, baseDir string) *CronTriggers {
return &CronTriggers{
MetadataDir: baseDir,
logger: ec.Logger,
serverFeatureFlags: ec.Version.ServerFeatureFlags,
}
}

func (c *CronTriggers) Validate() error {
return nil
}

func (c *CronTriggers) CreateFiles() error {
v := make([]interface{}, 0)
data, err := yaml.Marshal(v)
if err != nil {
return err
}
err = ioutil.WriteFile(filepath.Join(c.MetadataDir, fileName), data, 0644)
if err != nil {
return err
}
return nil
}

func (c *CronTriggers) Build(metadata *yaml.MapSlice) error {
if !c.serverFeatureFlags.HasCronTriggers {
c.logger.WithField("metadata_plugin", "cron_triggers").Warnf("Skipping building %s", fileName)
return nil
}
data, err := ioutil.ReadFile(filepath.Join(c.MetadataDir, fileName))
if err != nil {
return err
}

item := yaml.MapItem{
Key: metadataKey,
Value: []yaml.MapSlice{},
}
err = yaml.Unmarshal(data, &item.Value)
if err != nil {
return err
}
*metadata = append(*metadata, item)
return nil
}

func (c *CronTriggers) Export(metadata yaml.MapSlice) (map[string][]byte, error) {
if !c.serverFeatureFlags.HasCronTriggers {
c.logger.Debugf("Skipping creating %s", fileName)
return make(map[string][]byte), nil
}
var cronTriggers interface{}
for _, item := range metadata {
k, ok := item.Key.(string)
if !ok || k != metadataKey {
continue
}
cronTriggers = item.Value
}
if cronTriggers == nil {
cronTriggers = make([]interface{}, 0)
}
data, err := yaml.Marshal(cronTriggers)
if err != nil {
return nil, err
}
return map[string][]byte{
filepath.Join(c.MetadataDir, fileName): data,
}, nil
}

func (c *CronTriggers) Name() string {
return metadataKey
}
3 changes: 3 additions & 0 deletions cli/migrate/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import (
"strings"
"time"

crontriggers "github.com/hasura/graphql-engine/cli/metadata/cron_triggers"

"github.com/hasura/graphql-engine/cli/metadata"
"github.com/hasura/graphql-engine/cli/metadata/actions"
"github.com/hasura/graphql-engine/cli/metadata/allowlist"
Expand Down Expand Up @@ -172,6 +174,7 @@ func SetMetadataPluginsWithDir(ec *cli.ExecutionContext, drv *Migrate, dir ...st
plugins = append(plugins, allowlist.New(ec, metadataDir))
plugins = append(plugins, remoteschemas.New(ec, metadataDir))
plugins = append(plugins, actions.New(ec, metadataDir))
plugins = append(plugins, crontriggers.New(ec, metadataDir))
} else {
plugins = append(plugins, metadata.New(ec, ec.MigrationDir))
}
Expand Down
12 changes: 11 additions & 1 deletion cli/version/feature_flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ import (
type ServerFeatureFlags struct {
HasAccessKey bool

HasAction bool
HasAction bool
HasCronTriggers bool
}

const adminSecretVersion = "v1.0.0-alpha38"
const actionVersion = "v1.2.0-beta.1"
const cronTriggersVersion = "v1.3.0-beta.1"

// GetServerFeatureFlags returns the feature flags for server.
func (v *Version) GetServerFeatureFlags() error {
Expand All @@ -38,6 +40,14 @@ func (v *Version) GetServerFeatureFlags() error {
}
// check the current version with the constraint
flags.HasAction = actionConstraint.Check(v.ServerSemver)

// cronTriggers Constraint
cronTriggersConstraint, err := semver.NewConstraint(">= " + cronTriggersVersion)
if err != nil {
return errors.Wrap(err, "building cron triggers constraint failed")
}
// check the current version with the constraint
flags.HasCronTriggers = cronTriggersConstraint.Check(v.ServerSemver)
}
v.ServerFeatureFlags = flags
return nil
Expand Down
1 change: 1 addition & 0 deletions scripts/cli-migrations/v2/test/metadata/cron_triggers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]

0 comments on commit 31ce55e

Please sign in to comment.