Skip to content

Commit

Permalink
add cli-generator connection
Browse files Browse the repository at this point in the history
  • Loading branch information
henriqueleite42 committed Aug 31, 2024
1 parent cbbe111 commit 3b22375
Show file tree
Hide file tree
Showing 35 changed files with 215 additions and 66 deletions.
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"anvilconfig",
"anvp",
"Henrique",
"henriqueleite",
"Leite",
"proto",
"Protofile",
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Anvil plugins:

## Examples

[See the examples here.](https://github.com/henriqueleite42/anvil/tree/master/examples)
[See the examples here.](https://github.com/henriqueleite42/anvil/cli/tree/master/examples)

## How it works

Expand Down
2 changes: 2 additions & 0 deletions cli/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
build:
go build -C . -o ./bin
44 changes: 37 additions & 7 deletions cli/cmd/build.go
Original file line number Diff line number Diff line change
@@ -1,31 +1,61 @@
package cmd

import (
"encoding/json"
"log"
"os"
"os/exec"

"github.com/anvil/anvil/internal/files"
"github.com/anvil/anvil/internal/parser_anv"
"github.com/henriqueleite42/anvil/cli/internal/files"
"github.com/henriqueleite42/anvil/cli/internal/parser_anv"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

func addBuildCommand(rootCmd *cobra.Command) {
parseCmd := &cobra.Command{
buildCmd := &cobra.Command{
Use: "build",
Short: "Build the file to check for errors",
Run: func(cmd *cobra.Command, args []string) {
schemaFile := cmd.Flag("schema").Value.String()

schema, err := parser_anv.ParseAnvToAnvp(schemaFile)
if err != nil {
log.Fatal(err)
}

err = files.WriteFile(schema)
err = files.WriteAnvpFile(schema, schemaFile)
if err != nil {
log.Fatal(err)
}

json, err := json.Marshal(schema)
if err != nil {
log.Fatal(err)
}
jsonString := string(json)

var silentFlag string
if silent {
silentFlag = "--silent"
}

for _, v := range generators {
generatorCmd := exec.Command(v, jsonString, silentFlag)
generatorCmd.Stdout = os.Stdout
generatorCmd.Stderr = os.Stderr
err = generatorCmd.Run()
if err != nil {
log.Fatal(err)
}
}
},
}

rootCmd.AddCommand(parseCmd)
buildCmd.PersistentFlags().BoolVar(&silent, "silent", false, "if it should have an effect or only run it silently")
viper.BindPFlag("silent", rootCmd.PersistentFlags().Lookup("silent"))

buildCmd.PersistentFlags().StringArrayVar(&generators, "generators", []string{}, "generator to be used, can be passed more than once")
buildCmd.MarkPersistentFlagRequired("generators")
viper.BindPFlag("generators", rootCmd.PersistentFlags().Lookup("generators"))

rootCmd.AddCommand(buildCmd)
}
7 changes: 4 additions & 3 deletions cli/cmd/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import (

var (
schemaFile string // Used for flags.
silent bool
generators []string

rootCmd = &cobra.Command{
Use: "anvil",
Expand All @@ -29,6 +31,7 @@ func init() {
cobra.OnInitialize(initConfig)

rootCmd.PersistentFlags().StringVar(&schemaFile, "schema", "", "config file")
rootCmd.MarkPersistentFlagRequired("schema")
viper.BindPFlag("schema", rootCmd.PersistentFlags().Lookup("schema"))

addVersionCommand(rootCmd)
Expand All @@ -37,11 +40,9 @@ func init() {
}

func initConfig() {
viper.SetConfigFile(schemaFile)

viper.AutomaticEnv()

if err := viper.ReadInConfig(); err == nil {
fmt.Println("Using schema file:", viper.ConfigFileUsed())
fmt.Println("Using config file:", viper.ConfigFileUsed())
}
}
16 changes: 11 additions & 5 deletions cli/cmd/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,35 @@ package cmd
import (
"log"

"github.com/anvil/anvil/internal/files"
"github.com/anvil/anvil/internal/parser_anv"
"github.com/henriqueleite42/anvil/cli/internal/files"
"github.com/henriqueleite42/anvil/cli/internal/parser_anv"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

func addParseCommand(rootCmd *cobra.Command) {
parseCmd := &cobra.Command{
Use: "parse",
Short: "Parse the file to create the formatted version",
Run: func(cmd *cobra.Command, args []string) {
schemaFile := cmd.Flag("schema").Value.String()

schema, err := parser_anv.ParseAnvToAnvp(schemaFile)
if err != nil {
log.Fatal(err)
}

err = files.WriteFile(schema)
if silent {
return
}

err = files.WriteAnvpFile(schema, schemaFile)
if err != nil {
log.Fatal(err)
}
},
}

parseCmd.PersistentFlags().BoolVar(&silent, "silent", false, "if it should have an effect or only run it silently")
viper.BindPFlag("silent", rootCmd.PersistentFlags().Lookup("silent"))

rootCmd.AddCommand(parseCmd)
}
2 changes: 1 addition & 1 deletion cli/cmd/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package cmd
import (
"fmt"

"github.com/anvil/anvil/cmd/config"
"github.com/henriqueleite42/anvil/cli/cmd/config"
"github.com/spf13/cobra"
)

Expand Down
2 changes: 1 addition & 1 deletion cli/go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/anvil/anvil
module github.com/henriqueleite42/anvil/cli

go 1.22.4

Expand Down
55 changes: 44 additions & 11 deletions cli/internal/files/anvp.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,69 @@ package files
import (
"fmt"
"os"
"strings"

"github.com/anvil/anvil/internal/formatter"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/schemas"
"gopkg.in/yaml.v3"
)

func WriteFile(schema *schemas.Schema) error {
func GetAnvpFilePath(anvFilePath string, createFolders bool) (string, error) {
myDir, err := os.Getwd()
if err != nil {
return "", err
}

path := myDir + "/anvil"

if createFolders {
err = os.MkdirAll(path, os.ModePerm)
if err != nil {
return "", err
}
}

parts := strings.Split(anvFilePath, "/")
fileName := parts[len(parts)-1] + "p"

return fmt.Sprintf("%s/%s", path, fileName), nil
}

func WriteAnvpFile(schema *schemas.Schema, anvFilePath string) error {
yamlData, err := yaml.Marshal(schema)
if err != nil {
return err
}

myDir, err := os.Getwd()
filePath, err := GetAnvpFilePath(anvFilePath, true)
if err != nil {
return err
}

path := myDir + "/anvil"

err = os.MkdirAll(path, os.ModePerm)
err = os.WriteFile(filePath, yamlData, 0644)
if err != nil {
return err
}

domainKebab := formatter.PascalToKebab(schema.Domain)
return nil
}

err = os.WriteFile(fmt.Sprintf("%s/%s.anvp", path, domainKebab), yamlData, 0644)
func ReadAnvpFile(anvFilePath string) (*schemas.Schema, error) {
path, err := GetAnvpFilePath(anvFilePath, false)
if err != nil {
return err
return nil, err
}

return nil
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()

schema := schemas.Schema{}
err = yaml.NewDecoder(file).Decode(&schema)
if err != nil {
return nil, err
}

return &schema, nil
}
4 changes: 2 additions & 2 deletions cli/internal/parser_anv/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package parser_anv
import (
"fmt"

"github.com/anvil/anvil/internal/hashing"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/internal/hashing"
"github.com/henriqueleite42/anvil/cli/schemas"
)

func (self *anvToAnvpParser) auth(file map[string]any) error {
Expand Down
6 changes: 3 additions & 3 deletions cli/internal/parser_anv/entities.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import (
"regexp"
"strings"

"github.com/anvil/anvil/internal/formatter"
"github.com/anvil/anvil/internal/hashing"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/internal/formatter"
"github.com/henriqueleite42/anvil/cli/internal/hashing"
"github.com/henriqueleite42/anvil/cli/schemas"
)

var matchFirstCap = regexp.MustCompile("(.)([A-Z][a-z]+)")
Expand Down
6 changes: 3 additions & 3 deletions cli/internal/parser_anv/enums.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package parser_anv
import (
"fmt"

"github.com/anvil/anvil/internal/formatter"
"github.com/anvil/anvil/internal/hashing"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/internal/formatter"
"github.com/henriqueleite42/anvil/cli/internal/hashing"
"github.com/henriqueleite42/anvil/cli/schemas"
)

func (self *anvToAnvpParser) resolveEnum(i *resolveInput) (string, error) {
Expand Down
4 changes: 2 additions & 2 deletions cli/internal/parser_anv/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package parser_anv
import (
"fmt"

"github.com/anvil/anvil/internal/hashing"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/internal/hashing"
"github.com/henriqueleite42/anvil/cli/schemas"
)

func (self *anvToAnvpParser) resolveEvent(i *resolveInput) (string, error) {
Expand Down
4 changes: 2 additions & 2 deletions cli/internal/parser_anv/imports.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package parser_anv
import (
"fmt"

"github.com/anvil/anvil/internal/hashing"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/internal/hashing"
"github.com/henriqueleite42/anvil/cli/schemas"
)

func (self *anvToAnvpParser) resolveImport(i *resolveInput) (string, error) {
Expand Down
2 changes: 1 addition & 1 deletion cli/internal/parser_anv/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package parser_anv
import (
"fmt"

"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/schemas"
)

func (self *anvToAnvpParser) metadata(file map[string]any) error {
Expand Down
4 changes: 2 additions & 2 deletions cli/internal/parser_anv/parser.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package parser_anv

import (
"github.com/anvil/anvil/internal/files"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/internal/files"
"github.com/henriqueleite42/anvil/cli/schemas"
)

type anvToAnvpParser struct {
Expand Down
4 changes: 2 additions & 2 deletions cli/internal/parser_anv/relationships.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import (
"fmt"
"strings"

"github.com/anvil/anvil/internal/hashing"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/internal/hashing"
"github.com/henriqueleite42/anvil/cli/schemas"
)

func (self *anvToAnvpParser) resolveRelationship(i *resolveInput) (string, error) {
Expand Down
4 changes: 2 additions & 2 deletions cli/internal/parser_anv/repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package parser_anv
import (
"fmt"

"github.com/anvil/anvil/internal/hashing"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/internal/hashing"
"github.com/henriqueleite42/anvil/cli/schemas"
)

func (self *anvToAnvpParser) repository(file map[string]any) error {
Expand Down
4 changes: 2 additions & 2 deletions cli/internal/parser_anv/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package parser_anv
import (
"fmt"

"github.com/anvil/anvil/internal/hashing"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/internal/hashing"
"github.com/henriqueleite42/anvil/cli/schemas"
)

type AllowedRefsWhenInvalid string
Expand Down
4 changes: 2 additions & 2 deletions cli/internal/parser_anv/usecase.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package parser_anv
import (
"fmt"

"github.com/anvil/anvil/internal/hashing"
"github.com/anvil/anvil/schemas"
"github.com/henriqueleite42/anvil/cli/internal/hashing"
"github.com/henriqueleite42/anvil/cli/schemas"
)

func (self *anvToAnvpParser) usecase(file map[string]any) error {
Expand Down
2 changes: 1 addition & 1 deletion cli/internal/parser_anv/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"fmt"
"strings"

"github.com/anvil/anvil/internal/hashing"
"github.com/henriqueleite42/anvil/cli/internal/hashing"
)

// Add the state hash to all the properties
Expand Down
2 changes: 1 addition & 1 deletion cli/main.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package main

import "github.com/anvil/anvil/cmd"
import "github.com/henriqueleite42/anvil/cli/cmd"

func main() {
cmd.Execute()
Expand Down
Loading

0 comments on commit 3b22375

Please sign in to comment.