Skip to content
This repository has been archived by the owner on Aug 31, 2021. It is now read-only.

Commit

Permalink
option to write the plugin .go file and run the plugin migrations wit…
Browse files Browse the repository at this point in the history
…hout building the .so file so that it can be done from the shell instead to afford complete error messages
  • Loading branch information
i-norden committed Sep 24, 2019
1 parent ba4e79f commit 9bb2f27
Show file tree
Hide file tree
Showing 8 changed files with 124 additions and 10 deletions.
1 change: 1 addition & 0 deletions cmd/compose.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,5 +188,6 @@ func prepConfig() {
FileName: viper.GetString("exporter.name"),
Save: viper.GetBool("exporter.save"),
Home: viper.GetString("exporter.home"),
WriteOnly: viper.GetBool("exporter.writeOnly"),
}
}
2 changes: 1 addition & 1 deletion cmd/contractWatcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ package cmd

import (
"fmt"
"github.com/vulcanize/vulcanizedb/pkg/config"
"time"

log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"

st "github.com/vulcanize/vulcanizedb/libraries/shared/transformer"
"github.com/vulcanize/vulcanizedb/pkg/config"
ft "github.com/vulcanize/vulcanizedb/pkg/contract_watcher/full/transformer"
ht "github.com/vulcanize/vulcanizedb/pkg/contract_watcher/header/transformer"
"github.com/vulcanize/vulcanizedb/utils"
Expand Down
4 changes: 3 additions & 1 deletion pkg/config/contract.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@
package config

import (
"strings"

log "github.com/sirupsen/logrus"
"github.com/spf13/viper"

"github.com/vulcanize/vulcanizedb/pkg/geth"
"strings"
)

// Config struct for generic contract transformer
Expand Down
1 change: 1 addition & 0 deletions pkg/config/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ type Plugin struct {
FileName string
Save bool
Home string
WriteOnly bool
}

type Transformer struct {
Expand Down
6 changes: 4 additions & 2 deletions pkg/config/plugin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@
package config_test

import (
"os"
"path/filepath"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"

"github.com/vulcanize/vulcanizedb/pkg/config"
"os"
"path/filepath"
)

var allDifferentPathsConfig = config.Plugin{
Expand Down
100 changes: 100 additions & 0 deletions pkg/plugin/composer/composer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
// VulcanizeDB
// Copyright © 2019 Vulcanize

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.

// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

package composer

import (
"errors"
"fmt"
"os"
"path/filepath"

"github.com/vulcanize/vulcanizedb/pkg/config"
"github.com/vulcanize/vulcanizedb/pkg/plugin/helpers"
)

type composer struct {
GenConfig config.Plugin
dependencies []string
tmpVenDirs []string // Keep track of temp vendor directories
goFile string // Keep track of goFile name
}

// Requires populated plugin config
func NewPluginComposer(gc config.Plugin) *composer {
return &composer{
GenConfig: gc,
tmpVenDirs: make([]string, 0),
}
}

func (b *composer) BuildPlugin() error {
// Get plugin .go and .so file paths
var err error
b.goFile, _, err = b.GenConfig.GetPluginPaths()
if err != nil {
return err
}

// setup env to build plugin
return b.setupComposeEnv()
}

// Sets up temporary vendor libs needed for plugin build
// This is to work around a conflict between plugins and vendoring (https://github.com/golang/go/issues/20481)
func (b *composer) setupComposeEnv() error {
// TODO: Less hacky way of handling plugin build deps
vendorPath, err := helpers.CleanPath(filepath.Join("$GOPATH/src", b.GenConfig.Home, "vendor"))
if err != nil {
return err
}

repoPaths := b.GenConfig.GetRepoPaths()

// Import transformer dependencies so that we can build our plugin
for importPath := range repoPaths {
dst := filepath.Join(vendorPath, importPath)
src, cleanErr := helpers.CleanPath(filepath.Join("$GOPATH/src", importPath))
if cleanErr != nil {
return cleanErr
}

copyErr := helpers.CopyDir(src, dst, "vendor")
if copyErr != nil {
return errors.New(fmt.Sprintf("unable to copy transformer dependency from %s to %s: %v", src, dst, copyErr))
}

// Have to clear out the copied over vendor lib or plugin won't build (see issue above)
removeErr := os.RemoveAll(filepath.Join(dst, "vendor"))
if removeErr != nil {
return removeErr
}
// Keep track of this vendor directory to clear later
b.tmpVenDirs = append(b.tmpVenDirs, dst)
}

return nil
}

func (c *composer) CleanUp() error {
for _, venDir := range c.tmpVenDirs {
err := os.RemoveAll(venDir)
if err != nil {
return err
}
}
return nil
}
13 changes: 10 additions & 3 deletions pkg/plugin/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ package plugin

import (
"errors"

"github.com/vulcanize/vulcanizedb/pkg/config"
"github.com/vulcanize/vulcanizedb/pkg/plugin/builder"
"github.com/vulcanize/vulcanizedb/pkg/plugin/composer"
"github.com/vulcanize/vulcanizedb/pkg/plugin/manager"
"github.com/vulcanize/vulcanizedb/pkg/plugin/writer"
)
Expand All @@ -40,11 +42,16 @@ func NewGenerator(gc config.Plugin, dbc config.Database) (*generator, error) {
if len(gc.Transformers) < 1 {
return nil, errors.New("plugin generator is not configured with any transformers")
}
return &generator{
gen := &generator{
PluginWriter: writer.NewPluginWriter(gc),
PluginBuilder: builder.NewPluginBuilder(gc),
MigrationManager: manager.NewMigrationManager(gc, dbc),
}, nil
}
if gc.WriteOnly {
gen.PluginBuilder = composer.NewPluginComposer(gc)
} else {
gen.PluginBuilder = builder.NewPluginBuilder(gc)
}
return gen, nil
}

// Generates plugin for the transformer initializers specified in the generator config
Expand Down
7 changes: 4 additions & 3 deletions pkg/plugin/manager/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@ import (
"database/sql"
"errors"
"fmt"
"io/ioutil"
"os"
"path/filepath"

"github.com/lib/pq"
"github.com/pressly/goose"
"github.com/vulcanize/vulcanizedb/pkg/config"
"github.com/vulcanize/vulcanizedb/pkg/plugin/helpers"
"io/ioutil"
"os"
"path/filepath"
)

// Interface for managing the db migrations for plugin transformers
Expand Down

0 comments on commit 9bb2f27

Please sign in to comment.