Update setup tool.
This commit is contained in:
parent
0307aef76f
commit
83e8de8d02
9
Makefile
Normal file
9
Makefile
Normal file
@ -0,0 +1,9 @@
|
||||
setup:
|
||||
go run . setup
|
||||
ent:
|
||||
go generate ./internal/ent
|
||||
grpc-web:
|
||||
grpcwebproxy --backend_addr=localhost:8081 --run_http_server --run_tls_server=false --server_http_debug_port 18081 --allow_all_origins --server_bind_address 127.0.0.1
|
||||
install-deps:
|
||||
go install github.com/swaggo/swag/cmd/swag@latest
|
||||
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
|
@ -1,5 +1,5 @@
|
||||
# 使用步骤
|
||||
|
||||
1. 修改 go.mod 中的模块名字
|
||||
2. 运行 go run setup.go 初始化项目
|
||||
2. 运行 go run . setup 初始化项目
|
||||
3. 到 providers,cmd/migrate.go 中初始化 ent
|
119
main.go
119
main.go
@ -1,7 +1,124 @@
|
||||
package main
|
||||
|
||||
import "framework_v2/internal/cmd"
|
||||
import (
|
||||
"bufio"
|
||||
"flag"
|
||||
"fmt"
|
||||
"framework_v2/internal/cmd"
|
||||
"io/fs"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
if len(os.Args) == 2 && os.Args[1] == "setup" {
|
||||
setup()
|
||||
return
|
||||
}
|
||||
|
||||
cmd.Execute()
|
||||
}
|
||||
|
||||
func setup() {
|
||||
fmt.Println("Do you want to setup the project? (y/n)")
|
||||
var answer string
|
||||
_, err := fmt.Scanln(&answer)
|
||||
if err != nil {
|
||||
fmt.Printf("Error reading user input: %v\n", err)
|
||||
return
|
||||
}
|
||||
if answer != "y" {
|
||||
return
|
||||
}
|
||||
|
||||
// 读取 go.mod 中的 module 名称
|
||||
modName, err := getModuleName("go.mod")
|
||||
if err != nil {
|
||||
fmt.Printf("Error reading go.mod: %v\n", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("Module name found: %s\n", modName)
|
||||
|
||||
// 遍历当前文件夹(排除 vendor、setup.go 和版本控制文件夹)
|
||||
err = filepath.Walk(".", func(path string, info fs.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 条件排除
|
||||
if info.IsDir() && (info.Name() == "vendor" || info.Name() == ".git") {
|
||||
return filepath.SkipDir
|
||||
}
|
||||
if !info.IsDir() && info.Name() == "setup.go" {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 处理文件
|
||||
if !info.IsDir() {
|
||||
err := replaceInFile(path, `"framework_v2`, fmt.Sprintf(`"%s`, modName))
|
||||
if err != nil {
|
||||
fmt.Printf("Error replacing in file %s: %v\n", path, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Printf("Error walking the path: %v\n", err)
|
||||
}
|
||||
|
||||
// run go mod tidy
|
||||
fmt.Println("Running go mod tidy...")
|
||||
var cmd = exec.Command("go", "mod", "tidy")
|
||||
if err := cmd.Run(); err != nil {
|
||||
fmt.Printf("Error running go mod tidy: %v\n", err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 读取 go.mod 文件中的 module 名称
|
||||
func getModuleName(modFilePath string) (string, error) {
|
||||
file, err := os.Open(modFilePath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer func(file *os.File) {
|
||||
err := file.Close()
|
||||
if err != nil {
|
||||
fmt.Printf("Error closing file: %v\n", err)
|
||||
}
|
||||
}(file)
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
if strings.HasPrefix(line, "module ") {
|
||||
return strings.TrimSpace(strings.TrimPrefix(line, "module ")), nil
|
||||
}
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("module name not found in go.mod")
|
||||
}
|
||||
|
||||
// 在文件中替换指定的字符串
|
||||
func replaceInFile(filePath string, old string, new string) error {
|
||||
input, err := os.ReadFile(filePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
output := strings.ReplaceAll(string(input), old, new)
|
||||
if err = os.WriteFile(filePath, []byte(output), 0666); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
100
setup.go
100
setup.go
@ -1,100 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 读取 go.mod 中的 module 名称
|
||||
modName, err := getModuleName("go.mod")
|
||||
if err != nil {
|
||||
fmt.Printf("Error reading go.mod: %v\n", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("Module name found: %s\n", modName)
|
||||
|
||||
// 遍历当前文件夹(排除 vendor、setup.go 和版本控制文件夹)
|
||||
err = filepath.Walk(".", func(path string, info fs.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 条件排除
|
||||
if info.IsDir() && (info.Name() == "vendor" || info.Name() == ".git") {
|
||||
return filepath.SkipDir
|
||||
}
|
||||
if !info.IsDir() && info.Name() == "setup.go" {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 处理文件
|
||||
if !info.IsDir() {
|
||||
err := replaceInFile(path, `"framework_v2`, fmt.Sprintf(`"%s`, modName))
|
||||
if err != nil {
|
||||
fmt.Printf("Error replacing in file %s: %v\n", path, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Printf("Error walking the path: %v\n", err)
|
||||
}
|
||||
|
||||
// run go mod tidy
|
||||
fmt.Println("Running go mod tidy...")
|
||||
var cmd = exec.Command("go", "mod", "tidy")
|
||||
if err := cmd.Run(); err != nil {
|
||||
fmt.Printf("Error running go mod tidy: %v\n", err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 读取 go.mod 文件中的 module 名称
|
||||
func getModuleName(modFilePath string) (string, error) {
|
||||
file, err := os.Open(modFilePath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer func(file *os.File) {
|
||||
err := file.Close()
|
||||
if err != nil {
|
||||
fmt.Printf("Error closing file: %v\n", err)
|
||||
}
|
||||
}(file)
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
if strings.HasPrefix(line, "module ") {
|
||||
return strings.TrimSpace(strings.TrimPrefix(line, "module ")), nil
|
||||
}
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("module name not found in go.mod")
|
||||
}
|
||||
|
||||
// 在文件中替换指定的字符串
|
||||
func replaceInFile(filePath string, old string, new string) error {
|
||||
input, err := os.ReadFile(filePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
output := strings.ReplaceAll(string(input), old, new)
|
||||
if err = os.WriteFile(filePath, []byte(output), 0666); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user