mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-09-28 20:25:53 +00:00
fix🐛: report failures from app and migrate -g file generation
Both commands discarded genFile's error, and genFile discarded the errors from rendering its templates and from pkg.FileCreate. A file that could not be written ended the process from inside FileCreate; with core v2.11.0 it would have been reported as success instead. genFile now returns every error, and both commands print it and exit non-zero. In `app`, a missing router template no longer panics on a nil template, and neither file is written unless both render.
This commit is contained in:
+18
-6
@@ -7,6 +7,7 @@ import (
|
||||
"github.com/go-admin-team/go-admin-core/v2/sdk/pkg"
|
||||
"github.com/go-admin-team/go-admin-core/v2/sdk/pkg/utils"
|
||||
"github.com/spf13/cobra"
|
||||
"os"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
@@ -33,7 +34,10 @@ func run() {
|
||||
//1. 读取配置
|
||||
|
||||
fmt.Println(`generate migration file`)
|
||||
_ = genFile()
|
||||
if err := genFile(); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -80,11 +84,19 @@ func genFile() error {
|
||||
m := map[string]string{}
|
||||
m["appName"] = appName
|
||||
var b1 bytes.Buffer
|
||||
err = t1.Execute(&b1, m)
|
||||
pkg.FileCreate(b1, "./cmd/api/"+appName+".go")
|
||||
if err = t1.Execute(&b1, m); err != nil {
|
||||
return err
|
||||
}
|
||||
t2, err := template.ParseFiles("template/router.template")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var b2 bytes.Buffer
|
||||
err = t2.Execute(&b2, nil)
|
||||
pkg.FileCreate(b2, appPath+"/router/router.go")
|
||||
return nil
|
||||
if err = t2.Execute(&b2, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = pkg.FileCreate(b1, "./cmd/api/"+appName+".go"); err != nil {
|
||||
return err
|
||||
}
|
||||
return pkg.FileCreate(b2, appPath+"/router/router.go")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
package migrate
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// chdirWithTemplates runs the test from an empty directory that has the
|
||||
// repository's template/ directory in it, which is what genFile reads from
|
||||
// the working directory.
|
||||
func chdirWithTemplates(t *testing.T) string {
|
||||
t.Helper()
|
||||
tmpl, err := filepath.Abs(filepath.Join("..", "..", "template"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
dir := t.TempDir()
|
||||
if err := os.Symlink(tmpl, filepath.Join(dir, "template")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Chdir(dir)
|
||||
return dir
|
||||
}
|
||||
|
||||
func TestGenFileWritesTheMigration(t *testing.T) {
|
||||
dir := chdirWithTemplates(t)
|
||||
out := filepath.Join(dir, "cmd", "migrate", "migration", "version-local")
|
||||
if err := os.MkdirAll(out, 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := genFile(); err != nil {
|
||||
t.Fatalf("genFile: %v", err)
|
||||
}
|
||||
files, err := filepath.Glob(filepath.Join(out, "*_migrate.go"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(files) != 1 {
|
||||
t.Fatalf("generated files = %v, want one", files)
|
||||
}
|
||||
}
|
||||
|
||||
// Run from a directory without cmd/migrate/migration, writing the file fails.
|
||||
// The failure used to end the process from inside pkg.FileCreate and, before
|
||||
// that, was dropped by genFile's caller; it now reaches the caller.
|
||||
func TestGenFileReportsAFileItCannotWrite(t *testing.T) {
|
||||
chdirWithTemplates(t)
|
||||
|
||||
if err := genFile(); err == nil {
|
||||
t.Fatal("genFile returned nil with no directory to write into")
|
||||
}
|
||||
}
|
||||
@@ -106,7 +106,7 @@ func run() {
|
||||
)
|
||||
} else {
|
||||
fmt.Println(`generate migration file`)
|
||||
_ = genFile()
|
||||
exitOnError(os.Stderr, genFile())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -360,11 +360,11 @@ func genFile() error {
|
||||
m["Package"] = "version"
|
||||
}
|
||||
var b1 bytes.Buffer
|
||||
err = t1.Execute(&b1, m)
|
||||
if goAdmin {
|
||||
pkg.FileCreate(b1, "./cmd/migrate/migration/version/"+m["GenerateTime"]+"_migrate.go")
|
||||
} else {
|
||||
pkg.FileCreate(b1, "./cmd/migrate/migration/version-local/"+m["GenerateTime"]+"_migrate.go")
|
||||
if err = t1.Execute(&b1, m); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
if goAdmin {
|
||||
return pkg.FileCreate(b1, "./cmd/migrate/migration/version/"+m["GenerateTime"]+"_migrate.go")
|
||||
}
|
||||
return pkg.FileCreate(b1, "./cmd/migrate/migration/version-local/"+m["GenerateTime"]+"_migrate.go")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user