diff --git a/cmd/gex/errors_go112.go b/cmd/gex/errors_go112.go index 5d3ce9a..8f31bbf 100644 --- a/cmd/gex/errors_go112.go +++ b/cmd/gex/errors_go112.go @@ -1,9 +1,10 @@ +//go:build !go1.13 // +build !go1.13 package main import ( - "github.com/izumin5210/gex/pkg/tool" + "github.com/x-izumin/gex/pkg/tool" ) func asBuildErrors(err error) *tool.BuildErrors { diff --git a/cmd/gex/errors_go113.go b/cmd/gex/errors_go113.go index 88c6978..40d4334 100644 --- a/cmd/gex/errors_go113.go +++ b/cmd/gex/errors_go113.go @@ -1,3 +1,4 @@ +//go:build go1.13 // +build go1.13 package main @@ -5,7 +6,7 @@ package main import ( "errors" - "github.com/izumin5210/gex/pkg/tool" + "github.com/x-izumin/gex/pkg/tool" ) func asBuildErrors(err error) *tool.BuildErrors { diff --git a/cmd/gex/main.go b/cmd/gex/main.go index 86c51d0..1abd7d6 100644 --- a/cmd/gex/main.go +++ b/cmd/gex/main.go @@ -8,10 +8,10 @@ import ( "os" "path/filepath" - "github.com/izumin5210/gex" - "github.com/izumin5210/gex/pkg/tool" "github.com/pkg/errors" "github.com/spf13/pflag" + "github.com/x-izumin/gex" + "github.com/x-izumin/gex/pkg/tool" ) const ( diff --git a/config.go b/config.go index 6e63627..a4803f8 100644 --- a/config.go +++ b/config.go @@ -1,143 +1,11 @@ package gex import ( - "io" - "io/ioutil" - "log" - "os" - - "github.com/izumin5210/execx" - "github.com/pkg/errors" - "github.com/spf13/afero" - - "github.com/izumin5210/gex/pkg/manager" - "github.com/izumin5210/gex/pkg/manager/dep" - "github.com/izumin5210/gex/pkg/manager/mod" - "github.com/izumin5210/gex/pkg/tool" + newGex "github.com/x-izumin/gex" ) // Config specifies the configration for managing development tools. -type Config struct { - OutWriter io.Writer - ErrWriter io.Writer - InReader io.Reader - - FS afero.Fs - Exec *execx.Executor - - WorkingDir string - RootDir string - ManifestName string - BinDirName string - ManagerType manager.Type - - Verbose bool - Logger *log.Logger -} +type Config = newGex.Config // Default contains default configuration. -var Default = createDefaultConfig() - -func createDefaultConfig() *Config { - wd, _ := os.Getwd() - if wd == "" { - wd = "." - } - cfg := &Config{ - OutWriter: os.Stdout, - ErrWriter: os.Stderr, - InReader: os.Stdin, - FS: afero.NewOsFs(), - Exec: execx.New(), - WorkingDir: wd, - ManifestName: "tools.go", - BinDirName: "bin", - Logger: log.New(ioutil.Discard, "", 0), - } - cfg.ManagerType, cfg.RootDir = manager.DetectType(cfg.WorkingDir, cfg.FS, cfg.Exec) - return cfg -} - -// Create creates a new instance of tool.Repository to manage developemnt tools. -func (c *Config) Create() (tool.Repository, error) { - c.setDefaultsIfNeeded() - - manager, executor, err := c.createManager() - if err != nil { - return nil, errors.WithStack(err) - } - - return tool.NewRepository(executor, manager, c.ManagerType, &tool.Config{ - FS: c.FS, - WorkingDir: c.WorkingDir, - RootDir: c.RootDir, - ManifestName: c.ManifestName, - BinDirName: c.BinDirName, - Verbose: c.Verbose, - Log: c.Logger, - }), nil -} - -func (c *Config) setDefaultsIfNeeded() { - d := createDefaultConfig() - - if c.OutWriter == nil { - c.OutWriter = d.OutWriter - } - if c.ErrWriter == nil { - c.ErrWriter = d.ErrWriter - } - if c.InReader == nil { - c.InReader = d.InReader - } - if c.FS == nil { - c.FS = d.FS - } - if c.Exec == nil { - c.Exec = d.Exec - } - if c.WorkingDir == "" { - c.WorkingDir = d.WorkingDir - } - if c.ManifestName == "" { - c.ManifestName = d.ManifestName - } - if c.BinDirName == "" { - c.BinDirName = d.BinDirName - } - if c.Logger == nil { - c.Logger = d.Logger - } - - if c.ManagerType == manager.TypeUnknown { - c.ManagerType, c.RootDir = manager.DetectType(c.WorkingDir, c.FS, c.Exec) - } - - if rootDir, err := manager.FindRoot(c.WorkingDir, c.FS, c.ManifestName); err == nil { - if len(rootDir) > len(c.RootDir) { - c.RootDir = rootDir - } - } -} - -func (c *Config) createManager() ( - manager.Interface, - manager.Executor, - error, -) { - executor := manager.NewExecutor(c.Exec, c.OutWriter, c.ErrWriter, c.InReader, c.WorkingDir, c.Logger) - var ( - m manager.Interface - ) - - switch c.ManagerType { - case manager.TypeModules: - m = mod.NewManager(executor) - case manager.TypeDep: - m = dep.NewManager(executor, c.RootDir, c.WorkingDir) - default: - return nil, nil, errors.New("failed to detect a dependencies management tool") - } - - return m, executor, nil -} +var Default = newGex.Default diff --git a/go.mod b/go.mod index bfe9402..523a43f 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,4 @@ +// Deprecated: use github.com/x-izumin/gex instead. module github.com/izumin5210/gex go 1.11 @@ -9,4 +10,5 @@ require ( github.com/pkg/errors v0.9.1 github.com/spf13/afero v1.2.2 github.com/spf13/pflag v1.0.5 + github.com/x-izumin/gex v0.7.0 // indirect ) diff --git a/go.sum b/go.sum index 49884d7..699b74b 100644 --- a/go.sum +++ b/go.sum @@ -19,6 +19,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/x-izumin/gex v0.7.0 h1:e1CpoOqTWGRG71KhOOHsXYmXG33RT0ddc6QzedFFMgQ= +github.com/x-izumin/gex v0.7.0/go.mod h1:NPllnnJqH5urK0Ikodk3dKjDfCE34atOTV/oRZ3VbU0= golang.org/x/sys v0.0.0-20191018095205-727590c5006e h1:ZtoklVMHQy6BFRHkbG6JzK+S6rX82//Yeok1vMlizfQ= golang.org/x/sys v0.0.0-20191018095205-727590c5006e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= diff --git a/pkg/manager/dep/manager.go b/pkg/manager/dep/manager.go index b6623d1..a5e0030 100644 --- a/pkg/manager/dep/manager.go +++ b/pkg/manager/dep/manager.go @@ -1,120 +1,8 @@ package dep import ( - "context" - "encoding/json" - "path" - "path/filepath" - "strings" - - "github.com/pkg/errors" - - "github.com/izumin5210/gex/pkg/manager" + newDep "github.com/x-izumin/gex/pkg/manager/dep" ) // NewManager creates a manager.Interface instance to manage tools vendored with dep. -func NewManager(executor manager.Executor, rootDir, workingDir string) manager.Interface { - return &managerImpl{ - executor: executor, - rootDir: rootDir, - workingDir: workingDir, - } -} - -type managerImpl struct { - executor manager.Executor - rootDir string - workingDir string -} - -func (m *managerImpl) Add(ctx context.Context, pkgs []string, verbose bool) error { - var err error - pkgs, err = m.pickNewPackages(ctx, pkgs) - if err != nil { - return errors.WithStack(err) - } - - if len(pkgs) == 0 { - return nil - } - - args := []string{"ensure"} - if verbose { - args = append(args, "-v") - } - args = append(args, "-add") - args = append(args, pkgs...) - return errors.WithStack(m.executor.Exec(ctx, "dep", args...)) -} - -func (m *managerImpl) Build(ctx context.Context, binPath, pkg string, verbose bool) error { - target, err := filepath.Rel(m.workingDir, m.rootDir) - if err != nil { - return errors.WithStack(err) - } - target = filepath.Join(target, "vendor", pkg) - if !strings.HasPrefix(target, "..") { - target = "." + string(filepath.Separator) + target - } - args := []string{"build", "-o", binPath} - if verbose { - args = append(args, "-v") - } - args = append(args, target) - return errors.WithStack(m.executor.Exec(ctx, "go", args...)) -} - -func (m *managerImpl) Sync(ctx context.Context, verbose bool) error { - args := []string{"ensure"} - if verbose { - args = append(args, "-v") - } - return errors.WithStack(m.executor.Exec(ctx, "dep", args...)) -} - -func (m *managerImpl) pickNewPackages(ctx context.Context, pkgs []string) ([]string, error) { - pkgSet, err := m.getExistingPackageSet(ctx) - if err != nil { - return nil, errors.WithStack(err) - } - - if len(pkgSet) == 0 { - return pkgs, nil - } - - result := make([]string, 0, len(pkgs)) - - for _, pkg := range pkgs { - var skipped bool - for pkg := pkg; pkg != "."; pkg = path.Dir(pkg) { - if _, ok := pkgSet[pkg]; ok { - skipped = true - break - } - } - if !skipped { - result = append(result, pkg) - } - } - - return result, nil -} - -func (m *managerImpl) getExistingPackageSet(ctx context.Context) (map[string]struct{}, error) { - out, err := m.executor.Output(ctx, "dep", "status", "-json") - if err != nil { - return make(map[string]struct{}), nil - } - pkgs := []struct{ ProjectRoot string }{} - err = json.Unmarshal(out, &pkgs) - if err != nil { - return nil, errors.WithStack(err) - } - - pkgRoots := make(map[string]struct{}, len(pkgs)) - for _, pkg := range pkgs { - pkgRoots[pkg.ProjectRoot] = struct{}{} - } - - return pkgRoots, nil -} +var NewManager = newDep.NewManager diff --git a/pkg/manager/executor.go b/pkg/manager/executor.go index 0b3f8c4..a217051 100644 --- a/pkg/manager/executor.go +++ b/pkg/manager/executor.go @@ -1,71 +1,11 @@ package manager import ( - "context" - "io" - "log" - "os" - "path/filepath" - "strings" - - "github.com/izumin5210/execx" - "github.com/pkg/errors" + newManager "github.com/x-izumin/gex/pkg/manager" ) // Executor is an interface for executing managers. -type Executor interface { - Exec(ctx context.Context, name string, args ...string) error - Output(ctx context.Context, name string, args ...string) ([]byte, error) -} +type Executor = newManager.Executor // NewExecutor creates a new Executor instance. -func NewExecutor(exec *execx.Executor, outW, errW io.Writer, inR io.Reader, cwd string, log *log.Logger) Executor { - env := os.Environ() - for _, e := range env { - kv := strings.SplitN(e, "=", 2) - if kv[0] == "PATH" { - kv[1] = filepath.Join(cwd, "bin") + string(os.PathListSeparator) + kv[1] - } - env = append(env, strings.Join(kv, "=")) - } - return &executorImpl{ - exec: exec, - outW: outW, - errW: errW, - inR: inR, - cwd: cwd, - env: env, - log: log, - } -} - -type executorImpl struct { - exec *execx.Executor - outW, errW io.Writer - inR io.Reader - cwd string - env []string - log *log.Logger -} - -func (e *executorImpl) Exec(ctx context.Context, name string, args ...string) error { - cmd := e.exec.CommandContext(ctx, name, args...) - cmd.Stdout = e.outW - cmd.Stderr = e.errW - cmd.Stdin = e.inR - cmd.Dir = e.cwd - cmd.Env = e.env - e.log.Println("execute", strings.Join(append([]string{name}, args...), " ")) - return errors.WithStack(cmd.Run()) -} - -func (e *executorImpl) Output(ctx context.Context, name string, args ...string) ([]byte, error) { - cmd := e.exec.CommandContext(ctx, name, args...) - cmd.Stderr = e.errW - cmd.Stdin = e.inR - cmd.Dir = e.cwd - cmd.Env = e.env - e.log.Println("execute", strings.Join(append([]string{name}, args...), " ")) - out, err := cmd.Output() - return out, errors.WithStack(err) -} +var NewExecutor = newManager.NewExecutor diff --git a/pkg/manager/manager.go b/pkg/manager/manager.go index e70c332..2095512 100644 --- a/pkg/manager/manager.go +++ b/pkg/manager/manager.go @@ -1,9 +1,7 @@ package manager -import "context" +import ( + newManager "github.com/x-izumin/gex/pkg/manager" +) -type Interface interface { - Add(ctx context.Context, pkgs []string, verbose bool) error - Build(ctx context.Context, binPath, pkg string, verbose bool) error - Sync(ctx context.Context, verbose bool) error -} +type Interface = newManager.Interface diff --git a/pkg/manager/mod/manager.go b/pkg/manager/mod/manager.go index b496184..8977abf 100644 --- a/pkg/manager/mod/manager.go +++ b/pkg/manager/mod/manager.go @@ -1,46 +1,8 @@ package mod import ( - "context" - - "github.com/pkg/errors" - - "github.com/izumin5210/gex/pkg/manager" + newMod "github.com/x-izumin/gex/pkg/manager/mod" ) // NewManager creates a manager.Interface instance to build tools vendored with Modules. -func NewManager(executor manager.Executor) manager.Interface { - return &managerImpl{ - executor: executor, - } -} - -type managerImpl struct { - executor manager.Executor -} - -func (m *managerImpl) Add(ctx context.Context, pkgs []string, verbose bool) error { - args := []string{"get"} - if verbose { - args = append(args, "-v") - } - args = append(args, pkgs...) - return errors.WithStack(m.executor.Exec(ctx, "go", args...)) -} - -func (m *managerImpl) Build(ctx context.Context, binPath, pkg string, verbose bool) error { - args := []string{"build", "-o", binPath} - if verbose { - args = append(args, "-v") - } - args = append(args, pkg) - return errors.WithStack(m.executor.Exec(ctx, "go", args...)) -} - -func (m *managerImpl) Sync(ctx context.Context, verbose bool) error { - args := []string{"mod", "tidy"} - if verbose { - args = append(args, "-v") - } - return errors.WithStack(m.executor.Exec(ctx, "go", args...)) -} +var NewManager = newMod.NewManager diff --git a/pkg/manager/type.go b/pkg/manager/type.go index 0804ed6..a90ae84 100644 --- a/pkg/manager/type.go +++ b/pkg/manager/type.go @@ -1,84 +1,21 @@ package manager import ( - "bytes" - "os" - "path/filepath" - - "github.com/izumin5210/execx" - "github.com/pkg/errors" - "github.com/spf13/afero" + newManager "github.com/x-izumin/gex/pkg/manager" ) // Type represents the dependencies management tool that is used. -type Type int +type Type = newManager.Type // Type values const ( - TypeUnknown Type = iota - TypeModules - TypeDep + TypeUnknown = newManager.TypeUnknown + TypeModules = newManager.TypeModules + TypeDep = newManager.TypeDep ) -func (t Type) Vendor() bool { return t == TypeDep } - -func (t Type) String() string { - switch t { - case TypeModules: - return "mod" - case TypeDep: - return "dep" - default: - return "unknown" - } -} - // DetectType detects a current Mode and sets a root directory. -func DetectType(workDir string, fs afero.Fs, exec *execx.Executor) (t Type, rootDir string) { - root, err := FindRoot(workDir, fs, "Gopkg.toml") - if err == nil { - return TypeDep, root - } - - dir, ok := lookupMod(workDir, fs, exec) - if ok { - return TypeModules, dir - } - - return TypeUnknown, "" -} +var DetectType = newManager.DetectType // FindRoot gets a manifest file path. -func FindRoot(from string, fs afero.Fs, manifest string) (string, error) { - for { - if ok, err := afero.Exists(fs, filepath.Join(from, manifest)); ok { - return from, nil - } else if err != nil { - return "", errors.WithStack(err) - } - - parent := filepath.Dir(from) - if parent == from { - return "", errors.New("could not find manifest") - } - from = parent - } -} - -func lookupMod(workDir string, fs afero.Fs, exec *execx.Executor) (string, bool) { - out, err := exec.Command("go", "env", "GOMOD").CombinedOutput() - if err == nil && len(bytes.TrimRight(out, "\n")) > 0 { - return filepath.Dir(string(out)), true - } - - dir, err := FindRoot(workDir, fs, "go.mod") - if err == nil { - return dir, true - } - - if os.Getenv("GO111MODULE") == "on" { - return workDir, true - } - - return "", false -} +var FindRoot = newManager.FindRoot diff --git a/pkg/manager/type_test.go b/pkg/manager/type_test.go deleted file mode 100644 index 7d2ace7..0000000 --- a/pkg/manager/type_test.go +++ /dev/null @@ -1,121 +0,0 @@ -package manager_test - -import ( - "context" - "fmt" - "os" - "os/exec" - "path/filepath" - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/izumin5210/execx" - "github.com/spf13/afero" - - "github.com/izumin5210/gex/pkg/manager" -) - -func TestDetectType(t *testing.T) { - wd := "/go/src/awesomeapp/foobar" - - if v, ok := os.LookupEnv("GO111MODULE"); ok { - defer func() { os.Setenv("GO111MODULE", v) }() - os.Unsetenv("GO111MODULE") - } - - checkGoEnvCmd := func(t *testing.T, args []string) { - t.Helper() - if diff := cmp.Diff(args, []string{"go", "env", "GOMOD"}); diff != "" { - t.Errorf("args differs: (-want +got)\n%s", diff) - } - } - createExec := func(t *testing.T, out string) *execx.Executor { - t.Helper() - return execx.New( - execx.WithFakeProcess(func(_ context.Context, cmd *exec.Cmd) error { - checkGoEnvCmd(t, cmd.Args) - fmt.Fprintln(cmd.Stdout, out+"\n") - return nil - }), - ) - } - dieIf := func(t *testing.T, err error) { - t.Helper() - if err != nil { - t.Fatalf("should not be error, got %v", err) - } - } - createFS := func(t *testing.T) afero.Fs { - t.Helper() - fs := afero.NewMemMapFs() - dieIf(t, fs.MkdirAll(wd, 0755)) - return fs - } - - cases := []struct { - test string - fs afero.Fs - execer *execx.Executor - typ manager.Type - root string - }{ - { - test: "modules", - fs: createFS(t), - execer: createExec(t, filepath.Join(wd, "go.mod")), - typ: manager.TypeModules, - root: wd, - }, - { - test: "modules from subdirectory", - fs: createFS(t), - execer: createExec(t, filepath.Join(filepath.Dir(wd), "go.mod")), - typ: manager.TypeModules, - root: filepath.Dir(wd), - }, - { - test: "dep", - fs: func() afero.Fs { - fs := createFS(t) - path := filepath.Join(wd, "Gopkg.toml") - dieIf(t, afero.WriteFile(fs, path, []byte(""), 0644)) - return fs - }(), - execer: createExec(t, ""), - typ: manager.TypeDep, - root: wd, - }, - { - test: "dep from subdirectory", - fs: func() afero.Fs { - fs := createFS(t) - path := filepath.Join(filepath.Dir(wd), "Gopkg.toml") - dieIf(t, afero.WriteFile(fs, path, []byte(""), 0644)) - return fs - }(), - execer: createExec(t, ""), - typ: manager.TypeDep, - root: filepath.Dir(wd), - }, - { - test: "unknown", - fs: createFS(t), - execer: createExec(t, ""), - typ: manager.TypeUnknown, - }, - } - - for _, tc := range cases { - t.Run(tc.test, func(t *testing.T) { - typ, root := manager.DetectType(wd, tc.fs, tc.execer) - - if got, want := typ, tc.typ; got != want { - t.Errorf("Detected mode is %v, want %v", got, want) - } - - if got, want := root, tc.root; got != want { - t.Errorf("Detected root is %s, want %s", got, want) - } - }) - } -} diff --git a/pkg/tool/.snapshots/TestWriter_Write-dep-tools.go b/pkg/tool/.snapshots/TestWriter_Write-dep-tools.go deleted file mode 100644 index 50d285a..0000000 --- a/pkg/tool/.snapshots/TestWriter_Write-dep-tools.go +++ /dev/null @@ -1,24 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/gogo/protobuf/protoc-gen-gogofast" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "github.com/volatiletech/sqlboiler" - _ "github.com/volatiletech/sqlboiler/drivers/sqlboiler-psql" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/protoc-gen-gogofast ./vendor/github.com/gogo/protobuf/protoc-gen-gogofast -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/protoc-gen-swagger ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -//go:generate go build -v -o=./bin/sqlboiler ./vendor/github.com/volatiletech/sqlboiler -//go:generate go build -v -o=./bin/sqlboiler-psql ./vendor/github.com/volatiletech/sqlboiler/drivers/sqlboiler-psql - diff --git a/pkg/tool/.snapshots/TestWriter_Write-mod-tools.go b/pkg/tool/.snapshots/TestWriter_Write-mod-tools.go deleted file mode 100644 index 8e6a5da..0000000 --- a/pkg/tool/.snapshots/TestWriter_Write-mod-tools.go +++ /dev/null @@ -1,24 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/gogo/protobuf/protoc-gen-gogofast" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "github.com/volatiletech/sqlboiler" - _ "github.com/volatiletech/sqlboiler/drivers/sqlboiler-psql" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/protoc-gen-gogofast github.com/gogo/protobuf/protoc-gen-gogofast -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/protoc-gen-swagger github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -//go:generate go build -v -o=./bin/sqlboiler github.com/volatiletech/sqlboiler -//go:generate go build -v -o=./bin/sqlboiler-psql github.com/volatiletech/sqlboiler/drivers/sqlboiler-psql - diff --git a/pkg/tool/config.go b/pkg/tool/config.go index eec28a3..6026f1c 100644 --- a/pkg/tool/config.go +++ b/pkg/tool/config.go @@ -1,50 +1,8 @@ package tool import ( - "log" - "path/filepath" - - "github.com/pkg/errors" - "github.com/spf13/afero" + newTool "github.com/x-izumin/gex/pkg/tool" ) // Config contains configurations to manage development tools. -type Config struct { - FS afero.Fs - WorkingDir string - RootDir string - ManifestName string - BinDirName string - Verbose bool - Log *log.Logger -} - -// RequireManifest returns an error if the manifest file does not exist. -func (c *Config) RequireManifest() error { - if ok, err := afero.Exists(c.FS, c.ManifestPath()); err != nil { - return errors.WithStack(err) - } else if !ok { - return errors.Errorf("could not find %s", c.ManifestPath()) - } - return nil -} - -func (c *Config) ManifestPath() string { - return filepath.Join(c.baseDir(), c.ManifestName) -} - -func (c *Config) BinDir() string { - return filepath.Join(c.baseDir(), c.BinDirName) -} - -func (c *Config) BinPath(bin string) string { - return filepath.Join(c.BinDir(), bin) -} - -func (c *Config) baseDir() (dir string) { - dir = c.RootDir - if dir == "" { - dir = c.WorkingDir - } - return -} +type Config = newTool.Config diff --git a/pkg/tool/errors.go b/pkg/tool/errors.go index 6b979e6..100ca27 100644 --- a/pkg/tool/errors.go +++ b/pkg/tool/errors.go @@ -1,55 +1,9 @@ package tool import ( - "fmt" - "strings" - "sync" + newTool "github.com/x-izumin/gex/pkg/tool" ) -type BuildError struct { - Tool Tool - Err error -} +type BuildError = newTool.BuildError -func (e *BuildError) Unwrap() error { return e.Err } - -func (e *BuildError) Error() string { - return fmt.Sprintf("failed to build %s: %s", e.Tool.Name(), e.Err) -} - -type BuildErrors struct { - sync.RWMutex - Errs []*BuildError -} - -func (e *BuildErrors) Unwrap() error { - e.RLock() - defer e.RUnlock() - - return e.Errs[0] -} - -func (e *BuildErrors) Error() string { - e.RLock() - defer e.RUnlock() - - var b strings.Builder - b.WriteString("failed to build ") - b.WriteString(e.Errs[0].Tool.Name()) - if n := len(e.Errs); n > 1 { - b.WriteString(fmt.Sprintf(" (and %d tool(s))", n)) - } - b.WriteString(": ") - b.WriteString(e.Errs[0].Err.Error()) - return b.String() -} - -func (e *BuildErrors) Append(t Tool, err error) { - e.Lock() - defer e.Unlock() - e.Errs = append(e.Errs, &BuildError{Tool: t, Err: err}) -} - -func (e *BuildErrors) Empty() bool { - return len(e.Errs) == 0 -} +type BuildErrors = newTool.BuildErrors diff --git a/pkg/tool/manifest.go b/pkg/tool/manifest.go index 615d4e0..c43d5c7 100644 --- a/pkg/tool/manifest.go +++ b/pkg/tool/manifest.go @@ -1,54 +1,11 @@ package tool import ( - "sort" - - "github.com/izumin5210/gex/pkg/manager" + newTool "github.com/x-izumin/gex/pkg/tool" ) // Manifest contains tool list -type Manifest struct { - toolMap map[string]Tool - managerType manager.Type -} +type Manifest = newTool.Manifest // NewManifest creates a new Manifest instance. -func NewManifest(tools []Tool, mType manager.Type) *Manifest { - toolMap := make(map[string]Tool, len(tools)) - for _, t := range tools { - toolMap[t.Name()] = t - } - return &Manifest{toolMap: toolMap, managerType: mType} -} - -func (m *Manifest) ManagerType() manager.Type { return m.managerType } - -// AddTool adds a new tool to the manifest. -func (m *Manifest) AddTool(tool Tool) { - m.toolMap[tool.Name()] = tool -} - -// FindTool returns a tool by a name. -func (m *Manifest) FindTool(name string) (t Tool, ok bool) { - t, ok = m.toolMap[name] - return -} - -// Tools returns a tool list. -func (m *Manifest) Tools() []Tool { - n := len(m.toolMap) - s := make([]string, 0, n) - for _, t := range m.toolMap { - s = append(s, string(t)) - } - sort.StringSlice(s).Sort() - ts := make([]Tool, n, n) - for i, t := range s { - ts[i] = Tool(t) - } - return ts -} - -func (m *Manifest) addTool(t Tool) { - m.toolMap[t.Name()] = t -} +var NewManifest = newTool.NewManifest diff --git a/pkg/tool/parser.go b/pkg/tool/parser.go index 63cddd5..1b0b6db 100644 --- a/pkg/tool/parser.go +++ b/pkg/tool/parser.go @@ -1,52 +1,11 @@ package tool import ( - "go/parser" - "go/token" - "strconv" - - "github.com/izumin5210/gex/pkg/manager" - "github.com/pkg/errors" - "github.com/spf13/afero" + newTool "github.com/x-izumin/gex/pkg/tool" ) // Parser retrieve tool packages from given paths. -type Parser interface { - Parse(path string) (*Manifest, error) -} +type Parser = newTool.Parser // NewParser creates a new parser instance. -func NewParser(fs afero.Fs, mType manager.Type) Parser { - return &parserImpl{ - fs: fs, - mType: mType, - } -} - -type parserImpl struct { - fs afero.Fs - mType manager.Type -} - -func (p *parserImpl) Parse(path string) (*Manifest, error) { - data, err := afero.ReadFile(p.fs, path) - if err != nil { - return nil, errors.Wrapf(err, "failed to read %q", path) - } - - fset := token.NewFileSet() - f, err := parser.ParseFile(fset, "", string(data), parser.ImportsOnly) - if err != nil { - return nil, errors.Wrapf(err, "failed to parse %q", path) - } - - tools := make([]Tool, 0, len(f.Imports)) - - for _, s := range f.Imports { - if pkg, err := strconv.Unquote(s.Path.Value); err == nil { - tools = append(tools, Tool(pkg)) - } - } - - return NewManifest(tools, p.mType), nil -} +var NewParser = newTool.NewParser diff --git a/pkg/tool/parser_test.go b/pkg/tool/parser_test.go deleted file mode 100644 index 2d7ea7a..0000000 --- a/pkg/tool/parser_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package tool_test - -import ( - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/spf13/afero" - - "github.com/izumin5210/gex/pkg/manager" - "github.com/izumin5210/gex/pkg/tool" -) - -func TestParser_Parse(t *testing.T) { - fs := afero.NewMemMapFs() - parser := tool.NewParser(fs, manager.TypeModules) - - var ( - toolsGo = `// Code generated by github.comm/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -import ( - _ "github.com/gogo/protobuf/protoc-gen-gogofast" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "github.com/volatiletech/sqlboiler" - _ "github.com/volatiletech/sqlboiler/drivers/sqlboiler-psql" -) -` - ) - path := "/home/src/awesomeapp/tools" - - err := afero.WriteFile(fs, path, []byte(toolsGo), 0644) - if err != nil { - t.Fatalf("faield to write %s: %v", path, err) - } - - out, err := parser.Parse(path) - - if err != nil { - t.Fatalf("Parse() returned an error: %v", err) - } - - want := []tool.Tool{ - tool.Tool("github.com/gogo/protobuf/protoc-gen-gogofast"), - tool.Tool("github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway"), - tool.Tool("github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger"), - tool.Tool("github.com/volatiletech/sqlboiler"), - tool.Tool("github.com/volatiletech/sqlboiler/drivers/sqlboiler-psql"), - } - - if diff := cmp.Diff(out.Tools(), want); diff != "" { - t.Errorf("tool differs: (-want +got)\n%s", diff) - } -} diff --git a/pkg/tool/repository.go b/pkg/tool/repository.go index 6c738dd..78426a0 100644 --- a/pkg/tool/repository.go +++ b/pkg/tool/repository.go @@ -1,176 +1,11 @@ package tool import ( - "context" - "strings" - "sync" - - "github.com/pkg/errors" - - "github.com/izumin5210/gex/pkg/manager" + newTool "github.com/x-izumin/gex/pkg/tool" ) // Repository is an interface for managing and operating tools -type Repository interface { - List(ctx context.Context) ([]Tool, error) - Add(ctx context.Context, pkgs ...string) error - Build(ctx context.Context, t Tool) (string, error) - BuildAll(ctx context.Context) error - Run(ctx context.Context, name string, args ...string) error -} - -type repositoryImpl struct { - *Config - parser Parser - writer Writer - executor manager.Executor - manager manager.Interface - managerType manager.Type -} +type Repository = newTool.Repository // NewRepository creates a new Repository instance. -func NewRepository(executor manager.Executor, manager manager.Interface, managerType manager.Type, cfg *Config) Repository { - return &repositoryImpl{ - Config: cfg, - parser: NewParser(cfg.FS, managerType), - writer: NewWriter(cfg.FS), - executor: executor, - manager: manager, - managerType: managerType, - } -} - -func (r *repositoryImpl) List(ctx context.Context) ([]Tool, error) { - m, err := r.getManifest() - if err != nil { - return nil, errors.WithStack(err) - } - - return m.Tools(), nil -} - -func (r *repositoryImpl) Add(ctx context.Context, pkgs ...string) error { - r.Log.Println("add", strings.Join(pkgs, ", ")) - - for _, pkg := range pkgs { - if strings.Contains(pkg, "@") { - err := r.manager.Add(ctx, pkgs, r.Verbose) - if err != nil { - return errors.Wrap(err, "failed to add tools") - } - break - } - } - - m, err := r.parser.Parse(r.ManifestPath()) - if err != nil { - m = NewManifest([]Tool{}, r.managerType) - } - - tools := make([]Tool, len(pkgs)) - - for i, pkg := range pkgs { - pkg = strings.SplitN(pkg, "@", 2)[0] - t := Tool(pkg) - m.AddTool(t) - tools[i] = t - } - - err = r.writer.Write(r.ManifestPath(), m) - if err != nil { - return errors.Wrap(err, "failed to write a manifest file") - } - - err = r.manager.Sync(ctx, r.Verbose) - if err != nil { - return errors.Wrap(err, "failed to sync packages") - } - - for _, t := range tools { - _, err = r.Build(ctx, t) - if err != nil { - return errors.WithStack(err) - } - } - return nil -} - -func (r *repositoryImpl) Build(ctx context.Context, t Tool) (string, error) { - binPath := r.BinPath(t.Name()) - - if st, err := r.FS.Stat(binPath); err != nil { - r.Log.Println("build", t) - err := r.manager.Build(ctx, binPath, string(t), r.Verbose) - if err != nil { - return "", errors.Wrapf(err, "failed to build %s", t) - } - } else if st.IsDir() { - return "", errors.Errorf("%q is a directory", t.Name()) - } - - return binPath, nil -} - -func (r *repositoryImpl) BuildAll(ctx context.Context) error { - m, err := r.getManifest() - if err != nil { - return errors.WithStack(err) - } - - var ( - wg sync.WaitGroup - errs BuildErrors - ) - - for _, t := range m.Tools() { - t := t - wg.Add(1) - go func() { - defer wg.Done() - _, err = r.Build(ctx, t) - if err != nil { - errs.Append(t, err) - } - }() - } - - wg.Wait() - - if !errs.Empty() { - return &errs - } - - return nil -} - -func (r *repositoryImpl) Run(ctx context.Context, name string, args ...string) error { - m, err := r.getManifest() - if err != nil { - return errors.WithStack(err) - } - - t, ok := m.FindTool(name) - if !ok { - return errors.Errorf("failed to find the tool %q", name) - } - - bin, err := r.Build(ctx, t) - if err != nil { - return errors.WithStack(err) - } - - return errors.WithStack(r.executor.Exec(ctx, bin, args...)) -} - -func (r *repositoryImpl) getManifest() (*Manifest, error) { - if err := r.RequireManifest(); err != nil { - return nil, errors.WithStack(err) - } - - m, err := r.parser.Parse(r.ManifestPath()) - if err != nil { - return nil, errors.Wrap(err, "failed to parse the manifest file") - } - - return m, nil -} +var NewRepository = newTool.NewRepository diff --git a/pkg/tool/tool.go b/pkg/tool/tool.go index d4d6e32..e1aaab8 100644 --- a/pkg/tool/tool.go +++ b/pkg/tool/tool.go @@ -1,11 +1,8 @@ package tool -import "path/filepath" +import ( + newTool "github.com/x-izumin/gex/pkg/tool" +) // Tool represents a go package of a tool dependency. -type Tool string - -// Name returns an executable name. -func (t Tool) Name() string { - return filepath.Base(string(t)) -} +type Tool = newTool.Tool diff --git a/pkg/tool/writer.go b/pkg/tool/writer.go index 0a86197..dc82d41 100644 --- a/pkg/tool/writer.go +++ b/pkg/tool/writer.go @@ -1,61 +1,11 @@ package tool import ( - "bytes" - "html/template" - - "github.com/pkg/errors" - "github.com/spf13/afero" + newTool "github.com/x-izumin/gex/pkg/tool" ) // Writer creates a tool file to manage tool dependencies. -type Writer interface { - Write(path string, m *Manifest) error -} +type Writer = newTool.Writer // NewWriter creates a new Writer instance. -func NewWriter(fs afero.Fs) Writer { - return &writerImpl{ - fs: fs, - } -} - -type writerImpl struct { - fs afero.Fs -} - -func (w *writerImpl) Write(path string, m *Manifest) error { - buf := new(bytes.Buffer) - err := toolsGoTemplate.Execute(buf, m) - if err != nil { - return errors.Wrap(err, "failed to create a manifest file") - } - err = afero.WriteFile(w.fs, path, buf.Bytes(), 0644) - if err != nil { - return errors.Wrap(err, "failed to write a manifest file") - } - return nil -} - -var ( - toolsGoTemplate = template.Must(template.New("tools.go").Parse(`// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( -{{- range $t := .Tools}} - _ "{{$t}}" -{{- end}} -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -{{- range $t := .Tools}} -//go:generate go build -v -o=./bin/{{$t.Name}} {{if $.ManagerType.Vendor}}./vendor/{{end}}{{$t}} -{{- end}} -`)) -) +var NewWriter = newTool.NewWriter diff --git a/pkg/tool/writer_test.go b/pkg/tool/writer_test.go deleted file mode 100644 index de54dd4..0000000 --- a/pkg/tool/writer_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package tool_test - -import ( - "testing" - - "github.com/bradleyjkemp/cupaloy/v2" - "github.com/spf13/afero" - - "github.com/izumin5210/gex/pkg/manager" - "github.com/izumin5210/gex/pkg/tool" -) - -func TestWriter_Write(t *testing.T) { - fs := afero.NewMemMapFs() - writer := tool.NewWriter(fs) - - for _, typ := range []manager.Type{manager.TypeModules, manager.TypeDep} { - t.Run(typ.String(), func(t *testing.T) { - in := tool.NewManifest([]tool.Tool{ - "github.com/gogo/protobuf/protoc-gen-gogofast", - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway", - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger", - "github.com/volatiletech/sqlboiler", - "github.com/volatiletech/sqlboiler/drivers/sqlboiler-psql", - }, typ) - path := "/home/src/awesomeapp/tools" - - err := writer.Write(path, in) - if err != nil { - t.Fatalf("Write() returned an error: %v", err) - } - - data, err := afero.ReadFile(fs, path) - if err != nil { - t.Fatalf("faield to read %s: %v", path, err) - } - - t.Run("tools.go", func(t *testing.T) { - cupaloy.SnapshotT(t, string(data)) - }) - }) - } -} diff --git a/tests/e2e/.snapshots/TestGex_Dep-add_2_tools-tools.go b/tests/e2e/.snapshots/TestGex_Dep-add_2_tools-tools.go deleted file mode 100644 index 879127e..0000000 --- a/tests/e2e/.snapshots/TestGex_Dep-add_2_tools-tools.go +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/mockgen ./vendor/github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/golint ./vendor/golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Dep-add_a_tool_that_has_already_been_added-tools.go b/tests/e2e/.snapshots/TestGex_Dep-add_a_tool_that_has_already_been_added-tools.go deleted file mode 100644 index 879127e..0000000 --- a/tests/e2e/.snapshots/TestGex_Dep-add_a_tool_that_has_already_been_added-tools.go +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/mockgen ./vendor/github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/golint ./vendor/golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Dep-add_first_tool-tools.go b/tests/e2e/.snapshots/TestGex_Dep-add_first_tool-tools.go deleted file mode 100644 index ae3fe06..0000000 --- a/tests/e2e/.snapshots/TestGex_Dep-add_first_tool-tools.go +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway - diff --git a/tests/e2e/.snapshots/TestGex_Dep-add_tools_included_in_the_same_package-tools.go b/tests/e2e/.snapshots/TestGex_Dep-add_tools_included_in_the_same_package-tools.go deleted file mode 100644 index 4b4b3b3..0000000 --- a/tests/e2e/.snapshots/TestGex_Dep-add_tools_included_in_the_same_package-tools.go +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/gogo/protobuf/protoc-gen-gogo" - _ "github.com/gogo/protobuf/protoc-gen-gogofast" - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/protoc-gen-gogo ./vendor/github.com/gogo/protobuf/protoc-gen-gogo -//go:generate go build -v -o=./bin/protoc-gen-gogofast ./vendor/github.com/gogo/protobuf/protoc-gen-gogofast -//go:generate go build -v -o=./bin/mockgen ./vendor/github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/protoc-gen-swagger ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -//go:generate go build -v -o=./bin/golint ./vendor/golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Dep-add_tools_that_its_root_proejct_has_been_added-tools.go b/tests/e2e/.snapshots/TestGex_Dep-add_tools_that_its_root_proejct_has_been_added-tools.go deleted file mode 100644 index 288a32a..0000000 --- a/tests/e2e/.snapshots/TestGex_Dep-add_tools_that_its_root_proejct_has_been_added-tools.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/gogo/protobuf/protoc-gen-gogo" - _ "github.com/gogo/protobuf/protoc-gen-gogofast" - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "github.com/srvc/wraperr/cmd/wraperr" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/protoc-gen-gogo ./vendor/github.com/gogo/protobuf/protoc-gen-gogo -//go:generate go build -v -o=./bin/protoc-gen-gogofast ./vendor/github.com/gogo/protobuf/protoc-gen-gogofast -//go:generate go build -v -o=./bin/mockgen ./vendor/github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/protoc-gen-swagger ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -//go:generate go build -v -o=./bin/wraperr ./vendor/github.com/srvc/wraperr/cmd/wraperr -//go:generate go build -v -o=./bin/golint ./vendor/golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Dep-add_tools_that_the_tool_has_the_same_package_has_already_been_added-tools.go b/tests/e2e/.snapshots/TestGex_Dep-add_tools_that_the_tool_has_the_same_package_has_already_been_added-tools.go deleted file mode 100644 index 5d1c25b..0000000 --- a/tests/e2e/.snapshots/TestGex_Dep-add_tools_that_the_tool_has_the_same_package_has_already_been_added-tools.go +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/mockgen ./vendor/github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/protoc-gen-swagger ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -//go:generate go build -v -o=./bin/golint ./vendor/golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Dep-add_tools_with_version_specification-tools.go b/tests/e2e/.snapshots/TestGex_Dep-add_tools_with_version_specification-tools.go deleted file mode 100644 index d1fdb4f..0000000 --- a/tests/e2e/.snapshots/TestGex_Dep-add_tools_with_version_specification-tools.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/gogo/protobuf/protoc-gen-gogo" - _ "github.com/gogo/protobuf/protoc-gen-gogofast" - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "github.com/izumin5210/gex/cmd/gex" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/protoc-gen-gogo ./vendor/github.com/gogo/protobuf/protoc-gen-gogo -//go:generate go build -v -o=./bin/protoc-gen-gogofast ./vendor/github.com/gogo/protobuf/protoc-gen-gogofast -//go:generate go build -v -o=./bin/mockgen ./vendor/github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/protoc-gen-swagger ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -//go:generate go build -v -o=./bin/gex ./vendor/github.com/izumin5210/gex/cmd/gex -//go:generate go build -v -o=./bin/golint ./vendor/golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Mod-add_2_tools-tools.go b/tests/e2e/.snapshots/TestGex_Mod-add_2_tools-tools.go deleted file mode 100644 index 9e7dfd9..0000000 --- a/tests/e2e/.snapshots/TestGex_Mod-add_2_tools-tools.go +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/mockgen github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/golint golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Mod-add_a_tool_that_has_already_been_added-tools.go b/tests/e2e/.snapshots/TestGex_Mod-add_a_tool_that_has_already_been_added-tools.go deleted file mode 100644 index 9e7dfd9..0000000 --- a/tests/e2e/.snapshots/TestGex_Mod-add_a_tool_that_has_already_been_added-tools.go +++ /dev/null @@ -1,20 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/mockgen github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/golint golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Mod-add_first_tool-tools.go b/tests/e2e/.snapshots/TestGex_Mod-add_first_tool-tools.go deleted file mode 100644 index 161d36e..0000000 --- a/tests/e2e/.snapshots/TestGex_Mod-add_first_tool-tools.go +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway - diff --git a/tests/e2e/.snapshots/TestGex_Mod-add_tools_included_in_the_same_package-tools.go b/tests/e2e/.snapshots/TestGex_Mod-add_tools_included_in_the_same_package-tools.go deleted file mode 100644 index 69c1425..0000000 --- a/tests/e2e/.snapshots/TestGex_Mod-add_tools_included_in_the_same_package-tools.go +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/gogo/protobuf/protoc-gen-gogo" - _ "github.com/gogo/protobuf/protoc-gen-gogofast" - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/protoc-gen-gogo github.com/gogo/protobuf/protoc-gen-gogo -//go:generate go build -v -o=./bin/protoc-gen-gogofast github.com/gogo/protobuf/protoc-gen-gogofast -//go:generate go build -v -o=./bin/mockgen github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/protoc-gen-swagger github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -//go:generate go build -v -o=./bin/golint golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Mod-add_tools_that_its_root_proejct_has_been_added-tools.go b/tests/e2e/.snapshots/TestGex_Mod-add_tools_that_its_root_proejct_has_been_added-tools.go deleted file mode 100644 index 80059a0..0000000 --- a/tests/e2e/.snapshots/TestGex_Mod-add_tools_that_its_root_proejct_has_been_added-tools.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/gogo/protobuf/protoc-gen-gogo" - _ "github.com/gogo/protobuf/protoc-gen-gogofast" - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "github.com/srvc/wraperr/cmd/wraperr" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/protoc-gen-gogo github.com/gogo/protobuf/protoc-gen-gogo -//go:generate go build -v -o=./bin/protoc-gen-gogofast github.com/gogo/protobuf/protoc-gen-gogofast -//go:generate go build -v -o=./bin/mockgen github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/protoc-gen-swagger github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -//go:generate go build -v -o=./bin/wraperr github.com/srvc/wraperr/cmd/wraperr -//go:generate go build -v -o=./bin/golint golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Mod-add_tools_that_the_tool_has_the_same_package_has_already_been_added-tools.go b/tests/e2e/.snapshots/TestGex_Mod-add_tools_that_the_tool_has_the_same_package_has_already_been_added-tools.go deleted file mode 100644 index 2942681..0000000 --- a/tests/e2e/.snapshots/TestGex_Mod-add_tools_that_the_tool_has_the_same_package_has_already_been_added-tools.go +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/mockgen github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/protoc-gen-swagger github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -//go:generate go build -v -o=./bin/golint golang.org/x/lint/golint - diff --git a/tests/e2e/.snapshots/TestGex_Mod-add_tools_with_version_specification-tools.go b/tests/e2e/.snapshots/TestGex_Mod-add_tools_with_version_specification-tools.go deleted file mode 100644 index 5487089..0000000 --- a/tests/e2e/.snapshots/TestGex_Mod-add_tools_with_version_specification-tools.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by github.com/izumin5210/gex. DO NOT EDIT. - -// +build tools - -package tools - -// tool dependencies -import ( - _ "github.com/gogo/protobuf/protoc-gen-gogo" - _ "github.com/gogo/protobuf/protoc-gen-gogofast" - _ "github.com/golang/mock/mockgen" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" - _ "github.com/izumin5210/gex/cmd/gex" - _ "golang.org/x/lint/golint" -) - -// If you want to use tools, please run the following command: -// go generate ./tools.go -// -//go:generate go build -v -o=./bin/protoc-gen-gogo github.com/gogo/protobuf/protoc-gen-gogo -//go:generate go build -v -o=./bin/protoc-gen-gogofast github.com/gogo/protobuf/protoc-gen-gogofast -//go:generate go build -v -o=./bin/mockgen github.com/golang/mock/mockgen -//go:generate go build -v -o=./bin/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -//go:generate go build -v -o=./bin/protoc-gen-swagger github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -//go:generate go build -v -o=./bin/gex github.com/izumin5210/gex/cmd/gex -//go:generate go build -v -o=./bin/golint golang.org/x/lint/golint - diff --git a/tests/e2e/Dockerfile b/tests/e2e/Dockerfile deleted file mode 100644 index a1eafca..0000000 --- a/tests/e2e/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -ARG GO_VERSION - -# builder image -FROM golang:$GO_VERSION-alpine as builder - -ENV GO111MODULE=on -RUN apk add -U --no-cache curl build-base git -WORKDIR /go/src/github.com/izumin5210/gex -COPY . . - -RUN GO111MODULE=on go install ./cmd/gex - -# test image -FROM golang:$GO_VERSION-alpine - -RUN apk add -U --no-cache curl build-base git -COPY --from=builder /go/bin/gex /go/bin/ - -WORKDIR /go/src/myapp - -ARG GO111MODULE -ENV GO111MODULE $GO111MODULE - -COPY ./tests/e2e/testdata/ ./ diff --git a/tests/e2e/go.mod b/tests/e2e/go.mod deleted file mode 100644 index 971f834..0000000 --- a/tests/e2e/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/izumin5210/gex/tests/e2e - -go 1.13 - -require ( - github.com/bradleyjkemp/cupaloy/v2 v2.5.0 - golang.org/x/tools v0.0.0-20191018212557-ed542cd5b28a -) diff --git a/tests/e2e/go.sum b/tests/e2e/go.sum deleted file mode 100644 index bc01ad2..0000000 --- a/tests/e2e/go.sum +++ /dev/null @@ -1,16 +0,0 @@ -github.com/bradleyjkemp/cupaloy/v2 v2.5.0 h1:XI37Pqyl+msFaJDYL3JuPFKGUgnVxyJp+gQZQGiz2nA= -github.com/bradleyjkemp/cupaloy/v2 v2.5.0/go.mod h1:TD5UU0rdYTbu/TtuwFuWrtiRARuN7mtRipvs/bsShSE= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20191018212557-ed542cd5b28a h1:UuQ+70Pi/ZdWHuP4v457pkXeOynTdgd/4enxeIO/98k= -golang.org/x/tools v0.0.0-20191018212557-ed542cd5b28a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/tests/e2e/main_test.go b/tests/e2e/main_test.go deleted file mode 100644 index 51cd492..0000000 --- a/tests/e2e/main_test.go +++ /dev/null @@ -1,103 +0,0 @@ -package main - -import ( - "bytes" - "os" - "os/exec" - "path/filepath" - "runtime" - "strings" - "testing" -) - -var ( - gexCmd string - debug bool -) - -func TestMain(m *testing.M) { - debug = os.Getenv("DEBUG") == "1" - - _, filename, _, _ := runtime.Caller(0) - projRoot := filepath.Dir(filepath.Dir(filepath.Dir(filename))) - binDir := filepath.Join(projRoot, "bin") - - gexCmd = filepath.Join(binDir, "gex") - - cmd := exec.Command("go", "build", "-v", "-o", gexCmd, "./cmd/gex") - cmd.Dir = projRoot - if debug { - cmd.Stdout = os.Stdout - cmd.Stdout = os.Stderr - } - err := cmd.Run() - if err != nil { - panic(err) - } - - exitCode := m.Run() - defer os.Exit(exitCode) -} - -func TestGex_Mod(t *testing.T) { - invokeE2ETest(t, TestModeMod) -} - -func TestGex_Dep(t *testing.T) { - invokeE2ETest(t, TestModeDep) -} - -func invokeE2ETest(t *testing.T, tm TestMode) { - t.Helper() - - tc := CreateTestContext(t, tm, debug) - defer tc.Close(t) - - t.Run("add first tool", func(t *testing.T) { - tc.ExecCmd(t, gexCmd, "--add", "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway") - tc.SnapshotManifest(t) - }) - - t.Run("add 2 tools", func(t *testing.T) { - tc.ExecCmd(t, gexCmd, "--add", "github.com/golang/mock/mockgen", "--add", "golang.org/x/lint/golint") - tc.SnapshotManifest(t) - }) - - t.Run("add a tool that has already been added", func(t *testing.T) { - tc.ExecCmd(t, gexCmd, "--add", "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway") - tc.SnapshotManifest(t) - }) - - t.Run("add tools that the tool has the same package has already been added", func(t *testing.T) { - tc.ExecCmd(t, gexCmd, "--add", "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger") - tc.SnapshotManifest(t) - }) - - t.Run("add tools included in the same package", func(t *testing.T) { - tc.ExecCmd(t, gexCmd, "--add", "github.com/gogo/protobuf/protoc-gen-gogo", "--add", "github.com/gogo/protobuf/protoc-gen-gogofast") - tc.SnapshotManifest(t) - }) - - t.Run("add tools with version specification", func(t *testing.T) { - const gexVersion = "0.5.1" - tc.ExecCmd(t, gexCmd, "--add", "github.com/izumin5210/gex/cmd/gex@v"+gexVersion) - tc.SnapshotManifest(t) - - var outW, errW bytes.Buffer - tc.ExecCmdWithOut(t, tc.Bin("gex"), []string{"--version"}, &outW, &errW) - - if got, want := outW.String(), gexVersion; !strings.Contains(got, want) { - t.Errorf("`bin/gex --version` prints %q, want to contain %q", got, want) - } - }) - - t.Run("generated binaries with `gex --add`", func(t *testing.T) { - tc.CheckBinaries(t, []string{"protoc-gen-grpc-gateway", "mockgen", "golint", "protoc-gen-swagger", "protoc-gen-gogo", "protoc-gen-gogofast", "gex"}) - }) - - t.Run("generated binaries with `go generate`", func(t *testing.T) { - tc.RemoveBinaries(t) - tc.ExecCmd(t, "go", "generate", "tools.go") - tc.CheckBinaries(t, []string{"protoc-gen-grpc-gateway", "mockgen", "golint", "protoc-gen-swagger", "protoc-gen-gogo", "protoc-gen-gogofast", "gex"}) - }) -} diff --git a/tests/e2e/test_context.go b/tests/e2e/test_context.go deleted file mode 100644 index 6ad7ecf..0000000 --- a/tests/e2e/test_context.go +++ /dev/null @@ -1,143 +0,0 @@ -package main - -import ( - "io" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "reflect" - "runtime" - "sort" - "strings" - "testing" - - "github.com/bradleyjkemp/cupaloy/v2" - "golang.org/x/tools/go/packages/packagestest" -) - -func CreateTestContext(t *testing.T, mode TestMode, debug bool) *TestContext { - t.Helper() - tc := &TestContext{mode: mode, debug: debug} - tc.setupSandbox(t) - return tc -} - -type TestContext struct { - mode TestMode - exported *packagestest.Exported - debug bool - closers []func(t *testing.T) -} - -func (tc *TestContext) setupSandbox(t *testing.T) { - t.Helper() - - tc.exported = packagestest.Export(t, tc.mode.Exporter(), []packagestest.Module{ - {Name: "sampleapp", Files: map[string]interface{}{".keep": "", "main.go": "package main"}}, - }) - tc.closers = append(tc.closers, func(t *testing.T) { - if tc.debug { - t.Log("Keep the test environment on debug mode") - return - } - tc.exported.Cleanup() - }) - - if tc.mode == TestModeDep { - tc.exported.Config.Dir = filepath.Join(tc.exported.Config.Dir, "sampleapp") - } - - t.Logf("root directory: %s", tc.rootDir()) - - switch tc.mode { - case TestModeMod: - // no-op - case TestModeDep: - tc.ExecCmd(t, "dep", "init", "-v") - default: - panic("unreachable") - } -} - -func (tc *TestContext) Close(t *testing.T) { - for i := len(tc.closers) - 1; i >= 0; i-- { - tc.closers[i](t) - } -} - -func (tc *TestContext) rootDir() string { - return tc.exported.Config.Dir -} - -func (tc *TestContext) binDir() string { - return filepath.Join(tc.rootDir(), "bin") -} - -func (tc *TestContext) environ() []string { - env := make([]string, 0, len(tc.exported.Config.Env)) - for _, kv := range tc.exported.Config.Env { - if strings.HasPrefix(kv, "GOPROXY=") { - continue - } - if tc.mode == TestModeDep && runtime.GOOS == "darwin" && strings.HasPrefix(kv, "GOPATH=/var") { - kv = strings.Replace(kv, "GOPATH=/var", "GOPATH=/private/var", 1) - } - env = append(env, kv) - } - return env -} - -func (tc *TestContext) SnapshotManifest(t *testing.T) { - t.Helper() - t.Run("tools.go", func(t *testing.T) { - data, err := ioutil.ReadFile(filepath.Join(tc.rootDir(), "tools.go")) - tc.checkErr(t, err) - cupaloy.SnapshotT(t, string(data)) - }) -} - -func (tc *TestContext) CheckBinaries(t *testing.T, wantBins []string) { - files, err := ioutil.ReadDir(tc.binDir()) - tc.checkErr(t, err) - var gotBins []string - for _, f := range files { - if f.IsDir() { - continue - } - gotBins = append(gotBins, f.Name()) - } - sort.Strings(gotBins) - sort.Strings(wantBins) - if got, want := gotBins, wantBins; !reflect.DeepEqual(got, want) { - t.Errorf("generated bins list is %v, want %v", got, want) - } -} - -func (tc *TestContext) RemoveBinaries(t *testing.T) { - tc.checkErr(t, os.RemoveAll(tc.binDir())) -} - -func (tc *TestContext) Bin(name string) string { - return filepath.Join(tc.binDir(), name) -} - -func (tc *TestContext) ExecCmd(t *testing.T, name string, args ...string) { - tc.ExecCmdWithOut(t, name, args, NewTestWriter(t), NewTestWriter(t)) -} - -func (tc *TestContext) ExecCmdWithOut(t *testing.T, name string, args []string, outW, errW io.Writer) { - cmd := exec.Command(name, args...) - cmd.Dir = tc.rootDir() - cmd.Env = tc.environ() - cmd.Stdout = outW - cmd.Stderr = errW - tc.checkErr(t, cmd.Run()) -} - -func (tc *TestContext) checkErr(t *testing.T, err error) { - t.Helper() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } -} diff --git a/tests/e2e/test_mode.go b/tests/e2e/test_mode.go deleted file mode 100644 index 6b69b37..0000000 --- a/tests/e2e/test_mode.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import "golang.org/x/tools/go/packages/packagestest" - -type TestMode int - -const ( - _ TestMode = iota - TestModeMod - TestModeDep -) - -func (tm TestMode) String() string { - switch tm { - case TestModeMod: - return "mod" - case TestModeDep: - return "dep" - default: - panic("unreachable") - } -} - -func (tm TestMode) Exporter() packagestest.Exporter { - switch tm { - case TestModeMod: - return packagestest.Modules - case TestModeDep: - return packagestest.GOPATH - default: - panic("unreachable") - } -} diff --git a/tests/e2e/test_writer.go b/tests/e2e/test_writer.go deleted file mode 100644 index 25ac795..0000000 --- a/tests/e2e/test_writer.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "io" - "strings" - "testing" - "unicode" -) - -func NewTestWriter(t *testing.T) io.Writer { - return &TestWriter{t: t} -} - -type TestWriter struct { - t *testing.T -} - -func (w *TestWriter) Write(p []byte) (n int, err error) { - w.t.Helper() - s := string(p) - n = len(s) - s = strings.TrimRightFunc(string(p), unicode.IsSpace) - w.t.Log(s) - return -} diff --git a/tests/e2e/testdata/main.go b/tests/e2e/testdata/main.go deleted file mode 100644 index 50acb7f..0000000 --- a/tests/e2e/testdata/main.go +++ /dev/null @@ -1,11 +0,0 @@ -package main - -import ( - "fmt" - - _ "github.com/golang/mock/gomock" -) - -func main() { - fmt.Println("Hello world") -} diff --git a/version.go b/version.go index b908a76..a802e05 100644 --- a/version.go +++ b/version.go @@ -1,5 +1,9 @@ package gex +import ( + newGex "github.com/x-izumin/gex" +) + const ( - Version = "0.6.1" + Version = newGex.Version )