diff --git a/cmd/gf/Makefile b/cmd/gf/Makefile index a28ccbda9..e82397130 100644 --- a/cmd/gf/Makefile +++ b/cmd/gf/Makefile @@ -1,5 +1,5 @@ -pack: pack.template-single pack.template-mono +pack: pack.template-single pack.template-mono pack.template-mono-app pack.template-single: @rm -fr temp @@ -15,4 +15,18 @@ pack.template-mono: @cd temp && git clone https://github.com/gogf/template-mono @rm -fr temp/template-mono/.git @cd temp && gf pack template-mono ../internal/packed/template-mono.go -n=packed -y + @rm -fr temp + +pack.template-mono-app: + @rm -fr temp + @mkdir temp || exit 0 + @cd temp && git clone https://github.com/gogf/template-single + @cd temp && mv template-single template-mono-app + @rm -fr temp/template-mono-app/.git + @rm -fr temp/template-mono-app/.gitattributes + @rm -fr temp/template-mono-app/.gitignore + @rm -fr temp/template-mono-app/go.mod + @rm -fr temp/template-mono-app/go.sum + @sed -i 's/template-single/template-mono-app/g' temp/template-mono-app/main.go + @cd temp && gf pack template-mono-app ../internal/packed/template-mono-app.go -n=packed -y @rm -fr temp \ No newline at end of file diff --git a/cmd/gf/internal/cmd/cmd_init.go b/cmd/gf/internal/cmd/cmd_init.go index c2494ad73..e7bf79fec 100644 --- a/cmd/gf/internal/cmd/cmd_init.go +++ b/cmd/gf/internal/cmd/cmd_init.go @@ -12,6 +12,9 @@ import ( "os" "strings" + "github.com/gogf/gf/cmd/gf/v2/internal/utility/allyes" + "github.com/gogf/gf/cmd/gf/v2/internal/utility/mlog" + "github.com/gogf/gf/cmd/gf/v2/internal/utility/utils" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gcmd" "github.com/gogf/gf/v2/os/gfile" @@ -19,9 +22,6 @@ import ( "github.com/gogf/gf/v2/os/gres" "github.com/gogf/gf/v2/text/gstr" "github.com/gogf/gf/v2/util/gtag" - - "github.com/gogf/gf/cmd/gf/v2/internal/utility/allyes" - "github.com/gogf/gf/cmd/gf/v2/internal/utility/mlog" ) var ( @@ -34,13 +34,15 @@ type cInit struct { } const ( - cInitRepoPrefix = `github.com/gogf/` - cInitMonoRepo = `template-mono` - cInitSingleRepo = `template-single` - cInitBrief = `create and initialize an empty GoFrame project` - cInitEg = ` + cInitRepoPrefix = `github.com/gogf/` + cInitMonoRepo = `template-mono` + cInitMonoRepoApp = `template-mono-app` + cInitSingleRepo = `template-single` + cInitBrief = `create and initialize an empty GoFrame project` + cInitEg = ` gf init my-project gf init my-mono-repo -m +gf init my-mono-repo -a ` cInitNameBrief = ` name for the project. It will create a folder with NAME in current directory. @@ -61,11 +63,12 @@ func init() { } type cInitInput struct { - g.Meta `name:"init"` - Name string `name:"NAME" arg:"true" v:"required" brief:"{cInitNameBrief}"` - Mono bool `name:"mono" short:"m" brief:"initialize a mono-repo instead a single-repo" orphan:"true"` - Update bool `name:"update" short:"u" brief:"update to the latest goframe version" orphan:"true"` - Module string `name:"module" short:"g" brief:"custom go module"` + g.Meta `name:"init"` + Name string `name:"NAME" arg:"true" v:"required" brief:"{cInitNameBrief}"` + Mono bool `name:"mono" short:"m" brief:"initialize a mono-repo instead a single-repo" orphan:"true"` + MonoApp bool `name:"monoApp" short:"a" brief:"initialize a mono-repo-app instead a single-repo" orphan:"true"` + Update bool `name:"update" short:"u" brief:"update to the latest goframe version" orphan:"true"` + Module string `name:"module" short:"g" brief:"custom go module"` } type cInitOutput struct{} @@ -86,11 +89,15 @@ func (c cInit) Index(ctx context.Context, in cInitInput) (out *cInitOutput, err templateRepoName string gitignoreFile = in.Name + "/" + cInitGitignore ) + if in.Mono { templateRepoName = cInitMonoRepo + } else if in.MonoApp { + templateRepoName = cInitMonoRepoApp } else { templateRepoName = cInitSingleRepo } + err = gres.Export(templateRepoName, in.Name, gres.ExportOption{ RemovePrefix: templateRepoName, }) @@ -101,7 +108,8 @@ func (c cInit) Index(ctx context.Context, in cInitInput) (out *cInitOutput, err // build ignoreFiles from the .gitignore file ignoreFiles := make([]string, 0, 10) ignoreFiles = append(ignoreFiles, cInitGitDir) - if overwrote { + // in.MonoApp is a mono-repo-app, it should ignore the .gitignore file + if overwrote && !in.MonoApp { err = gfile.ReadLines(gitignoreFile, func(line string) error { // Add only hidden files or directories // If other directories are added, it may cause the entire directory to be ignored @@ -118,10 +126,14 @@ func (c cInit) Index(ctx context.Context, in cInitInput) (out *cInitOutput, err } } - // Replace module name. + // Get template name and module name. if in.Module == "" { in.Module = gfile.Basename(gfile.RealPath(in.Name)) } + if in.MonoApp { + pwd := gfile.Pwd() + string(os.PathSeparator) + in.Name + in.Module = utils.GetImportPath(pwd) + } // Replace template name to project name. err = gfile.ReplaceDirFunc(func(path, content string) string { diff --git a/cmd/gf/internal/packed/template-mono-app.go b/cmd/gf/internal/packed/template-mono-app.go new file mode 100644 index 000000000..3df41147c --- /dev/null +++ b/cmd/gf/internal/packed/template-mono-app.go @@ -0,0 +1,9 @@ +package packed + +import "github.com/gogf/gf/v2/os/gres" + +func init() { + if err := gres.Add("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"); err != nil { + panic("add binary content to resource manager failed: " + err.Error()) + } +}